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. Three artifacts, all committed to git, all versioned like code:
| Artifact | Encodes | Enforced by |
|---|---|---|
| Brand profile (YAML) | tone, forbidden/preferred vocabulary, competitor terms | the brand 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 brand 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 brand profile; the approved terms live in the Terms view. 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 brand 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, not 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 brand 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 brand new --pack technical-docs -o brand/voice.yaml # scaffold, then edit
kapi terms import terms.json --name product-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:
defaults:
brand_voice:
profile_file: brand/voice.yaml
terms: product-terms
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.
- Brand voice — the profile format in full.