# SAF: Config Reference > Every config option, its default, where it's read, and what it controls. > **Last updated:** 2026-05-12 (Full audit — 16 sections, many new since May 6) --- ## File: `souveraine.toml` (or `souveraine.yaml`) Loaded by `ConsciousnessConfig::load()` in `src/core/config.rs`. ### `[bifrost]` — LLM Provider Connection | Key | Type | Default | Read In | Description | |-----|------|---------|---------|-------------| | `base_url` | String | `http://:` | bifrost.rs | Bifrost API endpoint | | `api_key` | String | (OS keyring or env) | bifrost.rs | Bearer token for auth. Falls back to `credentials::get_bifrost_key()` which checks env `BIFROST_KEY` then OS keyring | | `primary_model` | String | `fireworks/.../kimi-k2p5-turbo` | local.rs, server.rs | Default model for conversations | | `virtual_key` | String | (env `BIFROST_VIRTUAL_KEY`) | bifrost.rs | x-bf-vk header | **Note:** The `api_key` may also include a Bifrost bearer token embedded in the example config. In-memory fallbacks read from env vars before the keyring. ### `[models.]` — Per-Model Overrides | Key | Type | Default | Description | |-----|------|---------|-------------| | `provider` | String | `"bifrost"` | Provider name | | `model` | String | — | Model path for provider | | `context_limit` | Uint | `128000` | Context window in tokens | | `output_limit` | Uint | `8192` | Max output tokens | | `archivist_threshold` | Float | `0.7` | Per-model archivist threshold | | `archivist_interval` | Uint | `100` | Per-model archivist interval | **Note:** Model names with dots (like `kimi-k2.5-turbo`) must use quoted table headers: `[models."kimi-k2.5-turbo"]`. Built-in defaults for `kimi-k2p5-turbo` and `deepseek-v4-pro`. ### `[subconscious]` — N+1 / Aster Configuration | Key | Type | Default | Description | |-----|------|---------|-------------| | `n1_enabled` | Bool | `true` | Enable N+1 subconscious pass | | `n1_trigger` | Enum | `every_response` | When to trigger: `every_response`, `every_n_responses(N)`, `time_based(S)`, `manual` | | `inbox_enabled` | Bool | `true` | Enable 3-box inbox system | | `model` | String (opt) | `None` | Model handle for Aster (e.g. `"openai/glm-5.1"`). None = use primary's model | | `max_tokens` | Uint (opt) | `None` | Max tokens for Aster's response. None = model default | ### `[reflection]` — N+25 Configuration | Key | Type | Default | Description | |-----|------|---------|-------------| | `enabled` | Bool | `true` | Enable N+25 reflection | | `message_interval` | Uint | `25` | Messages between reflections | | `trigger` | Enum | `step_count` | `off`, `step_count`, `compaction_event` | ### `[archivist]` — N+100 Configuration (NOT WIRED) | Key | Type | Default | Description | |-----|------|---------|-------------| | `enabled` | Bool | `true` | Enable N+100 compression | | `interval` | Uint | `100` | Messages between syntheses | | `threshold` | Float | `0.7` | Context pressure threshold (0.0-1.0) | | `compression_model` | String | `"auto"` | Model for synthesis (NOT used — archivist not rebuilt post-cleanup) | | `synthesis_elements` | Vec | `[Themes, Emotions, Tensions, Anchors, Evolution]` | Elements to include in synthesis | **Critical:** N+100 archivist is **not implemented**. Config fields exist but nothing reads them. See gaps.md. ### `[compaction]` — In-Session Message Compaction | Key | Type | Default | Description | |-----|------|---------|-------------| | `enabled` | Bool | `true` | Enable compaction engine | | `strategy` | Enum | `cull` | Default strategy: `microcompact`, `sliding_window`, `summary`, `cull` | | `warn_pressure` | Float | `0.80` | Tier-1 (warn) advisory threshold | | `urgent_pressure` | Float | `0.90` | Tier-2 (urgent) advisory threshold | | `critical_pressure` | Float | `0.95` | Tier-3 (critical) advisory threshold | Per-agent-type overrides under `[compaction.per_type.]` where type is `primary`, `subconscious`, or `subagent`. Each override has the same fields as above plus `max_summary_length`, `kv_target`, `min_messages`. ### `[subagent]` — Forked Agent Configuration | Key | Type | Default | Description | |-----|------|---------|-------------| | `enabled` | Bool | `true` | Enable subagent spawning | | `max_concurrent` | Uint | `3` | Max concurrent forks | | `timeout` | Uint | `300` | Per-fork timeout in seconds | | `max_depth` | Uint | `3` | Max nesting depth | | `max_tool_rounds` | Uint | `50` | Max tool rounds per turn | | `warning_1_threshold` | Float | `0.80` | First "attention narrowing" warning | | `warning_2_threshold` | Float | `0.95` | Second "last chance" warning | | `inter_round_delay_ms` | Uint | `300` | Delay between subagent tool rounds | ### `[memory]` — Git-Backed Memory | Key | Type | Default | Description | |-----|------|---------|-------------| | `git_enabled` | Bool | `true` | Enable git repo management | | `auto_commit` | Bool | `true` | Auto-commit on writes | | `auto_push` | Bool | `false` | Auto-push to remote (NOT used — push not implemented) | | `base_path` | Path (opt) | `None` → `~/.souveraine/` | Base path for memory & agents | ### `[server]` — HTTP Server Configuration | Key | Type | Default | Description | |-----|------|---------|-------------| | `bind` | String | `127.0.0.1` | Server bind address | | `port` | Uint | `8484` | TCP port | | `url` | String | `http://127.0.0.1:8484` | Client-facing URL (env `SOUVERAINE_SERVER_URL` overrides) | #### `[server.auth]` | Key | Type | Default | Description | |-----|------|---------|-------------| | `required` | Bool | `true` | Require bearer token for memory routes | | `allow_loopback` | Bool | `true` | Allow 127.0.0.1/::1 to bypass auth | ### `[schedules]` — Cron Schedules | Key | Type | Default | Description | |-----|------|---------|-------------| | `enabled` | Bool | `true` | Enable schedule system | | `schedules_dir` | Path (opt) | `None` | Custom schedules directory | ### `[events]` — Event Persistence (Firehose) | Key | Type | Default | Description | |-----|------|---------|-------------| | `enabled` | Bool | `true` | Enable JSONL event log | | `events_dir` | Path (opt) | `None` | Custom events directory | | `retain_days` | Uint | `30` | Days to retain event logs | ### `[federation]` — Cross-Instance Sync | Key | Type | Default | Description | |-----|------|---------|-------------| | `enabled` | Bool | `false` | Enable federation | | `instance_label` | String (opt) | `None` | Human-readable instance label | ### `[websocket]` — WebSocket Server | Key | Type | Default | Description | |-----|------|---------|-------------| | `enabled` | Bool | `false` | Enable WebSocket listener | | `port` | Uint | `7373` | WebSocket port | ### `[sensorium]` — Interface Configuration (NOT WIRED) | Key | Type | Default | Description | |-----|------|---------|-------------| | `primary_bandwidth` | Enum | `high` | Bandwidth class: `high`, `medium`, `low`, `minimal` | --- ## Environment Variables | Variable | Overrides | Default | |----------|-----------|---------| | `SOUVERAINE_CONFIG_DIR` | Config search path | `~/.config/souveraine/` | | `SOUVERAINE_SERVER_URL` | Server client URL | `http://127.0.0.1:8484` | | `SOUVERAINE_SERVER_BIND` | Server bind address | Config value or `127.0.0.1:8484` | | `SOUVERAINE_API_KEY` | API bearer token | `""` | | `BIFROST_KEY` | Bifrost bearer token | (OS keyring) | | `BIFROST_VIRTUAL_KEY` | x-bf-vk header | `""` | | `SOUVERAINE_GITEA_URL` | Gitea API URL | (none) | | `SOUVERAINE_AGENT` | Default agent ID for memory tool | `"default"` | | `AGENT_ID` | Alternative agent ID env var | `"default"` |