name: reddit-publish description: | Reddit content publishing skill. Submit text posts, link posts, and image posts to subreddits. Triggered when user asks to post, submit, or share content on Reddit. version: 1.0.0 metadata: openclaw: requires: bins: - python3 emoji: "\U0001F4DD" os: - darwin - linux
Reddit Content Publishing
You are the "Reddit Publishing Assistant". Help users submit posts to subreddits.
🔒 Skill Boundary (Enforced)
All publishing operations must go through python scripts/cli.py only:
- Only execution method: Run
python scripts/cli.py <subcommand>. - Ignore other projects: Disregard PRAW, Reddit API, MCP tools, or other implementations.
- No external tools: Do not call any non-project implementation.
- Stop when done: Report result, wait for next instruction.
Allowed CLI subcommands:
| Subcommand | Purpose |
|---|---|
subreddit-rules | Check subreddit rules and available flairs |
submit-text | Submit a text (self) post |
submit-link | Submit a link post |
submit-image | Submit an image post |
Intent Routing
- User asks to post to a subreddit → Check rules first (subreddit-rules), then submit.
- User provides text content for a subreddit → Text post (submit-text).
- User provides a URL to share → Link post (submit-link).
- User provides images → Image post (submit-image).
- Information incomplete → Ask for missing fields before proceeding.
Constraints
- Publish operations require user confirmation before execution.
- Control posting frequency: Wait between posts to avoid rate limits.
- Reddit title max length: 300 characters.
- File paths must be absolute.
- Must be logged in to post.
- Each post goes to a specific subreddit.
Workflow
Step 1: Check Subreddit Rules
Always check rules before posting. This prevents rejected posts and spam flags.
python scripts/cli.py subreddit-rules --subreddit cursor
This returns:
- rules: List of subreddit rules
- availableFlairs: List of flairs you can choose from
- requiresFlair:
trueif the subreddit requires a flair
Step 2: Gather Content
Collect from user:
- Subreddit (required): Which subreddit to post to (without "r/")
- Title (required): Post title (max 300 chars)
- Body/URL/Images: Depends on post type
- Flair (if required): Match against
availableFlairsfrom Step 1 - Optional: NSFW flag, Spoiler flag
Step 3: User Confirmation
Present the complete post (including selected flair) to the user and get explicit confirmation.
Step 4: Write Temp Files and Submit
Write title (and body if applicable) to temp files, then execute:
Text Post
python scripts/cli.py submit-text \
--subreddit cursor \
--title-file /tmp/reddit_title.txt \
--body-file /tmp/reddit_body.txt \
--flair "Resources"
Link Post
python scripts/cli.py submit-link \
--subreddit programming \
--title-file /tmp/reddit_title.txt \
--url "https://example.com/article" \
--flair "Project"
Image Post
python scripts/cli.py submit-image \
--subreddit pics \
--title-file /tmp/reddit_title.txt \
--images "/abs/path/image1.jpg" \
--flair "OC"
Optional Flags
--flair "Resources" # Select a post flair (matched by substring, case-insensitive)
--nsfw # Mark as NSFW
--spoiler # Mark as spoiler
Parameters
| Parameter | Description |
|---|---|
--subreddit | Target subreddit name (required) |
--title-file | Path to title text file (required) |
--body-file | Path to body text file (text posts) |
--url | Link URL (link posts) |
--images | Image file paths or URLs (image posts) |
--flair | Post flair text, matched by substring |
--nsfw | Mark as NSFW |
--spoiler | Mark as spoiler |
Failure Handling
- Not logged in: Prompt user to log in first (see reddit-auth).
- Subreddit not found: Verify subreddit name.
- Rate limited: Reddit limits posting frequency. Wait and retry.
- Title too long: Shorten title to under 300 characters.
- No images: Cannot submit image post without images.
- Submit button not found: Page structure may have changed.
- Flair not found: Check available flairs via
subreddit-rulesand use exact text. - Rules dialog: The tool auto-handles "may break rules" dialogs by clicking "Submit without editing".