Content governance for AI
Goal: configure writing rules and automated checks for AI-assisted content. Checks identify violations of supported rules; people review meaning and guidance that cannot be checked automatically. The rules come in three kinds:
| Artifact | Encodes | Lives in | Enforced by |
|---|---|---|---|
| Voice profile | tone, style measures, pattern rules | the project's voice store | the voice.rules analyzer in every check |
| Terms store | approved terms per language, and every word to avoid (forbidden, competitor, retired) | the project's terms store | the terms analyzer in every check, term-check and the terminology gate |
| Checkset | length budgets, required/forbidden patterns, hygiene | the recipe, in git | kapi check, in the loop and in CI |
The first two live in your workspace, one set per project, shared by every checkout. kapi context sync shares them with the rest of the team, and kapi store export backs them up.
The rules reach the agent before it writes and after:
kapi writes the voice and the approved terms where the agent reads them, then checks what it wrote.
The agent loads AGENTS.md and CLAUDE.md without a tool call. The checks read the content inside .docx, JSON catalogs and HTML, locate each finding to a block an agent can fix, and apply to every target language.
- Desktop
- Agent (Claude)
- CLI
- Bind the artifacts. In Project Settings, bind the voice profile; the approved terms the recipe binds show under Context → Terms. From then on the project enforces both everywhere.
- Watch the gates. The findings count on the project's Overview shows standing against the rules; the ship-gate cells fold the voice and terminology gates into each locale's release bar.
- Review the exceptions. Blocks that fail a rule surface findings-first in the Review queue; a person reads what the rules flagged, not every block.
With the rules bound in the project, governance is automatic: the agent reads the rules kapi writes into CLAUDE.md and AGENTS.md before writing, asks kapi context <path> only for a file those rules do not cover, and runs the gate after. Two prompts to bootstrap the artifacts themselves:
Draft a voice profile from our README and landing copy, and bind it in the recipe.
Extract candidate terms from
docs/and add the ones I approve to our terms store.
The Claude Code plugin's edit hook checks each file an agent edits, and its Stop hook checks the ship gate before task completion. Agents note what they see and what you change with context_note, and each note arrives as a suggestion that holds only where it was seen; a person keeps the right ones with kapi context review. See Growing context for reviewing and for going back to before an agent's session.
Author the artifacts, bind them once, and gate on them everywhere:
kapi voice new --pack technical-docs -o brand/voice.yaml # scaffold, then edit
kapi voice import brand/voice.yaml # into the project's voice store
kapi terms import terms.csv -s en --monolingual --header # into the project's terms
kapi check docs/*.md # the loop's gate
kapi check --ship # the release bar, in CI
Bind in the recipe so no invocation needs flags. The import prints the id it
filed the profile under, and defaults.voice.profile names that id:
defaults:
voice:
profile: acme-docs
From then on kapi voice edit opens the stored profile in your editor and reads
your changes back as one recorded change, so the profile is authored in one
place and every check reads it from there.
kapi check exits non-zero on a gate failure, so the same rules hold in CI with no assistant in the loop; see Ship gates & CI.
Next
- Set up your brand guide in 10 minutes: the fastest path to the first artifact.
- Keep terms consistent: building and enforcing the terms store.
- Check content like tests: the gate mechanics.
- Voice profile: the profile format in full.