Skip to main content
This page is generated from the skill folders in the superx-agent repo, the same files the installed skill reads. Run a chain with the CLI or the MCP server. A goal-shaped recipe for every SuperX skill. Each is the same job the in-app skill of that name does, run from the CLI or from the hosted MCP server. Pick by goal, run the chain in order, hand the result to the person. Three rules hold in every skill, no exceptions:
  1. Drafts unless the person says otherwise. scheduled:create without --at is a draft and nothing publishes.
  2. Nothing here sends a reply or a DM. Reply drafts are text a person posts. dm:campaign enqueues; the SuperX app sends.
  3. posts:publish and articles:publish are immediate and irreversible. Confirm the exact text with the person first, and note that posts:publish REQUIRES --idempotency-key so a retry cannot post twice.
--account <account-id> acts on a linked account (superx accounts lists the ids). It is shown once, in Weekly Growth Recap, and applies the same way to the account-scoped commands: the posts, scheduled, replies, contacts, lists, engage, signals, dm, context, queue and articles families, plus the dataset commands that WRITE for an account (datasets:collect, datasets:refine, datasets:research, datasets:outreach-drafts, datasets:add-to-list). Some commands are owner-scoped and the CLI is strict, so passing --account to one is an error, not a no-op. Nothing about them is per-X-account: the live lookups x:post, x:replies, x:user and x:user-posts, the inspiration searches inspiration:search and inspiration:media, and the dataset reads datasets:list, datasets:get, datasets:rows and datasets:export. A few id-addressed subcommands inside the account families are owner-scoped for the same reason (the id already names the account), among them articles:publish, scheduled:delete and lists:remove-member. When a chain here does not show --account, that is deliberate; superx <command> --help is the check. Accounts other people shared with you are read-only. Ids in angle brackets are placeholders you fill from the previous step’s JSON.

Grow & Plan

Weekly Growth Recap

Your week in review: follower change, the posts that worked, new leads, one pattern to repeat and one focus for next week.
There is no recap command: write the recap yourself from those four responses. MCP: get_account_overview -> get_post_analytics -> get_signal_leads -> get_audience_replies Stops at: the recap text in chat. Reads only, no AI credits.

Growth Plan Builder

A multi-week plan tied to the account’s real numbers: cadence, a reply target, and the format to repeat.
Read the growth strategy guide (references/growth-strategy.md) before writing the plan: the numbers say what happened, the strategy guide says what to do about it. MCP: get_account_overview -> get_post_analytics -> get_my_replies -> get_queue_settings Stops at: the written plan. Reads only, no AI credits. Nothing is scheduled by this skill.

Cadence & Queue Audit

Gaps and pile-ups in the queue, a cadence verdict, and the reschedules to make.
--at on its own never promotes a draft: add --status scheduled for that. The audit never deletes posts. MCP: get_queue_settings -> get_scheduled_posts -> get_post_analytics -> update_scheduled_post Stops at: the proposed moves, applied one at a time after the person agrees. Reads and one write, no AI credits.

Find Your Story

The story people follow this account for, laid out as an arc, plus a pinned-post draft and two posts that continue it.
Read the bio and pinned_tweet_id from x:user, then x:post on that id only if there is one. Write the arc as four labelled lines, each one sentence grounded in a real post or the bio: Setup, Stakes, Conflict, and Resolution (or Where it stands, when the story is still open). A line you cannot ground is a question to ask, never a guess. When the account has no posts, only a few, or posts with no personal arc, interview instead: ONE question per reply (what changed or what they left, what they are chasing and by when, what is in the way, what happens if it fails), then build the arc from the answers. posts:list empty means nothing is synced yet, so fall back to x:user-posts <handle> --no-reposts --limit 20. Never invent events the posts or the answers do not contain. MCP: lookup_x_user -> lookup_x_post -> get_post_analytics -> draft_post Stops at: the arc plus three drafts, one to pin and two that continue the story, for the person to pick from. The lookups draw on the shared 300-a-day x:* allowance; 3 AI credits per draft written.

Content & Posting

Daily Post Ideas

Two or three drafts for today, written in the account’s voice and ready to schedule.
posts:draft saves nothing. Show the drafts, let the person pick and edit, then pass the final wording to scheduled:create. MCP: get_scheduled_posts -> get_post_analytics -> draft_post -> schedule_post Stops at: a draft in the SuperX app for the person to review. Costs 3 AI credits per draft written, so ask how many they want.

Viral Format Remix

Proven hooks and structures from a library of 50M+ high-performing posts, rewritten in the account’s voice.
--mirror copies the SHAPE of a proven post, not its words. Pick a reference with room for the account’s own facts. MCP: find_inspiration -> draft_post -> schedule_post Stops at: reference posts plus drafts, for the person to pick from. 3 AI credits per draft written. High-performing posts in the account’s niche from the last 48 hours, with angles to take.
Run it once per topic phrase rather than sweeping the whole niche. MCP: find_inspiration Stops at: the posts and the suggested angles in chat. Reads only, no AI credits.

Thread Builder

An idea or rough notes turned into a thread of up to 25 parts, ready to schedule.
Max 25 parts and 25,000 characters in total. Repeat --part in posting order. MCP: draft_post -> schedule_post Stops at: a thread draft in the app. 3 AI credits per draft written.

Week of Posts

A week of varied drafts, spread across the week, one approval per post.
Read the queue first so the new times land on the account’s real slots instead of on top of what is already there. Reuse the same --idempotency-key on a retry. MCP: get_post_analytics -> get_queue_settings -> draft_post -> schedule_post -> get_scheduled_posts Stops at: a queued week the person can still edit. 3 AI credits per draft written.

Repurpose a Winner

The account’s best post, reworked into fresh angles.
Standalone posts only. --closeness 0 keeps just the idea, 100 stays very close to the original wording. MCP: get_post_analytics -> remix_post -> schedule_post Stops at: remixed text the person approves before anything is saved. A remix typically costs 2 AI credits (measured).

Queue Reshuffle

Move and rewrite scheduled posts by asking, up to 500 in one transaction.
bulk-retime only touches QUEUED posts and answers with counts, so compare against scheduled:list rather than assuming every id moved. scheduled:update --text without --media drops the post’s images: re-list the current object_keys to keep them. MCP: get_scheduled_posts -> bulk_retime_scheduled_posts -> update_scheduled_post Stops at: the retimed queue, one confirmation per change. No AI credits.

Worker Output Review

The posts a Worker wrote while the person was away, triaged: save the good ones, queue one, clear the rest.
Workers are created, edited and RUN in the SuperX app: this chain only reads what they produced and acts on it. The text is saved exactly as the Worker wrote it, so show each suggestion to the person and let them pick before you save or queue anything. To change the wording, run it through posts:remix and save your version with scheduled:create, then dismiss the original. A suggestion can only be saved once, so a second draft or schedule call on the same id is a 400. MCP: list_workers -> list_worker_suggestions -> draft_worker_suggestion / schedule_worker_suggestion / dismiss_worker_suggestion -> get_scheduled_posts Stops at: the saved drafts and the queued post, for the person to edit. Reads and the three actions cost no AI credits.

Viral Score Loop

Score a draft against the account’s own recent posts, rewrite one thing at a time, rescore, and stop when the score stops rising.
Read score, helped, hurt and warnings from each result. Rewrite ONE thing per round, keyed on the top hurt item, and keep the person’s facts, claims and voice; never add a request for replies, follows, links or DMs, never pad with hashtags or emoji, and pass the same media flags every round. Stop when a rewrite introduces a warning (go back to the last clean version and say which warning fired), when the score has not risen for two rounds in a row, or after six scored versions. If the first score already warns, name it and offer one rewrite that removes the ask, then score that once. The score is the chance the post beats the account’s own normal post, so say “72 means it beats your usual post about 72 times in 100”, never a reach or like count; the likes and replies multiples are relative to the account’s median post, and reposts+quotes and views are low confidence, so never chase them. MCP: predict_viral_score (repeat per version) -> schedule_post only when the person asks Stops at: a table of every version with its score and what changed, plus the best version, for the person to pick. Nothing is posted. Most scores charge no credits, one in ten charges 1, and the first score for an account charges 1 more while its baseline is read.

Replies & Engagement

Reply Sprint

The replies the account’s posts got, each with a ready-to-post draft.
MCP: get_audience_replies -> draft_reply Stops at: reply TEXT. The person posts the reply: nothing in the CLI, the API or MCP posts a reply to X. Each draft typically costs 2 AI credits (measured).

Worth a Reply

Read a topic the person cares about and hand back the posts worth replying to today, each with the angle a reply could take.
Read lane, pct, kind and answers from every post. Present the read lane first, ordered by answers.r_reply_room (how much room a knowledgeable reader has to add something), and order ONLY inside that lane: one line per post with its url, its kind, one line on why it is worth a reply built from that post’s own answers (r_specific says it names something concrete, r_new says it is not the usual take, r_reply_room says there is something left to add), and one line on the angle a reply could take, drawn from the post’s text. Then the unsure lane as short one-liners under a Skim heading. Leave the pass lane out entirely unless the person asks what was dropped, and then say how many and why in one sentence. Quote a post’s own answers rather than inventing a reason, and never claim a post has a given like count from the search floor. pct is how CLEAR the call was, not how good the post is: on read and pass it runs 50 to 99, so a pass at 99 means confidently not worth the time, and only on unsure is it the raw worth-reading score. Say the lane with the number, never rank posts by pct across lanes. What is judged is the TEXT of a post and the model never sees who wrote it, so report it as a call on the writing and never as a rating of a person or an account. The search asks for original posts, English only, with a floor of 30 likes, and returns no replies or reposts, so a small or brand-new topic can come back empty, which is an honest answer rather than a failure. MCP: triage_posts -> draft_reply only when the person picks a post and says what they want to say Stops at: a reply list, in chat, for the person to pick from. It drafts nothing until they choose a post, and nothing is ever sent. A run costs a flat 2 credits and spends 1 live X lookup for a single-word topic or 2 for a multi-word one, out of the account’s daily allowance.

Reply to Any Post

Any post’s context, what its top replies already said, and one strong reply draft.
x:replies is a sample of the best-liked direct replies, not every reply, and it does not exclude the author’s own. MCP: lookup_x_post -> get_x_post_replies -> draft_reply Stops at: reply TEXT. The person posts the reply. The lookups draw on the shared 300-a-day x:* allowance: x:replies spends 3 enrichment units and moves that daily counter once per page it fetches, up to 3. A reply draft named by --post spends one more lookup, plus typically 2 AI credits (measured).

My Replies Report

Which of the account’s replies actually earned attention, and the pattern behind them.
Page-one rows can carry metrics_pending: replies sent from the app in the last 4 hours have no numbers yet, so leave them out of the ranking. MCP: get_my_replies Stops at: the ranked list plus a pattern read. Reads only, no AI credits.

Who Is This Person?

A fast read on a public account, plus the history the SuperX account already has with them.
contacts:get covers known contacts only: engagers, contact-list members and scored leads. A 404 there means the person is not one of them yet, not that the lookup failed. MCP: lookup_x_user -> get_x_user_posts -> get_contact -> get_contact_history Stops at: the profile read in chat. Reads only, on the shared 300-a-day x:* allowance.

Leads & Prospecting

Your Warmest Leads

The people already engaging most, ranked, with who to follow up with first.
Covers a rolling 90 days. MCP: get_top_contacts -> get_contact_history Stops at: the ranked list plus a suggested order. Reads only, no AI credits.

Instant Lead Hunt

A live search of X right now for people matching the audience described, scored, saving nothing.
The search creates no agent and stores no leads, so keep what the person needs from that one response. --offer is the single biggest lever on quality: give it whenever a product or company is named and the search plans up to 10 buyer-side query angles from it instead of running the keywords verbatim. Write --keywords as 2-5 short seed angles of how the BUYER talks (a symptom, a tool they already pay for, their jargon), never the product’s own name. --max-age-days is the recency window (1-90, default 30): 7 for a pain point worth catching while it is fresh. MCP: suggest_keywords -> search_leads Stops at: up to 30 scored leads in chat. Costs at least 1 AI credit plus one of the plan’s daily lead searches, and draws on a fair-use ceiling shared by every SuperX account. Takes up to a minute.

Standing Lead Agent

An agent that keeps finding leads while the person is away.
Agent creation returns the agent, not leads: they arrive over the following minutes and days. Read warnings before telling the person what the agent watches, and omit --list-id only if you are happy with an auto-created Leads: ... contact list. MCP: expand_icp -> suggest_keywords -> create_signal_agent -> list_signal_agents -> get_signal_leads Stops at: the agent proposal, created only after the person approves it. The helpers are free; the agent itself costs nothing to set up. Editing or pausing later happens in Signals or with signals:update-agent.

Lead Review

The leads the agents found, prioritized, with the top few activity-checked.
The feedback id is the numeric LEAD id, not an X user id, and it trains the scorer: ask the person for the verdict rather than inferring one. MCP: list_signal_agents -> get_signal_leads -> get_x_user_posts -> set_lead_feedback Stops at: the prioritized list plus recorded verdicts. Reads plus one small write; the activity check spends the shared 300-a-day x:* allowance.

Outreach & DMs

Warm Outreach Pipeline

Research a list, get one personalized message per person, and queue them only after the person approves every message.
--handles, --list, --agent and --dataset are alternative sources for the research step: give exactly one. contacts:list returns people, not a list id, so its output feeds --handles through the jq above; --list takes a contact-list id from lists:list instead, which is the other way into this skill. Both cap at 25 profiles. Build recipients.json from the dataset rows as [{"x_user_id":"...","handle":"...","name":"...","message":"..."}], one entry per person, each carrying its own approved message. Ask the person for the --format; never invent one. MCP: get_top_contacts -> research_profiles -> draft_outreach_dms -> get_dataset_rows -> get_dm_limits -> queue_dm_campaign -> get_dm_campaign Stops at: a queued campaign, not delivered messages. dm:campaign is an ENQUEUE: the SuperX app sends the messages later, within the account’s daily and monthly DM limits, so report counts and never say anything was sent. dm:campaign-status and dm:queue show what actually went out; dm:cancel cancels the unsent ones. Research costs 1 AI credit per profile researched, max 100 recipients per campaign, and the person is responsible for these messages under X’s automation rules.

Profile Research Briefs

Structured briefs on a list of people, exportable as CSV.
Over 5 profiles the run goes to the background, so never quote a brief count from a collecting result: pass --wait or poll datasets:get. MCP: research_profiles -> get_dataset -> get_dataset_rows Stops at: the briefs in chat plus a CSV on disk. Costs 1 AI credit per profile ACTUALLY researched (unresolved handles are refunded), max 25 a run, plus one of the plan’s daily research runs. CSV export is CLI only; XLSX stays in the SuperX app.

Reply-to-DM Campaign

DM the people who replied to one of the account’s posts.
Build recipients.json from datasets:rows in the same shape as Warm Outreach Pipeline, [{"x_user_id":"...","handle":"...","name":"...","message":"..."}], except that here --message carries the shared wording and only x_user_id is required per row; a row’s own message overrides the shared one. [name], [first] and [handle] are filled per recipient. People messaged in the last 24 hours are skipped and counted in duplicates, and the account never messages itself. MCP: collect_audience -> refine_dataset -> get_dataset_rows -> get_dm_limits -> queue_dm_campaign -> get_dm_campaign Stops at: a queued campaign, not delivered messages. The enqueue rule is the same one as Warm Outreach Pipeline: the SuperX app sends, nothing here does, and the response is counts. Max 100 per campaign, 10 dataset ops a day, no AI credits on the DM side. Confirm the recipient list and the exact wording with the person first.

DM-Ready Audience Builder

A clean, DM-able audience built from any post or public X list, with a path into a contact list.
--source also takes quoters, reposters and list_members (with a public X list URL as --target). Adding to a list dedupes by person and skips rows with no usable X account id, so added + duplicates can be lower than the row count. MCP: collect_audience -> get_dataset -> create_contact_list -> add_dataset_to_contact_list Stops at: a filtered dataset and, if the person wants it, a contact list. Costs one of 10 collections a day shared with the SuperX app. No AI credits.

Audience & Data

Audience Export

Everyone who engaged a post, as a spreadsheet, no filters.
MCP: collect_audience -> get_dataset Stops at: a CSV file on disk, up to 1000 rows. CSV only: there is no export tool on MCP and XLSX stays in the SuperX app, so send the person there when they need the spreadsheet format. Costs one of 10 collections a day. No AI credits.

Sentiment Slice

Keep only the people who said the thing you are looking for.
The source dataset is untouched. Only datasets whose rows carry text (repliers, quoters) can be refined. Rows the classifier cannot judge are KEPT and counted as unclear, so report the unclear count honestly. MCP: list_datasets -> refine_dataset -> get_dataset_rows Stops at: the new dataset with its matched and unclear counts. A refinement creates a dataset, so it spends one of the same 10 collections a day, plus a small AI cost. Ask before running it.

My Content Export

The account’s own posts or replies, as a spreadsheet.
--source my_replies does the same for replies. Small exports finish instantly. MCP: collect_audience -> get_dataset Stops at: a CSV file on disk. CSV only, same as Audience Export: XLSX is app-only. Costs one of 10 collections a day. No AI credits.

Analytics & Insights

Post Post-Mortem

Why one post overperformed or flopped, measured against the account’s own baseline.
The third call is optional: use it only when the person names a peer account to compare against. MCP: get_post_analytics -> get_account_overview -> get_x_user_posts Stops at: the explanation in chat. Reads only. The live lookup draws on the shared 300-a-day allowance for x:*.

Top Performers Breakdown

The ranked winners, the shape they share, and what to write more of.
MCP: get_post_analytics -> get_account_overview Stops at: the pattern read in chat. Reads only, no AI credits.

Rules & Setup

Teach SuperX Your Rules

Standing rules the AI follows on every drafting surface.
Saving REPLACES the whole rule set, capped at 500 characters, so read the current rules first and send them back plus the new one. These settings steer all future AI output on the account: confirm the final wording before saving. MCP: get_context -> update_context Stops at: the updated rule set, read back so the person can see exactly what is stored. Free, no AI credits.