Skills reddit-engagement
Create and execute robust Reddit engagement workflows (create post, add comment, upvote) using browser accessibility-tree semantics instead of brittle DOM ids/CSS selectors. Use when asked to automate Reddit actions with high success rate across UI changes, A/B tests, and localization differences; especially when reliability and intent-based element targeting are required.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/alvinperson/reddit-engagement" ~/.claude/skills/openclaw-skills-reddit-engagement && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/alvinperson/reddit-engagement" ~/.openclaw/skills/openclaw-skills-reddit-engagement && rm -rf "$T"
skills/alvinperson/reddit-engagement/SKILL.mdReddit Engagement
Execute Reddit actions by intent and semantics, not static selectors.
⚠️ Content Policy — Read Before Writing Anything
- Read
(workspace root) before composing any comment or post.PERSONA.md - Never fabricate personal stories — no invented family members, relationships, health events, or "I personally experienced..." narratives unless the fact is recorded in
.PERSONA.md - Use only: documented personal facts from
, opinion-based responses, or general observations that don't claim specific personal experience.PERSONA.md - After posting, log it in the "已使用的故事/内容记录" table in
to prevent contradictions across posts.PERSONA.md
Core Operating Rules
- Use accessibility snapshots (
withsnapshot
) before every critical step.refs="aria" - Target elements by role+label+context, never by fixed DOM id/class/XPath.
- Re-snapshot after each navigation, modal open/close, submit, or failure.
- Validate page state before action (logged-in, subreddit resolved, composer visible, button enabled).
- Require confirmation text for destructive/high-visibility actions when user did not explicitly pre-authorize immediate send.
Resource Index
| Resource | Location | Purpose |
|---|---|---|
| Post Strategy | | Content angles, anti-AI rules, subreddit cultures, engagement triggers |
| Comment Strategy | | (Reserved) Reply patterns, comment-specific tactics |
| Interaction Patterns | | UI automation playbooks (how to click/type/verify) |
| Sub Archives | | Core info for all subreddits (one file) |
| Persona Facts | (workspace root) | Authentic personal facts to use in content |
Subreddit Name Index
Pre-defined Archives (in post-strategy.md
)
post-strategy.mdThese subreddits have curated cultural profiles:
| Subreddit | Focus | Posting Bar |
|---|---|---|
| Idea validation, feedback | Medium — show research |
| SaaS building, metrics, growth | Medium-High — data expected |
| Founder experiences, support | Medium — authenticity valued |
| OpenClaw tool discussions | Low-Medium — technical |
Dynamic Archive System
For subreddits NOT listed above:
- Check for existing archive: Read
, find the sub sectionreferences/sub-archives.md - If not found: Execute
§0 (Dynamic Subreddit Analysis Framework)interaction-patterns.md - Append to file: Add new sub info to
using the template at bottomreferences/sub-archives.md - Use for content generation: Treat like pre-defined profile
Supported Subreddit Categories
| Category | Example Subs | Strategy |
|---|---|---|
| Startup/Business | r/Entrepreneur, r/smallbusiness, r/marketing | Use r/Startup_Ideas baseline |
| Technology | r/technology, r/programming, r/webdev | Use r/openclaw baseline |
| AI/ML | r/artificial, r/MachineLearning, r/LocalLLaMA | Technical + data-driven tone |
| Productivity | r/productivity, r/Notion, r/Obsidian | Workflow-focused, practical |
| General Discussion | r/CasualConversation, r/AskReddit | Casual, low bar |
Rule: If no archive exists in
sub-archives.md and category match is unclear → always run dynamic analysis (§0) before posting.
Workflow Router
Create Post
Trigger: user asks to publish in a subreddit.
Content Generation Flow:
-
Determine Input Type
- If user provides full content (title + body) → use as-is, skip strategy
- If user provides fuzzy request (e.g., "post about OpenClaw") → execute strategy flow below
-
Strategy Flow (for fuzzy requests) a. Identify Target Subreddit — extract from user request or ask b. Load Sub Profile — read
§1 for subreddit rules/tone c. Select Content Angle — readreferences/post-strategy.md
§3 for angle matching intent d. Load Persona Facts — read workspacereferences/post-strategy.md
for authentic personal facts e. Apply Anti-AI Rules — readPERSONA.md
§2 to avoid AI-sounding language f. Draft Content — combine sub profile + angle + persona facts + anti-AI rules g. Add Engagement Hook — readreferences/post-strategy.md
§4 for comment triggers h. Craft Title — readreferences/post-strategy.md
§1 for subreddit-specific title patternsreferences/post-strategy.md -
Confirmation
- Echo generated content to user for approval (unless user pre-authorized immediate send)
-
Publish
- Execute
§1 (Create Post workflow)references/interaction-patterns.md
- Execute
-
Log Usage
- Update
"已使用内容登记" table to prevent future contradictionsPERSONA.md
- Update
Flow Reference:
references/interaction-patterns.md §1
Create Comment
Trigger: user asks to reply to a post or comment.
Content Generation Flow:
-
Determine Input Type
- If user provides full comment text → use as-is
- If user provides fuzzy request (e.g., "comment on this post") → execute strategy flow below
-
Strategy Flow (for fuzzy requests) a. Read Target Post/Comment — understand context and existing discussion b. Check Subreddit Info
- Read
for this subreferences/sub-archives.md - If NOT found: Execute
§0 (Dynamic Subreddit Analysis Framework), then append sub info tointeraction-patterns.mdreferences/sub-archives.md - If found: Use existing info (tone, rules, restrictions)
c. Load Comment Strategy — read
(when available) or applyreferences/comment-strategy.md
Human-First rules d. Load Persona Facts — read workspacepost-strategy.md
for authentic personal facts e. Apply Anti-AI Rules — readPERSONA.md
(Word Razor, Two-Beat Flow, etc.) f. Draft Comment — ensure information increment, not just "+1"; match sub tone from step breferences/post-strategy.md
- Read
-
Confirmation
- Echo generated comment to user for approval (unless pre-authorized)
-
Publish
- Execute
§2 (Create Comment workflow)references/interaction-patterns.md
- Execute
-
Log Usage
- Update
"已使用内容登记" table if persona facts were usedPERSONA.md
- Update
Flow Reference:
references/interaction-patterns.md §2
Upvote
Trigger: user asks to like/upvote a post or comment.
Flow: Execute
references/interaction-patterns.md §3 (Upvote workflow)
No content generation needed.
Universal Reliability Loop
For each action step:
- Snapshot current tab with aria refs.
- Resolve target candidates by semantic cues (role, accessible name, nearby headings/text).
- Score candidates (exact intent match > synonym match > position-based guess).
- Execute one action.
- Verify outcome with independent evidence (state change, toast, button state, new content visible).
- If verification fails, rollback one step (or refresh context) and retry with next candidate.
Stop after 3 failed attempts and return a clear diagnostic with:
- last confirmed state
- failing intent
- top 2 alternate hypotheses
Semantic Targeting Standard
Prefer these signals (highest to lowest confidence):
- Accessible role + accessible name exact match (e.g., button "Post", "Comment", "Upvote").
- Accessible name synonym match (e.g., "Submit", "Reply", "Send").
- Relative context anchor (inside composer region; under post action row; near subreddit title).
- Visibility and enabled state checks.
Never rely on:
- hardcoded CSS selectors
- hardcoded DOM ids/classes
- absolute XPath
- static child index paths
Submission Safety Gates
Before clicking final submit:
- Echo target summary: subreddit/post URL/action/content preview.
- Ensure required fields are non-empty and within Reddit limits.
- Confirm account/session is authenticated.
- Confirm no blocking validation/errors are visible.
If explicit user request already includes immediate-send intent, submit directly. Otherwise ask one short confirmation.
Output Contract
After completion, return:
- Action performed
- Target (subreddit/post/comment)
- Result (
|success
|partial
)failed - Evidence (what changed in UI)
- If failed: next best recovery step
Fast Troubleshooting
- Login wall/captcha: pause and ask user to complete challenge, then resume from latest snapshot.
- Button exists but disabled: inspect missing required fields or rate limits.
- Multiple matching buttons: choose candidate within nearest semantic container (composer/action row).
- UI redesign: rely on role/name/context fallback chain from
.references/interaction-patterns.md