Settings
Settings
~/.kimi-code/config.toml
Vendor docs
config
| name | type | required | meaning | concept | |
|---|---|---|---|---|---|
| background.bash_auto_background_on_timeout | string |
Move a foreground `Bash` command to a background task on timeout instead of killing it; set to `false` to kill timed-out foreground commands instead
|
docs ↗ | ||
| background.bash_task_timeout_s | string |
Default timeout (seconds) for background `Bash` tasks when the call omits `timeout`; `0` means no timeout. Explicit per-call `timeout` values are unaffected; print mode defaults to `0`
|
docs ↗ | ||
| background.keep_alive_on_exit | string |
Whether to keep still-running background tasks when the session closes; in print mode only a fallback when `print_background_mode` is unset (`true` = `drain`)
|
docs ↗ | ||
| background.kill_grace_period_ms | string |
Grace period in milliseconds after a task is asked to terminate; still-running tasks are force-stopped when it elapses
|
docs ↗ | ||
| background.max_running_tasks | string |
Maximum number of background tasks running concurrently
|
docs ↗ | ||
| background.print_background_mode | string |
Print mode only: how pending background tasks are handled when the main agent's turn ends; `"exit"` exits immediately, `"drain"` waits for terminal states without feeding results back, `"steer"` injects completions as synthetic user messages steering new turns until none are pending
|
docs ↗ | ||
| background.print_max_turns | string |
Maximum number of new turns triggered by background-task completions in `"steer"` mode; keeps the steering loop bounded
|
docs ↗ | ||
| background.print_wait_ceiling_s | string |
Wall-clock ceiling (seconds) for the print-mode wait/steer loop; no effect outside print mode or with `"exit"`
|
docs ↗ | ||
| builtin_product_skills | string |
Whether the built-in skills that document Kimi Code itself are offered to the model
|
docs ↗ | ||
| default_model | string |
Default model alias; must be defined in `models`
|
docs ↗ | ||
| default_permission_mode | string |
Default permission mode for new sessions: `manual`, `yolo`, or `auto`. See the three permission modes
|
docs ↗ | ||
| default_plan_mode | string |
Whether new sessions start in Plan mode by default
|
docs ↗ | ||
| extra_agent_dirs | string |
Extra custom agent search directories, layered on top of the default directories
|
docs ↗ | ||
| extra_skill_dirs | string |
Extra skill search directories, layered on top of the default directories
|
docs ↗ | ||
| identity.name | string |
Display name the agent calls itself in the system prompt (fills the `${product_name}` slot, including in your own `SYSTEM.md` and agent files)
|
docs ↗ | ||
| identity.slug | string |
Machine identifier in protocol fields (`User-Agent` product token, MCP client name); derived from `name` when omitted: lowercased, non-alphanumeric runs folded to `-`
|
docs ↗ | ||
| image.max_edge_px | string |
Longest-edge ceiling in pixels; larger images scale down proportionally. Raising it preserves more detail at the cost of larger request bodies
|
docs ↗ | ||
| image.read_byte_budget | string |
Per-image byte budget for images the model reads for itself (`ReadMediaFile` default reads); `region` and `full_resolution` read-backs are exempt
|
docs ↗ | ||
| loop_control.max_attempts_per_step | string |
Maximum total attempts for a failing step, including the initial attempt
|
docs ↗ | ||
| loop_control.max_steps_per_turn | string |
Maximum steps per turn; unset or `0` means unlimited
|
docs ↗ | ||
| loop_control.reserved_context_size | string |
Number of tokens reserved for model output; automatic compaction is triggered when the remaining context window falls below this value
|
docs ↗ | ||
| mcp.startup_timeout_ms | string |
Global default connection (startup + tool discovery) timeout in milliseconds for all MCP servers; a per-server `startupTimeoutMs` in `mcp.json` wins
|
docs ↗ | ||
| mcp.tool_timeout_ms | string |
Global default single tool-call timeout in milliseconds for all MCP servers; a per-server `toolTimeoutMs` in `mcp.json` wins
|
docs ↗ | ||
| merge_all_available_skills | string |
Whether to merge Agent Skills from all available directories
|
docs ↗ | ||
| models.adaptive_thinking | string |
`anthropic` provider only; force adaptive thinking on or off, omit to infer from the model name (Claude ≥ 4.6 uses adaptive)
|
docs ↗ | ||
| models.base_url | string |
Per-model endpoint override (written by catalog imports); takes precedence over the provider's `base_url`, only effective together with `protocol`
|
docs ↗ | ||
| models.capabilities | string |
Capability tags added explicitly: `thinking`, `always_thinking`, `image_in`, `video_in`, `audio_in`, `tool_use`; only ever added, never removed
|
docs ↗ | ||
| models.default_effort | string |
Default thinking effort for the model; managed and open-platform refreshes may rewrite it. Pin via model overrides
|
docs ↗ | ||
| models.display_name | string |
Name shown in the UI; falls back to `model` when unset
|
docs ↗ | ||
| models.max_context_size | string |
Maximum context length in tokens; must be at least 1
|
docs ↗ | ||
| models.max_input_size | string |
Declared per-request input limit; compaction, context-overflow checks, and usage ratios prefer it, completion budgeting keeps the total window
|
docs ↗ | ||
| models.max_output_size | string |
Per-request output token cap (maps to `max_tokens`); currently only the `anthropic` provider reads it
|
docs ↗ | ||
| models.model | string |
Model identifier sent to the server when calling the API
|
docs ↗ | ||
| models.off_effort | string |
Effort value sent on the wire to disable thinking (e.g. `none` for xai grok); the only way to actually stop reasoning on models that reason by default
|
docs ↗ | ||
| models.provider | string |
Name of the provider to use; must be defined in `providers`
|
docs ↗ | ||
| models.reasoning_key | string |
`openai` provider only; set when the gateway returns reasoning content under a non-standard field name (`reasoning_content` and friends are auto-detected)
|
docs ↗ | ||
| models.support_efforts | string |
Thinking effort levels the model accepts; unsupported values fall back to `default_effort`, out-of-list values fail; managed refreshes may rewrite it (pin via overrides)
|
docs ↗ | ||
| permission.decision | string |
Action on match: `allow` (permit immediately), `deny` (reject immediately), `ask` (prompt each time)
|
docs ↗ | ||
| permission.pattern | string |
Match pattern in the form `ToolName` or `ToolName(arg-pattern)`, e.g. `Read` or `Bash(rm -rf*)`
|
docs ↗ | ||
| permission.reason | string |
Rule description for debugging and auditing
|
docs ↗ | ||
| permission.scope | string |
Rule scope: `turn-override`, `session-runtime`, `project`, `user`; defaults to `user`
|
docs ↗ | ||
| providers.api_key | string |
API key, written in plain text in the config file
|
docs ↗ | ||
| providers.base_url | string |
API base URL
|
docs ↗ | ||
| providers.custom_headers | string |
Custom HTTP headers attached to each request
|
docs ↗ | ||
| providers.env | string |
Fallback source for provider credentials; see the `env` sub-table
|
docs ↗ | ||
| providers.oauth | string |
OAuth credential reference (`storage` and `key` fields); injected automatically by the login flow, so you normally never write this by hand
|
docs ↗ | ||
| providers.type | string |
Provider type: `kimi`, `anthropic`, `openai`, `openai_responses`, `google-genai`, `vertexai`
|
docs ↗ | ||
| services.api_key | string |
API key
|
docs ↗ | ||
| services.base_url | string |
Service API URL
|
docs ↗ | ||
| services.custom_headers | string |
Custom HTTP headers attached to each request
|
docs ↗ | ||
| services.oauth | string |
OAuth credential reference, same structure as `providers.*.oauth`
|
docs ↗ | ||
| subagent.timeout_ms | string |
Maximum wall-clock time (milliseconds) a single `Agent` subagent may run before it is settled as `timed_out`; `0` means no timeout
|
docs ↗ | ||
| swarm.timeout_ms | string |
Maximum wall-clock time (milliseconds) a single `AgentSwarm` subagent may run; on timeout it is aborted and the aggregated report marks `Subagent timed out.`; `0` means no timeout
|
docs ↗ | ||
| telemetry | string |
Whether anonymous telemetry is enabled; disabled only when explicitly set to `false`
|
docs ↗ | ||
| thinking.default_thinking | string | docs ↗ | |||
| thinking.effort | string |
Thinking effort: `low` / `medium` / `high` / `xhigh` / `max`; falls back to the model default when not in its supported list
|
docs ↗ | ||
| thinking.enabled | string |
Whether Thinking is enabled by default for new sessions; set to `false` to force Thinking off
|
docs ↗ | ||
| thinking.keep | string |
Preserved Thinking passthrough: `kimi` sends it as `thinking.keep`, `anthropic` as a `clear_thinking_20251015` edit (routes to the beta Messages API). An off-value disables it; overridden by `KIMI_MODEL_THINKING_KEEP`; injected only while Thinking is on
|
docs ↗ | ||
| thinking.loop_control.max_retries_per_step | string | docs ↗ | |||
| token_counting.strategy | string |
`measured+estimated` combines measured usage with an estimate of the unmeasured tail; `measured` reports provider usage alone, updated when a request completes; `estimated` is a pure estimate, for providers that do not report usage
|
docs ↗ | ||
| tools.disabled | string |
Global denylist, applied after `enabled`
|
docs ↗ | ||
| tools.enabled | string |
Global allowlist: when non-empty, only the listed tools are available; omitting the field or setting an empty array imposes no constraint
|
docs ↗ | ||
| tui.toml.cache_expiry_hint | string |
On resume or when submitting after a long idle stretch, warn that the context cache may have expired and offer to compact or start a new session (v2 engine only)
|
docs ↗ | ||
| tui.toml.disable_feedback_survey | string |
Disable the occasional session rating prompt above the input box
|
docs ↗ | ||
| tui.toml.disable_paste_burst | string |
Disable the non-bracketed paste-burst fallback that keeps rapid multi-line pastes from submitting line by line
|
docs ↗ | ||
| tui.toml.editor.command | string |
External editor command for composing long input; empty falls back to `$VISUAL` / `$EDITOR`
|
docs ↗ | ||
| tui.toml.notifications.enabled | string |
Whether desktop notifications are sent
|
docs ↗ | ||
| tui.toml.notifications.notification_condition | string |
When to notify: `unfocused` (only when the terminal is not focused) or `always`
|
docs ↗ | ||
| tui.toml.render_latex | string |
Render LaTeX math expressions in Markdown messages as Unicode text; `false` keeps the raw source
|
docs ↗ | ||
| tui.toml.status_line.command | string |
Custom status line command: its first stdout line replaces the footer, and a JSON snapshot is passed on stdin; capped at 300ms, throttled to once per second, failures fall back to the built-in layout
|
docs ↗ | ||
| tui.toml.status_line.items | string |
Built-in slots on the first footer line and their order: `mode`, `goal`, `model`, `tasks`, `cwd`, `git`, `tips`; unknown ids are skipped with a warning
|
docs ↗ | ||
| tui.toml.theme | string |
Color theme: `auto`, `dark`, `light`, or the name of a custom theme
|
docs ↗ | ||
| tui.toml.upgrade.auto_install | string |
Whether new versions are installed automatically
|
docs ↗ | ||
| workspace.additional_dir | string |
Additional workspace directories (absolute paths); written automatically when you confirm "remember this directory" in `/add-dir`, and available in every session of this project
|
docs ↗ |