personas
Autoviv spins a fresh folder into existence, and that folder still sounds like the default. A persona is what gives it a voice. It’s a PERSONA.md file in the group folder — one more file in the ant, same rule as page one: the agent is the folder. The frontmatter holds named fields like the TTS voice and a short reminder of how to sound; the body is the long voice guide the agent reads only when it asks for it. Editing the file is the whole interface; there is no persona table to keep in sync.
file location
One file per group, at <data-dir>/groups/<folder>/PERSONA.md. The operator edits it directly — via WebDAV, an editor on the host, or the dashboard. There is no persona table; the file is the source of truth.
frontmatter fields
Standard YAML frontmatter, delimited by ---:
---
name: Atlas
summary: Direct, no preamble. Defaults to short answers. Lowercase info, capitalized errors.
voice: nova
---
# full persona
Long-form description of register, tone, taboo words, in-jokes,
worked examples, … loaded on demand by the /persona skill.
name— display name used in the per-turn<persona name=...>envelope. Defaults to the folder path when omitted.summary— one-paragraph re-anchor injected on every turn. Keeps register stable across long sessions.voice— TTS voice id read bysend_voicewhen novoiceargument is passed. Falls back to the instance-wideTTS_VOICEenv.
how it lands in the prompt
On every inbound turn, routd reads the file, parses the frontmatter, and emits:
<persona name="Atlas">
Direct, no preamble. Defaults to short answers. Lowercase info, capitalized errors.
(For full register: /persona)
</persona>
The block sits next to the autocalls envelope inside the user message, so the agent re-anchors its voice even when the session has gotten long and the system prompt has scrolled out of focus. The body of PERSONA.md is not injected per turn — the agent invokes the /persona skill when it wants the full voice guide.
strictness rule
If PERSONA.md is missing, has no frontmatter, has no summary field, or the summary is empty, personaBlock returns "". No fallback to body text, no guessing from the folder name, no inheritance from a parent folder’s persona. The agent simply runs in its default register.
This is deliberate. A magical fallback would mean “the persona block sometimes contains operator data, sometimes contains a guess” — the agent could not tell which. Strict-or-empty keeps the rule plain: the block is either real persona text or nothing.
versioning
Personas live with the group, not with the agent image. Edits to PERSONA.md take effect on the next turn — no migration, no rebuild. The agent image ships skills and base prompts; the group ships voice. Releases bump MIGRATION_VERSION for skill changes, never for persona edits.
go deeper
Canonical spec: specs/4/P. The TTS path that reads the voice field: voice. How groups, folders, and per-folder files compose: scopes.