# NousResearch/hermes-agent · Moonshot/Kimi China domestic endpoint support

## Open now

- 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.

## TL;DR

- 5 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 3 PR(s) closed without merging.
- A fix was merged to main in PR #9172. Verify it addresses your case.
- **Recommended:** read PR #9172 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `unresolved`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.40`: the share of member 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.

## Closed / duplicate issues

- #8096: \[Config issue\]:  Kimi/Moonshot provider defaults to wrong endpoint for China users

## Prior & competing PRs

- **#9172: feat(providers): add kimi-coding-cn provider for mainland China users**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - 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`
  - fix hunks:
  - `.env.example`

    ```diff
    @@ -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`

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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`

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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)
     #
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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`

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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)"),
    ```

    ```diff
    @@ -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 ──────────────
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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`

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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",
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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`

    ```diff
    @@ -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`

    ```diff
    @@ -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"],
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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`

    ```diff
    @@ -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`

    ```diff
    @@ -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`) |
    ```

    ```diff
    @@ -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
    ```

    ```diff
    @@ -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"
     ```
     
    ```

    ```diff
    @@ -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.
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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)) |
    ```

    ```diff
    @@ -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`

    ```diff
    @@ -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.
    ```
- **#8166: fix: prompt for Moonshot platform during setup (moonshot.cn support)**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#9172`
- **#8212: feat: add moonshot-cn domestic provider for China-based Kimi/Moonshot users**. closed without merge
  - maintainer direction: category `uncategorized`; implication `needs_llm`
- **#8856: fix(provider): correct moonshot-cn domestic provider for China-based Kimi/Moonshot users**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#9172`

## Fix status

- Merged to main in PR #9172 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-04-13`. This confirmation is old and may be out of date (a revert/reopen would not have invalidated it here); re-verify.
