voice-setup
Voice setup
Turn one person's way of writing into two files a machine can apply:
voices/<name>.md, the profile the model reads. Structure, mechanics, tone, register, refusals.voices/<name>.rules.json, the subset a regex can decide. Enforced byscan.pyat whatever priority the profile sets.
Both live in ${CLAUDE_PLUGIN_ROOT}/skills/rabbit-writes/voices/. They are plain text under version control, so a voice is editable, diffable, and shareable.
Paths. ${CLAUDE_PLUGIN_ROOT}/skills/ means the directory holding this skill and its siblings (rabbit-writes, voice-setup, rabbit-readme-improver, rabbit-reads, rabbit-rewrites, rabbit-claude-md). Claude Code expands the variable. On a host that doesn't, such as Codex, resolve it that way by hand.
The principle
Taste is boundaries.
A voice is mostly refusals. What a person will not write is specific, checkable, and rare, which is what makes it a fingerprint. What they say they like is usually generic and describes half the writers alive.
So weight everything here toward the Hard nos. If the interview runs short, cut from Structure and Tone. Never cut from Hard nos.