Create viral X posts (short tweets, threads, replies) based on user's persona and post patterns.
First-Time Setup
Check user profile before creating content:
- Read
references/user-profile.md - If
initialized: falseor file doesn't exist → Run onboarding - If
initialized: true→ Proceed to content creation
Onboarding Questions
Ask user these questions using AskUserQuestion tool:
- Account Positioning (Niche): What does your X account mainly share?
- Options: AI/Tech, Entrepreneurship/Business, Personal Growth, Investing & Finance, Other
-
Target Audience: Who is your target reader?
- Options: Chinese-speaking users, English-speaking users, Bilingual users
-
Persona Style: What kind of persona do you want to build?
- Options: Professional and serious, Relaxed and humorous, Sharp opinions, Warm and approachable, Other
After collecting answers, update references/user-profile.md with initialized: true.
Post Types
5 Categories
| Type | Style | Use When | Intent Signals (Routing Cues) |
|---|---|---|---|
| High-value substance | High information density, bookmarkable | Tutorials, tool recommendations, methodologies | Goal is bookmarks/retweets; emphasize actionable checklists, tools, steps |
| Sharp opinions | Has attitude and stance | Industry commentary, counterintuitive opinions | Goal is discussion/opposition; needs strong stance, contrast, counterintuitive |
| Trending commentary | Fast response | News commentary, event commentary | Goal is riding the trend/seizing timeliness; quickly interpret what just happened |
| Story insights | Personal experience + insights | Case studies, experience retrospectives | Goal is resonance/attention; use specific scenarios + twists + punchlines |
| Technical breakdown | Deep technical | Principle explanations, source code analysis | Goal is building expertise; explain principles, mechanisms, impact, and recommendations |
Output Formats
- Short tweets (≤280 characters) - Single tweet
- Thread (multi-tweet thread) - 3-10 tweets connected
- Comment replies - For replying to trending posts
Creation Workflow
Step 1: Load Context
1. Read references/user-profile.md → Get persona, style
2. (Optional) Read state from ~/.claude/skills/x-create/state/
- liked_topics.json (positive samples)
- rejected_topics.json (negative samples)
- events.jsonl (optional)
3. Check assets/templates/{type}/ → Look for user reference posts
4. If no references → Use default patterns from references/post-patterns.md
Step 2: Intent-based Routing
Determine intent first, then choose style and format:
-
Intent → Style (5 categories)
- Bookmark/retweet oriented → High-value substance
- Discussion/opposition oriented → Sharp opinions
- Timeliness/trending oriented → Trending commentary
- Resonance/attention oriented → Story insights
- Professional/technical oriented → Technical breakdown
-
Style → Output format
- Short tweet: Single insight, quick take, one-liner
- Thread: Multi-point analysis, step-by-step, detailed breakdown
- Reply: Designed to respond to specific post/topic
If user explicitly provides --type, follow it. Otherwise route automatically.
Step 3: Apply Pattern
Read references/post-patterns.md for the specific post type pattern.
Step 4: Generate Content (A/B Variants)
Create two variants by default:
- Variant A: More direct, stronger hook, higher contrast
- Variant B: More structured, more evidence, slightly more neutral
Follow:
- User's persona style
- Selected post style pattern
- Reference examples (if available)
Step 4.5: Humanize Pass (remove AI flavor, required by default)
For each variant, rewrite the text to sound like a real person on X while keeping meaning and claims unchanged:
- Delete filler + chatbot politeness: avoid "of course/hope this helps/let's dive in"
- Remove grand/marketing tone: avoid "marks/ crucial/ever-evolving landscape/demonstrates/empowers/breathtaking"
- No vague attribution: avoid "experts believe/industry reports show" unless you provide a specific source; otherwise rewrite as "I've observed/my judgment is..."
- Reduce connective phrases: avoid overusing "moreover/however/therefore"; prefer simple sentences and line breaks
- Break formula: do not force "three-part structure"; 2 points is fine; mix short + long sentences
- Avoid dash spam: do not stack "——"
- Prefer concrete details over empty conclusions; if you are unsure, say it plainly and briefly
Thread constraints:
- Each tweet must be <= 280 characters
- Do not make every tweet identical in structure; allow 1-2 short "pause" lines
Step 5: Critic (Self-evaluation) + Rewrite Once
Score the humanized Variant A/B as the target reader (0-10):
- Hook strength
- Information density / value
- Clarity and readability
- Credibility (no exaggeration / no made-up facts)
- Persona fit
- Action likelihood: like / repost / bookmark / reply
- "AI flavor" control: no empty grand statements, no templated endings, no vague authority
Rules:
- If both Variant A and B score < 7, rewrite once (produce A2/B2), then run the same humanize pass again, and re-score.
- Select the best variant as final output, but still show both drafts.
Output Format
# 推文创作
## 选题
{topic}
## 推文类型
{short_tweet/thread/reply}
## 风格
{post_style}
---
## Drafts
### Variant A
{For short tweet: single tweet content}
{For thread:}
### 1/N
{first tweet}
### 2/N
{second tweet}
...
### N/N
{final tweet with call to action}
**Critic score (0-10)**: {critic_score_a}
### Variant B
{For short tweet: single tweet content}
{For thread:}
### 1/N
{first tweet}
### 2/N
{second tweet}
...
### N/N
{final tweet with call to action}
**Critic score (0-10)**: {critic_score_b}
---
## Selected
Selected variant: {A|B|A2|B2}
Reason: {one-sentence reason}
---
## 发布建议
- 最佳发布时间: {suggestion}
- 配图建议: {image suggestion if applicable}
- 预期互动: {engagement prediction}
下一步:运行 /x-publish 发布到草稿箱
Append machine-readable blocks for hooks/state ingestion:
CREATE_JSON
{
"schema_version": "x_skills.create.v1",
"topic": "{topic}",
"post_type": "short|thread|reply",
"post_style": "high-value|sharp-opinion|trending-comment|story-insight|tech-analysis",
"variants": [
{"id":"A","critic_score_0_10":0,"text":"..."},
{"id":"B","critic_score_0_10":0,"text":"..."}
],
"selected": "A|B|A2|B2",
"rewrite_once": true
}
HOOKS_JSON
{
"schema_version": "x_skills.hooks.v1",
"topic": "{topic}",
"hooks": [
{"text":"...","source":"variant.A","tags":["数字|反常识|痛点|悬念|类比"],"score_0_10":0}
]
}
Template Priority
- User templates first: Check
assets/templates/{type}/ - Default patterns: Use
references/post-patterns.md
Example:
Creating 高价值干货 post:
1. Check assets/templates/high-value/
2. If files exist → Learn style from examples
3. If empty → Use default pattern from post-patterns.md
Resources
references/user-profile.md
User customization info (shared across all x-skills)
references/post-patterns.md
Default viral post patterns for 5 categories
assets/templates/
User-provided reference posts organized by type:
high-value/- High-value substance referencesharp-opinion/- Sharp opinions referencetrending-comment/- Trending commentary referencestory-insight/- Story insights referencetech-analysis/- Technical breakdown reference
Example
User: /x-create Claude 4.5 Opus发布 --type thread
- Read user-profile.md → persona: Professional and serious, Sharp opinions
- Check assets/templates/tech-analysis/ → empty
- Read post-patterns.md → Get tech-analysis pattern
- Generate thread:
### 1/5
Claude 4.5 Opus 上线了。我先说结论:它更像“慢一点,但更稳”的那类模型。
我用 3 个小任务试了下,写个线程记录👇
### 2/5
我最直观的感受不是“更聪明”,而是更会停下来检查自己。
同一个问题,它更少给“听起来对”的答案。
### 3/5
三个场景(都不算大项目):
1) 重构一个旧模块:更愿意先问清边界,再动手改
2) 复杂推理题:会把关键假设写出来(这点很救命)
3) 长文档梳理:更少漏掉前后矛盾的地方
### 4/5
代价也很现实:
- 反应慢一点
- 成本可能更高(看你用的套餐/调用方式)
- 你得给它更明确的上下文
### 5/5
如果你做的是“错一次就很麻烦”的任务(代码、决策、长文整理),值得试。
只是日常闲聊,感知没那么强。你们试过了吗?
Integration
After creation, suggest:
推文创作完成!
- 类型: {thread/short/reply}
- 字数: {word_count}
- 预计阅读: {read_time}
下一步:运行 /x-publish 发布到X草稿箱
(反馈闭环,可选)
- 采纳并进入正样本:
python ~/.claude/skills/x-create/scripts/x_state.py like --topic-json '{"title":"{topic}","selected":"{A|B}","critic_score":8}'
- 否决并进入负样本:
python ~/.claude/skills/x-create/scripts/x_state.py reject --topic-json '{"title":"{topic}","reason":"low_value"}'
- 写入事件(hooks 自动收集也可用):
python ~/.claude/skills/x-create/scripts/x_state.py event --event create.generated --payload-json '{"topic":"{topic}","variants":["A","B"],"selected":"{A|B}"}'