入门 📋 6 个步骤 第 617 / 617 篇

用 Cheap Agent 把实现委派给便宜模型:Opus 规划、测试闸门与 git worktree 落地实操

Cheap Agent(npm 包 cheap-agent)是给 Claude Code 与 Codex 用的 MCP 服务器:贵的模型负责规划和决策,便宜模型在自己那份 git worktree 里写代码,必须先写出失败再通过的测试,检查通过才把改动以未提交状态落回项目。本教程按官方 README 六步落地:npx 登录选服务商、每个项目一次 allow 授权、委派一次真实改动、用 status 核成本、用 cheapag.json 调接管与轮次上限、多 worktree 编排与自定义端点。

2026.11.12· 18 分钟阅读· 约 3810 字· 💸 Cheap Agent / 🧪 测试闸门

用编码 Agent 时最烧额度的往往不是那些难决策,而是读文件、敲样板、反复跑测试这类「打字活」。Cheap Agent 把这两件事拆给不同模型:贵的模型(Claude Opus、GPT 系列等)继续做规划与判断,便宜模型在自己那份 git worktree 里写代码,并且必须先写出「改动前失败、改动后通过」的测试,检查通过后改动才以未提交状态落回你的项目,由你审 diff。本教程按官方 README 六步实操,从登录到核成本到多 worktree 编排。

💸 适合谁:用 Claude Code 或 Codex、想让套餐撑久一点的个人开发者;以及想了解「委派 + 测试闸门」这套工作流怎么落地的人。前置准备:Claude Code 或 Codex 已装好并登录、Node.js 20+、一个已能跑测试的 git 项目、一个服务商 API Key(官方说几美元能跑几百个任务),或用本地模型完全不填 Key。支持 macOS / Linux / Windows;Windows 另需 Git for Windows(Git Bash)。项目为 MIT 许可。前置清单里最容易被忽略的是「项目本身要有测试」——没有测试,这套闸门就无从验证。

先弄清:它省的是什么,不省的是什么

官方 README 的定位很清楚:你的前沿模型像一位资深工程师,看全局、做决策都很强,但不该花钱让它敲 CSV 导出器。Cheap Agent 做的是「组织分工」:

环节谁来做约束
拆解任务、做决策你原本的 Claude Code / Codex 主模型保持不变
写代码、补测试便宜模型,在项目副本(git worktree)里每步默认最多 25 turns
验证Cheap Agent 自己跑测试必须写失败在先、通过在后
落地只落通过检查的改动未提交、不 push,由你审 diff

把作者的数据当参考,不是承诺:README 里 154k → 57k Opus tokens、33 → 38 个测试通过、单个任务 0.005 美元等数字,是作者自己在 SWE-bench Verified 上用 Opus 5.5 跑出来的一组结果,且作者明确写了「最难的 9 个 bug 只解出 6 个,纯 Opus 解出 7 个」「几行的小改动或整个小应用从零写,本来就没得省」。真实节省取决于你的任务、模型与项目,请用 Step 4 的 status 在自己的活上量。

Step 1:npx 登录,选服务商与模型

1 一条命令装好,Key 只在终端里输

官方主推直接跑 npx cheap-agent:交互式选服务商、回车用推荐模型、粘贴 API Key,它会先验证 Key 可用,再把自己注册进 Claude Code(对所有项目生效)。

# 确认 Node 版本(官方要求 20+)
node --version

# Claude Code 路线:交互式登录
npx cheap-agent
# 选服务商时按数字:1 OpenCode Go / 2 OpenRouter / 3 DeepSeek
#                   4 Command Code / 5 OpenCode Zen / 6 Custom endpoint
# 拿不准就选 2 OpenRouter;模型直接回车用推荐值
# 在终端提示里粘贴 API Key(官方说明:不要让 Agent 代你要 Key)

# 非交互 / 按预设登录(官方「let agent install」给出的写法)
npx cheap-agent login --preset openrouter
npx cheap-agent login --preset strongest

# 登录多个服务商后,随时在项目里切换
# /cheapag:provider

# 后续升级
npx cheap-agent@latest

官方对服务商的备注值得照看:OpenCode Go 要在控制台把 Regions 设为 Global 才能用 DeepSeek 系列;Command Code 需要带 API access 的套餐;OpenCode Zen 是按量付费;Custom endpoint 可以接任意 OpenAI 兼容 API(Step 6 展开)。

💡 不想手工配置,可以把官方 README 里那段「let agent install」提示词整段粘进 Claude Code 或 Codex,让 Agent 问你选哪个服务商与模型、检查 node 版本、判断你用的是 claude 还是 codex,最后只给你一条需要自己执行的登录命令——它明确写了「Never ask for my key」,Key 始终由你在终端输入。

密钥与代码去向:官方 FAQ 说明 API Key 只留在本机(隐藏提示与本地凭据库),不会进对话;但项目代码会发给你选的服务商,且只在执行 /cheapag:allow 之后、界面会明确列出哪些模型将看到代码。公司项目请先确认合规与保密要求;管道安装脚本、来历不明的 preset 名都要先核对官方 README。

Step 2:按项目授权一次,确认注册成功

2 allow 是逐项目的,不是全局开关

注册好后,在每个要用的项目里开一个新会话,跑一次授权命令。官方强调「once per project」,这正是代码外发的同意边界。

# Claude Code:在项目根目录的新会话里执行一次
/cheapag:allow

# 确认 MCP 已注册(官方「let agent install」第 5 步的验收命令)
claude mcp list          # 应能看到 cheapag

# Codex 路线:装插件后同样授权一次
codex plugin marketplace add muaaz9329/cheap-ag
codex plugin add cheapag@cheap-agent
# 启动 codex 时信任它提示的 3 个 cheapag hooks
$cheapag:allow

# 强制主模型必须把改动交出去,而不是自己又写一遍
/cheapag:hook on         # Codex 用 $cheapag:hook on

官方说明 /cheapag:hook on 解决的是「我还是自己写吧」这类回退:钩子会挡住主模型重做已经通过的工作,或在(Claude Code 下)便宜模型卡住时自己接手失败步骤。

✅ 授权文件可以随 worktree 走:官方说明每个 worktree 需要自己的同意记录(在该 worktree 里跑一次 allow,或复制 .cheapag/consent.json)。这个设计让「同意」跟代码副本绑定,多 Agent 并行时不会一个授权放全仓。

Windows 已知问题(官方 README 原文列了三条):① 头一个任务可能要等约 2 分钟,因为便宜模型的引擎(OpenCode)在初始化,之后几秒就起;② 引擎中途崩了会自动起新的,但崩掉的 opencode.exe 可能残留在任务管理器里,需要手动结束或重启;③ 便宜模型在它那份副本里读不到依赖目录(如 node_modules),不过测试照常运行。遇到卡住先看这三条。

Step 3:委派一次真实改动,看懂测试闸门

3 像平时一样提需求,另开窗口看逐步日志

授权之后不用学新语法,照常对 Claude Code 说需求即可。选一个仓库里已有测试覆盖的小改动做试跑,比如给函数加一个参数并补测试。

# 在 Claude Code 会话里照常提需求(示例)
# 「给 calculateTotal 增加可选的 discount 参数,并补上对应单元测试」
# 主模型会写一段简短任务描述,把实现交给便宜模型

# 另开一个终端,逐步跟踪这次任务的每一步
npx cheap-agent watch

# 命令速查(Claude Code / Codex 对应 $ 前缀)
# /cheapag:status    最近的任务与便宜模型花了多少钱
# /cheapag:model     选 worker 的主模型与回退模型,各带 effort
# /cheapag:clean     清理旧任务目录
# /cheapag:provider  在已登录的服务商之间切换

官方 README 的「How it works」写明了三层保障:便宜模型必须写出一条改动前失败、改动后通过的测试,Cheap Agent 自己跑测试而不听模型自述;工作发生在私有 git worktree 副本里;只有过检的改动才落地,服务端无法复现的复现步骤会带着风险说明一起落地。改动落回时是未提交状态,git diff 由你审。

🎉 预期效果:Claude Code 的工具调用下会显示 worker 的最新步骤(Codex 大约每 15 秒回报一次),watch 窗口逐步打印;任务结束后工作区出现未提交的改动与新增测试,git status 能看到文件变更,但没有新的 commit。自己跑一遍项目的测试命令复核,再决定要不要提交。

测试通过不等于改动正确:官方 FAQ 说主模型并不会逐条复查通过的代码(作者实测让 Opus 复查多花三倍 token 且没抓到问题),因此审 diff 这一步不能省。另外带「风险说明」落地的复现步骤属于未经验证的部分,要单独看。别把这套流程直接接到自动合并或自动部署的流水线上。

Step 4:核成本,用 cheapag.json 调边界

4 status 看花费,配置里收紧接管与轮次

跑过几次后先看官方给的成本视图,再按自己的任务调参数。配置是项目里可选的 cheapag.json,不写就用默认值。

# 项目里放 cheapag.json(官方 Settings 表,值为默认)
{
  "takeover": "ask",
  "limits": {
    "max_turns": 25,
    "repro_by_turns": 30
  },
  "retention": {
    "unlanded_worktree_days": 2,
    "job_log_days": 7
  }
}

# 常用命令
/cheapag:status      # 最近任务与累计花费
/cheapag:clean       # 清理旧任务目录(retention 在启动时与每小时自动跑)

# 全局配置示例:只改实现用的模型,保留其它已有配置
# ~/.config/cheapag/config.json
{ "models": { "implement": "你的模型名" } }

# 关闭启动时的版本更新检查
CHEAPAG_NO_UPDATE_CHECK=1

几个默认值的含义要对上:takeover: "ask" 表示便宜模型卡住时先问你,不会擅自花钱;改成 "sonnet" 会让 Sonnet 助手自动接手(官方提醒硬任务上可能吃掉几十万 Claude tokens),改成 "self" 则由主模型自己做完,但受 limits.takeover_calls 默认 15 次工具调用上限约束(仅 Claude Code;Codex 是询问或自己做)。max_turns: 25 是便宜模型每步的轮次上限;repro_by_turns: 30 用于提前掐掉「一直在复现却没改任何文件」的 bug 修复步骤,且默认高于 25 的轮次上限,想更早止损要手动调低。

🔎 /cheapag:status 里的花费来自你选的服务商;用 Custom endpoint 且没填价格时,官方说明成本会显示为 0 美元——那不是没花钱,是没定价信息。判断省没省,请对照服务商控制台的实际账单与 Claude 套餐用量。

别把额度从一个口袋搬到另一个口袋:takeover: "sonnet" 会把卡住的步骤转回 Claude 套餐消耗,可能抵消节省;npx cheap-agent watch、多任务并行与 max_turns 调高都会增加便宜模型的实际调用量。开跑前先在服务商控制台设一个低额度上限,跑完用 status 与账单双向核对。

Step 5:多 worktree 编排,给每个副本单独授权

5 传 root,让任务落到指定 worktree

如果你的一个会话同时跑多个任务、各占一个 git worktree(比如有个编排者在给子 Agent 发票),官方给了明确的接法:在若干工具调用里带上 root 参数,值是那个 worktree 的完整路径。

# 官方说明:以下调用都要带 root(worktree 的完整路径)
# delegate / research / jobs / land / reply
root = "/abs/path/to/your/worktree"

# 带了 root:任务在该 worktree 里运行、落地、留记录,
#            会话自己所在的那份 checkout 不受影响
# 没带 root:行为不变(在当前仓库)

# 每个 worktree 需要自己的同意记录,二选一
# 1) 在该 worktree 里执行一次 /cheapag:allow
# 2) 复制已有的 .cheapag/consent.json 过去

# 查看当前任务与落地状态
/cheapag:status
🤝 这正是「编排者 + 子 Agent」能安全并行的原因:每个 worktree 有自己的代码副本、自己的同意记录、自己的任务与落地记录,会话主 checkout 保持干净。用完记得 /cheapag:clean 或让 retention 自动清理未落地的 worktree 与日志目录。

路径必须是完整路径:官方写明传相对路径或不传都不生效(不传等于维持默认行为,不会报错提醒)。另外注意 worktree 与任务记录会占磁盘,retention 默认保留未落地 worktree 2 天、任务日志 7 天,长期跑编排要留意清理策略。

Step 6:接本地模型、更新与卸载干净

6 Custom endpoint 与退出路径

不想把代码发给外部服务商,就用 Custom endpoint 接本机的 OpenAI 兼容服务。官方列出的可接对象包括 llama.cpp、Ollama、LM Studio、vLLM、LiteLLM、Azure 等。

# 登录时选 6 Custom endpoint,按提示填:
# URL      : http://127.0.0.1:11434/v1     # Ollama 示例
# API key  : 只在端点需要时填「环境变量名」或「存 Key 的文件」
#            (官方说明 Cheap Agent 自己不读这个 Key)
# Model    : 从端点返回的模型列表里选
# Context window / prices : 可选;不填价格则成本显示 0 美元

# 慢机器上放宽单任务时限(默认 20 分钟)
# cheapag.json 里设 limits.max_minutes

# 更新
npx cheap-agent@latest
codex plugin marketplace upgrade

# 卸载(官方 Update or remove 一节)
claude plugin uninstall cheapag@cheapag
claude mcp remove -s user cheapag
codex plugin remove cheapag@cheap-agent
🔌 官方提醒本地模型要「擅长工具调用」,小模型往往做不到,任务会卡住或超时;纯 http 明文地址只适用于本机或你自己的网络。走本地模型等于把省钱换成了本机算力与等待时间,先用小任务试通再放量。

卸载前先审未提交改动:Cheap Agent 从不 commit、从不 push,但任务产物会以未提交状态留在工作区;移除 MCP 与插件不会自动清理这些改动或 .cheapag/ 同意记录。请先 git status 与 git diff 复核、提交或丢弃,再按上面三条命令卸载,并到服务商控制台撤销不再使用的 Key。

常见问题 FAQ

现象原因与处理
claude mcp list 没有 cheapag重新跑 npx cheap-agent,按官方 let-agent-install 第 5 步核验
提示需要授权每个项目要执行一次 /cheapag:allow,Codex 用 $cheapag:allow
Windows 头一个任务卡两分钟官方说明是 OpenCode 引擎初始化,之后几秒即起
任务管理器里有残留进程引擎崩溃后 opencode.exe 可能留存,手动结束或重启
worker 读不到 node_modules官方说明副本里不含依赖目录,但测试照常运行
主模型又自己把代码写了开 /cheapag:hook on 强制交出实现
status 里成本是 0 美元自定义端点未填价格,看服务商账单核对
多个 worktree 串任务了在 delegate / research / jobs / land / reply 上补完整路径 root
改动没过检却出现在工作区带风险说明落地的是无法复现的复现步骤,单独审查

做到哪一步算成功

四条验收线:① node --version 是 20+ 且 claude mcp list 里出现 cheapag;② 在项目里跑过一次 /cheapag:allow,能说清代码会发给哪个服务商、哪些模型;③ 完成一次带测试的委派,工作区出现未提交的改动与新增测试,且 git log 没有多出 commit;④ 用 /cheapag:status 记下这次的真实花费,并对照服务商账单确认口径。做到这些,再考虑 root 多 worktree 编排或 Custom endpoint 接本地模型。

交付前自查:本教程命令、配置项与默认值来自官方仓库 muaaz9329/cheap-ag README;npm 包版本与服务商列表会变,以你安装当天的 README 与 /cheapag:status 为准。README 里的 SWE-bench 数字是作者单轮自测,不是性能承诺。代码外发、真实费用与密钥安全请按公司合规要求评估;任何落地改动都要自己审 diff 并复跑测试后再提交。

← 返回教程中心