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.
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=1KIMI_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"
kimiComplete 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 | Truthy: 1/true/yes/on; falsy: 0/false/no/off |
KIMI_CODE_PLUGIN_MARKETPLACE_URL | Override the plugin marketplace JSON loaded by /plugins | URL or local path |
KIMI_CODE_EXPERIMENTAL_FLAG | Enable all experimental features for this process; takes higher priority than [experimental] in config.toml | 1, true, yes, on |
KIMI_CODE_EXPERIMENTAL_GOAL_COMMAND | Override [experimental].goal_command for this process | Truthy or falsy |
KIMI_CODE_EXPERIMENTAL_MICRO_COMPACTION | Override [experimental].micro_compaction for this process | Truthy or falsy |
KIMI_CODE_EXPERIMENTAL_BACKGROUND_ASK | Override [experimental].background_ask 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 asrgandgitNO_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 when probing for the Git Bash installation path
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