skills/reddit-cultivate/SKILL.md
Reddit account cultivation for founders and indie developers. Uses AppleScript to control real Chrome — undetectable by anti-bot systems. Checks karma, finds rising posts, drafts comments, and posts directly. Triggers on "/reddit-cultivate", "check my reddit", "reddit maintenance", "find reddit opportunities", "build reddit karma".
npx skillsauth add phy041/claude-agent-skills reddit-cultivateInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build and maintain Reddit presence by controlling your real Chrome browser via AppleScript. No Playwright, no Selenium, no API tokens.
Claude Code → osascript → Chrome (real browser, logged in) → Reddit
Chrome multi-profile can cause AppleScript to not see windows. Always detect first:
WINDOWS=$(osascript -e 'tell application "Google Chrome" to return count of windows' 2>/dev/null)
if [ "$WINDOWS" = "0" ] || [ -z "$WINDOWS" ]; then
echo "Use Method 2 (System Events + Console)"
else
echo "Use Method 1 (execute javascript)"
fi
Works when count of windows > 0.
osascript -e 'tell application "Google Chrome" to tell active tab of first window to set URL to "https://www.reddit.com/r/SideProject/rising/"'
# Run JS that writes result to document.title
osascript -e 'tell application "Google Chrome" to tell active tab of first window to execute javascript "fetch(\"/api/me.json\",{credentials:\"include\"}).then(r=>r.json()).then(d=>{document.title=\"R:\"+JSON.stringify({name:d.data.name,karma:d.data.total_karma})})"'
# Wait, then read title
sleep 2
osascript -e 'tell application "Google Chrome" to return title of active tab of first window'
osascript -l JavaScript -e '
var chrome = Application("Google Chrome");
var tab = chrome.windows[0].activeTab;
tab.execute({javascript: "(" + function() {
// Complex JS here — no escaping needed
fetch("/r/SideProject/rising.json?limit=10", {credentials: "include"})
.then(r => r.json())
.then(d => {
var posts = d.data.children.map(p => ({
title: p.data.title.substring(0, 60),
score: p.data.score,
comments: p.data.num_comments,
id: p.data.name,
url: "https://reddit.com" + p.data.permalink
}));
document.title = "POSTS:" + JSON.stringify(posts);
});
} + ")();"});
'
When AppleScript can't see Chrome windows (multi-profile bug), use keyboard automation.
python3 -c "
import subprocess
js = '''(async()=>{
let resp = await fetch('/api/me.json', {credentials: 'include'});
let data = await resp.json();
document.title = 'R:' + JSON.stringify({name: data.data.name, karma: data.data.total_karma});
})()'''
subprocess.run(['pbcopy'], input=js.encode(), check=True)
"
osascript -e '
tell application "System Events"
tell process "Google Chrome"
set frontmost to true
delay 0.3
-- Cmd+Option+J = open/close Console
key code 38 using {command down, option down}
delay 1
-- Select all + Paste + Enter
keystroke "a" using {command down}
delay 0.2
keystroke "v" using {command down}
delay 0.5
key code 36
delay 0.3
-- Close Console
key code 38 using {command down, option down}
end tell
end tell'
sleep 3
osascript -e '
tell application "System Events"
tell process "Google Chrome"
return name of window 1
end tell
end tell'
Get username, karma, verify login using /api/me.json.
For each target subreddit, fetch rising posts:
/r/{subreddit}/rising.json?limit=10
Look for:
Rules:
Anti-AI Detection Rules (CRITICAL):
Reddit users are very good at spotting AI comments. Follow these rules or get called out.
BANNED words (instant AI detection): delve, tapestry, nuance/nuanced, realm, robust, pivotal, leverage, comprehensive, enhance, facilitate, catalyst, intricate, furthermore, moreover, consequently, nonetheless, endeavour, utilize/utilization, crucial, vital, significant, landscape, underscore, streamline
BANNED phrases:
BANNED patterns:
REQUIRED human patterns:
THE BALANCE (CRITICAL):
Comments should sound like an expert talking to a friend at a bar — deep technical substance, casual delivery. Not corporate AI assistant, not lazy troll.
Think: expert knowledge, casual delivery.
Example of GOOD comment:
ran into the same thing when we were building our pipeline. switching from euclidean
to cosine similarity fixed it -- the normalized space handles magnitude differences
way better when you're working with 768-dim embeddings.
one gotcha: make sure you L2-normalize before indexing, not at query time. saves you
~40ms per lookup at scale.
Self-Promotion Rules:
Formatting (CRITICAL):
> text) for multi-paragraph comments
\n\n) between them
<p> tags with visual spacingGet modhash, then post each comment with 4s delay between posts.
// Get modhash first
let me = await fetch("/api/me.json", {credentials: "include"}).then(r=>r.json());
let uh = me.data.modhash;
// Post comment
let body = new URLSearchParams({
thing_id: "t3_xxxxx", // post fullname
text: "Your comment here",
uh: uh,
api_type: "json"
});
let resp = await fetch("/api/comment", {
method: "POST",
credentials: "include",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
body: body.toString()
});
let result = await resp.json();
document.title = "POSTED:" + JSON.stringify(result);
ALWAYS end with a summary table containing direct links to every comment posted.
The comment link format is:
https://www.reddit.com/r/{subreddit}/comments/{post_id}/comment/{comment_id}/
Example summary table:
| # | Sub | Post | Comment Link | |---|-----|------|-------------| | 1 | r/SideProject | "Post title" | https://www.reddit.com/r/SideProject/comments/abc123/comment/xyz789/ | | 2 | r/indiehackers | "Post title" | https://www.reddit.com/r/indiehackers/comments/def456/comment/uvw012/ |
| Priority | Subreddit | Why | |----------|-----------|-----| | High | r/SideProject | Project launches, very welcoming | | High | r/indiehackers | Revenue/growth discussions | | Medium | r/ClaudeAI | AI tooling audience | | Medium | r/coolgithubprojects | Open source visibility | | Medium | r/startups | Startup discussions | | Medium | r/entrepreneur | Business insights | | Medium | r/opensource | Technical audience |
| Action | Limit | |--------|-------| | Between API calls | 2+ seconds | | Between posts | 4+ seconds | | Per session | Max 5 comments | | Daily | 10-15 comments max |
| Karma | Unlocks | |-------|---------| | 100+ | Can post in most subreddits | | 500+ | Reduced spam filter triggers | | 1000+ | Trusted contributor status | | 5000+ | Community recognition |
| Problem | Solution |
|---------|----------|
| count of windows = 0 | Chrome multi-profile bug → use Method 2 |
| "Allow JavaScript" not working | Restart Chrome after enabling |
| Modhash expired | Re-fetch from /api/me.json |
| 403 response | Rate limited, wait 5+ minutes |
| Comment not appearing | Check for shadowban: visit profile in incognito |
| Tool | Problem |
|------|---------|
| Playwright | Sets navigator.webdriver=true, detected instantly |
| Selenium | Same detection issue |
| Puppeteer | Same detection issue |
| curl + API | IP blocked by Reddit after few requests |
| AppleScript | Controls real Chrome, undetectable, cookies included |
development
Generate Xiaohongshu (小红书) carousel images (3:4, 1080x1440) from structured content. Creates professional slide decks with Chinese typography and proper XHS formatting. Triggers on "做小红书图", "xhs images", "generate xhs slides", "小红书配图", "carousel images", or any XHS image generation request.
testing
Twitter/X account cultivation and growth system. Checks account health (TweepCred, shadowban), analyzes tweets, finds engagement opportunities, recommends unfollows, and tracks progress. Triggers on "/twitter-cultivate", "check my twitter", "twitter health", "grow my twitter", "twitter maintenance", "fix my twitter reach".
development
Post to social media platforms using a multi-provider social posting API. Use when you want to post to Twitter, LinkedIn, Instagram, Facebook, TikTok, Threads, or Bluesky. Triggers on "post to twitter", "post to instagram", "social media post", "share on linkedin", "publish to social", or any social posting request.
development
Detect new GitHub repos and generate formatted ship announcements for social media. Monitors your GitHub profile for new repos pushed today, writes a technical digest, and drafts Twitter/Reddit posts for approval. Triggers on "ship digest", "new repos", "what did I ship", "github ship", or any shipping announcement request.