Set up your brand guide in 10 minutes
Goal: a working voice profile (tone, do/don't, forbidden and preferred vocabulary) bound to your project and enforced by every check, starting from a template rather than a blank page. The profile is one YAML file, committed to git; the profile format documents every field. You don't need it perfect: one forbidden term already pays for the setup, and rules accumulate from real findings.
The built-in starter packs are honest bases to edit down: professional-b2b, friendly-dtc, technical-docs, marketing-blog, customer-support.
- Desktop
- Agent (Claude)
- CLI
- Start from your assistant or the CLI to produce
brand/voice.yaml(the tabs to the right); the profile is authored as a file either way. - Bind it in Project Settings, so the project enforces it.
- See it work. The Checks view now carries voice findings over everything the project tracks, and the voice gate joins each locale's ship-gate cell.
The fastest ten minutes: the assistant drafts from signal you already have:
Draft a voice profile for us. Base the tone on our README and landing page, forbid the usual filler ("leverage", "seamless", "cutting-edge"), and use "sign in" not "log in". Bind it in the recipe.
The assistant scaffolds from kapi voice new, fills tone and vocabulary from your existing copy, writes brand/voice.yaml, binds it under defaults.voice, and runs kapi voice pointer so CLAUDE.md (or an AGENTS.md already at your root) names the voice for the next session. You review the YAML (it's short) and correct the judgment calls. Then ask for the proof:
Now check the README against it.
Four commands, one file:
kapi voice new --pack technical-docs -o brand/voice.yaml # 1. scaffold from a pack
$EDITOR brand/voice.yaml # 2. your terms, your tone
kapi voice validate brand/voice.yaml # 3. structure, enums, regex
kapi check README.md --profile-file brand/voice.yaml # 4. first enforced check
The profile is plain YAML: a tone description, do/don't examples, and vocabulary lists (forbidden terms with replacements, preferred spellings, competitor names). Bind it in the recipe so every surface picks it up without flags:
defaults:
voice:
profile_file: brand/voice.yaml
kapi voice guide renders the same profile as a short markdown guide, the form you inject into an assistant's context so drafts start on-voice. kapi voice pointer then writes a section into the project's CLAUDE.md (or an AGENTS.md already at the root) naming the voice and that command, so an assistant in the tree retrieves the guide before it writes. kapi voice import puts a profile in the local store for use across projects.
Growing it
Treat the profile like a test suite: every real off-voice finding that reaches review becomes a rule. The keep-source-on-brand loop shows the change-set shape that fixes a draft and adds the rule in one apply; Content governance for AI is the standing model the profile slots into.
Two additions earn their place once the rules are real:
- Forms. The check matches a term exactly, so a rule about
utilizemissesutilizesuntil the profile lists the other shapes the word takes.kapi voice expand --profile-file brand/voice.yaml --language nbasks a model once for the inflections in that language and writes them into each rule'sforms:, as a diff you review;--dry-runshows the additions first, and rules that already carry forms are left alone unless you pass--overwrite. - Rates and scopes. A prohibited pattern under
style.prohibited_patternscan carry arate(maxmatches perper_words, default 1,000) so a house rule such as "one em dash per thousand words" is a ceiling rather than a ban, and ascope(prose,code,heading) so a ban on implementation words stays out of the code samples that need them. The fields are in the voice profile reference.
Next
- Keep your source content on brand: the day-to-day enforcement loop.
- Voice profile: profile format, scoring, packs.