Install
openclaw skills install twitter-account-operationsOperating doctrine for X/Twitter account automation — stable Chrome sessions, role separation (post / engage / stealth), human-like interaction, careful posting, reply discipline, recovery patterns. Use this for any scheduled X activity (cron, agent, recurring task) where account safety and long-term reputation matter more than raw output.
openclaw skills install twitter-account-operationsThis skill is the operating doctrine for every X/Twitter automation run on a brand, professional or personal account.
The goal is not to click fast. The goal is to operate Chrome like a careful human operator: stable browser, correct context, useful action, no spam, no reputational risk.
Drop-in for any niche (legal, medical, software, finance, creator, ecommerce). Replace the placeholders in section 0 with your own values.
Before running anything, fill these placeholders in your local copy or your agent's memory:
| Placeholder | Example | Your value |
|---|---|---|
<BRAND_NAME> | "Acme Studio" | — |
<BRAND_DOMAIN> | "acme.studio" | — |
<X_HANDLE> | "@AcmeStudio" | — |
<BROWSER_PROFILE> | "x-live" | — |
<BROWSER_PORT> | "9222" | — |
<NICHE_KEYWORDS> | "retrait permis OR contester amende" | — |
<WORKSPACE_DIR> | "~/.openclaw/workspace/twitter-<brand>" | — |
All shell snippets below assume an OpenClaw browser CLI bound by CDP, but the doctrine works with any browser-automation stack (Playwright, Puppeteer, Chrome MCP). Swap the CLI calls for your own.
If your agent reads config from YAML, drop this in <WORKSPACE_DIR>/config.yaml:
brand:
name: <BRAND_NAME>
domain: <BRAND_DOMAIN>
x:
handle: <X_HANDLE> # e.g. "@AcmeStudio"
browser_profile: <BROWSER_PROFILE> # e.g. "x-live"
browser_port: <BROWSER_PORT> # e.g. 9222
discovery:
niche_keywords: <NICHE_KEYWORDS> # e.g. "retrait permis OR contester amende"
workspace:
dir: <WORKSPACE_DIR> # e.g. "~/.openclaw/workspace/twitter-acme"
alerts:
channel: telegram | slack | discord
webhook: <YOUR_WEBHOOK_URL>
schedule:
timezone: Europe/Paris # everything else is relative to this
windows:
morning_post: "09:00"
noon_post: "12:30"
evening_post: "18:00"
reply_passes: ["11:00", "15:00", "19:30"]
metrics_recap: "21:30"
The skill is markdown — it works wherever an agent reads SKILL.md:
| Stack | Skill install path |
|---|---|
| Claude Code | ~/.claude/skills/twitter-account-operations/ |
| OpenClaw | ~/.openclaw/skills/twitter-account-operations/ |
| ClawHub-published | one-click install via clawhub.ai |
| Cursor / Copilot CLI | drop SKILL.md into your project's .cursorrules or AGENTS.md |
| Any LLM agent reading markdown rules | concatenate SKILL.md into your system prompt |
The active browser profile is:
<BROWSER_PROFILE> (CDP direct profile attached to http://127.0.0.1:<BROWSER_PORT>)Use it through the OpenClaw browser CLI when the cron has no browser tool:
openclaw browser --browser-profile <BROWSER_PROFILE> status
openclaw browser --browser-profile <BROWSER_PROFILE> tabs
openclaw browser --browser-profile <BROWSER_PROFILE> open https://x.com/notifications
openclaw browser --browser-profile <BROWSER_PROFILE> snapshot --limit 160
openclaw browser --browser-profile <BROWSER_PROFILE> click <ref>
openclaw browser --browser-profile <BROWSER_PROFILE> type <ref> "text"
openclaw browser --browser-profile <BROWSER_PROFILE> press Enter
The profiles tw-post, tw-engage, and tw-stealth below are operating roles, not necessarily separate physical profiles. With one physical profile, keep the same separation by workflow, tab discipline, and resting page.
tw-postMain account cockpit. Use for direct account action.
Use for:
Default page: https://x.com/notifications
Mental model: act as the account. Protect it. Do not clutter it.
tw-engageSearch and discovery radar. Use to find what deserves action.
Use for:
Default page:
https://x.com/search?q=<NICHE_KEYWORDS_URL_ENCODED>&f=live
Mental model: discover, qualify, decide. Do not post impulsively from discovery.
tw-stealthQuiet maintenance bay. Use for low-noise maintenance.
Use for:
Default page: https://x.com/home
Mental model: maintain quietly. No noisy engagement.
tw-post = act as the accounttw-engage = discover what to react totw-stealth = maintain quietlyNever collapse all workflows into chaotic browsing.
Do not begin from a random existing tab.
Examples:
https://x.com/notificationsAfter opening a page:
Never click or type into half-loaded pages.
First real action is observation.
Before any public action:
Click once. Then verify.
After each click, confirm:
No stacked clicks. No impatient double-clicking.
Before submitting:
Each tab needs one purpose.
When done:
Safe resting page: https://x.com/notifications
Never publish just because a cron fired.
If the slot is weak:
Quality protects the brand.
Role: no browser required first. Use tw-engage only if checking live topics.
Goal: plan a credible week of content.
Interaction style:
Avoid:
Role: tw-post
First page: https://x.com/notifications
Goal: detect mentions, questions, useful replies, high-signal followers.
Interaction style:
Avoid:
Role: tw-engage
First page: live search URL with brand keywords.
Goal: identify qualified public conversations.
Interaction style:
Avoid:
tw-post for casual discovery unless only one physical profile existsRole: discovery in tw-engage, public action in tw-post.
First page: candidate conversation or live search.
Goal: send at most 2 useful replies per run.
Interaction style:
Avoid:
Role: tw-post
First page: clean composer flow.
Goal: publish one practical, answer-first post.
Interaction style:
Avoid:
Role: tw-post
Goal: publish a sober news / myth-vs-reality / threshold / deadline post.
Interaction style:
Avoid:
Role: tw-post
Goal: publish a practical case study, common mistake, or field-specific tip.
Interaction style:
Avoid:
Role: tw-post
First page: clean composer/thread flow.
Goal: publish one pedagogical thread from existing site content.
Interaction style:
Avoid:
Role: tw-post
Goal: publish a short, sober, anonymized post if a new result page exists on <BRAND_DOMAIN>.
Interaction style:
Avoid:
Role: tw-post if metrics require profile or analytics.
First page: profile, then analytics only if usable.
Goal: capture real daily observations and recommendations.
Interaction style:
Avoid:
tw-post / account cockpit unstableTreat as critical.
Do not post, reply, DM, like, or follow until stable.
Recovery:
Never:
Choose the correct role. Open the correct page. Let the UI load. Read before acting. Click once. Verify the result. Recover cleanly when broken. Leave the browser cleaner than you found it.
tw-post = act as the account.
tw-engage = discover what to react to.
tw-stealth = maintain quietly.
Stability matters more than speed.
Before enabling any cron, run through this checklist:
http://127.0.0.1:<BROWSER_PORT> and logged in.https://x.com/notifications from your profile renders the feed (= session OK).<WORKSPACE_DIR>/memory/ directory exists with the memory files used by your crons (post log, reply log, ideas, learnings, recaps).A bash one-liner to init the memory files:
mkdir -p "<WORKSPACE_DIR>/memory" && cd "$_" && touch x-recaps.md x-post-log.md x-reply-log.md x-ideas.md x-learnings.md x-metrics-log.md
(The GitHub repo ships an init-memory.sh script that does the same interactively.)
These are skeletons, not finished replies — fill the brackets, then humanize.
[Direct answer in 1 sentence, no hedging].
[1-2 sentences of reasoning or the underlying rule].
[Optional: 1 concrete next step the OP can take themselves].
That's a tough spot.
[1 sentence that validates without overclaiming "I know what you're going through"].
The general framework here is [...]. A specialist in [...] can review your specific situation.
Small precision: [the corrected fact, sourced if possible].
[Why it matters in 1 sentence].
(Not blaming OP — common confusion).
[bracket] placeholders still in it (final read-through is mandatory).Q: Do I need OpenClaw to use this skill? A: No. OpenClaw browser CLI is the example stack — the doctrine works with Playwright, Puppeteer, Chrome MCP, or any CDP-capable tool. Swap the CLI calls.
Q: Can I use this skill for multiple X accounts?
A: Yes — clone the workspace dir per account. Each account gets its own memory/ and its own browser profile. Use a different <BROWSER_PORT> per account so they don't collide.
Q: How does this interact with X API rate limits? A: The skill is browser-driven, not API-driven — you're not consuming X API quota. You are, however, subject to X's behavioral throttling on the UI side, which is exactly why the doctrine caps actions per role and per minute.
Q: Should I post threads or single tweets? A: Default to single tweets. Run a thread once per week max (Tue or Fri) when you have actual depth worth a thread. Threads-for-the-sake-of-threads get under-engaged.
Q: What about X Premium / Blue / verification? A: Orthogonal. The doctrine doesn't change. Verified accounts get slightly more leeway on rate limits but also more visibility for any misstep — so the discipline matters more, not less.
Q: What if X bans/suspends my account?
A: Stop everything. Do not appeal automatically. Manual review only. Document the suspension in x-learnings.md with the exact last 5 actions before suspension.