内容
# GLM 作为 Claude Code 的子代理 - 即插即用
> 📦 **原始出处:** **https://github.com/djerok/glm_mcp_claude** — 由 [@djerok](https://github.com/djerok) 创建。如果你通过分支、镜像或优秀列表找到这个项目,请在此处查看原始版本。请在源代码上 ⭐ / 提交问题 / 开启 PR。
添加 **GLM** (智谱 / Z.ai)作为 Claude Code 的 **廉价、全功能子代理** (约比 Opus 便宜 10 倍),在 Opus 和 GLM 之间具有 **自动逐任务路由** 。你的主代理保留在 Opus;GLM 执行指定好、成本敏感的工作 — 可以直接读取、写入、编辑和运行你的文件。只需一个命令即可安装。
> ✅ **在基于订阅的 Claude 的 Claude Code 应用中有效。** 你的主代理在你已经通过 **Claude Code 应用** (专业 / 尊享 / 团队订阅)支付的 Claude 上运行 — **不需要单独的按令牌计费的 Anthropic API 密钥** 。只有 GLM 需要一个(廉价的)Z.ai 密钥。Opus 在你的订阅上编排;GLM 以一小部分成本执行繁重的工作。

<sub>↑ `glm` 子代理(由 Haiku 4.5 编排,廉价层)读取仓库并通过 MCP 工具将繁重的工作卸载到 GLM — Opus → Haiku → GLM 混合应用中。</sub>
```bash
# 无需克隆 - 直接从 GitHub 运行:
npx github:djerok/glm_mcp_claude --key YOUR_ZAI_API_KEY
# 或克隆并运行安装程序:
node install.mjs --key YOUR_ZAI_API_KEY
```
然后重启 Claude Code。就是这样。(详情见下文。)
> 🔑 **你的密钥必须来自 Z.ai / Zhipu GLM 编码计划。** 在 **https://z.ai** 获取密钥 → 订阅 **GLM 编码计划**,然后创建 API 密钥。通用 / 免费密钥无编码计划访问权限将无法使用此处使用的编码模型。
---
## 你得到什么
- **`glm` 子代理** — 一个由 GLM 支持的完整工具子代理(读取/写入/编辑/bash)。
- **`glm_agent` 工具** — GLM 作为具有内置监督(差异、干运行、git 还原)的实际文件编辑代理。
- **`glm_delegate` / `glm_recommend` / `glm_status`** — 草稿委托、免费路由顾问和健康检查。
- **自动委托钩子** — 当你启动子代理时,它会注入 GLM-vs-Opus 判决,以便廉价工作自动发送到 GLM。未启动子代理时,无令牌成本。
- **如果你明确命名代理** (“使用 opus”,“使用 sonnet 代理”,“使用 glm”),钩子保持沉默,只路由到你要求的代理。
---
## 先决条件
- **Claude Code 应用** (桌面或 CLI),使用 **基于订阅的 Claude** (专业 / 尊享 / 团队)登录。你的主代理使用此功能 — **不需要 Anthropic API 密钥** 。`claude` CLI 应在你的 PATH 上(`claude --version`)。
- **Node.js ≥ 18** (`node -v`)
- **具有 GLM 编码计划访问权限的 Z.ai / Zhipu API 密钥** — 在 **<https://z.ai>** 获取密钥。 ⚠️ **它必须在 GLM 编码计划** (编码计划订阅);通用或免费密钥无访问权限。
- Git(可选,但启用 `glm_agent` 的一键还原)
---
## 安装(推荐:全局,所有项目)
```bash
# 从此文件夹:
node install.mjs --key YOUR_ZAI_API_KEY
```
安装程序:
1. 将服务器复制到 `~/.claude/glm-mcp/` 并运行 `npm install`,
2. 将你的密钥写入 `~/.claude/glm-mcp/.env`,
3. 安装 `glm` 子代理(`~/.claude/agents/glm.md`)和钩子(`~/.claude/hooks/`),
4. 将钩子连接到 `~/.claude/settings.json` (首先备份),
5. 将简短的委托策略添加到 `~/.claude/CLAUDE.md`,
6. 使用 `claude mcp add glm -s user` 将 MCP 服务器注册到 `claude`。
然后 **重启 Claude Code** 并运行 `glm_status` — 你应该看到 `"api_key_loaded": true`。
> 选项:`--no-register` (跳过 CLI 步骤),`--skip-npm`,`--claude-dir PATH` (自定义配置目录)。重新运行是安全的(幂等)。命令行上没有密钥?运行 `node install.mjs`,然后编辑 `~/.claude/glm-mcp/.env` 并设置 `GLM_API_KEY=...`。
### 逐项目安装而非全局安装
不想在所有地方都安装?跳过安装程序。复制 `glm-mcp/` 到你的项目,`cd glm-mcp && npm install`,复制 `.mcp.json.example` → `.mcp.json` 到项目根目录,设置密钥,并(可选)复制 `agents/glm.md` 到 `.claude/agents/` 和钩子到 `.claude/` + `.claude/settings.json`。
---
## 工作原理(简要版)
```
你请求某事
→ Opus 编排
→ 想要委托一个块 → 启动子代理
→ [钩子触发] “[GLM 路由器] 适合 GLM 的仓库任务 → 使用 glm_agent(先进行干运行)”
(或 “保留 Opus” 用于困难/敏感工作)
→ Opus 运行 glm_agent(GLM 编辑文件,运行测试) — 或保留 Opus
→ 你获得差异 + 操作日志 + 一键还原
```
路由规则位于 **`glm-mcp/src/router.js`** 和 **钩子** — 不在始终开启的上下文中 — 因此它们不会产生费用,直到实际启动子代理。
**路由简要说明:** GLM 是默认(约便宜 10 倍);Opus 是例外,用于工作出错代价高的情况 — 微妙调试、架构、大型重构、安全、工具繁重的依赖循环、巨大上下文、视觉或你标记为敏感的任何内容。
---
## 工具
| 工具 | 成本 | 功能 |
|---|---|---|
| `glm_recommend` | 免费(本地) | GLM 或 Opus 决策 + 模型选择 + 原因。 |
| `glm_status` | 免费(本地) | 峰值窗口、活动模型、密钥/配置健康状态。 |
| `glm_delegate` | GLM 代币 | 文本输入 → 文本输出。GLM 起草;你放置它。 |
| `glm_agent` | GLM 代币 | GLM 直接处理你的仓库(读取/写入/编辑/bash)。返回差异 + 操作日志 + git 还原;支持 `dry_run` (提议,不写入)。 |
### 示例:直接调用 GLM 代理
一个真正的运行 — 请求 GLM(通过 `glm_agent`)直接在磁盘上写入一个文件:

> **提示:** “使用 GLM 代理 `glm_agent`,以莎士比亚风格写一篇关于雨伞实用性的 2000 字论文,放入我的桌面。”
GLM 自己做了 — 直接创建文件,不需要将内容通过主代理进行往返:
- **输出:** `Umbrella-Essay-Shakespeare.md` — 约 2260 字,早期现代英语(*thee/thou/thy*,*doth/hath*)带有两个空白诗插曲
- **工作:** 18 次工具循环迭代;**一个** 文件创建,无现有文件被修改
- **成本:** 约 **$0.064** — 运行相同任务的 Opus 费用的一小部分
这就是重点:编排器保留在 Opus 上,而 `glm_agent` 以美分完成繁重的文件处理工作。
---
## 监督(你如何控制 `glm_agent`)
- **入口:** 你/Opus 选择何时调用它以及使用哪个 `workdir`。
- **`dry_run: true`:** GLM 提议完整差异,不写入任何内容 — 批准,然后应用。
- **实际运行后:** 你获得统一 **差异**,**操作日志**,以及一键 **git 还原** (`git checkout <baseline> -- .`)。
注意:`glm_agent` 内部的文件/bash 操作在 MCP 服务器进程中运行(不按编辑权限控制),并且限定在你传递的 `workdir` 上。这是故意的(最大自主权) — 只需指向你愿意让它修改的仓库。
---
## 配置(`~/.claude/glm-mcp/.env`)
| 变量 | 默认值 | 含义 |
|---|---|---|
| `GLM_API_KEY` | — | 你的 Z.ai 密钥。**必填**。 |
| `GLM_BASE_URL` | `https://api.z.ai/api/anthropic` | 与 Anthropic 兼容的端点。 |
| `GLM_COST_BIAS` | `1.5` | 倾向于 GLM 的程度(它便宜约 10 倍)。越高 = 越倾向于 GLM;`0` = 仅根据能力决定。 |
| `GLM_CAP` | `off` | 输出令牌上限。**默认关闭** = 生成(最多 131072 次调用)。设置为 `on` 以强制执行 `GLM_MAX_TOKENS` 并控制支出。 |
| `GLM_MAX_TOKENS` | `32768` | 调用时施加的硬上限 **仅当 `GLM_CAP=on`** 。(`max_tokens` 是上限,不是目标 — 你为实际输出付费。) |
| `GLM_MAX_TOKENS_CEILING` | `131072` | 默认使用的慷慨上限(当上限关闭时)。 |
| `GLM_MAX_CONCURRENT` | `1` | GLM 限制并发请求;保持为 1。 |
| `GLM_OFFPEAK_MODEL` / `GLM_PEAK_MODEL` | `glm-5.2` / `glm-5.2` | `auto` 的模型。**每个可以是逗号分隔列表** (例如 `glm-5.2,glm-5-turbo`)路由器自动选择 — 最有能力用于困难任务,最便宜用于简单任务。**峰值规则:** 当 `auto` 降级到 glm-5.x 模型(3 倍附加费)时,路由器 **减少** 工作量到 GLM 在峰值;如果你包含无附加费模型(例如 `GLM_PEAK_MODEL=glm-5.2,glm-4.7`),它在峰值时被优先考虑,GLM 仍然可以使用。 |
| `GLM_PEAK_START_CN` / `GLM_PEAK_END_CN` | `14` / `18` | 峰值窗口(中国小时,UTC+8)。 |
| `GLM_AGENT_MAX_ITERS` | `30` | `glm_agent` 的最大工具循环次数。 |
完整列表及注释:`glm-mcp/.env.example`。
---
## 卸载
```bash
node uninstall.mjs # 删除代理、钩子、设置条目、MCP 注册
node uninstall.mjs --purge # 还要删除 ~/.claude/glm-mcp (及其 .env)
```
---
## 安全
- **永远不要提交/共享包含密钥的 `.env` 或 `.mcp.json` 。** `.gitignore` 排除它们。
- GLM 通过中国服务器路由 — 不要发送你不会发送给第三方 API 的秘密/受监管代码。(路由将带有 `sensitive` 标志的工作保留在 Opus 上,但你决定委托什么。)
---
## 故障排除
| 症状 | 修复方法 |
|---|---|
| `glm_status` 丢失 / 工具不存在 | 重启 Claude Code;`claude mcp get glm` 确认注册。 |
| `api_key_loaded: false` | 在 `~/.claude/glm-mcp/.env` 中设置 `GLM_API_KEY`。 |
| 服务器启动失败 | `cd ~/.claude/glm-mcp && npm run smoke` 查看实际错误。 |
| **并发太多** | 预期在负载下;它会自动重试。不要并行发出多个 GLM 调用。 |
| 钩子未触发 | 检查 `~/.claude/settings.json` 是否有指向 `glm_subagent_router.mjs` 的 `PreToolUse` `Task` 匹配器。 |
更多背景和路由规则的研究:查看 [`docs/`](docs/)。
---
## 贡献
欢迎 PR 和问题 — 见 [CONTRIBUTING.md](CONTRIBUTING.md)。好的起点:路由规则(`glm-mcp/src/router.js` + 钩子)、提供适配器和文档。请勿提交秘密/.env。
## 许可证
[MIT](LICENSE) © [djerok](https://github.com/djerok)
<sub>原始 / 规范仓库:**https://github.com/djerok/glm_mcp_claude**。如果你 fork、镜像或重新分发此项目,请保持指向源代码的链接,以便他人可以找到更新、提交问题和贡献。由 [@djerok](https://github.com/djerok) 构建。</sub>