Full compaction slices the raw history, which can exclude a delayed tool result and leave its tool_use open in the compacted prefix, triggering the same strict-provider 400 on the summary request. Synthesize a placeholder tool_result for such calls when projecting the compacted prefix. Also sync the micro_compaction default to false in the en/zh configuration and env-var docs.
12 KiB
Environment variables
Kimi Code CLI uses environment variables to control a small number of runtime behaviors — relocating the data directory, turning off telemetry, and temporarily switching models without touching the config file.
::: warning Important: API keys are not configured here
Credential variables such as KIMI_API_KEY, ANTHROPIC_API_KEY, and OPENAI_API_KEY are not read automatically from shell environment variables. Running export KIMI_API_KEY=xxx in the terminal does not give any provider its key — they must be written in config.toml under [providers.<name>] or the [providers.<name>.env] sub-table.
The only exception is the KIMI_MODEL_* family, which is an explicit channel that does read credentials from the shell — see Define a model from environment variables.
For background, see Config overrides: provider credentials. :::
Core paths
KIMI_CODE_HOME
Overrides the data root directory; the default is ~/.kimi-code. Once set, the config file, sessions, logs, OAuth credentials, and all other data land under the new path:
export KIMI_CODE_HOME="/path/to/custom/kimi-code"
Make sure the directory is writable. Multiple
kimiinstances sharing the sameKIMI_CODE_HOMEwill share config and credential files.
For the complete data directory structure, see Data locations.
KIMI_DISABLE_TELEMETRY
Set to 1 to turn off anonymous telemetry reporting (also accepts true, yes, y, case-insensitive):
export KIMI_DISABLE_TELEMETRY=1
KIMI_MODEL_* family
Switch models temporarily without modifying config.toml — when KIMI_MODEL_NAME is set, the CLI synthesizes a temporary provider in memory; the change does not persist after restart. See Define a model from environment variables.
Provider credential key names (written in config.toml)
The key names below are not read directly from the shell — they are key names written inside the [providers.<name>.env] sub-table of config.toml, serving as fallback values for api_key / base_url. The CLI reads only from the config file, not from process.env.
This design lets you keep familiar key name conventions while centralizing secret management in the config file:
[providers.kimi.env]
KIMI_API_KEY = "sk-xxx"
KIMI_BASE_URL = "https://api.moonshot.ai/v1"
Key names per provider:
| Key | Applicable provider | Default |
|---|---|---|
KIMI_API_KEY |
Kimi / Moonshot | None |
KIMI_BASE_URL |
Kimi / Moonshot | https://api.moonshot.ai/v1 |
ANTHROPIC_API_KEY |
Anthropic | None |
ANTHROPIC_BASE_URL |
Anthropic | Follows Anthropic SDK default |
OPENAI_API_KEY |
OpenAI (openai and openai_responses) |
None |
OPENAI_BASE_URL |
OpenAI (openai and openai_responses) |
https://api.openai.com/v1 |
GOOGLE_API_KEY |
Google GenAI, Vertex AI | None |
VERTEXAI_API_KEY |
Vertex AI | None |
GOOGLE_CLOUD_PROJECT |
Vertex AI | None |
GOOGLE_CLOUD_LOCATION |
Vertex AI | None |
::: warning
GOOGLE_APPLICATION_CREDENTIALS (path to a service account JSON file) is the only exception that goes through the system environment variable mechanism — it is read by the Google SDK directly via the standard ADC flow, and the CLI does not participate. All other key names must be placed in the [providers.<name>.env] sub-table to take effect.
:::
For the full provider type and field reference, see Providers and models.
OAuth and managed services
This group of variables redirects OAuth authentication and managed service endpoints to a self-hosted or test environment. They are not needed for everyday use.
| Variable | Purpose | Default |
|---|---|---|
KIMI_CODE_OAUTH_HOST |
OAuth auth host; highest priority | Falls back to KIMI_OAUTH_HOST when unset |
KIMI_OAUTH_HOST |
OAuth auth host; fallback for KIMI_CODE_OAUTH_HOST |
Falls back to https://auth.kimi.com when unset |
KIMI_CODE_BASE_URL |
Managed API base URL used after OAuth login | https://api.kimi.com/coding/v1 |
::: warning
KIMI_CODE_BASE_URL (OAuth-managed service, targeting kimi.com) and KIMI_BASE_URL (direct API key connection, targeting moonshot.ai) are two distinct variables. Use each one in its appropriate context.
:::
Define a model from environment variables (KIMI_MODEL_*)
Want to switch models for testing without touching config.toml? When KIMI_MODEL_NAME is set, the CLI synthesizes a temporary provider and model alias from the KIMI_MODEL_* variables in memory — nothing is written back to the config file. These variables take priority over default_model in config.toml, but the -m <alias> option at startup still has the highest priority.
export KIMI_MODEL_NAME="kimi-for-coding"
export KIMI_MODEL_API_KEY="YOUR_API_KEY"
export KIMI_MODEL_BASE_URL="https://api.example.com/v1"
export KIMI_MODEL_MAX_CONTEXT_SIZE="262144"
export KIMI_MODEL_CAPABILITIES="image_in,thinking"
kimi
Complete variable list:
| Variable | Required | Purpose | Default |
|---|---|---|---|
KIMI_MODEL_NAME |
Yes (also the enable switch) | Model id sent to the API | — |
KIMI_MODEL_API_KEY |
Yes | API key | — |
KIMI_MODEL_PROVIDER_TYPE |
No | Provider type: kimi, anthropic, openai |
kimi |
KIMI_MODEL_BASE_URL |
No | API base URL | Each type has its own default |
KIMI_MODEL_MAX_CONTEXT_SIZE |
No | Maximum context length (tokens) | 262144 (256 K) |
KIMI_MODEL_CAPABILITIES |
No | Comma-separated capability tags, unioned with auto-detected capabilities | image_in,thinking |
KIMI_MODEL_DISPLAY_NAME |
No | Name shown in /model |
Falls back to KIMI_MODEL_NAME |
KIMI_MODEL_MAX_OUTPUT_SIZE |
No | Per-request output cap (anthropic only) |
Model default |
KIMI_MODEL_REASONING_KEY |
No | Reasoning field name override (openai only) |
Auto-detected |
KIMI_MODEL_DEFAULT_THINKING |
No | Default Thinking toggle for new sessions | Follows global default |
KIMI_MODEL_THINKING_MODE |
No | Thinking trigger policy: auto/on/off |
— |
KIMI_MODEL_THINKING_EFFORT |
No | Thinking effort level: low/medium/high/xhigh/max |
— |
KIMI_MODEL_ADAPTIVE_THINKING |
No | Force adaptive thinking on or off (anthropic only) |
Inferred from model name |
If KIMI_MODEL_NAME is set but a required variable is missing, startup fails immediately with a clear error message.
Runtime switches
Switches that control the behavior of subsystems such as telemetry, background tasks, and the plugin marketplace:
| Variable | Purpose | Valid values |
|---|---|---|
KIMI_DISABLE_TELEMETRY |
Disable anonymous telemetry reporting | 1, true, yes, y (case-insensitive) |
KIMI_CODE_BACKGROUND_KEEP_ALIVE_ON_EXIT |
Whether to keep background tasks when the session closes; takes higher priority than config.toml. The default is to stop them on exit |
Truthy: 1/true/yes/on; falsy: 0/false/no/off |
KIMI_CODE_PLUGIN_MARKETPLACE_URL |
Override the plugin marketplace JSON loaded by /plugins; useful for dev loopback servers, staging CDN files, or alternate marketplace directories |
https://code.kimi.com/kimi-code/plugins/marketplace.json; also accepts http://, file:// URLs, and local paths |
KIMI_CODE_AGENT_SWARM_MAX_CONCURRENCY |
Cap how many AgentSwarm subagents run concurrently during the initial ramp; leave unset for no cap | Positive integer; invalid values fail fast |
KIMI_CODE_EXPERIMENTAL_FLAG |
Enable all registered experimental features for this process | 1, true, yes, on |
KIMI_CODE_EXPERIMENTAL_MICRO_COMPACTION |
Override [experimental].micro_compaction for this process |
Truthy or falsy |
KIMI_SHELL_PATH |
Override the Git Bash path on Windows (used when auto-detection fails) | Absolute path |
KIMI_MODEL_MAX_COMPLETION_TOKENS |
Hard cap on max_completion_tokens per LLM step; applies to the kimi provider only |
Positive integer; 0 or negative disables clamping |
KIMI_MODEL_TEMPERATURE |
Sampling temperature for every request; applies to the kimi provider only (global — independent of KIMI_MODEL_NAME) |
Number, e.g. 0.3 |
KIMI_MODEL_TOP_P |
Nucleus-sampling top_p for every request; applies to the kimi provider only (global) |
Number, e.g. 0.95 |
KIMI_MODEL_THINKING_KEEP |
Moonshot preserved-thinking passthrough (thinking.keep); applies to the kimi provider only, and only while Thinking is on |
A value the API accepts, e.g. all |
KIMI_CODE_NO_AUTO_UPDATE |
Fully disable the update preflight — no check, background install, or prompt. Legacy alias KIMI_CLI_NO_AUTO_UPDATE is also honored |
Truthy: 1/true/yes/on |
KIMI_DISABLE_CRON |
Disable the scheduled-task tool (CronCreate rejects new schedules; existing tasks do not fire) |
1 to disable |
Diagnostic logs
These variables control log level and file rotation, read once at process startup:
| Variable | Purpose | Default |
|---|---|---|
KIMI_LOG_LEVEL |
Log level: off, error, warn, info, debug |
info |
KIMI_LOG_GLOBAL_MAX_BYTES |
Maximum bytes per global log file | 6291456 (6 MB) |
KIMI_LOG_GLOBAL_FILES |
Number of global log files to retain | 5 |
KIMI_LOG_SESSION_MAX_BYTES |
Maximum bytes per session log file | 5242880 (5 MB) |
KIMI_LOG_SESSION_FILES |
Number of session log files to retain | 3 |
System environment variables
The CLI also reads several standard system variables to detect the runtime environment; it does not modify them:
HOME: used to resolve the default data pathVISUAL,EDITOR: external editor command (VISUALtakes precedence)PATH: used to locate dependencies such asrg,fd,fdfind, andgit; on Windows, Git Bash detection checks eachgit.exefound onPATH, including package-manager shims such as ScoopNO_COLOR,FORCE_COLOR: control color output (following the no-color.org convention)CI: when non-empty and not"0", disables theme detection and falls back to the dark themeTERM_PROGRAM,TERM,TMUX: detect terminal features and notification supportDISPLAY,WAYLAND_DISPLAY,XDG_SESSION_TYPE: detect Linux graphical sessions (for clipboard and image features)WSL_DISTRO_NAME,WSLENV: detect WSL for the clipboard PowerShell bridgeLOCALAPPDATA: used on Windows as a fallback when probing for the Git Bash installation path
HTTP proxy
Kimi Code honors the standard proxy environment variables for all outbound traffic — model API calls, MCP servers, web tools, telemetry, sign-in, and update checks:
HTTP_PROXY/http_proxy: proxy forhttp://requestsHTTPS_PROXY/https_proxy: proxy forhttps://requestsALL_PROXY/all_proxy: fallback proxy used when the scheme-specific variable is unset; this is where a SOCKS proxy is usually setNO_PROXY/no_proxy: comma-separated hosts that bypass the proxy
Both HTTP(S) and SOCKS proxies are supported. A SOCKS proxy is recognized by its scheme — socks5://, socks5h://, socks4://, or socks:// (an alias for socks5://) — and is typically set via ALL_PROXY (the form used by tools like Clash and V2RayN). An HTTP(S) proxy takes precedence over ALL_PROXY for HTTP/HTTPS traffic.
The proxy is applied only when one of these variables is set; otherwise connections are made directly. Loopback hosts (localhost, 127.0.0.1, ::1) always bypass the proxy, so a local server such as a localhost MCP server keeps working when a proxy is configured — add your own internal hosts to NO_PROXY to exempt them too.
Stdio MCP servers that run as Node child processes honor HTTP_PROXY / HTTPS_PROXY / NO_PROXY automatically when the child's Node version supports NODE_USE_ENV_PROXY (Node ≥ 22.21 or ≥ 24.5); SOCKS proxying applies to Kimi Code's own traffic only.
Next steps
- Config overrides — how environment variables, CLI options, and the config file interact by priority
- Data locations — directory structure affected by
KIMI_CODE_HOME - Providers and models — full connection examples per provider type