NousResearch/hermes-agent

Moonshot/Kimi China domestic endpoint support

Cluster 8096. Data as of

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

The short answer

0open issues
0open PRs
5items grouped
Known?
Yes. 5 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 address adding and correcting a China-specific domestic provider configuration for Kimi/Moonshot users, ensuring the correct regional endpoint is used during setup and operation.

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.

3 PRs closed without merging

From the close comments: merged via another change 2 · other 1

  • #8166 fix: prompt for Moonshot platform during setup (moonshot.cn support) · merged via another change → #9172
  • #8212 feat: add moonshot-cn domestic provider for China-based Kimi/Moonshot users · other
  • #8856 fix(provider): correct moonshot-cn domestic provider for China-based Kimi/Moonshot users · merged via another change → #9172
Closed issues · 1
  • Closed#8096[Config issue]: Kimi/Moonshot provider defaults to wrong endpoint for China users
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.40: 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
3 PRs 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.