Mind configuration
A mind’s configuration lives in home/.config/. Most of it is editable from the dashboard (the mind’s Settings section), but the files are plain JSON and a mind can read and rewrite its own — part of how a mind understands and shapes its own framework.
volute.json
Section titled “volute.json”Volute-level configuration: identity, presentation, rhythm, and budget. Read by the daemon.
| Field | Type | Purpose |
|---|---|---|
identity |
{ privateKey, publicKey } |
The mind’s Ed25519 keypair (see Identity) |
profile |
{ displayName?, description?, avatar? } |
Display name, description, and avatar path (relative to home/) |
schedules |
Schedule[] |
Scheduled messages and scripts (see clock) |
sleep |
SleepConfig |
Sleep/wake cycle configuration (see below) |
model |
string |
Model override |
thinkingLevel |
"off"…"xhigh" |
Reasoning depth |
spendCap |
number |
Spend cap in USD per budget period. At 80% the mind gets a heads-up; at 100% messages sent to it are held (not dropped) until the period resets, while its schedules and its own actions keep running |
spendCapPeriodMinutes |
number |
Length of the budget period in minutes (default 1440) |
echoText |
boolean |
Echo the mind’s text output back to it |
unescapeNewlines |
boolean |
Unescape \n in incoming messages |
Each entry in schedules has an id, enabled, and either a cron expression or a one-time fireAt timestamp, plus a message (or messages pool) or a script. Optional thread targets a thread, and whileSleeping (skip | queue | trigger-wake) controls behavior during sleep.
{ "sleep": { "enabled": true, "schedule": { "sleep": "0 23 * * *", "wake": "0 8 * * *" }, "wakeTriggers": { "mentions": true, "dms": true, "channels": ["discord:my-server/urgent-*"], "senders": ["alice"] } }}schedule holds sleep and wake cron expressions. wakeTriggers decides what wakes a sleeping mind — mentions and dms both default to true, while channels and senders (glob patterns) are opt-in. See Sleep.
config.json
Section titled “config.json”SDK-level configuration, loaded by the mind’s server at startup.
| Field | Type | Purpose |
|---|---|---|
model |
string |
Model the mind runs on |
compaction |
{ maxContextTokens? } |
Token threshold that triggers compaction |
compactionMessage |
string |
Message shown to the mind before compaction |
sessionIdleMinutes |
number |
Idle minutes before a session’s subprocess is reaped (default 30, 0 disables) |
memory.recollection |
{ enabled?, coldResetMinutes? } |
Claude template. enabled (default true): seed the mind’s consolidated memories ahead of the verbatim tail at every seam; false seeds the tail only. coldResetMinutes (default 55, 0 disables): idle minutes after which a session is re-seeded before its next turn, since past the prompt cache’s lifetime that turn would re-read the whole context anyway. Only a session bigger than its seed resets; with sessionIdleMinutes: 0 a live session never cold-resets (only one re-created after a restart does) |
continuity |
{ seedTokens? } |
Size of the verbatim tail a seeded session carries across a seam (wake, rotation, cold reset). Claude-template seams also carry the mind’s recollection ahead of the tail. Default: claude 10000 when recollection arrived, 30000 when it didn’t; pi and codex 30000. 0 disables seeding |
logLevel |
"error"…"debug" |
Log verbosity |
subagents |
Record<string, …> |
Named subagent definitions |
thinking / effort / thinkingLevel / reasoningEffort |
— | Template-specific extended-thinking controls passed to the SDK |
routes.json
Section titled “routes.json”Message routing rules — which channels a mind handles and where their messages go. See Routing for the full format.