NousResearch/hermes-agent

Kimi China provider addition and bug fixes

Cluster 8825. Data as of

Nothing open on GitHub. Fix merged in #9172 on 13 Apr 2026. Check it covers your case.

The short answer

0open issues
0open PRs
3items grouped
Known?
Yes. 3 related items grouped here, 1 issue already closed.
Fix event
A fix was merged to main in PR #9172. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this unresolved. That is separate from the fix event.
Still open
Nothing open on GitHub.

These issues and pull requests cover adding the kimi-coding-cn provider for mainland China users and addressing related bugs, including URL resolution and alias mapping problems.

Open issues0

No open issues.

Open PRs0

No open pull requests.

Fixes on record

Merged to main. A stamp counts the issues a fix is linked to.

  • #9172 feat(providers): add kimi-coding-cn provider for mainland China users

    merged to main

    files: .env.example, agent/auxiliary_client.py, agent/model_metadata.py, agent/models_dev.py, hermes_cli/auth.py, hermes_cli/config.py, hermes_cli/doctor.py, hermes_cli/main.py, hermes_cli/model_normalize.py, hermes_cli/models.py, hermes_cli/providers.py, hermes_cli/runtime_provider.py, hermes_cli/setup.py, trajectory_compressor.py, website/docs/getting-started/quickstart.md, website/docs/integrations/providers.md, website/docs/reference/environment-variables.md, website/docs/user-guide/configuration.md

    Show the diff
    • .env.example
      @@ -43,6 +43,7 @@
       # KIMI_BASE_URL=https://api.kimi.com/coding/v1  # Default for sk-kimi- keys
       # KIMI_BASE_URL=https://api.moonshot.ai/v1      # For legacy Moonshot keys
       # KIMI_BASE_URL=https://api.moonshot.cn/v1       # For Moonshot China keys
      +# KIMI_CN_API_KEY=                               # Dedicated Moonshot China key
       
       # =============================================================================
       # LLM PROVIDER (MiniMax)
    • agent/auxiliary_client.py
      @@ -64,6 +64,8 @@
           "zhipu": "zai",
           "kimi": "kimi-coding",
           "moonshot": "kimi-coding",
      +    "kimi-cn": "kimi-coding-cn",
      +    "moonshot-cn": "kimi-coding-cn",
           "minimax-china": "minimax-cn",
           "minimax_cn": "minimax-cn",
           "claude": "anthropic",
      @@ -94,6 +96,7 @@ def _normalize_aux_provider(provider: Optional[str]) -> str:
           "gemini": "gemini-3-flash-preview",
           "zai": "glm-4.5-flash",
           "kimi-coding": "kimi-k2-turbo-preview",
      +    "kimi-coding-cn": "kimi-k2-turbo-preview",
           "minimax": "MiniMax-M2.7",
           "minimax-cn": "MiniMax-M2.7",
           "anthropic": "claude-haiku-4-5-20251001",
    • agent/model_metadata.py
      @@ -24,7 +24,7 @@
       # are preserved so the full model name reaches cache lookups and server queries.
       _PROVIDER_PREFIXES: frozenset[str] = frozenset({
           "openrouter", "nous", "openai-codex", "copilot", "copilot-acp",
      -    "gemini", "zai", "kimi-coding", "minimax", "minimax-cn", "anthropic", "deepseek",
      +    "gemini", "zai", "kimi-coding", "kimi-coding-cn", "minimax", "minimax-cn", "anthropic", "deepseek",
           "opencode-zen", "opencode-go", "ai-gateway", "kilocode", "alibaba",
           "qwen-oauth",
           "xiaomi",
      @@ -32,7 +32,7 @@
           # Common aliases
           "google", "google-gemini", "google-ai-studio",
           "glm", "z-ai", "z.ai", "zhipu", "github", "github-copilot",
      -    "github-models", "kimi", "moonshot", "claude", "deep-seek",
      +    "github-models", "kimi", "moonshot", "kimi-cn", "moonshot-cn", "claude", "deep-seek",
           "opencode", "zen", "go", "vercel", "kilo", "dashscope", "aliyun", "qwen",
           "mimo", "xiaomi-mimo",
           "qwen-portal",
      @@ -211,6 +211,7 @@ def _is_custom_endpoint(base_url: str) -> bool:
           "api.anthropic.com": "anthropic",
           "api.z.ai": "zai",
           "api.moonshot.ai": "kimi-coding",
      +    "api.moonshot.cn": "kimi-coding-cn",
           "api.kimi.com": "kimi-coding",
           "api.minimax": "minimax",
           "dashscope.aliyuncs.com": "alibaba",
    • agent/models_dev.py
      @@ -148,6 +148,7 @@ class ProviderInfo:
           "openai-codex": "openai",
           "zai": "zai",
           "kimi-coding": "kimi-for-coding",
      +    "kimi-coding-cn": "kimi-for-coding",
           "minimax": "minimax",
           "minimax-cn": "minimax-cn",
           "deepseek": "deepseek",
    • hermes_cli/auth.py
      @@ -160,6 +160,13 @@ class ProviderConfig:
               api_key_env_vars=("KIMI_API_KEY",),
               base_url_env_var="KIMI_BASE_URL",
           ),
      +    "kimi-coding-cn": ProviderConfig(
      +        id="kimi-coding-cn",
      +        name="Kimi / Moonshot (China)",
      +        auth_type="api_key",
      +        inference_base_url="https://api.moonshot.cn/v1",
      +        api_key_env_vars=("KIMI_CN_API_KEY",),
      +    ),
           "minimax": ProviderConfig(
               id="minimax",
               name="MiniMax",
      @@ -892,6 +899,7 @@ def resolve_provider(
               "glm": "zai", "z-ai": "zai", "z.ai": "zai", "zhipu": "zai",
               "google": "gemini", "google-gemini": "gemini", "google-ai-studio": "gemini",
               "kimi": "kimi-coding", "kimi-for-coding": "kimi-coding", "moonshot": "kimi-coding",
      +        "kimi-cn": "kimi-coding-cn", "moonshot-cn": "kimi-coding-cn",
               "minimax-china": "minimax-cn", "minimax_cn": "minimax-cn",
               "claude": "anthropic", "claude-code": "anthropic",
               "github": "copilot", "github-copilot": "copilot",
    • hermes_cli/config.py
      @@ -816,6 +816,14 @@ def _ensure_hermes_home_managed(home: Path):
               "category": "provider",
               "advanced": True,
           },
      +    "KIMI_CN_API_KEY": {
      +        "description": "Kimi / Moonshot China API key",
      +        "prompt": "Kimi (China) API key",
      +        "url": "https://platform.moonshot.cn/",
      +        "password": True,
      +        "category": "provider",
      +        "advanced": True,
      +    },
           "MINIMAX_API_KEY": {
               "description": "MiniMax API key (international)",
               "prompt": "MiniMax API key",
      @@ -2452,6 +2460,7 @@ def load_config() -> Dict[str, Any]:
       #   nous         (OAuth — hermes auth) — Nous Portal
       #   zai          (ZAI_API_KEY)         — Z.AI / GLM
       #   kimi-coding  (KIMI_API_KEY)        — Kimi / Moonshot
      +#   kimi-coding-cn (KIMI_CN_API_KEY)   — Kimi / Moonshot (China)
       #   minimax      (MINIMAX_API_KEY)     — MiniMax
       #   minimax-cn   (MINIMAX_CN_API_KEY)  — MiniMax (China)
       #
      @@ -2495,6 +2504,7 @@ def load_config() -> Dict[str, Any]:
       #   nous         (OAuth — hermes auth) — Nous Portal
       #   zai          (ZAI_API_KEY)         — Z.AI / GLM
       #   kimi-coding  (KIMI_API_KEY)        — Kimi / Moonshot
      +#   kimi-coding-cn (KIMI_CN_API_KEY)   — Kimi / Moonshot (China)
       #   minimax      (MINIMAX_API_KEY)     — MiniMax
       #   minimax-cn   (MINIMAX_CN_API_KEY)  — MiniMax (China)
       #
    • hermes_cli/doctor.py
      @@ -721,6 +721,7 @@ def run_doctor(args):
           _apikey_providers = [
               ("Z.AI / GLM",      ("GLM_API_KEY", "ZAI_API_KEY", "Z_AI_API_KEY"), "https://api.z.ai/api/paas/v4/models", "GLM_BASE_URL", True),
               ("Kimi / Moonshot",  ("KIMI_API_KEY",),                              "https://api.moonshot.ai/v1/models",   "KIMI_BASE_URL", True),
      +        ("Kimi / Moonshot (China)", ("KIMI_CN_API_KEY",),                    "https://api.moonshot.cn/v1/models",   None, True),
               ("DeepSeek",         ("DEEPSEEK_API_KEY",),                           "https://api.deepseek.com/v1/models",  "DEEPSEEK_BASE_URL", True),
               ("Hugging Face",     ("HF_TOKEN",),                                   "https://router.huggingface.co/v1/models", "HF_BASE_URL", True),
               ("Alibaba/DashScope", ("DASHSCOPE_API_KEY",),                         "https://dashscope-intl.aliyuncs.com/compatible-mode/v1/models", "DASHSCOPE_BASE_URL", True),
    • hermes_cli/main.py
      @@ -1045,6 +1045,7 @@ def select_provider_and_model(args=None):
               "gemini": "Google AI Studio",
               "zai": "Z.AI / GLM",
               "kimi-coding": "Kimi / Moonshot",
      +        "kimi-coding-cn": "Kimi / Moonshot (China)",
               "minimax": "MiniMax",
               "minimax-cn": "MiniMax (China)",
               "opencode-zen": "OpenCode Zen",
      @@ -1079,6 +1080,7 @@ def select_provider_and_model(args=None):
               ("gemini", "Google AI Studio (Gemini models — OpenAI-compatible endpoint)"),
               ("zai", "Z.AI / GLM (Zhipu AI direct API)"),
               ("kimi-coding", "Kimi / Moonshot (Moonshot AI direct API)"),
      +        ("kimi-coding-cn", "Kimi / Moonshot China (Moonshot CN direct API)"),
               ("minimax", "MiniMax (global direct API)"),
               ("minimax-cn", "MiniMax China (domestic direct API)"),
               ("kilocode", "Kilo Code (Kilo Gateway API)"),
      @@ -1205,7 +1207,7 @@ def _named_custom_provider_map(cfg) -> dict[str, dict[str, str]]:
               _model_flow_anthropic(config, current_model)
           elif selected_provider == "kimi-coding":
               _model_flow_kimi(config, current_model)
      -    elif selected_provider in ("gemini", "zai", "minimax", "minimax-cn", "kilocode", "opencode-zen", "opencode-go", "ai-gateway", "alibaba", "huggingface", "xiaomi"):
      +    elif selected_provider in ("gemini", "zai", "kimi-coding-cn", "minimax", "minimax-cn", "kilocode", "opencode-zen", "opencode-go", "ai-gateway", "alibaba", "huggingface", "xiaomi"):
               _model_flow_api_key_provider(config, selected_provider, current_model)
       
           # ── Post-switch cleanup: clear stale OPENAI_BASE_URL ──────────────
      @@ -4626,7 +4628,7 @@ def main():
           )
           chat_parser.add_argument(
               "--provider",
      -        choices=["auto", "openrouter", "nous", "openai-codex", "copilot-acp", "copilot", "anthropic", "gemini", "huggingface", "zai", "kimi-coding", "minimax", "minimax-cn", "kilocode", "xiaomi"],
      +        choices=["auto", "openrouter", "nous", "openai-codex", "copilot-acp", "copilot", "anthropic", "gemini", "huggingface", "zai", "kimi-coding", "kimi-coding-cn", "minimax", "minimax-cn", "kilocode", "xiaomi"],
               default=None,
               help="Inference provider (default: auto)"
           )
    • hermes_cli/model_normalize.py
      @@ -88,6 +88,7 @@
       _MATCHING_PREFIX_STRIP_PROVIDERS: frozenset[str] = frozenset({
           "zai",
           "kimi-coding",
      +    "kimi-coding-cn",
           "minimax",
           "minimax-cn",
           "alibaba",
    • hermes_cli/models.py
      @@ -158,6 +158,12 @@ def _codex_curated_models() -> list[str]:
               "kimi-k2-turbo-preview",
               "kimi-k2-0905-preview",
           ],
      +    "kimi-coding-cn": [
      +        "kimi-k2.5",
      +        "kimi-k2-thinking",
      +        "kimi-k2-turbo-preview",
      +        "kimi-k2-0905-preview",
      +    ],
           "moonshot": [
               "kimi-k2.5",
               "kimi-k2-thinking",
      @@ -488,6 +494,7 @@ def check_nous_free_tier() -> bool:
           "gemini": "Google AI Studio",
           "zai": "Z.AI / GLM",
           "kimi-coding": "Kimi / Moonshot",
      +    "kimi-coding-cn": "Kimi / Moonshot (China)",
           "minimax": "MiniMax",
           "minimax-cn": "MiniMax (China)",
           "anthropic": "Anthropic",
      @@ -519,6 +526,8 @@ def check_nous_free_tier() -> bool:
           "google-ai-studio": "gemini",
           "kimi": "kimi-coding",
           "moonshot": "kimi-coding",
      +    "kimi-cn": "kimi-coding-cn",
      +    "moonshot-cn": "kimi-coding-cn",
           "minimax-china": "minimax-cn",
           "minimax_cn": "minimax-cn",
           "claude": "anthropic",
      @@ -841,7 +850,7 @@ def list_available_providers() -> list[dict[str, str]]:
           _PROVIDER_ORDER = [
               "openrouter", "nous", "openai-codex", "copilot", "copilot-acp",
               "gemini", "huggingface",
      -        "zai", "kimi-coding", "minimax", "minimax-cn", "kilocode", "anthropic", "alibaba",
      +        "zai", "kimi-coding", "kimi-coding-cn", "minimax", "minimax-cn", "kilocode", "anthropic", "alibaba",
               "qwen-oauth", "xiaomi",
               "opencode-zen", "opencode-go",
               "ai-gateway", "deepseek", "custom",
    • hermes_cli/providers.py
      @@ -179,6 +179,7 @@ class ProviderDef:
           # kimi-for-coding (models.dev ID)
           "kimi": "kimi-for-coding",
           "kimi-coding": "kimi-for-coding",
      +    "kimi-coding-cn": "kimi-for-coding",
           "moonshot": "kimi-for-coding",
       
           # minimax-cn
    • hermes_cli/runtime_provider.py
      @@ -608,7 +608,7 @@ def _resolve_explicit_runtime(
       
               base_url = explicit_base_url
               if not base_url:
      -            if provider == "kimi-coding":
      +            if provider in ("kimi-coding", "kimi-coding-cn"):
                       creds = resolve_api_key_provider_credentials(provider)
                       base_url = creds.get("base_url", "").rstrip("/")
                   else:
    • hermes_cli/setup.py
      @@ -106,6 +106,7 @@ def _supports_same_provider_pool_setup(provider: str) -> bool:
           ],
           "zai": ["glm-5.1", "glm-5", "glm-4.7", "glm-4.5", "glm-4.5-flash"],
           "kimi-coding": ["kimi-k2.5", "kimi-k2-thinking", "kimi-k2-turbo-preview"],
      +    "kimi-coding-cn": ["kimi-k2.5", "kimi-k2-thinking", "kimi-k2-turbo-preview"],
           "minimax": ["MiniMax-M2.7", "MiniMax-M2.5", "MiniMax-M2.1", "MiniMax-M2"],
           "minimax-cn": ["MiniMax-M2.7", "MiniMax-M2.5", "MiniMax-M2.1", "MiniMax-M2"],
           "ai-gateway": ["anthropic/claude-opus-4.6", "anthropic/claude-sonnet-4.6", "openai/gpt-5", "google/gemini-3-flash"],
      @@ -815,6 +816,7 @@ def setup_model_provider(config: dict, *, quick: bool = False):
                   "copilot-acp": "GitHub Copilot ACP",
                   "zai": "Z.AI / GLM",
                   "kimi-coding": "Kimi / Moonshot",
      +            "kimi-coding-cn": "Kimi / Moonshot (China)",
                   "minimax": "MiniMax",
                   "minimax-cn": "MiniMax CN",
                   "anthropic": "Anthropic",
    • trajectory_compressor.py
      @@ -415,7 +415,7 @@ def _detect_provider(self) -> str:
                   return "codex"
               if "api.z.ai" in url:
                   return "zai"
      -        if "moonshot.ai" in url or "api.kimi.com" in url:
      +        if "moonshot.ai" in url or "moonshot.cn" in url or "api.kimi.com" in url:
                   return "kimi-coding"
               if "minimaxi.com" in url:
                   return "minimax-cn"
    • website/docs/getting-started/quickstart.md
      @@ -51,6 +51,7 @@ hermes setup       # Or configure everything at once
       | **OpenRouter** | Multi-provider routing across many models | Enter your API key |
       | **Z.AI** | GLM / Zhipu-hosted models | Set `GLM_API_KEY` / `ZAI_API_KEY` |
       | **Kimi / Moonshot** | Moonshot-hosted coding and chat models | Set `KIMI_API_KEY` |
      +| **Kimi / Moonshot China** | China-region Moonshot endpoint | Set `KIMI_CN_API_KEY` |
       | **MiniMax** | International MiniMax endpoint | Set `MINIMAX_API_KEY` |
       | **MiniMax China** | China-region MiniMax endpoint | Set `MINIMAX_CN_API_KEY` |
       | **Alibaba Cloud** | Qwen models via DashScope | Set `DASHSCOPE_API_KEY` |
    • website/docs/integrations/providers.md
      @@ -23,6 +23,7 @@ You need at least one way to connect to an LLM. Use `hermes model` to switch pro
       | **AI Gateway** | `AI_GATEWAY_API_KEY` in `~/.hermes/.env` (provider: `ai-gateway`) |
       | **z.ai / GLM** | `GLM_API_KEY` in `~/.hermes/.env` (provider: `zai`) |
       | **Kimi / Moonshot** | `KIMI_API_KEY` in `~/.hermes/.env` (provider: `kimi-coding`) |
      +| **Kimi / Moonshot (China)** | `KIMI_CN_API_KEY` in `~/.hermes/.env` (provider: `kimi-coding-cn`; aliases: `kimi-cn`, `moonshot-cn`) |
       | **MiniMax** | `MINIMAX_API_KEY` in `~/.hermes/.env` (provider: `minimax`) |
       | **MiniMax China** | `MINIMAX_CN_API_KEY` in `~/.hermes/.env` (provider: `minimax-cn`) |
       | **Alibaba Cloud** | `DASHSCOPE_API_KEY` in `~/.hermes/.env` (provider: `alibaba`, aliases: `dashscope`, `qwen`) |
      @@ -143,10 +144,14 @@ These providers have built-in support with dedicated provider IDs. Set the API k
       hermes chat --provider zai --model glm-5
       # Requires: GLM_API_KEY in ~/.hermes/.env
       
      -# Kimi / Moonshot AI
      +# Kimi / Moonshot AI (international: api.moonshot.ai)
       hermes chat --provider kimi-coding --model kimi-for-coding
       # Requires: KIMI_API_KEY in ~/.hermes/.env
       
      +# Kimi / Moonshot AI (China: api.moonshot.cn)
      +hermes chat --provider kimi-coding-cn --model kimi-k2.5
      +# Requires: KIMI_CN_API_KEY in ~/.hermes/.env
      +
       # MiniMax (global endpoint)
       hermes chat --provider minimax --model MiniMax-M2.7
       # Requires: MINIMAX_API_KEY in ~/.hermes/.env
      @@ -167,7 +172,7 @@ hermes chat --provider xiaomi --model mimo-v2-pro
       Or set the provider permanently in `config.yaml`:
       ```yaml
       model:
      -  provider: "zai"       # or: kimi-coding, minimax, minimax-cn, alibaba, xiaomi
      +  provider: "zai"       # or: kimi-coding, kimi-coding-cn, minimax, minimax-cn, alibaba, xiaomi
         default: "glm-5"
       ```
       
      @@ -854,7 +859,7 @@ You can also select named custom providers from the interactive `hermes model` m
       | **Cost optimization** | ClawRouter or OpenRouter with `sort: "price"` |
       | **Maximum privacy** | Ollama, vLLM, or llama.cpp (fully local) |
       | **Enterprise / Azure** | Azure OpenAI with custom endpoint |
      -| **Chinese AI models** | z.ai (GLM), Kimi/Moonshot, MiniMax, or Xiaomi MiMo (first-class providers) |
      +| **Chinese AI models** | z.ai (GLM), Kimi/Moonshot (`kimi-coding` or `kimi-coding-cn`), MiniMax, or Xiaomi MiMo (first-class providers) |
       
       :::tip
       You can switch between providers at any time with `hermes model` — no restart required. Your conversation history, memory, and skills carry over regardless of which provider you use.
      @@ -929,7 +934,7 @@ fallback_model:
       
       When activated, the fallback swaps the model and provider mid-session without losing your conversation. It fires **at most once** per session.
       
      -Supported providers: `openrouter`, `nous`, `openai-codex`, `copilot`, `copilot-acp`, `anthropic`, `huggingface`, `zai`, `kimi-coding`, `minimax`, `minimax-cn`, `deepseek`, `ai-gateway`, `opencode-zen`, `opencode-go`, `kilocode`, `xiaomi`, `alibaba`, `custom`.
      +Supported providers: `openrouter`, `nous`, `openai-codex`, `copilot`, `copilot-acp`, `anthropic`, `huggingface`, `zai`, `kimi-coding`, `kimi-coding-cn`, `minimax`, `minimax-cn`, `deepseek`, `ai-gateway`, `opencode-zen`, `opencode-go`, `kilocode`, `xiaomi`, `alibaba`, `custom`.
       
       :::tip
       Fallback is configured exclusively through `config.yaml` — there are no environment variables for it. For full details on when it triggers, supported providers, and how it interacts with auxiliary tasks and delegation, see [Fallback Providers](/docs/user-guide/features/fallback-providers).
    • website/docs/reference/environment-variables.md
      @@ -31,6 +31,7 @@ All variables go in `~/.hermes/.env`. You can also set them with `hermes config
       | `GLM_BASE_URL` | Override z.ai base URL (default: `https://api.z.ai/api/paas/v4`) |
       | `KIMI_API_KEY` | Kimi / Moonshot AI API key ([moonshot.ai](https://platform.moonshot.ai)) |
       | `KIMI_BASE_URL` | Override Kimi base URL (default: `https://api.moonshot.ai/v1`) |
      +| `KIMI_CN_API_KEY` | Kimi / Moonshot China API key ([moonshot.cn](https://platform.moonshot.cn)) |
       | `MINIMAX_API_KEY` | MiniMax API key — global endpoint ([minimax.io](https://www.minimax.io)) |
       | `MINIMAX_BASE_URL` | Override MiniMax base URL (default: `https://api.minimax.io/v1`) |
       | `MINIMAX_CN_API_KEY` | MiniMax API key — China endpoint ([minimaxi.com](https://www.minimaxi.com)) |
      @@ -67,7 +68,7 @@ For native Anthropic auth, Hermes prefers Claude Code's own credential files whe
       
       | Variable | Description |
       |----------|-------------|
      -| `HERMES_INFERENCE_PROVIDER` | Override provider selection: `auto`, `openrouter`, `nous`, `openai-codex`, `copilot`, `copilot-acp`, `anthropic`, `huggingface`, `zai`, `kimi-coding`, `minimax`, `minimax-cn`, `kilocode`, `xiaomi`, `alibaba`, `deepseek`, `opencode-zen`, `opencode-go`, `ai-gateway` (default: `auto`) |
      +| `HERMES_INFERENCE_PROVIDER` | Override provider selection: `auto`, `openrouter`, `nous`, `openai-codex`, `copilot`, `copilot-acp`, `anthropic`, `huggingface`, `zai`, `kimi-coding`, `kimi-coding-cn`, `minimax`, `minimax-cn`, `kilocode`, `xiaomi`, `alibaba`, `deepseek`, `opencode-zen`, `opencode-go`, `ai-gateway` (default: `auto`) |
       | `HERMES_PORTAL_BASE_URL` | Override Nous Portal URL (for development/testing) |
       | `NOUS_INFERENCE_BASE_URL` | Override Nous inference API URL |
       | `HERMES_NOUS_MIN_KEY_TTL_SECONDS` | Min agent key TTL before re-mint (default: 1800 = 30min) |
    • website/docs/user-guide/configuration.md
      @@ -601,7 +601,7 @@ Every model slot in Hermes — auxiliary tasks, compression, fallback — uses t
       
       When `base_url` is set, Hermes ignores the provider and calls that endpoint directly (using `api_key` or `OPENAI_API_KEY` for auth). When only `provider` is set, Hermes uses that provider's built-in auth and base URL.
       
      -Available providers for auxiliary tasks: `auto`, `openrouter`, `nous`, `codex`, `copilot`, `anthropic`, `main`, `zai`, `kimi-coding`, `minimax`, any provider registered in the [provider registry](/docs/reference/environment-variables), or any named custom provider from your `custom_providers` list (e.g. `provider: "beans"`).
      +Available providers for auxiliary tasks: `auto`, `openrouter`, `nous`, `codex`, `copilot`, `anthropic`, `main`, `zai`, `kimi-coding`, `kimi-coding-cn`, `minimax`, any provider registered in the [provider registry](/docs/reference/environment-variables), or any named custom provider from your `custom_providers` list (e.g. `provider: "beans"`).
       
       :::warning `"main"` is for auxiliary tasks only
       The `"main"` provider option means "use whatever provider my main agent uses" — it's only valid inside `auxiliary:`, `compression:`, and `fallback_model:` configs. It is **not** a valid value for your top-level `model.provider` setting. If you use a custom OpenAI-compatible endpoint, set `provider: custom` in your `model:` section. See [AI Providers](/docs/integrations/providers) for all main model provider options.

1 PR closed without merging

From the close comments: merged via another change 1

  • #7637 feat(providers): add Kimi / Moonshot China to Providers · merged via another change → #9172, #8900, #8856, #8166
Closed issues · 1
  • Closed#8825[Feature]: Add Kimi / Moonshot China to Providers (kimi-coding-cn)
How this cluster was grouped
  • Link evidence (structural links throughout): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
  • Pairwise link density 0.67: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. 1.00 means every pair is linked.

Pick up a Lab task

Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.

Open the Lab

At a glance

Merged PRs
#9172
Closed issues
1
Attempts
1 PR closed without merging
Fix link checked
13 Apr 2026. This confirmation is old and may be out of date (a revert or reopen would not have invalidated it here); re-verify.

For your agent

The same facts, typed.