Template. Replace placeholder values like {{YOUR_NAME}}, {{CONTENT_DIR}}, etc. with your own before using.
Marketing
Reddit Commenter
Write natural Reddit comments with deep post analysis, personalization reviews, Playwright automation, and automated scheduling for daily community engagement.
MCP Required. This skill needs Playwright to run.
Save to
~/.claude/skills/reddit-commenter/SKILL.mdSKILL.md
---
name: reddit-commenter
description: A skill for writing natural and valuable comments on Reddit communities. Includes the complete workflow from subreddit exploration, comment writing, review, posting, to tracking.
license: MIT
---
# Reddit Commenter Skill
> Reddit Comment Automation - From Exploration to Posting and Tracking
## Default Session Settings
- **Comments per session**: 6 (across different subreddits)
- When invoked, always complete 6 comments unless the user specifies a different number
---
## ⚠️ IMPORTANT: This Skill Uses Playwright MCP (NOT Claude Chrome)
This skill uses **Playwright MCP** (`@playwright/mcp`) for browser automation. Do NOT use Claude Chrome tools (`mcp__claude-in-chrome__*`).
### One-Time Setup
1. **Install Playwright browsers** (if not done):
```bash
npx playwright install chromium
```
2. **Verify MCP config** in `~/.claude/mcp.json`:
```json
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
```
3. **Restart Claude Code** after setup for MCP to load
### Playwright MCP Tools (NOT Claude Chrome)
| MCP Tool | Purpose |
|----------|---------|
| `mcp__playwright__browser_navigate` | Navigate to Reddit pages |
| `mcp__playwright__browser_snapshot` | Capture page structure (accessibility tree) |
| `mcp__playwright__browser_click` | Click elements (comment box, buttons, etc.) |
| `mcp__playwright__browser_type` | Input text (comment content) |
| `mcp__playwright__browser_wait_for` | Wait for page loading |
### ⚠️ Critical Notes
- **USE PLAYWRIGHT**: All browser tools should be `mcp__playwright__*`, not `mcp__claude-in-chrome__*`
- **Minimize tokens**: Only pass essential info needed for each MCP call
- **Direct navigation**: Navigate directly to URLs with `browser_navigate` (don't click links)
- **⚠️ No screenshots**: Use `browser_snapshot` only (accessibility tree, no image files)
---
## Execution Workflow
### Step 1: Check Activity Status and Select Subreddit
```
1. Check today's date file in tracking/reddit/ folder
→ File name: YYYY-MM-DD.md (e.g., 2026-01-12.md)
→ If file doesn't exist, create new one referencing template.md
2. Check activity status table by subreddit:
- How many comments posted in each subreddit today
- Check subreddits under daily limit (3)
- Check last comment time (minimum 5-10 minute intervals)
3. Select next subreddit for commenting:
- Prioritize subreddits with no activity today or under limit
- Prioritize subreddits with oldest last activity time
4. Check subreddit specifics in resources/subreddits.md:
- Core community rules
- Community nature
- Good topics to answer
→ Reflect this information when selecting posts
```
### Step 2: Access Reddit and Explore Posts
```
1. Access Reddit with Playwright MCP
→ browser_navigate("https://www.reddit.com/r/{selected_subreddit}/new/")
or
→ browser_navigate("https://www.reddit.com/r/{selected_subreddit}/rising/")
2. Page snapshot
→ browser_snapshot()
3. Criteria for selecting posts to comment on:
• Posts where you can share insights or provide feedback
• ⚠️ CRITICAL: Posts you haven't commented on today
- Check activity log in tracking/reddit/today's-date.md file
- Extract list of post URLs from today's comments
- Verify selected post URL is NOT in that list
- Absolutely NO duplicate comments on same post
• OK even if not related to your service/field
• Relevance to "good topics to answer" from Step 1
• Avoid posts with already hundreds of comments
4. Secure URL of selected post
→ Check and record post link in snapshot
→ Navigate directly to this URL in next Step
```
### Step 3: Deep Analysis of Post Content and Existing Comments
```
⚠️ CRITICAL: Must perform this step before writing comment
0. Navigate directly to post
→ browser_navigate(post URL secured in Step 2)
→ Navigate directly to URL, don't click on post (prevents click errors)
→ browser_snapshot()
1. Read post content accurately:
- Understand what OP is actually asking
- Don't react only to keywords—understand full context
- Distinguish between hypothetical questions and actual problem complaints
2. Understand OP's intent:
- Seeking specific help? (problem solving)
- Seeking opinions/discussion? (hypothetical scenario)
- Information sharing? (experience story)
3. Analyze existing comments:
- Check how others interpreted
- Understand how community is receiving this post
- Check tone and answering style
4. Decide comment direction:
- Is this post worth answering?
- From what angle should I answer?
- Can I naturally answer in my style?
5. ⚠️ CRITICAL: Determine if site/link verification needed:
- Did OP provide website/app link?
- Are there expressions like "feedback requested", "honest feedback", "looking for feedback"?
- Is feedback requested on UX, design, performance that requires actual verification?
→ If YES:
• Visit actual site with browser_navigate(provided link)
• Check UI/UX with browser_snapshot()
• Write feedback based ONLY on what you actually saw
• Absolutely NO speculative feedback on things you didn't see
→ If NO:
• Can answer from post content alone
• General advice or experience sharing
⚠️ Proceed to Step 4 only after clearly verifying analysis results
```
### Step 4: Write Comment
```
1. Draft comment based on Step 3 analysis results:
- Answer matching OP's actual question
- Practically helpful content
- Match subreddit tone
- Focus on 1-2 points (don't try to explain everything)
- Use swear words naturally when they fit - "bullshit", "damn", "hell", "no shit" - this matches {{YOUR_NAME}}'s voice and Reddit rewards raw authenticity. Don't force it, but don't sanitize either.
```
### Step 5: Personalization Review (Loop)
```
1. Check resources/personalization_reddit.md file
→ Sequentially check 16 personalization checklist items based on actual comment style
→ Especially important: #4 personal experience, #13 experience pattern, #15 question intent understanding, #16 site verification
2. Check style patterns:
• Which pattern (1-8) is it closest to?
• Does it capture that pattern's characteristics well?
• Does it look like you wrote it?
3. Review process:
• All items PASS → Proceed to Step 6
• Any violation → Revise comment and re-review from Step 5 beginning
```
**Detailed personalization guide**: See `resources/personalization_reddit.md`
### Step 6: Post Comment
```
1. Click comment input box
→ Check comment input element after browser_snapshot()
→ browser_click(comment box ref)
2. Input comment content
→ browser_type(reviewed comment)
3. Click post button
→ browser_click(post button ref)
4. Secure comment URL
→ Copy comment permalink after posting
```
### Step 7: Judge Potential Customer (Optional)
```
⚠️ CRITICAL: Judge accurately by referring to Step 3 analysis again
→ Refer to "Lead Selection Criteria" in leads/reddit.md
→ Classify as lead only users with actual problems (not hypothetical questions)
When lead discovered, update leads/reddit.md:
- Username, subreddit, post URL
- Post summary, selection reason, relevance
```
### Step 8: Update Tracking
```
Update tracking/reddit/[today's-date].md file:
1. Activity status table by subreddit:
- Increment comment count for that subreddit by +1
- Update last comment time
2. Add to activity log:
### [HH:MM] r/subreddit
- **Post**: [Title](URL)
- **Topic Summary**: One-line summary of post content
- **Comment Link**: [Comment URL]
- **Comment Content**:
```
Full comment written
```
3. When potential customer discovered:
- Update 'leads/reddit.md' when potential customer discovered
```
---
## File Reference Rules (Token Savings)
| File | Reference Timing |
|------|------------------|
| `resources/subreddits.md` | Step 1 (subreddit selection) |
| `resources/personalization_reddit.md` | Step 5 (review) |
| `resources/product.md` | Step 7 (potential customer judgment) |
| `leads/reddit.md` | Step 7 (lead criteria check) |
→ Reference only at relevant Step, don't read in advance
---
## Cautions
1. **Login Required**: Check Reddit account login status
2. **Rate Limiting**: Too fast activity risks account restrictions
3. **Community Rules**: Must follow each subreddit's rules
4. **Spam Prevention**: Absolutely NO copy-pasting same content
5. **Review Required**: Rewrite if any checklist item violated
6. **⚠️ Step 3 Required**: NEVER write comment without analyzing post content. Judging only by keywords can cause serious errors
7. **⚠️ Minimize Playwright MCP tokens**:
- Don't pass entire context when calling Playwright MCP
- Concisely summarize only essential information needed for each MCP call
- E.g.: Only minimal instructions like "Navigate to [URL]", "Click comment box", "Type: [text]"
- Prevent errors from excessive input tokens
8. **⚠️ Post Navigation**: Use browser_navigate directly with URL instead of clicking post (prevents click errors)
---
## Automated Mode (Trigger.dev)
The manual Playwright workflow above can also run fully automated via Trigger.dev. The automated mode uses the Reddit API (OAuth2) instead of browser automation — faster, more reliable, and runs in the cloud.
### How It Works
1. **Scheduler** (`reddit-scheduler`): Cron fires daily at midnight ET, picks a random time between 9am-11pm ET, and schedules the daily run with that delay.
2. **Daily Run** (`reddit-daily-run`): Orchestrates the full day's activity:
- **Phase 1 — Commenting**: Loops through 6 subreddits (rotating from pool of 20), posts 1 comment per sub with 3-8 min random delays between subs.
- **Phase 2 — Reply Scanning**: Checks 5 most recent inbox replies, generates contextual responses or skips (e.g., "thanks" doesn't need a response).
3. **Comment Task** (`reddit-comment-on-subreddit`): Per-subreddit task. Fetches hot+new posts, Claude (Sonnet 4.5) picks the best post, reads existing comments for context, generates a comment in {{YOUR_NAME}}'s voice, and posts it.
4. **Reply Scanner** (`reddit-scan-replies`): Fetches inbox replies, Claude decides whether to respond, posts short conversational replies with 30-60s delays.
### Subreddit Rotation
All 20 subreddits get equal coverage over a 4-day cycle:
- **Day 1 (Group A)**: ClaudeAI, SideProject, ChatGPT, Cursor, WebDev, sales
- **Day 2 (Group B)**: SaaS, startups, Entrepreneur, smallbusiness, salesforce, coldemail
- **Day 3 (Group C)**: leadgeneration, b2bmarketing, GrowthHacking, LinkedInLunatics, digital_marketing, ArtificialIntelligence
- **Day 4 (Group D)**: automation, nocode + 4 random from other groups
### Human Mimicry
| Action | Delay |
|--------|-------|
| Between Reddit API calls | 1.1s min (built into client) |
| Between subreddits | 3-8 min random |
| Between reply postings | 30-60s random |
| Daily execution time | Random between 9am-11pm ET |
### Key Differences from Manual Mode
| Aspect | Manual (Playwright) | Automated (Trigger.dev) |
|--------|-------------------|----------------------|
| Reddit access | Browser automation | Reddit API (OAuth2) |
| Runs on | Local machine | Cloud (Trigger.dev) |
| Triggering | Manual `/reddit-commenter` | Daily cron |
| Comment review | Human reviews before posting | Claude self-reviews via voice profile |
| Volume | Flexible | 6 comments + 5 reply scans/day |
### Configuration
Trigger.dev env vars (production):
- `REDDIT_CLIENT_ID` — from reddit.com/prefs/apps
- `REDDIT_CLIENT_SECRET` — from reddit.com/prefs/apps
- `REDDIT_USERNAME` — Reddit account username
- `REDDIT_PASSWORD` — Reddit account password
- `ANTHROPIC_API_KEY` — for Claude (Sonnet 4.5) comment generation
### Files
| File | Purpose |
|------|---------|
| `src/trigger/reddit_types.ts` | Type definitions |
| `src/trigger/utils/reddit_client.ts` | Reddit API wrapper (OAuth2, rate-limited) |
| `src/trigger/utils/reddit_prompts.ts` | Voice profile + system prompts |
| `src/trigger/tasks/reddit_comment_on_subreddit.ts` | Core commenting logic |
| `src/trigger/tasks/reddit_scan_replies.ts` | Reply scanning + responding |
| `src/trigger/tasks/reddit_daily_run.ts` | Daily orchestrator |
| `src/trigger/tasks/reddit_scheduler.ts` | Cron scheduler with random timing |
### Manual Testing
1. Set env vars in Trigger.dev dashboard (production)
2. Deploy: `npx trigger.dev@latest deploy` from {{PROJECT_NAME}}
3. Test: Manually trigger `reddit-daily-run` from dashboard with 1 subreddit
4. Monitor: Check run logs for comment quality + style patterns