Every team using AI to write copy hits the same problem eventually: the output sounds generically helpful instead of sounding like you. Style guides exist, but AI assistants forget them mid-conversation, drift toward safe corporate language, and ship hedging phrases like "it's important to note" that no human on your team would ever write.
Developer Tom Howard built a system of four Claude Code hooks that treats this as an enforcement problem, not a documentation problem. Instead of hoping the AI remembers your VOICE-AND-TONE.md file, his hooks physically block copy edits until a separate reviewer agent signs off.
How the Gate Works
The system chains four hooks together:
- Detection fires when you submit a prompt. If a
VOICE-AND-TONE.mdfile exists in the project, it injects instructions telling Claude to consult a voice reviewer before touching any copy files. - The Gate fires before any Edit or Write operation on copy files (
.tsxcomponents,.mdarticles, social posts). It checks for a session marker file. No marker? The edit is denied with a hardpermissionDecision: "deny"response. - The Unlock fires after the voice reviewer agent finishes its review, dropping a temporary marker file (
/tmp/voice-tone-reviewed-${SESSION_ID}) that lets edits proceed for the rest of that turn. - The Reset fires when Claude finishes responding, deleting the marker so the next prompt starts fresh with a new review.
The reviewer agent itself only gets read-only tools (Read, Glob, Grep). It cannot edit files, which means the review always happens before any edits exist, not after.
Gates Beat Nudges
Howard's core argument is that voice violations are a "shipped to production" problem, not a "work in progress" problem. A nudge that says "hey, check the style guide" gets ignored under time pressure. A gate that literally prevents the edit from happening does not.
This is the same philosophy behind pre-commit hooks in software development: catch the problem at the point where it would be introduced, not in a review step that people skip.
The approach works specifically because Claude Code hooks run locally as shell scripts with access to the filesystem. The marker file pattern - create a temp file to unlock, delete it to re-lock - is dead simple and requires zero external services.
For teams managing a brand voice across multiple writers (human and AI), this is a practical pattern worth stealing. The hooks are straightforward to adapt: swap in your own file paths, point to your own style guide, and you have automated voice enforcement that runs on every single edit.