Do we need an engineer to keep the voice file current?
No. The file is markdown, and a change to it arrives as a change request like any other copy, so a writer can own it and a reviewer approves the lines.
Brand voice holds for the first asset and slips by the third, because every prompt starts from a blank page. On Kortix, the open-source AI Operating System, your voice, your claims and your banned words live in the repo as a skill file every session reads.
# agents/<name>.md one file per agent (`agents.<name>.file`)# skills/<name>/SKILL.md skills, loaded by every harness# memory/ the project brain (the `kortix-memory` skill)# tools/<name>.ts project tools, loaded by every harness (`tools:` below)The project layout block at the top of the starter manifest. A voice skill is one directory under skills/, and every harness loads it.
The first asset usually sounds right. Someone wrote the brief with the founder in the room. An earlier piece was open in another tab, so the draft had a model to imitate. By the third asset the model is imitating itself. Nothing carries between sessions except what is in the repo. Whatever the brief leaves unsaid gets filled with the model's default register: longer sentences, a friendly opener, the same three adjectives in the same order. Nobody decided any of it.
Two changes do the same damage faster. A second author joins and re-briefs the agent in her own words. The register moves with her, and the first author's ear leaves with her. Or the team changes model providers, and the default sentences change under a file that never moved. Each draft still looks fine on its own, which is why the drift is hard to argue about in a review. It shows a month later, when somebody lays four pieces side by side and cannot find the version anyone approved.
The usual fix is a tone paragraph pasted into every prompt. It works for the session it was pasted into. Next week another person starts another session and pastes a slightly different version. The team now has two voices, and no record of which one a person signed off on. The platforms on the comparison page keep those rules in an account you log into. A file in a repo keeps them where the writing happens.
A voice file is short, and most of it is a list of things not to do. Kortix calls that file a skill: "A skill is the markdown that encodes how your company does one job" (Read the docs). One job, one file, in a directory the repo already has. One shape a voice file can take:
skills/brand-voice/SKILL.mdRegister- Second person, present tense. A long sentence earns a short one after it.- Never: leverage, circle back, excited to announce, world-class.- Open on the reader's job. The company name belongs in the second paragraph.Claims- A number carries its source and the date it was read.- A superlative needs a measured comparison in the same paragraph.- No source? Write [NO SOURCE] and stop. Do not draft around it.Kortix ships no file with those lines. Read the Register block as a test a reviewer can run in ten seconds. Sentence length is checkable. The Never list is greppable. The rule about the opening line kills the pattern every model reaches for first. The Claims block is what separates this file from a tone-of-voice deck. It says what the agent does at the moment a claim has no source behind it. The answer has to be blunt: mark the line and stop. An agent told to be careful will still write the sentence and add a hedge. A hedge on an unsourced number is worse than no sentence at all.
The two lists change on different clocks, which is why they belong in separate files in the same directory. Register changes when the brand changes, a few times a year. Claims change when a price moves, a limit moves or a certification lands, and that can be monthly. Keeping the source and the read date beside each claim lets the next person see which lines are still true without asking anyone.
A prompt box holds one person's copy of the rules. A file in the repo holds the team's, so a correction is one edit and every later draft inherits it. That is the whole difference between fixing a voice and fixing one document.
The history is the second half of it. git log skills/brand-voice/SKILL.md answers the question a brand lead asks in month three: when did the register change, and who changed it. The answer arrives with the line, so an argument about whether the copy got colder ends with a diff and a name.
The file also sits beside the grant that lets an agent read it. The starter manifest keeps the agents: map for governance, "GOVERNANCE ONLY (connectors/secrets/kortix_permissions/skills/workspace/enabled), plus file, the path of the agent's .md" (the manifest). What the agent does lives in the markdown that map points at. The starter agent file opens You are a **Kortix general knowledge worker** for **{{projectName}}**. and sets mode: primary and permission: allow (the agent file). A marketing voice is a file of the same kind, one directory over, under skills/, which every harness loads.
Because the rules sit in the repo, they survive a move. Clone the project on another machine and the voice file is there, and a team running its own instance already has it (self-hosting).
Marketing work reaches the repo the way code does: "Marketing work lands as a draft in a change request, so the review is a diff" (Kortix).
A diff changes what a reviewer can do in five minutes. There is no document with thirty comments and no argument about which draft is current. There are a handful of added lines, one removed line and a title, and the approval attaches to text somebody can see. Nothing merges itself: work reaches main through a change request a person approves, unless an admin granted the merge capability. The grant is project.gitops.merge.
The gates answer a different question. Approval gates you set. Off until you set them. Copy still reaches the repo as a change request either way. A team can leave a gate open and still read every sentence before it ships.
A diff also catches the mistakes a read-through misses. The banned word that came back sits on its own line. So does the claim that lost its source, and a price quoted twice with two numbers. They sit next to each other in the change, so the reader sees them without hunting.
Three things stay with people. Taste is the first. A file can ban a word and still miss that the whole argument is dull, and no rule list has taught judgment yet. Strategy is the second: the file cannot tell you which launch to write about, or that the campaign answers a question no buyer asks. A team that would rather buy its review than run it has the hosted shapes on the home page for that.
The third is the claim nobody verified. A file can demand a source on every number. It cannot go and find one. Someone still opens the pricing page, reads the report or calls the analyst. That person is the reason the Claims block earns its lines.
The file ages too. A register written for a product launch reads wrong a year later. A claim list with no owner fills with lines past its date. Name one owner, read the file once a quarter, and it stays useful. Skip that and the team has a very well-organized record of how it used to sound.
The practical ones, answered in the order they come up.
No. The file is markdown, and a change to it arrives as a change request like any other copy, so a writer can own it and a reviewer approves the lines.
Run one brief twice, once with the skill loaded and once without, then read both drafts against the Never list. Then read the third asset a week later; holding there is the real test.
A PDF tells people what to do, and a session may never open it. The skill file is read before the writing starts, a change to the rules arrives as a diff, and one file is the version everyone gets.
It can, and within a month it will be a copy of the repo file. Two copies drift, and the one a session reads is the one that counts. Keep the wiki as a mirror if people like reading it there.
The voice is one skill directory, and each agent's grant in kortix.yaml names the skills it may load. One file, several agents, one register, and one place to correct it.
Mostly. The register rules carry across formats, and the lines that are format-specific, such as subject length or an ad's character count, sit in the same file under their own heading.
One directory under skills/, and the brand voice your next hire inherits.