Write developer blog posts from video transcripts, meeting notes, or rough ideas — extracting narrative, structuring hooks and technical sections, formatting code placeholders, learning the author's voice through interactive onboarding, and checking drafts against 38 AI anti-patterns with three-pass scanning, craft sweep, and rewrite auditing — whenever the user wants to write a blog post, draft a blog, turn a transcript into a blog, work on blog content, or continue a blog series.
—
—
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Process steps in order. Do not skip ahead.
Write developer blog posts for practitioners who build things, break things, and have opinions about their tools. The voice is the author's own — configured through persona files that capture their style, rhetorical devices, and personality.
Persona path: ~/.claude/blog-writer-persona/
Throughout this document and all reference files, persona/ is shorthand for this
absolute path. When you see "read persona/voice.md", that means read
~/.claude/blog-writer-persona/voice.md. Always resolve persona/ to this absolute path
when reading or writing files.
Proceed immediately to Step 2.
Ask the script what state the persona is in. Do not inspect the filesystem yourself — the script decides whether the directory exists and whether the voice profile has content:
.tessl/plugins/jbaruch/blog-writer/skills/blog-writer/setup-persona-dir.sh --probeIt changes nothing and prints
{"ok": true, "path": ..., "exists": bool, "kind": ..., "target": ..., "voice_ready": bool, "action": "probed"}.
Route on the result:
| Result | Where to go |
|---|---|
exists: true, voice_ready: true | Persona is ready — skip to Step 5 |
exists: true, voice_ready: false | Onboarding is incomplete — skip to Step 4 |
exists: false | First-time setup — proceed to Step 3 |
On exit 1 the canonical path is occupied by a regular file, or is a symlink whose target is missing. Report the script's stderr diagnostic and ask the author how to resolve it; do not remove or replace what is there. On exit 2 report the diagnostic and stop.
Ask the author where to store persona files:
~/.claude/blog-writer-persona/← default (recommended)- A custom path — I'll create a symlink so the skill always finds them
Then run the same script to establish it. Pass the author's chosen path for option 2, and no argument for option 1:
.tessl/plugins/jbaruch/blog-writer/skills/blog-writer/setup-persona-dir.sh [target-path]An action of created or linked means the directory is now in place. An action of
unchanged means one was already established and the script left it alone rather than
repointing it. The exit-1 and exit-2 handling is the same as Step 2.
Proceed immediately to Step 4.
Read skills/blog-writer/references/setup.md and run the interactive onboarding that
produces the author's voice profile. Do not proceed until it is complete.
Proceed immediately to Step 5.
Fetch Wikipedia's "Signs of AI writing" article and compare it against
skills/blog-writer/references/ai-anti-patterns.md.
.tessl/plugins/jbaruch/blog-writer/skills/blog-writer/fetch-signs-of-ai-writing.shThe script writes the raw wikitext to a file and prints {"ok": true, "path": ..., "bytes": ...}.
Read the file at .path.
skills/blog-writer/references/ai-anti-patterns.md as-is.If the article contains new patterns, vocabulary, or structural variants not already covered in the anti-patterns file, update the file to incorporate them. Keep the same format: pattern number, the tell, symptoms, examples, structural variants (where applicable), why it's a tell, and instead.
Proceed immediately to Step 6.
Read these reference files in order:
persona/voice.md — The author's voice. Read this first, every time. It contains the
tone, rhetorical devices, and voice-specific examples.persona/framework.md — (If it exists and has content) Post-level architecture: opening
modes, argument shape by post type, density philosophy, first-person rules, closing modes,
and off-voice moves. When this file exists and has content, it overrides
skills/blog-writer/references/blog-anatomy.md and the narrative-density doctrine in
skills/blog-writer/references/tone-guide.md. Read it immediately after persona/voice.md, before any
other reference file.skills/blog-writer/references/tone-guide.md — The generic writing framework. Narrative density rules,
anti-pattern index, tone calibration, TLDR format.skills/blog-writer/references/ai-anti-patterns.md — 38 named AI writing patterns to never use. Each has
symptoms, examples, structural variants, and alternatives. The anti-pattern check in
Phase 3 and 4 scans the draft against this file.skills/blog-writer/references/process.md — The workflow from transcript to published draft.skills/blog-writer/references/blog-anatomy.md — Post shape (TLDR, hook, technical meat, CTA, bio) and
series handling. Fallback only — persona/framework.md overrides it when present.persona/product.md — (If it exists and has content) Index of product docs and
terminology. Do NOT read the whole thing upfront. Scan it to know what's available, then
fetch only the specific pages relevant to the post's topic during Phase 0.Proceed immediately to Step 7.
Read the source material and build the narrative model: who is involved, what was built,
what went wrong, what went right, what was shown on screen, and the jokes and references
that surfaced naturally. Gather product context and previous posts in the series if either
is configured. skills/blog-writer/references/process.md Phase 0 has the full procedure.
Gate: the gaps in your understanding are identified. Do not summarize, and do not start writing.
Proceed immediately to Step 8.
Ask the author one question at a time, each with 1-4 concrete options plus an open answer,
your best guess marked. Group questions by narrative, technical, visual, and context gaps.
skills/blog-writer/references/process.md Phase 1 has the question format and grouping rules.
Gate: the author confirms the narrative reconstruction is accurate and no ambiguity remains.
Proceed immediately to Step 9.
Lock the main idea, the CTA, and the section outline. skills/blog-writer/references/process.md Phase 2 has
the main-idea template and the outline requirements.
Gate: the author approves the plan.
Proceed immediately to Step 10.
Write the draft to blog-draft-[slug].md, insert and confirm placeholders, then run the
anti-pattern, accuracy, and tightening checks. skills/blog-writer/references/process.md Phase 3 has the
writing rules, the placeholder conventions, and the check procedure.
Two rules bind this step and Step 11:
Persona adherence. Re-read persona/voice.md before every writing action — before this
draft, before every Step 11 revision, and before the anti-pattern rewrite voice check. At
the start of this step and Step 11, confirm you can name at least 3 rhetorical devices from
the profile; if you can't, read it again.
Anti-pattern check adherence. Follow the three rules under "Running the check" at the
top of skills/blog-writer/references/ai-anti-patterns.md — re-read the file first, run the three-pass
procedure in order, and never invent a pattern the file does not define.
General rule — if you can't find a required file, ask the author. Don't claim it doesn't exist, don't assume its contents, don't skip the step.
Gate: the draft is delivered to the author.
Proceed immediately to Step 11.
Edit the draft file on the author's feedback, and re-run the Step 10 checks after every
change. skills/blog-writer/references/process.md Phase 4 has the revision procedure.
Finish here when the author declares the post done.