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.
Scanned 5/27/2026
Install via CLI
openskills install Epistates/sparX---
name: compose
description: 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.
argument-hint: "[topic or rough draft]"
---
# 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](../../../reference/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](../../../reference/scoring.md) — for weight hierarchy
- [content-formats.md](../../../reference/content-formats.md) — for format-specific guidance
- [penalties.md](../../../reference/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](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:
1. **Tighten the copy** to fit in 280 (preferred if possible without losing value)
2. **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 `/thread` skill
**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:
1. The optimized post with character count (ready to copy-paste)
2. If multi-tweet: each tweet separated with `---` and `[Tweet N] (count/280)` markers
3. 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]
```
4. **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](examples.md) for calibration on quality level
No comments yet. Be the first to comment!