Reddit Skills
Reddit skills for AI coding agents — scout communities, measure their register, post, audit visibility, and archive, driven through your own logged-in Chrome. Every write is verified against AutoMod filtering, so an HTTP 200 never gets mistaken for a post anyone can actually see.
npx skills add L4A-ai/reddit-skills
30-second zero-Reddit contract check
No Chrome, Reddit account, credentials, agent-browser, or network access is required. Install one
named skill—for example:
npx skills add L4A-ai/reddit-skills@reddit-scout -g -y
Then paste this into your agent:
Use $reddit-scout to run the documented zero-input synthetic installation check. Locate the
installed skill directory and, from that directory, run exactly
`node scripts/verify-synthetic.mjs` with no arguments. Do not access Chrome, Reddit, credentials,
or the network. Return the verifier stdout unchanged.
Expected stdout for the reddit-scout installed copy (one line):
{"schema":"reddit-skills-synthetic-verifier/v1","ok":true,"static":{"installed_skill":"reddit-scout","manifest_name_matches_directory":true},"functional":{"reddit_scout":{"metadata_gate_score":70,"example_only_rejected":true,"promotion_ban_precedence":true},"reddit_post":{"dry_run":true,"executed":false,"audit_entries":1,"audit_executed_entries":0,"remote_checks":{"flair_resolution":"not_run","post_requirements":"not_run"},"stderr_empty":true},"reddit_seo":{"states":["live","automod_filtered","not_indexable","removed"],"public_and_indexable":[true,false,false,false]},"reddit_voice":{"posts_sampled":4,"comments_sampled":4,"title_median_chars":26,"body_median_chars":96,"comment_median_chars":50,"self_post_pct":75,"recurring_phrase_count":4,"post_comment_registers_separate":true,"source_canary_emitted":false},"reddit_archive":{"media_types":["image","gallery","video","external"],"gallery_items":2,"crosspost_parent_used":true,"video_has_audio":true}},"guards":{"credential_env_exposed":false,"network_guard_armed":true,"network_guard_scope":"verifier_and_dry_run","network_guard_trips":0,"agent_browser_guard_trips":0},"temporary_state_removed":true,"passed":true}
Only static.installed_skill changes for another installed copy. The check uses fabricated fixtures
to exercise the five shared production contracts and the real local reddit-post dry-run. Before
loading those contracts it replaces the verifier environment with a credential-free allowlist and
arms network guards for both the verifier and dry-run child. Overall passed is the AND of all five
checks. It does not prove current subreddit rules, live visibility, writing quality, or a real media
download, and it does not count as a completed live feature evaluation. After it passes, continue
with one of the live/read-only trials below.
If you independently installed one named skill and ran this verifier, submit the exact named result through the structured installed-run report. Choose the matching zero-input synthetic verifier option. That report is evidence of an installed-and-ran contract evaluation only; it must never be presented as proof that the live feature, a current subreddit, or a real Reddit write was tested.
60-second live read-only trial
Install only the two research skills; neither one writes to Reddit:
npx skills add L4A-ai/reddit-skills@reddit-scout -g -y
npx skills add L4A-ai/reddit-skills@reddit-voice -g -y
This trial needs the normal logged-in Chrome setup. Then ask your agent:
Use $reddit-scout to rank communities for "agent skills" and show the current rule evidence.
Then use $reddit-voice on the best permitted community and explain the expected post format.
Do not post anything.
After the run, submit the three requested fields through the read-only scout test form. It separates completed runs from failed attempts and asks for one concrete rule match or mismatch. Never include cookies, tokens, account names, or a browser-profile path.
Independently test one other skill
Each evaluation below performs zero Reddit writes. Install one named skill, run only its listed dry-run or read-only command, and submit a structured installed-run report. The form makes the exact skill and completion state explicit; install-only and failed attempts are feedback, not completed independent runs.
| skill | safe evaluation |
|---|---|
reddit-post |
node scripts/rdtx.mjs submit testsub "Synthetic dry-run title" --text "Synthetic body for a local zero-write package check." — never add --yes to this rdtx command |
reddit-seo |
node scripts/rdtx.mjs read <public-reddit-permalink> and report only the compact visibility fields |
reddit-voice |
node scripts/rdtx.mjs voice ClaudeCode --sample 8 --sort top --time month and report only aggregate format fields |
reddit-archive |
node scripts/rdtx.mjs archive <public-post-permalink> --out <new-temp-folder> --comments 5 --no-media; inspect the manifest locally and do not attach it |
The three read-only Reddit evaluations require the normal human-launched, logged-in Chrome setup.
The reddit-post dry run is local and reports dry_run: true, both remote checks as not_run,
and No Reddit request was made. Reports must include the exit code and sanitized stderr, and omit
source text, account details, credentials, and local paths.
The skills
reddit-post — write and verify
npx skills add L4A-ai/reddit-skills@reddit-post
Create posts and comments through a real logged-in browser session. Dry run by default; --yes
to actually write. Resolves flair before submitting, and re-reads after writing to report whether
the post is live or sitting in the mod queue.

Single-operator maintainer smoke evidence: doctor → dry-run → confirmed submit → comment →
read-back. This demonstrates the write/read-back path, not organic adoption or an independent user.
reddit-seo — is your post actually indexed?
npx skills add L4A-ai/reddit-skills@reddit-seo
Reddit ranks in Google and is heavily cited by AI answer engines — but a post can look completely successful and be worth nothing. Large subreddits route submissions through AutoMod, where they sit reachable by direct link, absent from listings, and marked non-indexable.
Measured on a real post, minutes apart, before and after a moderator approved it:
removed_by_category: "automod_filtered" → null
is_robot_indexable: false → true
Nothing about the post changed; a human approved it. Before that moment Reddit explicitly marked
it ineligible for robot indexing. This skill reports that state — live, automod_filtered,
not_indexable, removed — and checks a subreddit's flair and rule gates before you post, which
is where most visibility is actually lost.

reddit-scout — where can you actually post?
npx skills add L4A-ai/reddit-skills@reddit-scout
Every Reddit prospecting tool finds threads. Almost none check whether posting is permitted —
so you spend a post into a subreddit that bans self-promotion and lose it, plus some account
standing. reddit-scout ranks candidates on relevance, engagement, and reach, then multiplies by
whether promotion is allowed at all:
✅ 32 r/AIAgentsInAction 34,798 no explicit promotion restriction
⚠️ 20 r/LocalLLaMA 789,143 allowed with conditions — Limit Self-Promotion
🚫 r/programming 6,906,051 DO NOT POST — "No Product Promotion/I Made This"
Scoring components are all reported, so you can disagree with the ranking instead of trusting a number. Research only — it never posts.
reddit-voice — what does this community actually sound like?
npx skills add L4A-ai/reddit-skills@reddit-voice
Sample the posts and comments a subreddit currently rewards before drafting. It measures the expected post type, title/body/comment length, first-person usage, formatting, opening moves, and shared vocabulary, while returning the source samples for human judgement. It helps an agent match the community's format without copying an individual author or pretending that tone can make promotion acceptable where the rules forbid it. Research only — it never posts.
reddit-archive — capture a post with its media
npx skills add L4A-ai/reddit-skills@reddit-archive
Full text, the whole comment tree, images, galleries, and v.redd.it video with the audio merged
back in — Reddit's fallback_url is video-only, which is why most downloaders hand you a silent
clip. Follows crossposts to the parent that actually holds the media. Emits a manifest so a capture
is reproducible.
Why the browser session model
Three things, each established by measurement rather than assumption (evidence):
- The automation flag is set at launch, not by attaching. Puppeteer and Playwright pass
--enable-automation, which setsnavigator.webdriver = true. Start Chrome with only--remote-debugging-portand attach after, and it staysfalse. - "Prove your humanity" is transient, not a block. A JS proof-of-work that self-resolves in seconds. Treating it as a wall is the most common way to abandon a working setup.
- Exported cookie files rot in about a day.
token_v2expires andreddit_sessionwill not mint a fresh one — you get an anonymous token and a confusing logged-out 200. A live profile refreshes its own token.
Requirements
node ≥ 18, agent-browser, Google Chrome.
yt-dlp + ffmpeg for video archiving. Optionally
rdt-cli for headless reads.
Measured coverage: 29 capabilities pass, 0 fail across rdtx, rdt-cli, and agent-browser —
see coverage.md, reproduce with
bash skills/reddit-post/scripts/coverage.sh.
Scope
One account — yours. No multi-account support, no proxy rotation, no fingerprint spoofing, and none planned. Those target platform integrity detection rather than making your own automation work, and Reddit's terms prohibit them. The skills will tell you when a post was filtered; the correct response is a better-targeted post, not more of them.
Development
packages/rdtx/ holds the single source of truth. npx skills add copies one skill directory and
nothing else, so each skill carries its own copy of the CLI — run bash packages/rdtx/sync.sh
after editing, and CI asserts the copies match.
License
MIT — see LICENSE.

No comments yet
Be the first to share your take.