@jackwener/rdt-cli
Use rdt-cli for ALL Reddit operations — browsing feeds, reading posts, searching, viewing users, upvoting, saving, and subscribing. Invoke whenever the user requests any Reddit interaction.
| name | rdt-cli |
| description | Use rdt-cli for ALL Reddit operations — browsing feeds, reading posts, searching, viewing users, upvoting, saving, and subscribing. Invoke whenever the user requests any Reddit interaction. |
| author | jackwener |
| version | 0.4.0 |
| tags | reddit, rdt, social-media, cli |
rdt-cli — Reddit CLI Tool
Binary: rdt
Credentials: browser cookies (auto-extracted via browser-cookie3)
Setup
# Install (requires Python 3.10+)
uv tool install rdt-cli
# Or: pip install rdt-cli
# Upgrade
uv tool upgrade rdt-cli
Authentication
IMPORTANT FOR AGENTS: Before executing ANY rdt command that requires auth, check if credentials exist.
Step 0: Check if already authenticated
rdt status --json 2>/dev/null | jq -r '.data.authenticated' | grep -q true && echo "AUTH_OK" || echo "AUTH_NEEDED"
If AUTH_OK, skip to Command Reference.
If AUTH_NEEDED, proceed to Step 1.
Step 1: Guide user to authenticate
Ensure user is logged into reddit.com in a supported browser (Chrome, Firefox, Edge, Brave, Arc, Chromium, Opera, Vivaldi, Safari, LibreWolf). Then:
rdt login
Verify with:
rdt status
rdt whoami --json | jq '.data.name // .data._session.username'
Step 2: Handle common auth issues
| Symptom | Agent action |
|---|---|
No Reddit cookies found |
Guide user to login to reddit.com in browser |
Session expired |
Run rdt logout && rdt login |
database is locked |
Close browser, then retry |
Agent Defaults
All machine-readable output uses the envelope documented in SCHEMA.md.
Payloads live under .data.
- Non-TTY stdout → auto YAML
--json/--yaml→ explicit format--compact→ fewer fields (agent token-efficient)--output file.json→ save structured output to file- Rich output → stderr (safe for pipes:
rdt search X --json | jq .data) - Most read commands work without auth (public Reddit JSON API)
- Write actions (upvote, save, subscribe) require auth + built-in 1.5-4s delay
Command Reference
Browsing
| Command | Description | Example |
|---|---|---|
rdt feed |
Browse home feed (requires login) | rdt feed -n 10 --json |
rdt feed --subs-only |
Subscriptions-only feed (no algorithm, sorted by time) | rdt feed --subs-only -n 5 --json |
rdt popular |
Browse /r/popular | rdt popular -n 5 --json |
rdt all |
Browse /r/all | rdt all -n 10 --compact --json |
rdt sub <name> |
Browse a subreddit | rdt sub python -s top -t week |
rdt sub-info <name> |
View subreddit info | rdt sub-info rust --json |
rdt user <name> |
View user profile | rdt user spez --json |
rdt user-posts <name> |
View user's posts | rdt user-posts spez -n 5 --json |
rdt user-comments <name> |
View user's comments | rdt user-comments spez -n 5 --json |
rdt saved |
View your saved items | rdt saved -n 10 --json |
rdt upvoted |
View your upvoted posts | rdt upvoted -n 10 --json |
rdt open <id_or_index> |
Open post in browser | rdt open 3 |
Reading
| Command | Description | Example |
|---|---|---|
rdt read <post_id> |
Read a post + comments | rdt read 1abc123 --json |
rdt read <post_id> --expand-more |
Expand top-level more comments |
rdt read 1abc123 --expand-more --json |
rdt show <index> |
Read by short-index | rdt show 3 |
rdt show <index> --expand-more |
Expand more comments from cached result |
rdt show 3 --expand-more --json |
rdt whoami |
View your profile (karma, age) | rdt whoami --json |
Search & Export
| Command | Description | Example |
|---|---|---|
rdt search <query> |
Search posts | rdt search "python async" -s top -t year |
rdt search <query> -r <sub> |
Search in subreddit | rdt search "error" -r rust --json |
rdt search <query> -o f.json |
Search + save to file | rdt search "ML" -n 50 -o results.json |
rdt export <query> |
Export to CSV/JSON | rdt export "ML" -n 50 -o results.csv |
Interactions (require auth)
| Command | Description | Example |
|---|---|---|
rdt upvote <id_or_index> |
Upvote | rdt upvote 3 |
rdt upvote <id> --down |
Downvote | rdt upvote 3 --down |
rdt upvote <id> --undo |
Remove vote | rdt upvote 3 --undo |
rdt save <id_or_index> |
Save post | rdt save 3 |
rdt save <id> --undo |
Unsave | rdt save 3 --undo |
rdt subscribe <sub> |
Subscribe | rdt subscribe python |
rdt subscribe <sub> --undo |
Unsubscribe | rdt subscribe python --undo |
rdt comment <id> <text> |
Post a comment | rdt comment 3 "Great post!" |
Account
| Command | Description |
|---|---|
rdt login |
Extract cookies from browser |
rdt logout |
Clear cached cookies |
rdt status |
Check authentication status |
rdt whoami |
View detailed profile info |
Listing Options
All listing commands (feed, popular, all, sub, user-posts, user-comments, saved, upvoted, search) support:
| Flag | Description |
|---|---|
--json |
JSON output (with SCHEMA envelope) |
--yaml |
YAML output (with SCHEMA envelope) |
-o, --output FILE |
Save structured output to file |
--full-text |
Show full title without truncation |
-c, --compact |
Agent-friendly compact output (fewer fields) |
Feed-specific Options
| Flag | Description |
|---|---|
--subs-only |
Show only posts from subscribed subreddits (sorted by time, no algorithm) |
--max-subs N |
Max subscriptions to fetch (default: 20) |
Agent Workflow Examples
Browse → Read → Upvote pipeline
rdt sub python -s top -t week -n 5
rdt show 1 --expand-more
rdt upvote 1
Search → Export pipeline (structured)
rdt search "machine learning" -s top --compact --json | jq '.data'
rdt export "machine learning" -n 100 -o ml_posts.csv
Search → Save to file
rdt search "rust async" -n 50 -o results.json
rdt search "python tips" -n 20 --compact -o tips.json
User research
rdt user spez --json | jq '.data | {name, link_karma, comment_karma}'
rdt user-posts spez -n 10 --compact --json
rdt user-comments spez -n 10 --compact --json
Saved / Upvoted review
rdt saved -n 20 --compact --json
rdt upvoted -n 20 --compact --json
Subscriptions-only monitoring
rdt feed --subs-only -n 5 --compact --json
rdt feed --subs-only --max-subs 10 -o subs_feed.json
Subreddit discovery
rdt sub-info python --json | jq '.data | {subscribers, accounts_active}'
rdt sub python -s top -t month -n 5 --full-text
Sort Options
- Listing sort:
hot,new,top,rising,controversial,best - Search sort:
relevance,hot,top,new,comments - Time filter (for top/controversial):
hour,day,week,month,year,all - Comment sort:
best,top,new,controversial,old,qa
Error Codes
Structured error codes returned in the error.code field (see SCHEMA.md):
not_authenticated— cookies expired or missingrate_limited— too many requestsnot_found— subreddit/user/post does not existforbidden— private subreddit or blocked userapi_error— upstream Reddit API errorunknown_error— unexpected error
Limitations
- No DMs — cannot access private messages
- No live/streaming — live features not supported
- No media download — cannot download images/videos
- Single account — one set of cookies at a time
- Rate limited — built-in Gaussian jitter (~1s) between requests
- Public API only — uses .json suffix API, not OAuth endpoints
Anti-Detection Notes for Agents
- Do NOT parallelize requests — the built-in rate-limit delay is for account safety
- Write operation delay: 1.5-4s random delay after each write (upvote/save/subscribe/comment)
- Batch operations: add delays between CLI calls when doing bulk work
- Chrome 133 fingerprint: all requests use consistent browser identity
- Exponential backoff: 429/5xx errors are auto-retried with backoff
Safety Notes
- Do not ask users to share raw cookie values in chat logs
- Prefer browser cookie extraction over manual secret copy/paste
- If auth fails, ask the user to re-login via
rdt login - Built-in rate-limit delay protects accounts; do not bypass it
Loading...
Select a file to preview
Analyzing security...
Checking scan reports and verification data.
Bill of Materials
Everything this skill can do — files, network, commands, and more.