37 added, 17 removed. Audit A to A.
---
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
- 1. User provides text content for a subreddit โ **Text post** (submit-text).
- 2. User provides a URL to share โ **Link post** (submit-link).
- 3. User provides images โ **Image post** (submit-image).
- 4. Information incomplete โ Ask for missing fields before proceeding.
+ 1. User asks to post to a subreddit โ **Check rules first** (subreddit-rules), then submit.
+ 2. User provides text content for a subreddit โ **Text post** (submit-text).
+ 3. User provides a URL to share โ **Link post** (submit-link).
+ 4. User provides images โ **Image post** (submit-image).
+ 5. 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: Gather Content
+ ### Step 1: Check Subreddit Rules
+ **Always check rules before posting.** This prevents rejected posts and spam flags.
+
+ ```bash
+ python scripts/cli.py subreddit-rules --subreddit cursor
+ ```
+
+ This returns:
+ - **rules**: List of subreddit rules
+ - **availableFlairs**: List of flairs you can choose from
+ - **requiresFlair**: `true` if 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 `availableFlairs` from Step 1
- **Optional**: NSFW flag, Spoiler flag
- ### Step 2: User Confirmation
+ ### Step 3: User Confirmation
- Present the complete post to the user and get explicit confirmation before submitting.
+ Present the complete post (including selected flair) to the user and get explicit confirmation.
- ### Step 3: Write Temp Files and Submit
+ ### Step 4: Write Temp Files and Submit
Write title (and body if applicable) to temp files, then execute:
#### Text Post
```bash
python scripts/cli.py submit-text \
- --subreddit learnpython \
+ --subreddit cursor \
--title-file /tmp/reddit_title.txt \
- --body-file /tmp/reddit_body.txt
+ --body-file /tmp/reddit_body.txt \
+ --flair "Resources"
```
#### Link Post
```bash
python scripts/cli.py submit-link \
--subreddit programming \
--title-file /tmp/reddit_title.txt \
- --url "https://example.com/article"
+ --url "https://example.com/article" \
+ --flair "Project"
```
#### Image Post
```bash
python scripts/cli.py submit-image \
--subreddit pics \
--title-file /tmp/reddit_title.txt \
- --images "/abs/path/image1.jpg" "/abs/path/image2.png"
+ --images "/abs/path/image1.jpg" \
+ --flair "OC"
```
### Optional Flags
```bash
- # Mark as NSFW
- --nsfw
-
- # Mark as spoiler
- --spoiler
+ --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-rules` and use exact text.
+ - **Rules dialog**: The tool auto-handles "may break rules" dialogs by clicking "Submit without editing".