Perpetūra, part 3: keeping my voice in the machine age
The hardest problem in writing fiction with an AI collaborator isn’t getting prose. It’s that the prose arrives pre-sanded: uniform, over-polished, full of tics you stop seeing because every paragraph has them. Perpetūra’s style guide exists to fight exactly that, and it’s the document I’d rescue first from a fire.
Name the tells, then lint for them
The style guide contains a checklist of seventeen AI writing patterns, each named so it can be pointed at: the “not X, not Y, but Z” formula, mic-drop closers, “something shifted” hedging, simile stacking, the tacked-on “-ing” clause that explains a point already made, a whole vocabulary list (delve, tapestry, testament, palpable…) that triggers a rewrite on sight. There’s also a texture target: roughly 60% plain sentences, 30% reflective, 10% peak. If every sentence is beautiful, none are.
The mechanical subset of those rules lives in a linter, prose-check.js,
which runs in CI on every push. Em-dashes outside interrupted dialogue and
American spellings fail the build. Softer patterns — flagged vocabulary,
negation chains over budget, five-and sentence cascades — warn and leave the
call to a human. The linter’s own docs admit its limits: it catches mechanics,
so you still do a manual read.
Voice wasn’t found in one pass. The git history shows Hyunjae rewritten four times, v2 through v5, with the diffs shrinking each round until the last one just locked it in and updated the bible. Later voice work got surgical; there are commits like “collapse three ‘Not…’ negation chains into comma tricolons” and “break the uniform ‘and… and…’ climax cadence.”
The council
For editorial review I built a skill that convenes a council. Five lenses — romance, craft, architecture, canon, series — each reviewed by its own agent, plus an external bench of non-Anthropic models for cross-vendor disagreement. Findings go through a debate round, then an adversarial verify pass where a skeptic tries to kill each finding against the actual prose. What survives lands in a report, prioritized P0 to P2, with file-and-line locations. The council never edits. It argues; I adjudicate. The reports even preserve the disagreements the council couldn’t resolve, which are reliably the most interesting notes in them.
My favorite finding so far, from Reine’s review: two chapter closings “state the route verdict outright,” breaking the house rule that a closing may carry feeling and action but never the verdict. A machine caught me moralizing my own ending. I fixed it, and the rule got stronger.
There’s a separate continuity auditor for the things no linter reaches — semantic invariants like “this character must read alive on every branch” and “this object exists on one route only.” One reader agent per route, a synthesis pass across them, then a skeptic per finding. Same shape as the council: machines report, the author decides.