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.

skills.sh

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.

Five Reddit skill contracts checked locally with no Chrome, Reddit request, or write

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.

Maintainer-operated r/test posting smoke

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.

HTTP 200 versus live robot-indexable visibility

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 sets navigator.webdriver = true. Start Chrome with only --remote-debugging-port and attach after, and it stays false.
  • "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_v2 expires and reddit_session will 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.