Reading My Own Blog to Write My Own Blog

The last dozen or so posts here were drafted by a Claude Code skill, author-womack-post, reading real CHANGELOG entries from Ballpark Genius and writing them up. The first batch it produced read like a SaaS landing page with a byline. Heavy H2s, a closing paragraph that restated the whole post, “it’s worth noting” three times a page. Not me. So before writing another word, the fix was to have it actually read me first, all 24 hand-written posts on this blog, and build a reference file, JAMESISMS.md, out of what showed up: the words I reach for, the sentence shapes, the jokes, the way a post just stops instead of wrapping up with a moral.

I didn’t build the harness for that from scratch. Three repos did the thinking for me, and I forked all three rather than pretend I invented the idea:

  • getlago/inside-lago-voice-skill, Anh-Tho Chuong’s template, gave me the shape: Voice, Core Rules, an Anti-Filler Checklist, a Drafted-vs-Sent section for capturing the gap between an AI draft and what you’d actually send. JAMESISMS.md‘s four sections are a direct descendant of that template’s seven.
  • lumizone/blog-writer-claude-skill supplied the part that actually made the old posts sound bad in the first place: a table of AI tells and their human fixes, banned em dashes, banned “let’s dive in,” banned “not just X, it’s Y.” SKILL.md‘s banned list and its grep-based quality gate both come straight from that table.
  • aaddrick/written-voice-replication is the most over-engineered of the three, a 26-report pipeline running VADER sentiment and Big Five personality inference over someone’s Reddit export, but the compact payoff at the end, a voice spec with numeric sentence-length targets and a self-verification checklist, is the shape SKILL.md ended up in.

None of the three fit as-is, folks. Lago’s template is for a founder writing LinkedIn posts to prospects. The blog-writer skill wants an eyebrow, a TL;DR box, and FAQ JSON-LD, structure that would be exactly the wrong AEO-flavored skeleton for a Hexo blog from 2015. The Reddit pipeline assumes you have 26 reports’ worth of psycholinguistic data lying around, and I have 24 blog posts and a vibe. So JAMESISMS.md and SKILL.md took the parts that transferred, the anti-filler instinct, the numeric-targets instinct, and none of the parts that didn’t.

Here’s the pipeline as it stands:

How the author-womack-post skill was built: 24 real posts get read into JAMESISMS.md, which compresses into SKILL.md's voice rules, which draft new posts against real CHANGELOG entries, with the loop back into the corpus deliberately cut

Schematic illustration (not a screenshot).

That red X is the part I want to think through, because it’s the actual interesting question here, not “can AI write like you” but “what happens on the tenth iteration.” If a new post the skill writes could get fed back into the corpus that trains the next version of the skill, you get something close to what the ML literature calls model collapse, a system that trains on its own output slowly forgets the edges of the original distribution and converges on an average of an average. Applied to a voice: my jokes, which land because they commit a beat past where you expect them to stop, would get sanded down toward whatever reads as safely on-brand. Fifty iterations in, “JAMESISMS” stops describing me and starts describing a smoothed-out impression of me, one that’s never surprised by anything because it was never trained on anything surprising in the first place.

JAMESISMS.md already refuses that loop, though not because I sat down and designed against model collapse specifically, more because the AI-drafted posts were just obviously worse and I didn’t want the skill learning from its own mistakes. The corpus notes section names the four AI-written posts and excludes them on purpose, calling them “the negative example, not the model.” That’s the whole mechanism. It’s a denylist, not a philosophy, and it has real gaps. Nothing stops next year’s 40th post, hand-written by me, having absorbed some of the skill’s cadence back into my own writing, at which point the corpus is contaminated from the source, not the output, and there’s no grep for that. Nothing versions the corpus either, so if my actual voice drifts over the next five years, the skill has no way to know it’s still optimizing for 2026-James against 2015-through-2026-James’s average.

What ranthebuilder.cloud’s piece on writing with Claude in your own voice gets right, and what I’d underweighted until building this: “the problem isn’t that people use AI to write, it’s that they don’t configure it to sound like them.” That’s basically preaching the good word, and I believe it. But it turns out configuring is necessary and not sufficient, which is a lesson I’d bet gets its own post eventually, given how this one’s already going. The harder problem, the one none of the four repos I leaned on really solve, is staying configured. A voice isn’t a fixed target you calibrate against once. It’s a moving one, and the calibration file doesn’t know it’s supposed to move, and neither, it turns out, does the thing reading the calibration file.