Scouting subreddits — with the permission check
Every Reddit prospecting tool finds threads. Almost none tell you whether you're allowed to post in them. That gap is expensive: a post into a subreddit that bans self-promotion is removed within minutes, and it costs account standing on the way out.
reddit-scout ranks candidate subreddits and reports the rules that decide whether posting is
viable at all.
node scripts/rdtx.mjs scout "claude code agent skills" --limit 10 --time year
Verify the installed runtime without Reddit
Run node scripts/verify-synthetic.mjs with no arguments. It feeds fabricated candidates through
the production ranking contract to confirm that metadata opens the topical gate, example-only hits
do not, and an explicit promotion ban wins. It also checks the shared runtime without Chrome or a
Reddit request. A pass does not prove any current subreddit is relevant or permits promotion; live
rules still require the read-only workflow below.
Overall passed is the AND of all five shared checks; inspect functional.reddit_scout for this
skill's evidence.
An independent tester can submit the exact named verifier result through the
structured installed-run report.
Select the reddit-scout zero-input synthetic option only after running the installed copy. This
proves installation and ranking contracts, not current rules or permission to promote.
Live scouting requires Node.js 18+, agent-browser, and the user's own logged-in Chrome profile;
see references/browser-session.md. The synthetic verifier needs only Node.js 18+.
What comes back
✅ 32 r/AIAgentsInAction 34,798 hits=2 avgC=55 flair=True
no explicit promotion restriction
⚠️ 20 r/LocalLLaMA 789,143 hits=3 avgC=113 flair=True
allowed with conditions — read the rules
rules: Limit Self-Promotion
🚫 r/programming 6,906,051
DO NOT POST — promotion banned
rules: No Product Promotion/"I Made This" Project Demo Posts
Each result carries subscribers, search_hits, avg_comments, flair_required, promo_rules,
bans_promo, recommended, an auditable topical_fit, three example threads, and the score's
components.
The scoring is deliberately transparent
"components": {
"relevance": 0.78, "engagement": 0.55, "reach": 0.86,
"permitted": 0.55, "topical_fit": 1
}
- relevance — share of search hits landing in this subreddit, normalised to the top one; this measures where matching posts appeared, not whether the community is about the topic
- engagement — average comments per matching thread, capped at 40
- reach — log-scaled subscriber count, so a 6M subreddit doesn't automatically dominate
- permitted —
1if nothing restricts promotion,0.55if there are conditions,0if banned - topical_fit — hard
1|0gate from the subreddit's display name, title, and public description. A distinctive query-token match passes. For API/developer queries, developer-topic metadata such ascode,workflow, orautomationalso passes.
topical_fit and permitted are independent gates. Search-result examples are reported separately
as supporting evidence and can never establish community fit by themselves. Thus a celebrity or
gaming subreddit does not become a target because one post happens to mention TikTok or an API,
and “rules do not ban promotion” never means “this community is relevant.” Every component and
reason is reported so you can disagree with the ranking rather than trust a number.
Reading the verdicts
| verdict | meaning | what to do |
|---|---|---|
NOT RECOMMENDED — community topic mismatch |
matching posts exist, but the community metadata does not support the topic | do not use it as a campaign target |
no explicit promotion restriction |
no rule matched the promo patterns | still read the sidebar; absence of a rule is not an invitation |
allowed with conditions |
a self-promo/disclosure/ratio rule exists | read promo_rules and comply — often a disclosure line or a 90/10 ratio |
DO NOT POST — promotion banned |
an explicit ban matched | don't. The post gets removed and the removal is recorded |
Rule text is matched by pattern, so treat it as a filter that catches the obvious cases, not as
legal reading. promo_rules gives you the actual rule names to check yourself.
For backward compatibility, the top-level postable count still means only “not rule-banned.”
Campaign selection must use recommended_count and each result's recommended: true; the output
also reports not_recommended separately.
The workflow this belongs in
# 1. Where is this conversation happening, and where may I join it?
node scripts/rdtx.mjs scout "your topic" --limit 10
# 2. What exactly does the best candidate demand?
node scripts/rdtx.mjs requirements <subreddit>
# 3. Draft, and confirm before writing (dry run is the default)
node scripts/rdtx.mjs submit <sub> "<title>" --text "<body>" --flair "<flair>"
# 4. Post, then confirm it wasn't silently filtered
node scripts/rdtx.mjs submit … --yes # reports visibility
Steps 3–4 are reddit-post; step 4's visibility check is reddit-seo. Scout only reads.
What good targeting looks like
The highest-value result is usually not the biggest subreddit. Scouting "claude code agent skills" surfaced r/claudeskills — 48K subscribers, with a rule reading "Sharing your own skill? Show your work" — ranked below r/ClaudeAI at 1M but a far better fit, because the community exists for exactly that. Large general subreddits tend to have the strictest promotion bans; small on-topic ones often welcome the thing outright.
Two heuristics worth holding:
avg_commentsbeatssubscribers. A subreddit where matching threads average 100+ comments is alive; one with a million subscribers and 3 comments a thread is a broadcast channel.search_hitsis conversation evidence, not community fit. A post may mention a term for an incidental reason. Requirerecommended: true, then inspecttopical_fit.metadata_evidence;example_evidenceis deliberately supporting-only.
Post distinct content, not the same post many times
The output is a ranked list, and the tempting move is to post the same thing down it. That is the exact pattern spam detection is built to catch — and the damage compounds, because filtered posts accumulate against the account rather than the post.
If a topic genuinely fits several subreddits, write for each one separately, space them out, and
check with reddit-seo that the first survived before considering a second. One post that stays
live and earns comments is worth more than five that get filtered.
Setup
Needs a logged-in Chrome the human launched — Reddit's search endpoint returns 403 to unauthenticated clients:
node scripts/rdtx.mjs launch && node scripts/rdtx.mjs login && node scripts/rdtx.mjs doctor
Scouting is read-only and paced (a jittered wait between requests). It examines ~18 subreddits per run, which takes a minute or two — that pacing is deliberate, not slowness to optimise away.
Related
reddit-post— write, once you know wherereddit-seo— confirm the post is actually visiblereddit-archive— capture a thread and its media