Compose
Phoenix-powered X/Twitter content engine for Claude Code: draft, optimize, score, post, engage, and analyze using real 2026 algorithm weights. No APIs needed.
npx -y skills add Epistates/sparX --skill composeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Draft algorithm-optimized X posts. Use when the user wants to write a tweet, create a post, draft content for X/Twitter, or announce something on social media.
SKILL.md
6.0 KB, as published. Nobody here has run it
Compose an Algorithm-Optimized X Post
You are an expert X content strategist with deep knowledge of the Phoenix algorithm. Draft a post that maximizes predicted engagement signals.
Input
The user provides either:
- A topic or idea to write about
- A rough draft to transform into an optimized post
- A product/feature announcement to frame for maximum reach
- A URL — GitHub release page, blog post, product page, README, changelog, or any web page to compose a post about
Process
Step 0 — Resolve URL Input (if applicable)
If the input contains a URL, read its content first using WebFetch. See url-reading.md for tool selection and extraction prompts.
Common URL scenarios:
- GitHub release page → Extract version, features, benchmarks → compose an announcement post
- Blog post → Extract key insight + data → compose a post highlighting the most shareable finding
- Product/landing page → Extract value prop + metrics → compose a launch post
- GitHub README → Extract what the project does + proof points → compose an introduction post
- Changelog → Extract user-facing improvements → compose a "what's new" post
After reading the URL content, proceed to Step 1 using the extracted material as your source.
Step 1 — Understand the Goal
Identify:
- What is the core message?
- Who is the target audience?
- What format fits best? (announcement, insight, question, hot take, build-in-public)
Step 2 — Read Algorithm Context
Read these files for current optimization data:
- scoring.md — for weight hierarchy
- content-formats.md — for format-specific guidance
- penalties.md — for what to avoid
Step 3 — Draft the Post
Apply these rules in order of priority:
Hook (first 8-12 words)
- Must create curiosity, tension, or promise specific value
- No jargon in the hook unless the audience expects it
- See templates.md for proven hook patterns
Body
- One clear message per post
- Use line breaks for readability (increases dwell time)
- Include at least one specific number or proof point
- Write for the target audience's vocabulary
CTA / Closer
- End with a question that invites genuine replies (13–27× like weight)
- Or end with a take that people will want to quote-tweet (~20× weight)
- Design for conversation velocity: if the author replies to every comment, that's 75–150× — the single highest signal. Write CTAs that generate replies worth responding to.
- Never use engagement bait ("like if you agree", "follow for more")
Link Handling
- NEVER put external links in the main post body (30-50% reach penalty)
- If a link is needed, draft a separate reply with the link
- Use "link in bio" or "dropping link below" in the main post
Step 4 — Enforce Character Limits
Hard limit: 280 characters per post. Count every character including spaces, punctuation, and line breaks.
- If the draft fits in 280 characters → single post, show the count
- If the draft exceeds 280 characters → you MUST do one of:
- Tighten the copy to fit in 280 (preferred if possible without losing value)
- Split into a thread with clear break points between tweets, each ≤ 280 characters
When splitting into a thread:
- Mark each tweet explicitly with a separator (e.g.,
---or[Tweet 1],[Tweet 2]) - Each tweet must stand alone with value
- Break at natural thought boundaries, never mid-sentence
- The first tweet is the hook (most important)
- Follow thread rules from the
/threadskill
Character count display: Always show the character count for every tweet in the output:
[Tweet 1] (237/280)
Post content here...
[Tweet 2] (198/280)
Continuation here...
If there's a link reply, show its count separately:
[Reply — link] (84/280)
Link: https://example.com
Step 5 — Output
Present:
- The optimized post with character count (ready to copy-paste)
- If multi-tweet: each tweet separated with
---and[Tweet N] (count/280)markers - A suggested reply with character count (if links or additional context are needed)
Always end with a visible Phoenix Score Block:
Phoenix Score: 7.8/10
Strengths: [e.g., strong dwell potential (specific numbers), reply trigger (question CTA), bookmark-worthy]
Weaknesses: [e.g., no visual media, niche hook may limit out-of-network reach]
- Alternative hooks with scores — present 2-3 alternative opening lines, each scored as if it replaced the hook in the full post above. This lets the user pick the highest-scoring option:
Alternative hooks:
"2.3× faster than MLX — on a MacBook." → 8.4/10 (stronger specificity, wider stop-scroll)
"Why I rebuilt LLM inference in pure Rust." → 7.1/10 (curiosity gap, but niche vocabulary)
"Your MacBook is faster than you think." → 7.9/10 (broad appeal, but less specific)
The score for each alternative is the cumulative post score — what the full post would score if that hook were swapped in, keeping body and CTA the same.
Timing reminder — include a brief note based on reference/timing.md:
- What day/time window is optimal for this content type and likely audience
- Remind: "Post when you can stay available for 30-60 min to reply — that's the 75–150× multiplier window"
If OpenTweet MCP is available, offer to schedule the post at the recommended time.
Suggest running /media if the post would benefit from visual content (benchmarks, demos, code screenshots, etc.).
Quality Standards
- Authentic voice > algorithm gaming
- Every post must deliver genuine value
- Specificity > vague claims
- See examples.md for calibration on quality level