# config.json

The model, routing, and channel keys in `~/.config/agenvoy/config.json`. Runtime limits are in [config.json Limits](/docs/config-files-json-limits); policy keys are in [config.json Policies](/docs/config-files-json-policy).

Model, routing, and channel settings:

| Key | Description |
|---|---|
| `models` | Registered models as `"<provider>@<model>"` strings; the order is the fallback priority (`pass`-tier models are skipped since v1.1.0) |
| `model_tag` | `{model: tier}` with tiers `S` `A` `B` `C` `pass`; written as `{}` when missing. Since v1.1.0 a `pass` model is never picked by auto routing, subagents or fallback, even when a request names it; only a session whose own model is set to it uses it |
| `dispatcher_model` / `summary_model` | Dispatcher and summary roles |
| `dispatcher_beta` | Added in v1.0.18. `true` routes through the TypeSafe dispatcher instead of `dispatcher_model`; requires `TYPESAFE_API_KEY` in the keychain |
| `image_generator` / `stt_model` / `tts_model` | Image provider endpoint and audio models |
| `compats` | Custom OpenAI-compatible endpoints, `[{provider, url}]` |
| `keys` | Names of credentials stored in the keychain (never the values) |
| `telegram_enabled` / `discord_enabled` | Channel flags; `telegram_username` / `discord_username` are filled in by the daemon |
| `admin_channel` | Verification-code relay target (set from `/config` → **Admin Channel** in the TUI since v1.1.0) |
| `reply_lang` | Reply language, default `"auto"` (match the user). Accepts a code from `configs/jsons/reply_lang.json` (`en`, `zh-TW`, `zh-HK`, `zh-CN`, `ja`, `ko`, `es`, `fr`, `de`, `pt`, `it`, `ru`, `vi`, `th`, `id`, `ar`) or any language name |
| `output_dir` | Where files made for the user land when no location is named; default `""` means `~/Downloads`, or `~/.config/agenvoy/download` when that folder does not exist. `~` is expanded; an unusable path falls back to the default |
| `official_guide_disabled` | Added in v1.2.0. `true` stops injecting the per-model official guide (`## Model Guide`) into the system prompt; set from `/config` → **Official guide**, the dashboard's System tab, or `POST /v1/config/official_guide` |
| `skill_source_disabled` | Added in v1.2.0. External skill sources to skip when scanning, any of `claude`, `codex`, `copilot`, `opencode`, `agents` (`openai`: Removed in v1.2.1); set from `/skill` → `source`, the dashboard's Skills page, or `POST /v1/config/skill_source` |

`reply_lang` and `output_dir` are set from `/config` in the TUI or `GET` / `POST` `/v1/config/system` and `/v1/config/output_dir`; `/config` also toggles **Startup on login** (`/v1/config/startup`). The separate startup, reply-language, and output-dir TUI commands were removed; use `/config`. The daemon watches `config.json` and reloads the agent registry and Telegram / Discord on every write.

`auto_reasoning` (added in v1.0.18) was removed in v1.1.0: reasoning is now a per-session setting, and a session whose `reasoning` is `auto` gets its level from the model selector per request. An `auto_reasoning` entry left in `config.json` is ignored.
