The four-layer framework that keeps AI content on brand
I called Item 5 closed three times before it stayed closed.
Each time, the failure had the same shape. The gate that was supposed to catch the gap reported "pass." The work shipped. Within a few hours, something I hadn't measured surfaced and forced a reopen.
The gap was always at a layer I wasn't watching.
The single-layer answer is always wrong
Single-layer voice enforcement fails. The first thing every operator reaches for when they want AI-generated content to stay on brand is "just put the voice rules in the system prompt." That's Layer 1. It works for the first paragraph. By paragraph three the model has rotated into its training distribution's default voice and the rules feel suggested, not enforced.
The next thing every operator reaches for is "just review every output." That doesn't scale past a few posts a week. Operators who try to scale that way end up either becoming the bottleneck or letting voice drift.
The third thing is "just run a grep against the obvious violations." Greps catch literal patterns. Greps miss semantic drift. A grep can catch an em dash; a grep cannot catch "this breakthrough approach will transform your workflow" as a fictional claim violation if you didn't anticipate the exact phrasing.
The single-layer answer is always wrong because each layer has its own failure mode. The fix is to stack the layers so each one catches what the others miss.
The four layers
Layer 1: The model prompt. Brand voice rules in the system context the model reads on every turn. Fires during generation, on every token. Catches the obvious. Misses drift that develops mid-output and novel constructions the rules didn't anticipate.
Layer 2: The brand-voice skill. A separate, programmable layer
that the model consults during generation. Located at
.claude/skills/vibekoded-brand-voice/SKILL.md in this project. Fires
mid-stream and lets the model self-correct before the violation lands
on disk. Catches violations the model would produce despite the prompt.
Misses violations that look fine to the model but a grep can catch.
Layer 3: The pre-commit hook. A mechanical grep at the file-system
layer. Located at .githooks/pre-commit. Fires at git commit and blocks
the commit if the content matches forbidden patterns. Catches literal
pattern violations (em dashes, vendor names in chrome, banned
constructions, fictional claims). Misses semantic violations a grep
can't see.
Layer 4: The promotion gate. A three-leg check at promotion time (structure, functional, performance). The functional leg includes voice greps run against the committed artifact, plus live-server- vs-build-artifact semantic verification. Catches the gaps between the committed file and what the running server actually serves. Misses nothing mechanical at this point; semantic review still requires operator eyes.
Each layer fires at a different point in the content lifecycle: generation, commit, promotion. Each layer catches a different class of violation. The framework is the methodology that is the practice it describes.
A specific catch at each layer
The layers earn their place by what they catch. Real moments from this project:
Layer 2 catch. Drafting a post mid-stream, the model started a sentence with one of the banned opening patterns, a negate-then-assert structure. The brand-voice skill caught it before the second clause landed. The model rewrote in-place. Without Layer 2, the violation would have sat in the draft for the pre-commit hook to catch, and the draft would have failed the commit gate. The fix would have been the same; the difference is whether the operator notices the violation in their drafts directory or whether it never lands there in the first place.
Layer 3 catch. During the SEO-infrastructure amendment, a previous post on this blog had body prose referring to the first post by a numbered shorthand. The pre-commit hook's keyword grep flagged the bracketed reference as a potential vendor-name false-positive (the bracket pattern is part of the chrome-violation detection). The right fix was to reword the body, not to loosen the grep. The post now refers to "the first post" instead. That single grep catch prevented a class of false-positive from landing in the chrome enforcement going forward.
Layer 4 catch. Earlier in the day, the promotion gate ran the functional leg, reported all checks green, and the operator was about to declare the move complete. The diagnostic that followed showed the live server was serving a build that pre-dated the promotion. The build artifact had two slugs prerendered; the running server was an unrestarted instance from the day before. The gate had measured the artifact, not the live server. The gap got codified into the gate's template: every content promotion now restarts the server post-build and runs curl-based semantic verification against what the live server actually serves. The catch was a methodology gap; the codification was the close.
Each catch shows the layer doing its job. Each catch also shows what would have escaped if the layer wasn't there.
Why all four matter
Removing any layer reduces consistency. Removing Layer 1 means voice rules don't shape generation at all. Removing Layer 2 means mid-stream drift lands in drafts. Removing Layer 3 means committed files have violations the operator has to find by reading. Removing Layer 4 means the gap between committed file and live server can hide a defect.
The cost of all four layers is modest. The pre-commit hook is fifty lines of bash. The brand-voice skill is a few hundred lines of markdown. The three-leg gate is a delegation template, not infrastructure. The system prompt is version-controlled with the project. Total build cost: a few hours, distributed over the four amendment legs that produced the methodology.
The cost of skipping a layer is harder to see at first and impossible to ignore once content scales. Voice drift compounds. Brand identity dilutes. Trust in AI-generated content collapses, because the operator stops being able to predict whether the output will be on-brand. Once the operator has to re-review every output instead of trusting the gates, the framework has failed.
How to start
Operator-shaped path for adding this to any project:
Start with Layer 1. Put the voice rules in the system prompt or custom instructions for whichever model is generating content. One afternoon of work; immediate effect on the first few paragraphs of every output.
Add Layer 3 next. A pre-commit hook with greps for the worst violations (the specific phrases or patterns that scream "AI-generated" the loudest). A few hours of work; mechanically blocks the violations from reaching the repo.
Layers 2 and 4 are larger investments. Layer 2 requires a model that supports mid-generation skill execution. Layer 4 requires CI infrastructure or a delegation template that runs the right checks at promotion time. Add them when content output exceeds what Layers 1 and 3 can hold without operator re-review at every step.
Don't add all four at once. The layers earn their place. Each layer's value shows up when it catches a violation the others missed; that's the moment the layer becomes load-bearing.
What the framework actually buys
Voice consistency at scale, with operator confidence. Drafts arrive in the drafts directory already shaped. Commits land in the repo already clean. Promotions move to the published surface already verified. The operator's role rotates from "re-reviewer of every output" to "ratifier of strategic angles." The framework absorbs the mechanical work; the operator does the work that requires judgment.
Voice consistency doesn't come from a single perfect rule. It comes from four mechanical layers that together catch what no single layer can. Build the layers, trust the gates, ship the work.
If your AI-generated content is drifting at scale and you want mechanical layers that catch what no single rule can, I can help. Send the content pipeline shape, the rules you've already tried, and where the drift shows up. VibeKoded can scope a spec discipline install, gate configuration, or operator handoff. → Work with VibeKoded