Skip to content

On-disk layout

The bot loads one character per process, picked by FAMILIAR_ID (or --familiar <id>), from data/familiars/<id>/. Smallest layout that boots:

data/familiars/aria/
└── character.toml          # optional — defaults apply if missing

history.db (Turso, SQLite-compatible) and subscriptions.toml are created on first launch. fts/turns/ and fts/facts/ tantivy index dirs are created lazily alongside the DB. Multiple character folders can sit side-by-side under data/familiars/; only the one FAMILIAR_ID points at is loaded per process.

An optional activities.toml carries the activities catalog — see Activities.

Example character.toml

display_tz = "UTC"
aliases    = []

[providers.history]
voice_window_size = 20
text_window_size  = 30

[llm.fast]
model       = "anthropic/claude-haiku-4.5"
temperature = 0.7
reasoning   = "off"

[llm.prose]
model       = "z-ai/glm-5.2"
temperature = 0.7
reasoning   = "medium"

[llm.background]
model        = "z-ai/glm-5.2"
temperature  = 0.7
reasoning    = "medium"
tool_calling = true

[tts]
provider    = "azure"
azure_voice = "en-US-AmberNeural"

See the Configuration model for the full surface.