Runtime: GLM (Zhipu) worker via Claude Code over z.ai — proven live
ci / gates (push) Has been cancelled
ci / rust (push) Has been cancelled
ci / sandbox-k8s (push) Has been cancelled
ci / frontend (push) Has been cancelled
ci / e2e (push) Has been cancelled

GLM Coding Plan has no CLI of its own and ToS-throttles raw SDK/API access
("1113 Insufficient Balance"); it is served only inside officially supported
tools, and Claude Code is the primary one. So GLM rides the existing
claude_cli provider with a z.ai env override (ANTHROPIC_BASE_URL=
api.z.ai/api/anthropic + ANTHROPIC_AUTH_TOKEN) — no new provider, no image
rebuild. Fresh HOME + CLAUDE_CODE_OAUTH_TOKEN="" so the container's cached
Claude subscription doesn't override the routing; key via $NAME indirection.

Deployed & verified on gw-04: worker_glm answers "I am GLM-4.7, built by
Zhipu AI" over /ws/chat. Three subscription models now co-reside on one
runtime — Claude (coordinator), Kimi (worker_kimi), GLM (worker_glm).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Omar Sobh
2026-06-17 11:17:11 -07:00
co-authored by Claude Opus 4.8
parent 2e889df35e
commit ca91d18860
@@ -61,14 +61,20 @@ mcp_config = "/zeroclaw-data/clawmates-mcp.json"
# model_provider = "kimi_cli.default" # model_provider = "kimi_cli.default"
# risk_profile = "toolfree" # risk_profile = "toolfree"
# #
# GLM is a first-class ZeroClaw family (OpenAI-compat, separate key). Set model + # GLM (Zhipu) — like Kimi, the GLM Coding Plan is subscription-billed and its
# key via env (TOML sub-tables parse empty); the orchestrator's role→alias map # raw OpenAI/SDK endpoint is ToS-THROTTLED ("1113 Insufficient Balance"); it is
# (ZEROCLAW_AGENT_MAP) selects e.g. researcher=worker_kimi, analyst=worker_glm. # only served inside OFFICIALLY SUPPORTED tools, and Claude Code is the #1 one.
# ZEROCLAW_providers__models__glm__default__model=glm-4.6 # So GLM rides our existing `claude_cli` provider via a z.ai env override — no
# ZEROCLAW_providers__models__glm__default__api_key=<GLM key> # new provider, no image rebuild. Needs a fresh HOME + CLAUDE_CODE_OAUTH_TOKEN=""
# [providers.models.glm.default] # so the container's cached Claude subscription doesn't override the routing
# (pre-create <HOME>/.claude.json = {"hasCompletedOnboarding":true}). The z.ai
# key is read from the daemon env via the `$NAME` indirection (keep it out of
# config). Models: glm-5.2 (Opus-class), glm-4.7 (Sonnet-class), glm-4.5-air.
# [providers.models.claude_cli.glm]
# model = "glm-4.7"
# env = { HOME = "/zeroclaw-data/glm-home", CLAUDE_CODE_OAUTH_TOKEN = "", ANTHROPIC_BASE_URL = "https://api.z.ai/api/anthropic", ANTHROPIC_AUTH_TOKEN = "$ZAI_API_KEY", API_TIMEOUT_MS = "3000000" }
# [agents.worker_glm] # [agents.worker_glm]
# model_provider = "glm.default" # model_provider = "claude_cli.glm"
# risk_profile = "toolfree" # risk_profile = "toolfree"
# Tool-free profile — agents can only reason + call the MCP door (tools inject # Tool-free profile — agents can only reason + call the MCP door (tools inject