reddit-post
Posts content to Reddit by controlling your active Chrome browser via AppleScript.
Install
mkdir -p .claude/skills/reddit-post && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11986" && unzip -o skill.zip -d .claude/skills/reddit-post && rm skill.zipInstalls to .claude/skills/reddit-post
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Post to Reddit using AppleScript Chrome control. Use when user wants to post to Reddit, share on subreddits, or promote open source projects on Reddit. Triggers on "post to reddit", "share on reddit", "reddit post", "submit to subreddit", or any Reddit posting request.Key capabilities
- →Post text or link content to Reddit
- →Add flair to Reddit posts
- →Extract the direct link to a new post
- →Control Chrome via AppleScript to interact with Reddit
How it works
The skill uses AppleScript to execute JavaScript in a logged-in Chrome browser, interacting with Reddit's /api/submit endpoint for posting and /api/selectflair for adding flair.
Inputs & outputs
When to use reddit-post
- →Sharing open source projects on Reddit
- →Submitting posts to specific subreddits
- →Automating repetitive Reddit posts
About this skill
Reddit Posting Skill (AppleScript Chrome Control)
Post to Reddit by controlling the user's real Chrome via AppleScript. No Playwright, no Selenium, no API tokens.
How It Works
Claude Code → osascript → Chrome (real browser, logged in) → Reddit /api/submit
- Same-origin fetch with cookies → undetectable
- Reddit's
/api/submitendpoint for text/link posts - Modhash from
/api/me.jsonfor CSRF protection
Prerequisites
- macOS only (AppleScript is a macOS technology)
- Chrome: View → Developer → Allow JavaScript from Apple Events (restart Chrome after enabling)
- User logged into Reddit in Chrome
Method Detection (Run First)
WINDOWS=$(osascript -e 'tell application "Google Chrome" to return count of windows' 2>/dev/null)
if [ "$WINDOWS" = "0" ] || [ -z "$WINDOWS" ]; then
echo "METHOD 2 (System Events + Console)"
else
echo "METHOD 1 (execute javascript)"
fi
See reddit-cultivate skill for full Method 1 vs Method 2 details.
Posting Workflow
Step 1: Get Modhash
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=\"UH:\"+d.data.modhash})"'
sleep 2
osascript -e 'tell application "Google Chrome" to return title of active tab of first window'
Step 2: Submit Post
Navigate Chrome to reddit.com first (same-origin requirement), then submit:
(async()=>{
try {
let body = new URLSearchParams({
sr: "SideProject", // subreddit name (no r/ prefix)
kind: "self", // "self" for text, "link" for URL
title: "Your post title",
text: "Your post body with **markdown** support",
uh: "MODHASH_HERE",
api_type: "json",
resubmit: "true"
});
let resp = await fetch("/api/submit", {
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);
} catch(e) {
document.title = "ERR:" + e.message;
}
})()
For link posts, change:
kind: "link",
url: "https://github.com/your/repo", // instead of text
Step 3: Extract Post Link
The response contains result.json.data.url — the direct link to the new post.
Step 4: Add Flair (if required)
Some subreddits require flair. After posting, use:
(async()=>{
try {
// First get available flairs
let resp = await fetch("/r/SUBREDDIT/api/link_flair_v2", {credentials: "include"});
let flairs = await resp.json();
document.title = "FLAIRS:" + JSON.stringify(flairs.map(f => ({id: f.id, text: f.text})));
} catch(e) {
document.title = "ERR:" + e.message;
}
})()
Then apply flair:
(async()=>{
try {
let body = new URLSearchParams({
link: "t3_POST_ID",
flair_template_id: "FLAIR_ID",
uh: "MODHASH"
});
await fetch("/api/selectflair", {
method: "POST",
credentials: "include",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
body: body.toString()
});
document.title = "FLAIR_SET";
} catch(e) {
document.title = "ERR:" + e.message;
}
})()
Step 5: Session Summary
Always end with the post link:
| Sub | Title | Post Link |
|---|---|---|
| r/SideProject | "Your title" | https://www.reddit.com/r/SideProject/comments/abc123/... |
Spam Filter Avoidance
Words to AVOID in titles/body
| Avoid | Use Instead |
|---|---|
| crawl, crawled, crawling | compiled, cataloged, indexed, collected |
| scrape, scraping | gathered, extracted, retrieved |
| bot, automated | tool, script, program |
| free (overused) | open source, MIT licensed |
| hack, hacks | tips, techniques, methods |
Content Triggers to Avoid
- Multiple external links (max 1-2)
- URL shorteners (bit.ly, tinyurl)
- New account + promotional content
- Same content across multiple subreddits quickly
- Excessive self-promotion language
Best Subreddits for Open Source Projects
| Subreddit | Members | Best For | Notes |
|---|---|---|---|
| r/coolgithubprojects | 60K | GitHub repos | Designed for this! |
| r/SideProject | 453K | Side projects | Very welcoming |
| r/opensource | 100K+ | Open source tools | Technical audience |
| r/programming | 6M+ | Dev tools | High competition |
| r/Python | 1.5M+ | Python tools | Active community |
| r/webdev | 2M+ | Web tools | "Showoff Saturday" only |
| r/selfhosted | 400K+ | Self-hosted tools | Great engagement |
Best Times to Post (US Eastern Time)
| Day | Best Time |
|---|---|
| Monday | 6-8 AM |
| Tuesday | 7-9 AM |
| Wednesday | 8-10 AM |
| Thursday | 7-9 AM |
| Friday | 6-8 AM |
| Saturday | 7-9 AM |
| Sunday | 8-10 AM |
Post 30 minutes BEFORE peak times for momentum building.
Post Templates
Open Source Project Announcement
Title: I built [PROJECT_NAME] - [one-line description] (open source)
Body:
Hey everyone,
I created [PROJECT_NAME] to solve [PROBLEM].
**What it does:**
- Feature 1
- Feature 2
- Feature 3
**Tech stack:** [Languages/frameworks]
**Links:**
- GitHub: [single link]
Happy to answer any questions!
Tool/Resource Share
Title: [TOOL_NAME]: [what it does] - free and open source
Body:
Built this because [reason/pain point].
**Features:**
- [List 3-5 key features]
**How to use:**
[Brief code example or instructions]
GitHub: [link]
Feedback welcome!
Cross-Posting Strategy
Stagger posts across subreddits for maximum reach:
- Day 1: Primary subreddit (most relevant)
- Day 2-3: Secondary subreddit (different audience)
- Day 4-5: General subreddit (r/SideProject, etc.)
Never post to multiple subreddits on the same day — triggers spam detection.
Error Recovery
| Issue | Solution |
|---|---|
| "Post removed by filters" | Rewrite without trigger words, reduce links |
| "You're doing that too much" | Wait 10-15 min, need more karma |
| "This community requires flair" | Use /api/selectflair after posting |
| "Title too long" | Keep under 300 characters |
| Post not visible | Check if shadowbanned: profile in incognito |
| Modhash expired | Re-fetch from /api/me.json |
Why AppleScript (Not Playwright)
| Tool | Problem |
|---|---|
| Playwright | navigator.webdriver=true, detected by Reddit |
| Selenium | Same detection issue |
| curl + API | IP blocked after few requests |
| AppleScript | Controls real Chrome, undetectable, cookies included |
When not to use it
- →When not using macOS
- →When Chrome is not installed or the user is not logged into Reddit in Chrome
- →When a user wants to post to Reddit without using a real browser
Prerequisites
Limitations
- →Requires macOS for AppleScript functionality
- →Dependent on the user being logged into Reddit in Chrome
- →Limited to text and link posts via the /api/submit endpoint
How it compares
This skill controls a real Chrome browser instance via AppleScript, which makes the activity undetectable by Reddit compared to using Playwright or Selenium.
Compared to similar skills
reddit-post side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| reddit-post (this skill) | 0 | 6mo | Review | Intermediate |
| tiktok-automation | 0 | 3mo | No flags | Intermediate |
| social-orchestrator-v2 | 0 | 2mo | No flags | Advanced |
| social-media-generator | 6 | 9mo | Review | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
tiktok-automation
TJSNDHU
Automate TikTok tasks via Rube MCP (Composio): upload/publish videos, post photos, manage content, and view user profiles/stats. Always search tools first for current schemas.
social-orchestrator-v2
diegosouzapw
SOCIAL-ORCHESTRATOR: Canais Unificados workflow skill. Use this skill when the user needs Orquestrador unificado de canais sociais \u2014 coordena Instagram, Telegram e WhatsApp em um unico fluxo de trabalho. Publicacao cross-channel, metricas unificadas, reutilizacao de conteudo por formato, agenda
social-media-generator
ailabs-393
This skill should be used when the user requests social media content creation for Twitter, Instagram, LinkedIn, or Facebook. It generates platform-optimized posts and saves them in an organized folder structure with meaningful filenames based on event details.
baoyu-post-to-x
JimLiu
Posts content and articles to X (Twitter). Supports regular posts with images/videos and X Articles (long-form Markdown). Uses real Chrome with CDP to bypass anti-automation. Use when user asks to "post to X", "tweet", "publish to Twitter", or "share on X".
xhs-note-creator
comeonzhj
小红书笔记素材创作技能。当用户需要创建小红书笔记素材时使用这个技能。技能包含:根据用户的需求和提供的资料,撰写小红书笔记内容(标题+正文),生成图片卡片(封面+正文卡片),以及发布小红书笔记。
svenflow
Post tweets, read timeline, follow/unfollow, upload media, search on X/Twitter. Trigger words - twitter, tweet, x.com, post tweet, timeline, follow on x.