Multi-brain
Several named brains in one install. Switch by name, series or parallel.
Since the multibrain layout, every brain lives in a per-brain directory in
both scopes, and models/state.json holds the active stack:
models/
public/vant/
public/nova/
private/vant/
private/nova/
state.json { "stack": ["nova", "vant"], ... }
The stack is ordered. The loader checks the current brain first and falls back through the stack, so a shared template brain can sit underneath a project brain.
Working with brains
The runtime API switches and manages brains:
const brain = require('./lib/brain');
brain.setMode('dual'); // 'dual' | 'public' | 'private' | 'remote'
brain.getBrainPath(); // current private brain path
brain.getPublicPath(); // current public brain path
Dual mode reads check the current brain’s root first, then the public root. Pin a scope to skip the fallback:
const item = await brain.read('identity'); // dual, with fallback
const pub = await brain.read('identity', { type: 'public' }); // public only
const priv = await brain.read('notes', { type: 'private' }); // private only
Imports and naming
A legacy single-brain tree imports as one named brain covering both scopes:
vant migrate --brain-name nova
Names are segment-validated. Migration is content-detected and idempotent; the Migration Guide has the full contract.
Agents per brain
Agent rosters and configs scope per brain, with stack traversal for shared config. The agent crew workflow is in Agents.