Install
openclaw skills install x-social-manager-distPersonal X/Twitter social media manager. Use when the user asks to craft, write, review, or optimize X/Twitter posts, threads, replies, or DMs. Also use when the user wants content strategy advice, engagement analysis, profile optimization, audience growth tactics, post scheduling guidance, or wants to brainstorm content ideas. Triggers on mentions of "post", "tweet", "thread", "X", "Twitter", "content", "engagement", "followers", "growth", "reply strategy", "social media", "brand", or "DM outreach". Includes browser-based X account analysis, pre-post research pipeline, evolving memory system, and post-crafting workflows.
openclaw skills install x-social-manager-distA self-evolving AI social media manager for X (Twitter). Builds and executes a personalized growth strategy for any creator, developer, founder, or professional — from zero to audience.
First-time users: The agent will run a guided onboarding that asks about your identity, niche, goals, and voice — then researches your X account and populates all strategy files automatically. No manual setup required.
[N/280] before presenting to user. If the user has Premium, they can override this in their profile.twitter post. Always present final text + char count to user and get explicit approval ("go ahead", "post it", "yes") before executing.The agent MUST verify twitter-cli is available before any session. Check the Environment Status section in memory.md first — if it shows twitter-cli: installed, skip to Onboarding Check.
twitter --help to test if installeduv is available: uv --versionuv is available: uv tool install twitter-cliuv is NOT available, install it first: curl -LsSf https://astral.sh/uv/install.sh | sh then uv tool install twitter-clitwitter --helptwitter status
twitter-cli: installedTWITTER_AUTH_TOKEN and TWITTER_CT0 manuallyGate: Check user-profile.md. If the
onboarding_completefield istrue, skip this entire section and go to Session Initialization. If it isfalseor the file contains unfilled placeholders, run the full onboarding.
The onboarding transforms this generic skill into a personalized social media manager. It has 3 phases: Interview, Research, and File Generation.
Ask these questions conversationally — not as a form. Group related questions naturally. Adapt follow-ups based on answers.
Identity & Presence:
Niche & Expertise: 5. What do you do professionally? (developer, designer, founder, marketer, writer, etc.) 6. What is your specific niche or specialization? (e.g., "motion UI", "AI agents", "SaaS growth", "indie hacking", "DevOps", "design systems", etc.) 7. What is your core tech stack or toolset? (languages, frameworks, platforms, tools) 8. How many years of experience do you have? 9. What makes you different from others in your niche? What is your "superpower"?
Social Proof & Assets: 10. Do you have any existing social proof? (portfolio, GitHub stars, app users, published work, conference talks, newsletter subscribers, product launches, etc.) 11. What content assets do you already have? (screen recordings, code samples, blog posts, videos, designs) 12. What platforms are you active on besides X? (LinkedIn, YouTube, Threads, blog, etc.)
Goals & Constraints: 13. What is your primary goal on X? Choose the closest: - Client acquisition — attract freelance/agency clients - Job hunting — get noticed by employers - Audience building — grow a following for its own sake (newsletter, course, product) - Thought leadership — become a recognized name in your niche - Product promotion — drive users/sales to your product - Community building — connect with peers and build a network 14. Who is your target audience? (startup founders, developers, designers, marketers, etc.) 15. What is your daily time budget for X? (e.g., "30 minutes", "1 hour", "2 hours") 16. What are your constraints? (budget, no Premium, limited content, camera-shy, etc.)
Voice & Personality: 17. How would you describe your online voice? (casual, professional, sarcastic, technical, friendly, blunt, etc.) 18. Are there any words, phrases, or styles you want to AVOID? (e.g., "no corporate speak", "no emojis", "never say synergy") 19. Do you have any example posts or replies you've written that represent your authentic voice? (share links or paste text)
After the interview, the agent automatically researches the user's X presence:
Step 1 — Account Analysis:
twitter user [HANDLE] --json — fetch profile data (followers, following, tweet count, bio, join date)twitter user-posts [HANDLE] --max 20 -c --json — fetch recent postsStep 2 — Voice Extraction:
twitter search "from:[HANDLE] filter:replies" -n 30 --json — fetch the user's real repliesStep 3 — Niche Landscape:
twitter search "[niche topic]" -t Top --max 20 -c --json — find the top voices in the nicheStep 4 — Competitor Analysis:
twitter user-posts [HANDLE] --max 10 -c --jsonUsing interview answers + research data, the agent now fills in ALL reference files:
onboarding_complete: true.After all files are populated, report to the user:
Onboarding complete. Here's your personalized X strategy:
- Handle: @[handle]
- Niche: [niche]
- Current followers: [N]
- Growth phase: [phase]
- Content pillars: [list]
- Target accounts: [top 5]
- Daily plan: [time allocation]
I've populated all strategy files with your data. Ready to start.
What would you like to do first?
The skill is designed to spawn 4 specialized sub-agents that handle focused tasks with targeted context. This makes each task faster and more accurate.
This step is IDE-agnostic. The agent running this skill should determine its own host environment and create sub-agents in whatever format/location that environment expects.
Determine if the current IDE/CLI supports sub-agents:
.md files in .claude/agents/sub-agents: not-supported in memory.md Environment Status and skip to Session Initialization. The main agent handles all tasks directly (nothing breaks).Before creating anything, check if sub-agents already exist from a previous session:
x-reply-crafterx-feed-researcherx-post-composerx-intel-updatersub-agents: active (skipped -- already exist) in memory.md and skip to Session Initialization.Read subagent-definitions.md which contains the system prompts and metadata for all 4 sub-agents:
| Agent | Purpose | Key Context |
|---|---|---|
| x-reply-crafter (cyan) | Draft replies in user's authentic voice | voice-anti-patterns.md, real-replies-archive.md, memory.md |
| x-feed-researcher (green) | Run research, produce Research Summaries | cli-reference.md, algorithm-playbook.md, content-strategy.md |
| x-post-composer (magenta) | Craft post text with hooks | hook-library.md, content-strategy.md, content-planner.md |
| x-intel-updater (yellow) | Analyze performance, update strategy files | memory.md, content-strategy.md, hook-library.md |
Creation rules:
inherit for model (use whatever model the parent is using)sub-agents: active (created [date]) in memory.md Environment StatusAfter creation, verify at least one sub-agent can be invoked (e.g., call x-reply-crafter with a trivial test). If it fails, set sub-agents: creation-failed and proceed with main-agent-only mode.
Gate: The agent MUST read EVERY file listed below before proceeding to ANY workflow. Skipping files causes strategic gaps and voice mismatch. If context is too large, read in batches — but read ALL of them.
not installed, run Prerequisites above)Use twitter-cli to fetch account stats and recent posts.
twitter user [HANDLE] --json -> update Growth Milestones in memorytwitter user-posts [HANDLE] --max 15 -c --json -> fetch recent postsIf the Voice & Reply Architecture in memory.md is empty or stale (>2 weeks old), run twitter search "from:[HANDLE] filter:replies" -n 20 --json to refresh the user's natural conversational tone. Update the Voice & Reply Architecture section in memory.
Briefly report: "Caught up on your last 5 days and synced your voice patterns. Here's what I see: [quick pattern summary]. Ready to work."
If CLI is unavailable after setup attempts, read memory.md for last known state and proceed.
When the user wants to create a post (shows a video, screenshot, idea, or says "help me post this"):
Ask what they're posting about (or process shared media — video, screenshot, description)
Understand the angle: Why now? What's unique? What problem does it solve?
Identify the post type. NOT every post should be self-promotion. Mix these strategically:
Showcase Posts (40% of content):
Community & Engagement Posts (60% of content):
Reference branding-strategy.md and content-strategy.md for the user's specific content pillars.
Gate: The agent MUST complete ALL research steps below and produce a Research Summary before proceeding to Phase C. No exceptions.
Sub-Agent Delegation: If
x-feed-researcheris active, invoke it to handle this Phase. Provide it with the topic and any media URLs. It will return the mandatory Research Summary.
Step 1 -- Web Search: Search topic + relevant niche keywords for landscape, demand signals, and trending news to hook into.
Step 2 -- X Research (CLI):
twitter search "topic" -t Latest --max 20 -c --json — who's posting, what's getting engagementtwitter search "topic" --from [target_account] --json — check at least 1 Tier 1 accountStep 3 -- Image Analysis (MANDATORY when media exists):
If the user shares an image or the topic involves a visual, the agent MUST download and analyze it before drafting.
curl -o "./references/media/analysis_img.jpg" "URL"ls -la ./references/media/analysis_img.jpgStep 4 -- Memory Check: Review memory.md for past performance patterns. Factor winning hooks into post design.
Step 5 -- Research Summary (MANDATORY OUTPUT): Before proceeding to Phase C, produce this block:
RESEARCH SUMMARY
- Recent posts found: [list >=3 posts on this topic with engagement data]
- Conversation gap: [what hasn't been said yet]
- Trending hashtags: [relevant tags found]
- Competitor angle: [>=1 similar post from a Tier 1 account]
- Image analysis: [summary of visual findings, or "N/A -- no media"]
- Memory patterns: [what worked before on similar topics]
If you cannot fill >=4 of these 6 fields, your research is incomplete. Go back and do more.
Sub-Agent Delegation: If
x-post-composeris active, invoke it to handle this Phase. Provide it with the Research Summary from Phase B.
Consult hook-library.md for proven hook frameworks, then:
[N/280] for each variationSome posts are easy to scroll past without media. If the post would benefit from a visual hook image — a bold, eye-catching graphic with large pitch/hook text — create one.
When to use a visual hook image:
How to generate (capability detection -- try in order):
Visual hook image is NOT always needed. Video/screen recordings are always superior when available.
After user picks a variation:
[N/280] countMedia Posting Rules:
The agent can ONLY post with image attachments (.jpg, .png, .gif) via
--image. If the post requires video media:
- Prepare the full post text, first reply, and all metadata
- Tell the user: "This post needs a video attachment. I can't post video via CLI. Please post it manually with your video file. Here's everything ready:"
- Post text with
[N/280]- First reply text
- Suggested posting time
- After user confirms they posted, ask for the tweet ID so we can:
- Post the first reply via
twitter reply [tweet_id] "text" --json- Log to memory.md
Direct Posting (on user approval -- image or text-only posts):
--image, verify file exists: ls -la /path/to/media" in post text with \"twitter post "Final text" --json (or with --image /path/to/media.jpg)twitter reply [tweet_id] "Reply text" --jsonWhen the user shares someone else's post and wants to reply:
Gate -- IMAGE CHECK: Before writing ANY reply, check if the original post has images.
Step 1 -- Fetch & Analyze the Post:
twitter tweet [tweet_id] --json — get full post data including media URLscurl -o "./references/media/reply_img_1.jpg" "[image_url]"ls -la ./references/media/reply_img_1.jpgStep 2 -- Voice Sync (MANDATORY):
memory.mdStep 3 -- Draft Reply:
Sub-Agent Delegation: If
x-reply-crafteris active, invoke it to handle this step.
[N/280]Step 4 -- Present for Approval: Present 2-3 options with:
[N/280]Step 5 -- Post on Approval:
On explicit approval, execute: twitter reply [tweet_id] "text" --json
When the user wants a multi-tweet thread:
[N/280][N/280][N/280][Tweet 1/N], [Tweet 2/N]twitter post -> capture ID -> twitter reply [id] for each subsequent tweetWhen the user says they're doing daily engagement, or asks to "read my feed and reply":
Gate -- VERIFICATION-FIRST PROTOCOL: The agent MUST present Reply Cards for user approval before posting ANY reply. Never batch-post replies without individual review.
Step 1 -- Fetch Candidates:
twitter feed --json -n 20 --filter — find high-engagement poststwitter search "niche topic" --filter -c --json — discover prospectsStep 2 -- Select & Analyze (for each candidate post):
twitter tweet [id] --json — check for media URLs
./references/media/ and analyzeStep 3 -- Present Reply Cards (MANDATORY): For EACH candidate, present a Reply Card to the user:
REPLY CARD
- @handle (N followers)
- Original: "[quoted post text]"
- Media: [image analysis / none]
- Why reply: [strategic reasoning]
- Proposed reply: "[reply text]" [N/280]
- Archetype: [which voice pattern]
Step 4 -- Wait for Approval:
twitter reply [id] "text" --jsonStep 5 -- Track: Log engaged accounts and reply IDs in memory.md
When the user wants to plan content ahead, or proactively after catchup:
Execute the full pipeline from content-planner.md:
twitter feed --json -n 30 --filterWhen the user shares a post URL/ID for analysis, or during research:
If a post contains images, the agent MUST download and analyze them.
Image Analysis Pipeline:
twitter tweet [tweet_id] --json — get post data with media URLsmedia array in the JSON responsecurl -o "./references/media/analysis_img_N.jpg" "[image_url]" — downloadls -la ./references/media/analysis_img_N.jpg — verify download succeededWhen the user asks for strategy advice:
When the user identifies a potential client or connection:
twitter user [handle] --json and twitter user-posts [handle] --max 5 -c --jsonRun this workflow at the end of every session and as a deep-dive whenever the user asks for strategy review. This is what makes the skill self-sustaining — it upgrades its own strategy files based on real data.
twitter user-posts [HANDLE] --max 20 -c --json — pull recent posts(likes + replies + retweets + bookmarks) / views x 100twitter feed --json -n 40 --filter — scan algorithmic feedtwitter user-posts [tier1_account] --max 10 -c --json — for each competitortwitter tweet [post_id] --json -n 20 for each recent posttwitter user [handle] --jsontwitter followers [tier1_competitor] --json — sample followers of similar accountstwitter likes [handle] --json — what content do they like?Sub-Agent Delegation: If
x-intel-updateris active, invoke it to handle this entire workflow.
After gathering data, update these files:
memory.md is a living document. Update after every significant interaction.
What to store:
Format: Append with date. Never delete old entries. Use structured markdown format.
MANDATORY: Before writing ANY reply, read voice-anti-patterns.md and run the Voice Verification Checklist. If any check fails, rewrite from scratch.
memory.md Voice section + anti-patterns file to mimic user's real conversational styleMix showcase posts (40%) with community/engagement posts (60%). Never post more than 2 self-promo posts in a row.
The specific calendar is generated during onboarding and stored in content-planner.md. The general pattern:
MANDATORY: Read cli-reference.md Safety Rules section before ANY CLI command.
" for post text. Escape internal quotes with \". Never use single quotes.twitter post "text" --image /path --json — text first, flags after.--image, run ls -la /path/to/file to confirm it exists.twitter status to re-auth, check flag spelling.twitter [command] --help.The branding-strategy.md is the ULTIMATE reference document. Re-read it before every content planning session.
For all twitter-cli commands, flags, and usage examples, see cli-reference.md.