Šéţ üþ ýöüŕ ƃŕàñđ ĝüîđé îñ 10 ḿîñüţéš
Ĝöàļ: à ŵöŕķîñĝ ṽöîçé þŕöƒîļé (ţöñé, šţýļé, đö/đöñ'ţ þàţţéŕñš) àñđ ţĥé ŵöŕđš îţ üšéš àñđ àṽöîđš, ĥéļđ ƃý ýöüŕ þŕöĵéçţ àñđ éñƒöŕçéđ ƃý éṽéŕý çĥéçķ, šţàŕţîñĝ ƒŕöḿ à ţéḿþļàţé ŕàţĥéŕ ţĥàñ à ƃļàñķ þàĝé. Ýöü àüţĥöŕ îţ àš ÝÀḾĻ àñđ ķàþî ķééþš îţ îñ ţĥé þŕöĵéçţ'š ṽöîçé šţöŕé; ţĥé þŕöƒîļé ƒöŕḿàţ đöçüḿéñţš éṽéŕý ƒîéļđ. Šţàŕţ ŵîţĥ ţĥé ŕüļéš ýöü çàñ đéƒîñé þŕéçîšéļý àñđ ŕéƒîñé ţĥé þŕöƒîļé àš ýöü ŕéṽîéŵ ƒîñđîñĝš.
Çĥööšé à ƃüîļţ-îñ šţàŕţéŕ þàçķ àñđ àđàþţ îţ ţö ýöüŕ ŕéǫüîŕéḿéñţš: professional-b2b, friendly-dtc, technical-docs, marketing-blog, customer-support.
- Đéšķţöþ
- Àĝéñţ (Çļàüđé)
- ÇĻÎ
- Šţàŕţ ƒŕöḿ ýöüŕ àššîšţàñţ öŕ ţĥé ÇĻÎ ţö þŕöđüçé
brand/voice.yaml(ţĥé ţàƃš ţö ţĥé ŕîĝĥţ); ţĥé þŕöƒîļé îš àüţĥöŕéđ àš à ƒîļé éîţĥéŕ ŵàý. - Ƃîñđ îţ îñ Þŕöĵéçţ Šéţţîñĝš, šö ţĥé þŕöĵéçţ éñƒöŕçéš îţ.
- Šéé îţ ŵöŕķ. Ţĥé ƒîñđîñĝš çöüñţ öñ ţĥé þŕöĵéçţ'š Ḿàþ ñöŵ çàŕŕîéš ṽöîçé ƒîñđîñĝš öṽéŕ éṽéŕýţĥîñĝ ţĥé þŕöĵéçţ ţŕàçķš, àñđ ţĥé ṽöîçé ĝàţé ĵöîñš éàçĥ ļöçàļé'š šĥîþ-ĝàţé çéļļ.
Ţĥé àššîšţàñţ đŕàƒţš ţĥé þŕöƒîļé ƒŕöḿ çöþý ýöü àļŕéàđý ĥàṽé:
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.
Ţĥé àššîšţàñţ šçàƒƒöļđš ƒŕöḿ kapi voice new, ƒîļļš ţöñé àñđ ţéŕḿš ƒŕöḿ ýöüŕ éẋîšţîñĝ çöþý, ŵŕîţéš brand/voice.yaml, ƃîñđš îţ üñđéŕ defaults.voice, àñđ ŕüñš kapi context sync --files-only šö AGENTS.md àñđ CLAUDE.md šţàţé ţĥé ṽöîçé ƒöŕ ţĥé ñéẋţ šéššîöñ. Ýöü ŕéṽîéŵ ţĥé ÝÀḾĻ (îţ'š šĥöŕţ) àñđ çöŕŕéçţ ţĥé ĵüđĝḿéñţ çàļļš. Ţĥéñ àšķ ƒöŕ ţĥé þŕööƒ:
Now check the README against it.
Çŕéàţé, ṽàļîđàţé àñđ îḿþöŕţ ţĥé þŕöƒîļé, ţĥéñ ŕüñ à çĥéçķ:
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 voice import brand/voice.yaml # 4. voice into the store, terms: into the project's terms
kapi check README.md # 5. first enforced check
Ţĥé îḿþöŕţ þŕîñţš ţĥé îđ îţ ƒîļéđ ţĥé þŕöƒîļé üñđéŕ. Ñàḿé ţĥàţ îđ îñ ţĥé ŕéçîþé àñđ éṽéŕý šüŕƒàçé þîçķš ţĥé þŕöƒîļé üþ ŵîţĥöüţ ƒļàĝš:
defaults:
voice:
profile: acme-docs
Ƒŕöḿ ţĥéñ öñ kapi voice edit îš ĥöŵ ýöü çĥàñĝé îţ: ţĥé þŕöƒîļé öþéñš îñ $VISUAL öŕ $EDITOR àš ţĥé šàḿé ÝÀḾĻ, ŵĥàţ ýöü šàṽé îš ṽàļîđàţéđ ţĥé ŵàý kapi voice validate ṽàļîđàţéš à ƒîļé, àñđ ţĥé ŕéšüļţ ĝöéš îñţö ţĥé šţöŕé àš öñé ŕéçöŕđéđ çĥàñĝé ţĥàţ kapi context log šĥöŵš. Àƒţéŕ îḿþöŕţîñĝ, ýöü çàñ đéļéţé ţĥé ţéḿþöŕàŕý ƒîļé üñđéŕ brand/.
kapi context sync --files-only ŵŕîţéš ţĥé ṽöîçé àñđ ţĥé ŕüļéš îñţö ţĥé þŕöĵéçţ'š AGENTS.md àñđ CLAUDE.md, ŵĥîçĥ àñ àššîšţàñţ îñ ţĥé ţŕéé ļöàđš ƃéƒöŕé îţ ŵŕîţéš, šö đŕàƒţš šţàŕţ öñ-ṽöîçé. kapi context <path> þŕîñţš ţĥé ƒüļļ àñšŵéŕ ƒöŕ öñé ƒîļé àš à šĥöŕţ ḿàŕķđöŵñ ĝüîđé.
Ĝŕöŵîñĝ îţ
Ţŕéàţ ţĥé þŕöƒîļé ļîķé à ţéšţ šüîţé: éṽéŕý ŕéàļ öƒƒ-ṽöîçé ƒîñđîñĝ ţĥàţ ŕéàçĥéš ŕéṽîéŵ ƃéçöḿéš à ŕüļé. Ţĥé ķééþ-šöüŕçé-öñ-ƃŕàñđ ļööþ šĥöŵš ţĥé çĥàñĝé-šéţ šĥàþé ţĥàţ ƒîẋéš à đŕàƒţ àñđ àđđš ţĥé ŕüļé îñ öñé àþþļý; Çöñţéñţ ĝöṽéŕñàñçé ƒöŕ ÀÎ îš ţĥé šţàñđîñĝ ḿöđéļ ţĥé þŕöƒîļé šļöţš îñţö.
Ţŵö àđđîţîöñš ĥéļþ öñçé ýöü ĥàṽé ŕéàļ ŕüļéš:
- Ƒöŕḿš. Ţĥé çĥéçķ ḿàţçĥéš à ţéŕḿ éẋàçţļý, šö à ŕüļé àƃöüţ
utilizeḿîššéšutilizesüñţîļ ţĥé ţéŕḿ ļîšţš ţĥé öţĥéŕ šĥàþéš ţĥé ŵöŕđ ţàķéš.kapi terms expand --locale nbàšķš à ḿöđéļ öñçé ƒöŕ ţĥé îñƒļéçţîöñš îñ ţĥàţ ļàñĝüàĝé àñđ ŵŕîţéš ţĥéḿ öñţö éàçĥ ţéŕḿ àš ƒöŕḿš, ƒöŕ ýöü ţö ŕéṽîéŵ;--dry-runšĥöŵš ţĥé àđđîţîöñš ƒîŕšţ, àñđ ţéŕḿš ţĥàţ àļŕéàđý çàŕŕý ƒöŕḿš àŕé ļéƒţ àļöñé üñļéšš ýöü þàšš--overwrite. - Ŕàţéš àñđ šçöþéš. À þŕöĥîƃîţéđ þàţţéŕñ üñđéŕ
style.prohibited_patternsçàñ çàŕŕý àrate(maxḿàţçĥéš þéŕper_words, đéƒàüļţ 1,000) šö à ĥöüšé ŕüļé šüçĥ àš "öñé éḿ đàšĥ þéŕ ţĥöüšàñđ ŵöŕđš" îš à çéîļîñĝ ŕàţĥéŕ ţĥàñ à ƃàñ, àñđ àscope(prose,code,heading) šö à ƃàñ öñ îḿþļéḿéñţàţîöñ ŵöŕđš šţàýš öüţ öƒ ţĥé çöđé šàḿþļéš ţĥàţ ñééđ ţĥéḿ. Ţĥé ƒîéļđš àŕé îñ ţĥé ṽöîçé þŕöƒîļé ŕéƒéŕéñçé.
Ñéẋţ
- Ķééþ ýöüŕ šöüŕçé çöñţéñţ öñ ƃŕàñđ: ţĥé đàý-ţö-đàý éñƒöŕçéḿéñţ ļööþ.
- Ṽöîçé þŕöƒîļé: þŕöƒîļé ƒöŕḿàţ, šçöŕîñĝ, þàçķš.