Transforms notes into X (Twitter) posts. Triggers when user asks to create social content, draft tweets, or turn notes/ideas into posts.
Scanned 2/12/2026
Install to Claude Code
npx -y skills add richtabor/agent-skills --skill x-writing --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of X Writing?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/richtabor-x-writing)More formats (shields.io, HTML) on the badges page.
---
name: x-writing
description: Transforms notes into X (Twitter) posts. Triggers when user asks to create social content, draft tweets, or turn notes/ideas into posts.
---
# X Writing Skill
## Overview
Transform your notes, work updates, and observations into engaging X (Twitter) content. This skill analyzes your notes to identify the most shareable insights, then crafts authentic posts that match your voice and drive engagement.
**Supports two idea sources** — a markdown file (`X_SOURCE_FILE`) and/or macOS Notes (`X_NOTES_APP_SOURCE`). If both are configured, asks which to use.
## Process
### Phase 1: Preparation and Analysis
**1.1 Load Writing Guides (REQUIRED - Load First)**
Before any other work, load the following:
1. **Growth Principles** (`references/x-strategy.md`) - Content selection criteria, what makes posts shareable, engagement patterns, and what to prioritize from notes. This guides WHAT to share.
2. **Writing Style Guide** (from `WRITING_STYLE_GUIDE_PATH` env var) - Voice, tone, structure, banned phrases, and signature patterns. This guides HOW to share it. Skip if the env var is not set.
3. **Anti-Patterns** - Run `echo "$WRITING_ANTI_PATTERNS_PATH"` to check the env var. If set, load that file. If not set, fall back to `references/anti-patterns.md`. AI writing patterns to avoid. Critical for ensuring posts sound human and authentic, not AI-generated. Avoid patterns like "It's not X, it's Y", formal transitions, hedging language, and AI-specific vocabulary.
**PRIORITY RULE**: When guides conflict, `references/x-strategy.md` wins. Content value and shareability take precedence over stylistic preferences. When the style guide and anti-patterns conflict, anti-patterns win.
**1.2 Understand the Source Material**
Get clarity on what notes to work with:
- Ask which notes, ideas, or updates they want to transform into posts
- **Check for idea sources:**
- Run `echo "$X_SOURCE_FILE"` — if set, a markdown ideas file is available
- Run `echo "$X_NOTES_APP_SOURCE"` — if set, a macOS Notes note is available (use `scripts/fetch-notes.sh get` to fetch)
- If **both** are configured and the user says "check my ideas" or similar without specifying, ask which source to use
- If **one** is configured, use it directly
- If **neither** is configured, work from whatever the user provides (pasted content, markdown files, etc.)
- Read the source material and identify the core insights, learnings, or updates
- Note any specific tools, projects, numbers, or details mentioned
**Multiple ideas/notes workflow:**
- When the user provides multiple distinct ideas or notes, work through them ONE AT A TIME
- Create post options for the first idea
- Wait for user approval/feedback before moving to the next idea
- This prevents overwhelming the user and allows for refinement as you go
**1.3 Apply Selection Criteria**
Evaluate notes using the Content Selection Framework in `references/x-strategy.md`. Prioritize shipped work with learnings, non-obvious insights, and specific tool recommendations. Skip engagement bait, vague hype, and complaints without solutions.
### Phase 2: Content Creation
**2.1 Select the Best Angle**
Identify one clear idea, the specific details that prove it, and the hook (first line).
**2.2 Choose the Format**
Default to single tweets. Only thread (2-5 tweets) when the story requires steps, multiple related insights, or before/after context. See Thread Strategy in `references/x-strategy.md`.
**2.3 Draft the Content**
Apply all three guides loaded in Phase 1 **during drafting, not just as a post-check**:
- **x-strategy.md** — formatting rules, content strategy, High-Engagement Patterns, and Signature Patterns. **Formatting is critical**: one sentence per line, white space between lines, hook in first line, 180-250 chars, no italics.
- **Writing style guide** (`WRITING_STYLE_GUIDE_PATH`) — voice, tone, banned phrases, language simplification. Apply casing preference from X_CASE_STYLE env var (standard by default). When set to `"lowercase"`, use all lowercase including "i" as a pronoun — only capitalize personal names, WordPress, and product names.
- **Anti-patterns** — actively avoid during drafting. If a draft uses any anti-pattern, rewrite before presenting. **HARD RULE: NEVER use the "It's not X, it's Y" reframing pattern in any form.** This includes: "isn't X, it's Y", "not because X, because Y", "isn't about X, it's about Y", "less about X, more about Y". Say the positive claim directly instead. Also avoid: em dashes, generic observations without specifics, and intensifiers.
**2.4 Engagement Optimization**
End ~70% of posts with engagement (specific question, teaser, or invitation). Let the rest land with a hard stop. See "What Makes Content Shareable" in `references/x-strategy.md`.
**2.5 Quality Check**
After drafting, re-read every post against the anti-patterns guide and fix any violations before presenting. Then verify:
- [ ] Did I get to the point in line 1?
- [ ] Is this specific? (names, numbers, examples)
- [ ] Would I actually say this out loud?
- [ ] Does it sound like ME, not ChatGPT?
- [ ] Did I use any banned phrases from the writing style guide?
- [ ] Did I avoid ALL anti-patterns? (reframing, em dashes, intensifiers, generic observations)
- [ ] If it's a reaction, did I add MY angle?
### Phase 3: Output
**3.1 Present the Content**
For each post created:
1. **The Post(s)** - Show the actual tweet(s) ready to copy/paste
2. **Format** - Indicate if it's a single tweet or thread
3. **Character Count** - Show length (target: 180-250 chars)
4. **Pattern Used** - Which pattern from x-strategy.md was applied
5. **Key Elements** - What specifics, tools, or projects were highlighted
**3.2 Offer Options**
When appropriate, provide 2-3 variations:
- Different angles on the same insight
- Single tweet vs thread format
- Different engagement endings
**3.3 Explain Selections**
Briefly note what was prioritized and why:
- Which insights from notes were selected
- Why certain details were emphasized
- What was intentionally left out
**3.4 Save Approved Posts**
When the user approves a post, save it to the drafts file (create if missing).
**File location (resolve before saving):**
1. Run `echo "$X_DRAFTS_FILE"` to check the env var
2. If set, append to that file path
3. If not set, default to `.x/posts.md` (top-level, create if missing)
**Markdown format:**
```markdown
---
**Category:** Learning
**Date:** 2026-01-01
WordPress.com AI adds conversation alongside block editing.
People who couldn't navigate the UI before are shipping sites now. Others still use blocks for fine-tuning.
Both work. The conversation path just removes the skill barrier.
---
```
**For threads**, use `[Tweet N]` markers:
```markdown
---
**Category:** Learning
**Date:** 2026-01-01
[Tweet 1]
WordPress.com AI changes how people build sites.
[Tweet 2]
People who couldn't navigate block editing are shipping now.
[Tweet 3]
The UI is still there for fine-tuning. But conversation removes the skill barrier.
[Tweet 4]
Ask or click. Both paths work.
---
```
**Categories:**
- **Learning** - Insights, shipped updates with learnings
- **Update** - Project progress
- **Tool** - Recommendations
- **Observation** - Industry takes
**Workflow:**
1. Present the post(s) to the user
2. When approved, append to `X_DRAFTS_FILE` or `.x/posts.md`
3. User can copy-paste directly into X (text is ready with proper line breaks)
4. User removes the section after posting, or asks you to remove it
## Output Format
After creating social content, provide:
```
📱 Post 1 (Single Tweet, 210 chars)
─────────────────────────────────
[Actual tweet text ready to copy/paste]
Pattern: "Shipped X, learned Y"
Specifics: agents.foo, conversational context matching
Engagement: Specific question
─────────────────────────────────
From your notes, I prioritized:
✓ The discovery insight (most shareable)
✓ Why traditional search failed (specific learning)
✗ Timeline details (not core value)
Alternative angles:
• Focus on the technical implementation
• Thread breaking down the 3 attempts
```
## Example Interaction
**User**: "Help me create a post from these notes about building the curation feature"
**Response**:
```
Let me analyze your notes and create X content.
[Phase 1: Loads references/x-strategy.md and writing style guide]
[Reads the notes, identifies key insights and specific details]
─────────────────────────────────
📱 Post (Single Tweet, 218 chars)
─────────────────────────────────
Shipped curation v1 for agents.foo today.
Discovery is way harder than app stores. Agents are conversations, not static features.
Had to rebuild around context matching instead of keyword search.
Pattern: "Shipped X, learned Y"
Key specifics: agents.foo, context matching vs keyword search
Engagement: Implicit (landing the insight)
─────────────────────────────────
From your notes, I selected:
✓ Core insight: agent discovery is different
✓ Specific solution: context matching
✓ Concrete detail: agents.foo
✗ Number of rebuild attempts (not essential to the insight)
Would you like me to:
• Save this approved post for tracking
• Create a thread version breaking down why search patterns failed
• Add a question ending for more engagement
• Draft additional posts from other insights in your notes
```
## Tips for Best Results
1. **Provide context**: "Notes from building curation feature" vs just pasting notes
2. **Mention specific parts**: "Focus on the learning about context matching" helps prioritize
3. **Indicate quantity**: "Create 3 posts from these notes" vs "create posts"
4. **Specify format preference**: "Single tweets only" or "open to threads"
5. **Request variations**: "Show me a few angles" gives options to choose from
6. **Iterate**: After the draft, request adjustments: "Make it more specific" or "Add a question ending"
## Environment Variables
| Variable | Required | Description |
|----------|----------|-------------|
| `WRITING_STYLE_GUIDE_PATH` | No | Path to shared writing style guide. Loaded in Phase 1.1 |
| `WRITING_ANTI_PATTERNS_PATH` | No | Path to shared anti-patterns. Overrides `references/anti-patterns.md` |
| `X_DRAFTS_FILE` | No | File path for saving approved posts. Default: `.x/posts.md` |
| `X_SOURCE_FILE` | No | Path to a markdown file containing post ideas. Read when the user asks to check ideas. |
| `X_NOTES_APP_SOURCE` | No | macOS Notes note name to fetch ideas from (e.g. `"Tweets"`). Uses `scripts/fetch-notes.sh`. |
| `X_CASE_STYLE` | No | `"standard"` (default) or `"lowercase"` |
No comments yet. Be the first to comment!