Skip to content
Back to skills

Compose

ASecurity

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.

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 26, 2026
content-marketingrustgogit

Works with

  • mcp

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add Epistates/sparX --skill compose --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Compose?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Compose
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/epistates-compose/badge)](https://www.skillsdirectory.com/skills/epistates-compose)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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

Files in this skill

  • SKILL.md6 KB
  • examples.md4.5 KB
  • templates.md2.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.