用编码 Agent 时最烧额度的往往不是那些难决策,而是读文件、敲样板、反复跑测试这类「打字活」。Cheap Agent 把这两件事拆给不同模型:贵的模型(Claude Opus、GPT 系列等)继续做规划与判断,便宜模型在自己那份 git worktree 里写代码,并且必须先写出「改动前失败、改动后通过」的测试,检查通过后改动才以未提交状态落回你的项目,由你审 diff。本教程按官方 README 六步实操,从登录到核成本到多 worktree 编排。
先弄清:它省的是什么,不省的是什么
官方 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 登录,选服务商与模型
官方主推直接跑 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 展开)。
密钥与代码去向:官方 FAQ 说明 API Key 只留在本机(隐藏提示与本地凭据库),不会进对话;但项目代码会发给你选的服务商,且只在执行 /cheapag:allow 之后、界面会明确列出哪些模型将看到代码。公司项目请先确认合规与保密要求;管道安装脚本、来历不明的 preset 名都要先核对官方 README。
Step 2:按项目授权一次,确认注册成功
注册好后,在每个要用的项目里开一个新会话,跑一次授权命令。官方强调「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 下)便宜模型卡住时自己接手失败步骤。
.cheapag/consent.json)。这个设计让「同意」跟代码副本绑定,多 Agent 并行时不会一个授权放全仓。Windows 已知问题(官方 README 原文列了三条):① 头一个任务可能要等约 2 分钟,因为便宜模型的引擎(OpenCode)在初始化,之后几秒就起;② 引擎中途崩了会自动起新的,但崩掉的 opencode.exe 可能残留在任务管理器里,需要手动结束或重启;③ 便宜模型在它那份副本里读不到依赖目录(如 node_modules),不过测试照常运行。遇到卡住先看这三条。
Step 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 由你审。
watch 窗口逐步打印;任务结束后工作区出现未提交的改动与新增测试,git status 能看到文件变更,但没有新的 commit。自己跑一遍项目的测试命令复核,再决定要不要提交。测试通过不等于改动正确:官方 FAQ 说主模型并不会逐条复查通过的代码(作者实测让 Opus 复查多花三倍 token 且没抓到问题),因此审 diff 这一步不能省。另外带「风险说明」落地的复现步骤属于未经验证的部分,要单独看。别把这套流程直接接到自动合并或自动部署的流水线上。
Step 4:核成本,用 cheapag.json 调边界
跑过几次后先看官方给的成本视图,再按自己的任务调参数。配置是项目里可选的 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 编排,给每个副本单独授权
如果你的一个会话同时跑多个任务、各占一个 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
/cheapag:clean 或让 retention 自动清理未落地的 worktree 与日志目录。路径必须是完整路径:官方写明传相对路径或不传都不生效(不传等于维持默认行为,不会报错提醒)。另外注意 worktree 与任务记录会占磁盘,retention 默认保留未落地 worktree 2 天、任务日志 7 天,长期跑编排要留意清理策略。
Step 6:接本地模型、更新与卸载干净
不想把代码发给外部服务商,就用 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
卸载前先审未提交改动: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 并复跑测试后再提交。