From blog-writer
Creates blog posts via guided interview workflow: captures your voice from responses, writes draft in your tone, strips AI tells, outputs Markdown or HTML.
How this skill is triggered — by the user, by Claude, or both
Slash command
/blog-writer:blogThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create blog posts through a guided conversational workflow. Interviews you about your topic, captures your voice from how you answer, writes a draft matching your tone, removes AI patterns, and publishes as markdown or HTML.
Create blog posts through a guided conversational workflow. Interviews you about your topic, captures your voice from how you answer, writes a draft matching your tone, removes AI patterns, and publishes as markdown or HTML.
If $ARGUMENTS is provided, use it as the initial topic. Otherwise, start by asking for a topic in Phase 1.
Goal: Understand the topic AND capture how the user naturally communicates.
CRITICAL: Pay close attention to HOW the user answers — not just WHAT they say. Their word choices, sentence length, formality, humor, directness, and vocabulary ARE the voice profile.
Ask questions one group at a time using AskUserQuestion, then follow up with open-ended questions to capture natural voice.
AskUserQuestion:
questions:
- question: "What's this blog post about? Give me the elevator pitch."
header: "Topic"
multiSelect: false
options:
- label: "Technical tutorial"
description: "How-to, walkthrough, or guide"
- label: "Opinion / hot take"
description: "Your perspective on something in your field"
- label: "Story / experience"
description: "Something that happened, lessons learned"
- label: "Announcement / update"
description: "Product launch, project update, news"
- question: "Who are you writing this for?"
header: "Audience"
multiSelect: false
options:
- label: "Developers / technical"
description: "People who write code"
- label: "Business / leadership"
description: "Decision makers, managers"
- label: "General / mixed"
description: "Broad audience, no assumed expertise"
- label: "Community / peers"
description: "People in your specific niche"
These are open-ended to capture natural writing voice. Ask via AskUserQuestion with options that encourage free-text responses.
AskUserQuestion:
questions:
- question: "In your own words, what's the ONE thing you want readers to walk away knowing?"
header: "Core point"
multiSelect: false
options:
- label: "Let me type it out"
description: "Free-form answer (recommended — helps capture your voice)"
- label: "I'm not sure yet"
description: "We'll figure it out as we go"
- question: "What's your take on this topic that most people get wrong or overlook?"
header: "Your angle"
multiSelect: false
options:
- label: "Let me explain"
description: "Share your perspective in your own words"
- label: "No strong contrarian take"
description: "Straightforward coverage"
AskUserQuestion:
questions:
- question: "How do you want this to feel when someone reads it?"
header: "Tone"
multiSelect: false
options:
- label: "Casual & conversational"
description: "Like talking to a colleague over coffee"
- label: "Direct & no-nonsense"
description: "Get to the point, respect the reader's time"
- label: "Thoughtful & nuanced"
description: "Explore complexity, acknowledge tradeoffs"
- label: "Energetic & opinionated"
description: "Strong voice, not afraid to take a stance"
- question: "How long should this be?"
header: "Length"
multiSelect: false
options:
- label: "Short (500-800 words)"
description: "Quick read, punchy"
- label: "Medium (800-1500 words)"
description: "Standard blog length"
- label: "Long (1500-2500 words)"
description: "Deep dive, comprehensive"
- label: "Whatever it takes"
description: "Let the content dictate length"
After the interview, silently build a voice profile from the user's answers. Analyze:
Store this as an internal note — do NOT show the voice profile to the user. Just use it.
Goal: Structure the post before writing.
Generate an outline based on interview answers. Include:
Present the outline to the user:
AskUserQuestion:
questions:
- question: "Here's the outline. How does it look?"
header: "Outline"
multiSelect: false
options:
- label: "Looks good, write it (Recommended)"
description: "Proceed to drafting"
- label: "Tweak it"
description: "I have some changes"
- label: "Start over"
description: "This isn't what I had in mind"
If "Tweak it": Ask what to change, update outline, re-present. If "Start over": Return to Phase 1 interview.
Goal: Write the full blog post matching the user's voice.
Follow the voice profile from Phase 1. Additionally:
These patterns make writing sound like AI generated it. Never use them:
Write the draft and save it to a working file at .claude/blog-draft.md.
Goal: Run the draft through a dedicated agent that strips remaining AI patterns and polishes the voice.
Invoke the de-ai-writer agent with:
.claude/blog-draft.mdThe agent returns a cleaned version. Save to .claude/blog-polished.md.
Goal: User reviews the final draft, provides feedback, and chooses output format.
Present the polished draft in full (read from .claude/blog-polished.md).
AskUserQuestion:
questions:
- question: "How's the draft? Be honest."
header: "Review"
multiSelect: false
options:
- label: "Love it, publish (Recommended)"
description: "Export to final format"
- label: "Close but needs changes"
description: "Tell me what to adjust"
- label: "Rewrite sections"
description: "Specific sections need rework"
- label: "Start the draft over"
description: "Keep the outline, rewrite from scratch"
If changes needed: make edits, re-run Phase 4 de-AI pass, re-present.
When approved:
AskUserQuestion:
questions:
- question: "What format do you want?"
header: "Format"
multiSelect: false
options:
- label: "Markdown (.md) (Recommended)"
description: "Clean markdown file"
- label: "HTML (.html)"
description: "Styled HTML with embedded CSS"
- label: "Both"
description: "Generate both formats"
- question: "Where should I save it?"
header: "Location"
multiSelect: false
options:
- label: "Current directory"
description: "Save right here"
- label: "blog/ subdirectory"
description: "Create blog/ folder if needed"
- label: "Let me specify"
description: "I'll type a custom path"
Write clean markdown with:
# headingWrite a self-contained HTML file with:
After publishing, remove working files:
rm -f .claude/blog-draft.md .claude/blog-polished.md
Display the final file path and word count.
.claude/ — no cleanup needed, they're gitignored/blog or mentions creating blog contentnpx claudepluginhub zate/cc-plugins --plugin blog-writerGuided 7-phase blog post writing. Use when writing a long-form blog post from scratch or from a pipeline-generated outline. Triggers: write post, blog post, write article.
Writes or edits structured blog posts (800-1200 words) with sections, referencing published posts and guidelines to avoid repetition and match voice.
Writes technical blog posts, tutorials, deep dives, and engineering content. Transforms brain dumps into polished content with personal voice support and AEO optimization.