solo-reddit
Use when "reddit comment", "engage reddit", "build karma", "post to reddit", or need to participate in Reddit threads. NOT for thread discovery (/community-outreach) or social copy (/content-gen).
Install
npx skills add https://github.com/fortunto2/solo-factory/tree/main/skills/reddit
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install fortunto2-solo-factory@llmmart
git clone https://github.com/fortunto2/solo-factory.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole fortunto2/solo-factory collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Reddit engagement automation — from finding relevant posts to writing authentic comments and tracking results. Comment-first strategy: build karma and reputation before any self-promotion.
Philosophy
- Value first, product never (in comments) — genuinely help, mention product only when directly asked
- Comment-first — 30+ comments before any self-promotional post
- Read before write — analyze post, existing comments, subreddit culture before drafting
- Track everything — karma growth, engagement rates, what works
Routing
| User says | Action |
|---|---|
/reddit setup <project> |
Go to Setup section |
/reddit find [subreddit] |
Go to Find Posts section |
/reddit comment [url] |
Go to Comment section |
/reddit post <subreddit> |
Go to Write Post section |
/reddit status |
Go to Status section |
/reddit batch [subreddit] |
Go to Batch Mode — find + comment x3 |
MCP Tools
Playwright (required for posting)
browser_navigate(url)— go to Reddit pagebrowser_snapshot()— read page structure (accessibility tree, NOT screenshots)browser_click(ref)— click elementsbrowser_type(ref, text)— type textbrowser_wait_for(state)— wait for page load
SoloGraph (optional, for search)
web_search(query)— search Reddit threadskb_search(query)— find project contextproject_info(name)— get project details
If MCP tools not available, use WebSearch/WebFetch as fallback.
Scripts (no MCP needed)
scripts/check-karma.sh <username>— check karma, account age, posting readinessscripts/search-posts.sh <subreddit> [query] [sort]— find posts via Reddit JSON APIscripts/check-post.sh <url>— read post content + top comments
Use scripts first (faster, no Playwright needed). Fall back to Playwright for posting.
Setup
First-time setup for a project. Creates profile and tracking files.
- Parse project from
$ARGUMENTSor ask user. - Read PRD/README to extract: problem, solution, ICP, key features, competitor names.
- Identify target subreddits — search for where ICP hangs out:
- Language/framework subs (r/rust, r/python, r/javascript)
- Domain subs (r/selfhosted, r/devops, r/ClaudeAI)
- General tech (r/programming, r/webdev)
- Research each subreddit:
- Read sidebar rules (via WebFetch or Playwright)
- Check self-promotion policy
- Note posting format, flairs, weekly threads
- Find top posts to understand culture
- Write profile to
docs/reddit/profile.md:
# Reddit Profile: {Project Name}
**Product:** {one-line}
**ICP:** {target persona}
**Value prop for Reddit:** {what genuine help can we offer}
## Target Subreddits
| Subreddit | Members | Self-promo | Culture | Best content type |
|-----------|---------|------------|---------|-------------------|
| r/xxx | NNNk | rules... | tone... | type... |
## Search Keywords
- Problem: {what users complain about}
- Solution: {what users search for}
- Competitors: {names for "vs" and "alternative" threads}
## Voice Guide
- Tone: {casual/technical/friendly}
- Never say: {banned phrases — "game-changer", "revolutionary", etc.}
- Always: {disclose affiliation, lead with value}
- Create tracking file
docs/reddit/tracking.md:
# Reddit Tracking
## Stats
- Account: {username}
- Starting karma: {N}
- Comments posted: 0
- Posts made: 0
## Activity Log
<!-- entries added by /reddit comment and /reddit post -->
Find Posts
Find posts worth commenting on in a subreddit.
- Load profile from
docs/reddit/profile.md. - Search for relevant threads:
- Via WebSearch:
"{keyword}" site:reddit.com/r/{subreddit}for each keyword group - Or via Playwright: navigate to
reddit.com/r/{subreddit}/new/andreddit.com/r/{subreddit}/rising/
- Via WebSearch:
- Filter posts:
- Less than 7 days old (prefer < 24h for visibility)
- 2-30 comments (active but not buried)
- Matches problem/solution/competitor keywords
- NOT already commented on (check tracking)
- Score and rank top 5 posts by:
- Relevance to our expertise (high)
- Comment count sweet spot (medium = best)
- Recency (newer = better)
- Can we genuinely help? (must be yes)
- Output ranked list with URLs, titles, why each is good.
Comment
Write and optionally post a comment on a specific Reddit post.
Step 1: Load Context
- Read
docs/reddit/profile.mdfor voice guide - Read
docs/reddit/tracking.mdto check we haven't commented on this post - Read
references/style-guide.mdfor comment patterns
Step 2: Deep Analysis
Navigate to the post URL (via Playwright or WebFetch):
- Read the full post — understand what OP actually asks
- Read existing comments — understand tone, what's been said, gaps
- Identify OP's intent: asking for help? sharing experience? seeking opinions?
- Decide angle: what unique value can we add that others haven't?
Step 3: Draft Comment
Write a comment following these rules:
- Match subreddit tone — casual for r/ClaudeAI, technical for r/rust
- Lead with value — first 2-3 sentences directly address OP's question
- Be specific — code snippets, numbers, concrete steps > vague advice
- 1-2 focused points — don't try to cover everything
- No product mention unless directly relevant AND we have 10+ comments in this sub
- If mentioning product: last paragraph, with "I work on X" disclosure
Step 4: Anti-Spam Review
Check the draft against references/spam-signals.md:
- No marketing language ("game-changer", "revolutionary", "10x")
- No link in first comment on a subreddit
- Not a copy of any previous comment
- Directly addresses OP's question (not tangential)
- Would be useful even if product didn't exist
- Reads like a human, not a press release
- No emoji overuse (0-1 max)
If any check fails: rewrite.
Step 5: Post (if Playwright available and user approves)
browser_navigate(post_url)browser_snapshot()— find comment inputbrowser_click(comment_box_ref)browser_type(comment_box_ref, comment_text)browser_click(submit_button_ref)browser_snapshot()— verify posted, get permalink
If Playwright not available: copy comment to clipboard via pbcopy.
Step 6: Track
Update docs/reddit/tracking.md:
### {YYYY-MM-DD HH:MM} r/{subreddit}
- **Post:** [{title}]({url})
- **Comment:** [{permalink}]({comment_url})
- **Angle:** {what value we provided}
- **Product mentioned:** yes/no
Write Post
Create a Reddit post for a specific subreddit.
Pre-flight checks:
- Do we have 10+ tracked comments in this subreddit? If no: STOP, comment more first.
- Check subreddit rules for post format, flairs, allowed content types.
- Check if showcase/self-promo threads exist (e.g., "Showoff Saturday").
Determine post type:
Type When to use Experience sharing We solved a hard problem — share the story Technical deep-dive Interesting approach worth discussing Tool announcement Only in subs that allow it, with heavy context Question/discussion Genuine question that sparks conversation Draft post:
- Title: specific, accurate, matches sub format (check top posts)
- Body: value-first structure from
references/post-templates.md - Links: max 1-2, put extras in first comment
- Flair: match subreddit requirements
Review against rules:
- 90/10 rule: 90% value, 10% promotional
- No clickbait titles
- Follows subreddit-specific format
- Would you upvote this if it wasn't yours?
Post via Playwright or copy to clipboard.
After posting:
- Monitor comments for 2 hours
- Reply to every comment (boosts ranking)
- Track in
docs/reddit/tracking.md
Batch Mode
Efficient mode: find 3 posts + write 3 comments in one session.
- Load profile and tracking.
- Run
scripts/check-karma.shto verify account status. - Run
scripts/search-posts.shfor target subreddit. - For top 3 candidates, run Comment flow sequentially.
- Wait 5-10 minutes between comments (rate limiting).
- Write structured summary to
docs/reddit/batch-{date}.json:
{
"date": "2026-03-25",
"subreddit": "r/ClaudeAI",
"comments_posted": 3,
"posts": [
{"url": "...", "title": "...", "angle": "...", "product_mentioned": false}
],
"karma_before": 37,
"karma_after": null
}
- Print human summary: 3 comments posted, links, karma status.
Status
Show current Reddit engagement stats.
- Read
docs/reddit/tracking.md. - Count: total comments, comments per subreddit, posts made.
- Calculate: comments since last promotional post (10:1 ratio check).
- Show readiness: "Ready to post in r/X" or "Need N more comments in r/X".
Critical Rules
- Never post without reading the full thread — context is everything
- Never mention product in first 10 comments in any subreddit
- Never post same content to multiple subreddits — customize each
- Never argue with moderators — accept removal gracefully
- Always disclose affiliation when mentioning your product
- Minimum 5 minute gap between comments (avoid rate limiting)
- No vote manipulation — never ask for upvotes anywhere
- Use
browser_snapshotnotbrowser_take_screenshot— saves tokens - Navigate by URL (
browser_navigate) not clicking links — prevents errors
Gotchas
- Reddit spam filter on low-karma accounts — new or inactive accounts get auto-filtered. Build 50+ karma with genuine comments before any self-promo posts. If filtered: message mods via modmail (sidebar link), don't repost.
- Links trigger spam filter — first comment with a link in a new subreddit often gets caught. Post text-only comments first, add links only after established.
- Subreddit AI content rules — r/rust and others may remove posts with AI-generated content. Be transparent about AI-assisted development but ensure comments are genuinely human-directed.
- Rate limiting — Reddit throttles new/low-karma accounts. If you see "you're doing that too much", wait 10 minutes. Don't retry immediately.
- Old Reddit vs New Reddit —
old.reddit.comhas better search. Usenew.reddit.comfor posting (Playwright works better with new UI). - Playwright login state — Reddit login persists in browser session. If logged out: user must log in manually (
browser_navigate("https://www.reddit.com/login")), skill can't enter credentials.
Notes
- This skill complements
/community-outreach(which finds threads) and/content-gen(which generates post copy). Use/redditfor the actual engagement loop. - For Reddit Ads, see the
reddit-adsskill from kostja94/marketing-skills. - Karma builds compound: each good comment makes the next one more visible.
Files (solo-factory)
-
references
-
post-templates.md 2.9 KB
# Reddit Post Templates ## Template 1: Experience Story (highest engagement) ``` Title: I {did something specific} — here's what {I learned / worked / broke} {1-2 sentences: context and motivation} ## The Problem {What you were trying to solve, why existing solutions didn't work} ## What I Built / Did {Technical details, approach, architecture decisions} ## Results {Specific numbers, benchmarks, outcomes} ## What I'd Do Differently {Honest reflection — this is what makes it authentic} --- {Links in comments if needed} ``` ## Template 2: Technical Deep-Dive ``` Title: {Specific technique}: how {approach} gives {specific result} {1 sentence hook with a concrete number or claim} ## Background {Brief context — what problem space, why it matters} ## The Approach {Technical explanation with code blocks} ## Benchmarks / Proof {Data, tables, comparisons} ## Trade-offs {What you give up, when NOT to use this} ## Code {Link to repo or inline snippets} ``` ## Template 3: "What I Use" (for recommendation threads) ``` Title: My {toolchain/stack/setup} for {use case} in {year} After {time period} of {activity}, here's what stuck: **{Category 1}:** {tool} — {why, 1 sentence} **{Category 2}:** {tool} — {why, 1 sentence} ... ## What I Dropped and Why {Honest about what didn't work} ## The Workflow {How these fit together} Happy to answer questions about any of these. ``` ## Template 4: Question/Discussion Starter ``` Title: {Specific question that invites discussion} {Context: why you're asking, what you've already tried} **My current approach:** {what you do now} **What I'm considering:** {options, with pros/cons you see} Has anyone dealt with this? What worked? ``` ## Template 5: Project Announcement (self-promo subs only) ``` Title: {Project name}: {what it does in <10 words} {1 paragraph: problem you solved and why} ## Key Features - {Feature 1} — {concrete benefit} - {Feature 2} — {concrete benefit} - {Feature 3} — {concrete benefit} ## How It Works {Brief technical overview, 2-3 paragraphs} ## Try It {One install command} {GitHub link} --- Built with {tech stack}. Feedback welcome — especially on {specific area}. ``` ## Title Rules by Subreddit | Sub | Good title | Bad title | |-----|-----------|-----------| | r/rust | "Persistent WebSocket sessions for OpenAI in Rust" | "Check out my new crate!" | | r/ClaudeAI | "I built X with Claude Code — here's the process" | "Amazing AI tool!!!" | | r/programming | "Benchmarking HTTP/2 keep-alive across 3 languages" | "My project is fast" | | r/webdev | "Moving from REST to WebSocket reduced our TTFT by 40%" | "WebSockets are better" | ## Post Timing Best times to post (UTC): - **Monday-Friday:** 13:00-16:00 UTC (US morning) - **Best days:** Tuesday, Wednesday, Thursday - **Avoid:** Friday evening, weekends (lower engagement for technical content) - **Exception:** Arts/showcase threads often on weekends -
spam-signals.md 1.9 KB
# Reddit Spam Signals Checklist Review every comment/post against these signals before submitting. If ANY signal triggers: rewrite. ## Hard Stops (instant removal/ban) - [ ] Contains shortened URL (bit.ly, t.co, etc.) - [ ] Asks for upvotes directly or indirectly - [ ] Copy-pasted from another comment (even your own) - [ ] Posts same link to 3+ subreddits - [ ] Uses multiple accounts to comment/upvote - [ ] Contains affiliate/referral link ## Spam Filter Triggers (auto-removal by Reddit) - [ ] First-ever post in subreddit contains a link - [ ] Account karma < 50 posting link posts - [ ] Multiple posts within 1 hour from low-karma account - [ ] Title in ALL CAPS or excessive punctuation (!!!) - [ ] Post body is just a link with no context - [ ] New account (< 7 days) posting links ## Community Downvote Triggers (death by votes) - [ ] Marketing language ("revolutionary", "game-changer", "10x") - [ ] Opening with product pitch before any value - [ ] Not addressing OP's actual question - [ ] Generic advice that could apply to anything - [ ] Humble-bragging ("I accidentally built a million-dollar...") - [ ] Rehashed content everyone's seen before - [ ] Emoji overload (> 1 emoji per comment) - [ ] Corporate speak / press release tone - [ ] "As a {title} at {company}..." opener (reads as ad) ## Subtle Signals (mod scrutiny) - [ ] All your posts link to the same domain - [ ] Comment history is 90%+ about your own product - [ ] Only active in promotional threads - [ ] Never reply to follow-up questions - [ ] Post timing correlates with product launches only ## Self-Check Questions Before submitting, ask: 1. Would I post this if I had nothing to promote? **Must be YES** 2. Does this directly help OP? **Must be YES** 3. Would I upvote this from a stranger? **Must be YES** 4. Is the product mention in the last 20% of text? **Should be YES** 5. Can the comment stand alone without the product mention? **Must be YES** -
style-guide.md 3 KB
# Reddit Comment Style Guide ## Core Principle Write like a helpful person in the community, not like a marketer. Every comment should pass the test: "Would this be useful if I had nothing to sell?" ## Comment Patterns ### Pattern 1: Direct Answer Best for: technical questions, "how do I..." posts ``` {Direct answer to the question} {Optional: code snippet or steps} One thing to watch out for: {edge case or caveat} ``` ### Pattern 2: Experience Sharing Best for: "what do you use for...", discussion posts ``` We ran into this exact issue at {context}. What worked for us: 1. {Step one} 2. {Step two} The key insight was {specific learning}. ``` ### Pattern 3: Helpful Correction Best for: posts with wrong assumptions or outdated info ``` Actually, {correction} — {brief explanation why}. {Supporting evidence or link to docs} That said, {acknowledge their broader point}. ``` ### Pattern 4: Building On Others Best for: threads where good answers exist but miss something ``` To add to what {commenter} said — {additional point}. {Explanation with specifics} This matters because {why it's relevant to OP}. ``` ### Pattern 5: Question + Insight Best for: posts where OP needs to think differently about the problem ``` Interesting — have you considered {alternative framing}? The reason I ask: {experience or data that reframes the problem}. {Suggestion based on reframing} ``` ### Pattern 6: Data/Benchmark Drop Best for: performance discussions, "is X fast enough" posts ``` I benchmarked this recently: | {Test} | {Result A} | {Result B} | |--------|-----------|-----------| | ... | ... | ... | {1-2 sentence interpretation} Methodology: {brief description} ``` ## Tone by Subreddit Type | Sub type | Tone | Example | |----------|------|---------| | Language-specific (r/rust) | Technical, precise, humble | "The borrow checker catches this — here's the idiomatic way..." | | General dev (r/programming) | Balanced, cite sources | "According to the benchmarks in..." | | AI/ML (r/ClaudeAI) | Enthusiastic but grounded | "I've been using this approach and here's what actually works..." | | Startup (r/SaaS) | Practical, metrics-focused | "We saw X% improvement after..." | | Self-hosted (r/selfhosted) | DIY spirit, respect privacy | "Runs locally, no cloud dependency..." | ## Banned Phrases Never use these — instant spam signal: - "game-changer", "revolutionary", "disruptive" - "you won't believe", "this changed everything" - "check out my...", "I just launched..." - "upvote if you...", "thoughts?" - Excessive emoji (max 1 per comment) - "As an AI..." or any AI-generated phrasing tells ## Length Guidelines - **Short answer:** 2-4 sentences (simple questions) - **Standard:** 1-2 paragraphs (most comments) - **Deep dive:** 3-4 paragraphs with code/data (technical threads) - **Never:** wall of text without structure ## Formatting - Use markdown: `**bold**`, `code`, lists - Code blocks for any code (even one-liners) - Tables for comparisons/benchmarks - Break paragraphs at natural points (no 5+ line blocks) -
subreddit-catalog.md 5.5 KB
# Subreddit Catalog for Solo Founders Curated list of subreddits for solo founders building AI/dev tools. Sorted by promotion friendliness. ## Tier 1 — Promo-Friendly (can post projects immediately) | Subreddit | Members | Self-promo | Best format | Notes | |-----------|---------|------------|-------------|-------| | r/SideProject | 453k | Yes — designed for it | "I built..." + technical details | Gold standard for project sharing | | r/coolgithubprojects | 50k | Yes — just post link | GitHub link + short description | Specifically for sharing repos | | r/opensource | 210k | Limited | Story + repo link | Must be genuinely open source | | r/alphaandbetausers | 22k | Yes | Feedback request + link | Early-stage products, expect honest feedback | | r/SaaS | 386k | "Show" posts | Metrics + story + link | Lead with numbers, revenue, growth | | r/IMadeThis | 18k | Yes | Show what you made | Physical and digital, low engagement | | r/InternetIsBeautiful | 17M | If genuinely cool | Link to live demo | High bar, massive reach if accepted | ## Tier 2 — Community-First (build karma first, then post) | Subreddit | Members | Self-promo | Karma needed | Best angle | |-----------|---------|------------|-------------|------------| | r/ClaudeAI | 200k+ | Rule 7: built with Claude, free to try | 50+ | "How I built X with Claude Code" | | r/ChatGPT | 11M | Limited | 100+ | OpenAI API tips, tools, workflows | | r/AI_Agents | 212k | Moderate | 50+ | Agent frameworks, multi-agent systems | | r/LocalLLaMA | 541k | Moderate for OSS | 50+ | WASM, edge, local-first, self-hosted | | r/Entrepreneur | 2.8M | Very limited | 200+ | Founder story, lessons learned | | r/startups | 1.5M | Requires flair | 100+ | Lean startup, validation stories | | r/IndieHackers | 200k+ | Moderate | 50+ | Revenue, growth, solo founder journey | | r/webdev | 2M+ | Showoff Saturday only | 100+ | Technical deep-dives, tools | | r/selfhosted | 400k | OSS gets leeway | 50+ | Privacy, no cloud dependency, Docker | | r/devops | 300k | Moderate | 100+ | CI/CD, infra tools, automation | ## Tier 3 — Technical (comment only, earn respect) | Subreddit | Members | Self-promo | Culture | Strategy | |-----------|---------|------------|---------|----------| | r/rust | 350k | 1/week, strict AI rules | Technical, humble, benchmarks | Comment on perf/architecture posts | | r/programming | 6M+ | Effectively none | Skeptical, depth required | Comment only, link in profile | | r/Python | 1.5M | Moderate for OSS | Helpful, educational | Python bindings angle | | r/javascript | 2M+ | Low | Framework debates | Node bindings, performance | | r/node | 300k | Low | Practical | npm package announcements | | r/typescript | 200k+ | Low | Type-safety focused | Type-safe SDK angle | | r/ExperiencedDevs | 200k+ | None | Senior-only | Pure expertise, no promo | | r/netsec | 500k+ | None | Deep expertise | Security tools only | ## Tier 4 — Adjacent (for specific product angles) | Subreddit | Members | When to use | |-----------|---------|-------------| | r/MachineLearning | 3M+ | ML model serving, embeddings API | | r/datascience | 1M+ | Data pipeline tools | | r/aws / r/googlecloud / r/azure | 200-500k | Cloud deployment guides | | r/kubernetes | 300k | Container orchestration | | r/cloudflare | 100k+ | Workers, WASM, edge | | r/webassembly | 20k | WASM-specific projects | | r/nocode | 100k | Low-code/no-code AI tools | | r/reactjs / r/vuejs / r/nextjs | 200k-500k | Frontend integrations | ## Product Angle Matrix Which subs for which product angle: | Angle | Best subreddits | |-------|----------------| | **Rust crate / CLI tool** | r/rust, r/programming, r/coolgithubprojects | | **AI agent / LLM tool** | r/ClaudeAI, r/AI_Agents, r/LocalLLaMA, r/ChatGPT | | **SaaS product** | r/SaaS, r/SideProject, r/Entrepreneur, r/startups | | **Open source project** | r/opensource, r/coolgithubprojects, r/SideProject | | **Python/Node package** | r/Python, r/node, r/javascript | | **WASM / edge** | r/webassembly, r/cloudflare, r/LocalLLaMA | | **Self-hosted tool** | r/selfhosted, r/opensource, r/devops | | **Developer experience** | r/webdev, r/programming, r/ExperiencedDevs | | **Solo founder story** | r/IndieHackers, r/Entrepreneur, r/SaaS | ## Posting Schedule Optimal times (UTC) for developer subreddits: - **Best days:** Tuesday, Wednesday, Thursday - **Best hours:** 13:00-16:00 UTC (US morning/lunch) - **Avoid:** Friday evening, weekends (except Showoff Saturday threads) - **Space crosssposts:** 24h+ between subreddits ## Karma Building Priority For a new/low-karma account, build karma in this order: 1. **r/ClaudeAI** / **r/AI_Agents** — comment on others' projects, share tips 2. **r/SideProject** — comment "nice project, have you tried X?" on others' posts 3. **r/rust** / **r/Python** — answer technical questions 4. **Post first project** to r/SideProject + r/coolgithubprojects (no karma needed) 5. **Post to tier 2** subs after 50+ karma 6. **Post to tier 3** subs after 200+ karma and month of commenting ## Sources - [Best Subreddits for SaaS Founders 2025](https://ogtool.com/blog/best-subreddits-saas-founders-2025-ogtool-guide) - [32 Best Subreddits to Promote Your Startup](https://www.foundevo.com/best-subreddits-to-promote-your-startup/) - [11 Proven Subreddits to Promote Tech 2026](https://www.subredditsignals.com/blog/best-subreddits-to-promote-a-tech-product-in-2026) - [Best Subreddits for AI Agents](https://redditagency.com/subreddits/ai-agents-and-api-integration) - [Top 10 Subreddits Self-Promotion 2025](https://toffu.ai/blog/top-10-subreddits-self-promotion-2025) -
subreddit-rules.md 2.5 KB
# Subreddit Rules Quick Reference ## Developer Subreddits ### r/rust (~350k) - **Self-promo:** Allowed with limits — 1 per week, must be Rust-related - **AI content:** "Submissions appearing to contain AI-generated content may be removed" - **Format:** Descriptive titles required ("Announcing libfoo 1.0: a library to foo your bars") - **Culture:** Technical, humble, appreciates benchmarks and honest trade-offs - **Weekly:** No specific showcase thread - **Tips:** Post as technical discussion, not announcement. Show code. Accept criticism. ### r/ClaudeAI (~200k) - **Self-promo:** Rule 7 — must be built with Claude, free to try, minimal promo language - **AI content:** Expected and welcome (it's an AI sub) - **Format:** Must use relevant flair (Claude Code, Project, etc.) - **Culture:** Builder-friendly, wants to know HOW Claude helped - **Tips:** Detail the AI workflow, not just the result. "How Claude Code helped" > "what I built" ### r/programming (~6M) - **Self-promo:** Very low tolerance - **Format:** Link posts with context - **Culture:** Skeptical, technical depth expected - **Tips:** Don't post here early. Comment only until well-established. ### r/webdev (~2M) - **Self-promo:** Showoff Saturday thread - **Format:** Varies — text posts for discussion, links for articles - **Culture:** Practical, career-focused - **Tips:** Use weekly threads for showcase. Add value in comments. ### r/Python (~1.5M) - **Self-promo:** Moderate tolerance for open source - **Culture:** Helpful, educational - **Tips:** Good for Python bindings announcements with technical context. ### r/LocalLLaMA (~500k) - **Self-promo:** Moderate — if it helps local AI - **Culture:** DIY, loves open source, local-first - **Tips:** WASM/edge angle works well here. ### r/selfhosted (~400k) - **Self-promo:** Open source gets leeway - **Culture:** Privacy-focused, DIY spirit - **Tips:** Emphasize self-hosting, no cloud dependency. ## Non-Dev Subreddits ### r/SaaS - **Self-promo:** "Show" posts allowed - **Culture:** Metrics, revenue, growth - **Tips:** Lead with numbers. ### r/startups - **Self-promo:** Requires flair - **Culture:** Lean startup, validation - **Tips:** Frame as learning, not announcement. ## General Rules Across All Subs 1. **Read sidebar before first post** — every time 2. **Check top posts** — understand what format succeeds 3. **Search for competitors** — see how similar posts performed 4. **Flair is mandatory** in many subs — wrong flair = auto-removal 5. **Crosspost sparingly** — max 2-3 subs, customize title for each, space by hours
-
-
scripts
-
check-karma.sh 1.5 KB
#!/usr/bin/env bash # Check Reddit user karma and account age via public JSON API # Usage: ./check-karma.sh <username> set -euo pipefail USERNAME="${1:?Usage: check-karma.sh <username>}" URL="https://www.reddit.com/user/${USERNAME}/about.json" DATA=$(curl -s -H "User-Agent: solo-factory/1.0" "$URL") if echo "$DATA" | grep -q '"error"'; then echo "Error: account not found or banned" echo "$DATA" | python3 -c "import sys,json; print(json.dumps(json.load(sys.stdin), indent=2))" 2>/dev/null || echo "$DATA" exit 1 fi echo "$DATA" | python3 -c " import sys, json from datetime import datetime d = json.load(sys.stdin)['data'] created = datetime.fromtimestamp(d['created_utc']) age_days = (datetime.now() - created).days print(f\"Username: {d['name']}\") print(f\"Comment karma: {d.get('comment_karma', 0)}\") print(f\"Post karma: {d.get('link_karma', 0)}\") print(f\"Total karma: {d.get('total_karma', 0)}\") print(f\"Account age: {age_days} days ({age_days // 365}y {age_days % 365}d)\") print(f\"Verified email: {d.get('has_verified_email', False)}\") print(f\"Suspended: {d.get('is_suspended', False)}\") print() total = d.get('total_karma', 0) if total < 50: print('Status: LOW KARMA — comment only, no links, no self-promo') elif total < 200: print('Status: BUILDING — can post in promo-friendly subs (r/SideProject)') elif total < 1000: print('Status: ESTABLISHED — can post in most subs with context') else: print('Status: TRUSTED — full posting privileges') " -
check-post.sh 1.8 KB
#!/usr/bin/env bash # Read a Reddit post and its comments via public JSON API # Usage: ./check-post.sh <post-url-or-id> [subreddit] set -euo pipefail INPUT="${1:?Usage: check-post.sh <url-or-post-id> [subreddit]}" # Extract post path from URL or construct from ID if [[ "$INPUT" == http* ]]; then # Extract path: /r/sub/comments/id/title/ PATH_PART=$(echo "$INPUT" | sed 's|https\?://[^/]*/||; s|\.json.*||; s|/$||') URL="https://www.reddit.com/${PATH_PART}.json?limit=20" else SUBREDDIT="${2:?Need subreddit for post ID}" URL="https://www.reddit.com/r/${SUBREDDIT}/comments/${INPUT}.json?limit=20" fi DATA=$(curl -s -H "User-Agent: solo-factory/1.0" "$URL") echo "$DATA" | python3 -c " import sys, json from datetime import datetime data = json.load(sys.stdin) # Post data post = data[0]['data']['children'][0]['data'] age_h = (datetime.now().timestamp() - post['created_utc']) / 3600 print('=' * 60) print(f'Title: {post[\"title\"]}') print(f'Author: u/{post[\"author\"]}') print(f'Score: {post[\"score\"]} | Comments: {post[\"num_comments\"]} | Age: {age_h:.0f}h') print(f'Flair: {post.get(\"link_flair_text\", \"none\")}') print(f'URL: https://www.reddit.com{post[\"permalink\"]}') print('=' * 60) if post.get('selftext'): text = post['selftext'][:500] print(f'\n{text}') if len(post['selftext']) > 500: print(f'... ({len(post[\"selftext\"])} chars total)') print() # Comments comments = data[1]['data']['children'] print(f'--- Top {len(comments)} comments ---') print() for c in comments: if c['kind'] != 't1': continue d = c['data'] body = d.get('body', '')[:200] print(f'[{d.get(\"score\", 0):+d}] u/{d.get(\"author\", \"[deleted]\")}:') print(f' {body}') if len(d.get('body', '')) > 200: print(f' ... ({len(d[\"body\"])} chars)') print() " -
search-posts.sh 1.3 KB
#!/usr/bin/env bash # Search Reddit posts in a subreddit via public JSON API # Usage: ./search-posts.sh <subreddit> [query] [sort: new|hot|rising] set -euo pipefail SUBREDDIT="${1:?Usage: search-posts.sh <subreddit> [query] [sort]}" QUERY="${2:-}" SORT="${3:-new}" if [ -n "$QUERY" ]; then URL="https://www.reddit.com/r/${SUBREDDIT}/search.json?q=${QUERY}&restrict_sr=1&sort=relevance&t=week&limit=10" else URL="https://www.reddit.com/r/${SUBREDDIT}/${SORT}.json?limit=10" fi DATA=$(curl -s -H "User-Agent: solo-factory/1.0" "$URL") echo "$DATA" | python3 -c " import sys, json from datetime import datetime data = json.load(sys.stdin) posts = data.get('data', {}).get('children', []) if not posts: print('No posts found') sys.exit(0) print(f'Found {len(posts)} posts in r/${SUBREDDIT}:') print() for i, post in enumerate(posts, 1): d = post['data'] age_h = (datetime.now().timestamp() - d['created_utc']) / 3600 age = f'{age_h:.0f}h' if age_h < 48 else f'{age_h/24:.0f}d' print(f'{i:2d}. [{d[\"score\"]:4d} pts | {d[\"num_comments\"]:3d} comments | {age}]') print(f' {d[\"title\"]}') print(f' https://www.reddit.com{d[\"permalink\"]}') # Flag good candidates for commenting if 2 <= d['num_comments'] <= 30 and age_h < 48: print(f' >>> GOOD CANDIDATE') print() "
-
-
SKILL.md 11.6 KB
--- name: solo-reddit description: Use when "reddit comment", "engage reddit", "build karma", "post to reddit", or need to participate in Reddit threads. NOT for thread discovery (/community-outreach) or social copy (/content-gen). license: MIT metadata: author: fortunto2 version: "1.0.0" openclaw: emoji: "🤖" allowed-tools: Read, Grep, Glob, Write, Edit, Bash, AskUserQuestion, WebSearch, WebFetch, mcp__searxng__web_search, mcp__solograph__kb_search, mcp__solograph__project_info, mcp__playwright__browser_navigate, mcp__playwright__browser_snapshot, mcp__playwright__browser_click, mcp__playwright__browser_type, mcp__playwright__browser_wait_for, mcp__playwright__browser_tabs argument-hint: "<command> [subreddit] — commands: comment, post, find, status, setup" --- # /reddit Reddit engagement automation — from finding relevant posts to writing authentic comments and tracking results. Comment-first strategy: build karma and reputation before any self-promotion. ## Philosophy - **Value first, product never** (in comments) — genuinely help, mention product only when directly asked - **Comment-first** — 30+ comments before any self-promotional post - **Read before write** — analyze post, existing comments, subreddit culture before drafting - **Track everything** — karma growth, engagement rates, what works ## Routing | User says | Action | |-----------|--------| | `/reddit setup <project>` | Go to **Setup** section | | `/reddit find [subreddit]` | Go to **Find Posts** section | | `/reddit comment [url]` | Go to **Comment** section | | `/reddit post <subreddit>` | Go to **Write Post** section | | `/reddit status` | Go to **Status** section | | `/reddit batch [subreddit]` | Go to **Batch Mode** — find + comment x3 | ## MCP Tools ### Playwright (required for posting) - `browser_navigate(url)` — go to Reddit page - `browser_snapshot()` — read page structure (accessibility tree, NOT screenshots) - `browser_click(ref)` — click elements - `browser_type(ref, text)` — type text - `browser_wait_for(state)` — wait for page load ### SoloGraph (optional, for search) - `web_search(query)` — search Reddit threads - `kb_search(query)` — find project context - `project_info(name)` — get project details If MCP tools not available, use WebSearch/WebFetch as fallback. ### Scripts (no MCP needed) - `scripts/check-karma.sh <username>` — check karma, account age, posting readiness - `scripts/search-posts.sh <subreddit> [query] [sort]` — find posts via Reddit JSON API - `scripts/check-post.sh <url>` — read post content + top comments Use scripts first (faster, no Playwright needed). Fall back to Playwright for posting. ## Setup First-time setup for a project. Creates profile and tracking files. 1. **Parse project** from `$ARGUMENTS` or ask user. 2. **Read PRD/README** to extract: problem, solution, ICP, key features, competitor names. 3. **Identify target subreddits** — search for where ICP hangs out: - Language/framework subs (r/rust, r/python, r/javascript) - Domain subs (r/selfhosted, r/devops, r/ClaudeAI) - General tech (r/programming, r/webdev) 4. **Research each subreddit:** - Read sidebar rules (via WebFetch or Playwright) - Check self-promotion policy - Note posting format, flairs, weekly threads - Find top posts to understand culture 5. **Write profile** to `docs/reddit/profile.md`: ```markdown # Reddit Profile: {Project Name} **Product:** {one-line} **ICP:** {target persona} **Value prop for Reddit:** {what genuine help can we offer} ## Target Subreddits | Subreddit | Members | Self-promo | Culture | Best content type | |-----------|---------|------------|---------|-------------------| | r/xxx | NNNk | rules... | tone... | type... | ## Search Keywords - Problem: {what users complain about} - Solution: {what users search for} - Competitors: {names for "vs" and "alternative" threads} ## Voice Guide - Tone: {casual/technical/friendly} - Never say: {banned phrases — "game-changer", "revolutionary", etc.} - Always: {disclose affiliation, lead with value} ``` 6. **Create tracking file** `docs/reddit/tracking.md`: ```markdown # Reddit Tracking ## Stats - Account: {username} - Starting karma: {N} - Comments posted: 0 - Posts made: 0 ## Activity Log <!-- entries added by /reddit comment and /reddit post --> ``` ## Find Posts Find posts worth commenting on in a subreddit. 1. **Load profile** from `docs/reddit/profile.md`. 2. **Search** for relevant threads: - Via WebSearch: `"{keyword}" site:reddit.com/r/{subreddit}` for each keyword group - Or via Playwright: navigate to `reddit.com/r/{subreddit}/new/` and `reddit.com/r/{subreddit}/rising/` 3. **Filter posts:** - Less than 7 days old (prefer < 24h for visibility) - 2-30 comments (active but not buried) - Matches problem/solution/competitor keywords - NOT already commented on (check tracking) 4. **Score and rank** top 5 posts by: - Relevance to our expertise (high) - Comment count sweet spot (medium = best) - Recency (newer = better) - Can we genuinely help? (must be yes) 5. **Output** ranked list with URLs, titles, why each is good. ## Comment Write and optionally post a comment on a specific Reddit post. ### Step 1: Load Context - Read `docs/reddit/profile.md` for voice guide - Read `docs/reddit/tracking.md` to check we haven't commented on this post - Read `references/style-guide.md` for comment patterns ### Step 2: Deep Analysis Navigate to the post URL (via Playwright or WebFetch): - **Read the full post** — understand what OP actually asks - **Read existing comments** — understand tone, what's been said, gaps - **Identify OP's intent:** asking for help? sharing experience? seeking opinions? - **Decide angle:** what unique value can we add that others haven't? ### Step 3: Draft Comment Write a comment following these rules: - **Match subreddit tone** — casual for r/ClaudeAI, technical for r/rust - **Lead with value** — first 2-3 sentences directly address OP's question - **Be specific** — code snippets, numbers, concrete steps > vague advice - **1-2 focused points** — don't try to cover everything - **No product mention** unless directly relevant AND we have 10+ comments in this sub - **If mentioning product:** last paragraph, with "I work on X" disclosure ### Step 4: Anti-Spam Review Check the draft against `references/spam-signals.md`: - [ ] No marketing language ("game-changer", "revolutionary", "10x") - [ ] No link in first comment on a subreddit - [ ] Not a copy of any previous comment - [ ] Directly addresses OP's question (not tangential) - [ ] Would be useful even if product didn't exist - [ ] Reads like a human, not a press release - [ ] No emoji overuse (0-1 max) If any check fails: rewrite. ### Step 5: Post (if Playwright available and user approves) 1. `browser_navigate(post_url)` 2. `browser_snapshot()` — find comment input 3. `browser_click(comment_box_ref)` 4. `browser_type(comment_box_ref, comment_text)` 5. `browser_click(submit_button_ref)` 6. `browser_snapshot()` — verify posted, get permalink If Playwright not available: copy comment to clipboard via `pbcopy`. ### Step 6: Track Update `docs/reddit/tracking.md`: ```markdown ### {YYYY-MM-DD HH:MM} r/{subreddit} - **Post:** [{title}]({url}) - **Comment:** [{permalink}]({comment_url}) - **Angle:** {what value we provided} - **Product mentioned:** yes/no ``` ## Write Post Create a Reddit post for a specific subreddit. 1. **Pre-flight checks:** - Do we have 10+ tracked comments in this subreddit? If no: STOP, comment more first. - Check subreddit rules for post format, flairs, allowed content types. - Check if showcase/self-promo threads exist (e.g., "Showoff Saturday"). 2. **Determine post type:** | Type | When to use | |------|-------------| | Experience sharing | We solved a hard problem — share the story | | Technical deep-dive | Interesting approach worth discussing | | Tool announcement | Only in subs that allow it, with heavy context | | Question/discussion | Genuine question that sparks conversation | 3. **Draft post:** - Title: specific, accurate, matches sub format (check top posts) - Body: value-first structure from `references/post-templates.md` - Links: max 1-2, put extras in first comment - Flair: match subreddit requirements 4. **Review against rules:** - 90/10 rule: 90% value, 10% promotional - No clickbait titles - Follows subreddit-specific format - Would you upvote this if it wasn't yours? 5. **Post** via Playwright or copy to clipboard. 6. **After posting:** - Monitor comments for 2 hours - Reply to every comment (boosts ranking) - Track in `docs/reddit/tracking.md` ## Batch Mode Efficient mode: find 3 posts + write 3 comments in one session. 1. Load profile and tracking. 2. Run `scripts/check-karma.sh` to verify account status. 3. Run `scripts/search-posts.sh` for target subreddit. 4. For top 3 candidates, run **Comment** flow sequentially. 5. Wait 5-10 minutes between comments (rate limiting). 6. Write structured summary to `docs/reddit/batch-{date}.json`: ```json { "date": "2026-03-25", "subreddit": "r/ClaudeAI", "comments_posted": 3, "posts": [ {"url": "...", "title": "...", "angle": "...", "product_mentioned": false} ], "karma_before": 37, "karma_after": null } ``` 7. Print human summary: 3 comments posted, links, karma status. ## Status Show current Reddit engagement stats. 1. Read `docs/reddit/tracking.md`. 2. Count: total comments, comments per subreddit, posts made. 3. Calculate: comments since last promotional post (10:1 ratio check). 4. Show readiness: "Ready to post in r/X" or "Need N more comments in r/X". ## Critical Rules 1. **Never post without reading the full thread** — context is everything 2. **Never mention product in first 10 comments** in any subreddit 3. **Never post same content to multiple subreddits** — customize each 4. **Never argue with moderators** — accept removal gracefully 5. **Always disclose affiliation** when mentioning your product 6. **Minimum 5 minute gap** between comments (avoid rate limiting) 7. **No vote manipulation** — never ask for upvotes anywhere 8. **Use `browser_snapshot` not `browser_take_screenshot`** — saves tokens 9. **Navigate by URL** (`browser_navigate`) not clicking links — prevents errors ## Gotchas 1. **Reddit spam filter on low-karma accounts** — new or inactive accounts get auto-filtered. Build 50+ karma with genuine comments before any self-promo posts. If filtered: message mods via modmail (sidebar link), don't repost. 2. **Links trigger spam filter** — first comment with a link in a new subreddit often gets caught. Post text-only comments first, add links only after established. 3. **Subreddit AI content rules** — r/rust and others may remove posts with AI-generated content. Be transparent about AI-assisted development but ensure comments are genuinely human-directed. 4. **Rate limiting** — Reddit throttles new/low-karma accounts. If you see "you're doing that too much", wait 10 minutes. Don't retry immediately. 5. **Old Reddit vs New Reddit** — `old.reddit.com` has better search. Use `new.reddit.com` for posting (Playwright works better with new UI). 6. **Playwright login state** — Reddit login persists in browser session. If logged out: user must log in manually (`browser_navigate("https://www.reddit.com/login")`), skill can't enter credentials. ## Notes - This skill complements `/community-outreach` (which finds threads) and `/content-gen` (which generates post copy). Use `/reddit` for the actual engagement loop. - For Reddit Ads, see the `reddit-ads` skill from kostja94/marketing-skills. - Karma builds compound: each good comment makes the next one more visible.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.