Content governance for AI
Goal: when AI writes most of your content, the bottleneck moves to review. Governance turns your content rules into artifacts a machine enforces, so agent output arrives already compliant, and humans read exceptions instead of everything. The artifacts are the context a point in your project binds; this page is the how-to for authoring and gating on them. Three artifacts, all committed to git, all versioned like code:
| Artifact | Encodes | Enforced by |
|---|---|---|
| Voice profile (YAML) | tone, forbidden/preferred vocabulary, competitor terms | the voice gate in every check |
| Terms store | approved terms, per language | term-check and the terminology gate |
| Checkset | length budgets, required/forbidden patterns, hygiene | kapi check, in the loop and in CI |
The rules run in two directions around the agent: injected before it writes (the voice guide and approved terms go into its context, so drafts start compliant) and gated after (kapi check scores the result, block by block, exit code and all). Style linters for prose stop at regex over plain text; kapi's checks are format-aware and block-anchored: they read the content inside .docx, JSON catalogs, and HTML, locate each finding to an addressable block an agent can fix, and extend across 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 Checks view shows standing against the rules continuously; the ship-gate cells fold the voice and terminology gates into each locale's release bar.
- Review the exceptions. Units that fail a rule surface findings-first in the Review queue; the human reads what the rules flagged rather than the bulk.
With the rules bound in the project, governance is automatic: the skill pulls the guide and terms into context before writing 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.
With the Claude Code plugin, the Stop hook makes the gate a guarantee: Claude cannot declare a task finished while kapi check --ship fails. Rules the agent proposes (a new forbidden term, a new approved term) land through kapi apply as change-set entries in the committed artifacts; git diff is the review surface for the rules, exactly as for code.
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 terms import terms.csv -s en --monolingual --header # into the project's terms
kapi check docs/*.md --profile-file brand/voice.yaml # the loop's gate
kapi check --ship # the release bar, in CI
Bind in the recipe so no invocation needs flags. The voice profile is a file the
recipe points at; the terms are compiled from the committed record terms_source
names, which kapi terms import and kapi apply write:
defaults:
voice:
profile_file: brand/voice.yaml
terms_source: .kapi/terms.json
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.