npx skills add ...
npx skills add acedatacloud/skills --skill reddit
Search subreddits, read rules, reply to threads, and submit posts (link or text) to Reddit using either official OAuth or your own Reddit login cookies. Use when the user mentions Reddit, posting to a subreddit, replying or commenting on a thread, submitting a link or self-post, or checking their Reddit profile / submissions.
npx skills add acedatacloud/skills --skill reddit
The connector injects exactly one of these credentials:
REDDIT_COOKIES: JSON cookie array captured by the ACE browser extension.
It includes reddit_session and grants full account access. Secret — never
echo, print, log or return it.REDDIT_TOKEN: official OAuth bearer token (identity read submit).The helper automatically prefers official OAuth when present and otherwise uses Cookie.
It sends Reddit's required descriptive User-Agent and never forwards cookies
outside reddit.com.
Bash calls do not share shell variables. Resolve the helper inside every fenced Bash invocation before using it:
If authentication fails, ask the user to reconnect at https://studio.acedata.cloud/console/connectors. Do not loop-retry a blocked or expired session.
comment verifies itself: when Reddit answers in a shape it cannot parse, it
looks the comment up via comments before reporting anything. If it still says
the write likely failed, re-check with comments yourself before resending.
search returns each hit's fullname (t3_…), which is what comment --parent
takes. subreddit-info returns the subreddit's rules — read them before
writing anything there.
--sort defaults to relevance. Reddit's new sort ignores keyword relevance
— it returns recent posts that often do not contain the query terms at all. Use
--sort new only to scan a specific subreddit's recent activity, never to find
threads by keyword.
--parent accepts a fullname (t3_… post, t1_… comment) or a reddit.com
permalink. Show the target thread and the exact reply text, then obtain
explicit confirmation. Without a trailing --confirm this is a dry run.
Posting is public. Always show the subreddit, final title and final body/URL,
then obtain explicit confirmation. Without a trailing --confirm, both write
commands are dry-runs and make no network request.
--confirm is honored only when it is the final argument. A title or body that
contains the text --confirm can never trigger a write.
REDDIT_COOKIES, REDDIT_TOKEN, reddit_session or the modhash.subreddit-info first. Account age, karma
and flair requirements can reject a post or comment; report the rejection
without exposing Reddit's raw authenticated response, which may contain
reflected credential material.r/test only
for a deliberate end-to-end validation.Reddit bans accounts for promotion patterns, not for individual links. When the user's goal is promoting their own product:
whoami karma and warn the user rather than
burning the account on a post that will be silently filtered.After you successfully publish a post or a comment and obtain the live result
URL, call the built-in publish_artifact tool ONCE so the user can track this
deliverable in My Outputs:
Use the real returned URL — never fabricate one. Call it once per published item,
only after delivery is confirmed; skip it (or use status="failed") if publishing failed.
See _shared/artifacts.md.
R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
[ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
python3 "$R" whoami
python3 "$R" submissions --limit 10
python3 "$R" comments --limit 10R="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
[ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
python3 "$R" search --query "suno api" --time week --limit 10
python3 "$R" search --query "image generation api" --subreddit SideProject
python3 "$R" subreddit-info --subreddit SideProjectR="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
[ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
python3 "$R" comment --parent t3_1r9yrtn --body-file reply.md
python3 "$R" comment --parent t3_1r9yrtn --body-file reply.md --confirmR="${SKILL_DIR:-}/scripts/reddit.py"; [ -f "$R" ] || R=$(find /tmp -maxdepth 8 -path '*/skills/*/reddit/scripts/reddit.py' -print -quit 2>/dev/null)
[ -f "$R" ] || { echo "reddit script not found (SKILL_DIR=$SKILL_DIR)" >&2; exit 1; }
# Text post: use a file for long Markdown.
python3 "$R" submit-text --subreddit test --title "My title" --text-file post.md
python3 "$R" submit-text --subreddit test --title "My title" --text-file post.md --confirm
# Link post.
python3 "$R" submit-link --subreddit test --title "My title" --url "https://example.com"
python3 "$R" submit-link --subreddit test --title "My title" --url "https://example.com" --confirmpublish_artifact(kind="message", channel="reddit", title="<title>", url="<the REAL returned URL>", status="delivered")