关于 Cheaplane
Cheaplane 是一个 MCP 服务,为主 Agent 提供 delegate 工具,将可替代的日常任务交给经 LiteLLM 代理的低成本模型。它通过任务自动路由模型,并将委派调用与主线程订阅凭据隔离。
主要功能
- 01通过 delegate 委派任务
- 02按任务内容自动选择模型
- 03支持指定模型别名
- 04记录用量与节省估算
- 05提供逐轮提醒机制
适用场景
- 01生成样板代码或执行格式整理
- 02摘要长文档并提取信息
- 03翻译文本或撰写例行文案
- 04查看委派调用的用量记录
MCP 相关
该 MCP 服务向主 Agent 暴露 delegate 工具,连接本地 LiteLLM 代理提供的模型端点。委派进程与主线程订阅凭据相互隔离。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx cheaplaneDELEGATE_BASE_URLOpenAI-compatible endpoint serving the cheap models — usually a local LiteLLM proxy.DELEGATE_API_KEY密钥Key for that endpoint. A local proxy ignores it; set a real one for a hosted endpoint.DELEGATE_TIMEOUTPer-call timeout in seconds. Raise it for long documents.DELEGATE_MODEL_MAPJSON remapping the built-in aliases to your proxy's model names, e.g. {"deepseek": "deepseek-v4"}.DELEGATE_NO_LOGSet to 1 to disable the local savings ledger (metadata only, never task content).本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
3收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| task | string | 是 | |
| model | string | 否 | |
| max_tokens | integer | 否 |
详细介绍
Cheaplane 🛣️
让高级订阅留在主线程。把繁琐工作交给便宜模型——Cheaplane 还会帮你挑选合适的模型。别再把高级模型的令牌浪费在样板活上。
Cheaplane 是一个精简的单文件 MCP 服务(约 250 行代码,仅依赖标准库和 mcp),为你的主 Agent(例如使用 Max 订阅的 Claude Code)提供一个额外工具:delegate。你的 Agent 继续负责思考(规划、架构设计、最终审查),并把可替代的繁琐工作——样板代码、格式整理、翻译、长文档摘要——交给本地 LiteLLM 代理背后的便宜模型(DeepSeek、Kimi、Qwen 等)。可以把它想成高级 Agent 的廉价实习生——它负责处理枯燥的部分,你则继续思考。
让它安全的关键:委派调用和你的订阅运行在物理隔离的进程中,绝不共享凭据。(为什么这很重要 ⬇️)
让它省心的关键:自动路由。 delegate(task) 会根据任务本身选择合适的便宜模型——代码 → DeepSeek,长文档 → Kimi,中文 → Qwen。(工作原理 ⬇️)
让它真正派上用场的关键:每轮都会触发提醒钩子,确保 Agent 不会忘记这个工具——大多数“委派”工具都会忽略这一点。此外,节省账本还会告诉你它帮你省下了多少配额。
看看实际效果——你的 Agent 把一项杂活交出去,自动路由会将其发送给便宜的代码模型:
delegate("convert to a TypeScript interface: {id, name, email, isAdmin, roles[]}")
interface User {
id: number;
name: string;
email: string;
isAdmin: boolean;
roles: string[];
}
↑ 真实调用的输出——不是模拟结果,也没有手动选择模型。这次调用的令牌成本比高级模型低约 90 倍,而且你的订阅配额分毫未动。
问题所在
高级模型在处理难题时物有所值——但每个令牌都会计入你的套餐,你却把配额消耗在重复琐事上:重新整理 JSON、翻译 UI 字符串、总结你只会读一次的文档。常见的“直接用便宜模型”方案会迫使你做出糟糕的选择:
- 把整个 Agent 降级 → 真正重要的工作会失去主线程的高质量表现。
- 所有请求都通过 API 密钥路由 → 你无法继续使用已经付费的订阅。
Cheaplane 保留了最佳组合:高级模型在主线程负责判断 + 便宜模型处理重复琐事 + 计费在物理上绝不混用。
Cheaplane 的优势
2026 年流行的做法是把整个 Agent 都换成便宜的模型(类似 DeepClaude)。这样确实能大幅降低成本,但会降低你实际用于思考的对话质量,还会导致你的其他 MCP 工具无法使用,而且如果你订阅的是 Pro/Max,这种做法根本不适用。Cheaplane 则选择了相反的做法:
| 把整个 Agent 换成便宜的模型(类似 DeepClaude) | 所有请求都通过一个 API 密钥 | Cheaplane | |
|---|---|---|---|
| 主对话 | ⬇️ 降级 | ⬇️ 不再享有订阅 | ✅ 保持高端模型 |
| 你的其他 MCP 工具 | ❌ 无法使用 | ✅ | ✅(它本身就是 MCP 服务) |
| 适用于 Pro/Max 订阅 | ❌ 仅限 API 密钥 | ❌ 取代订阅 | ✅ 专为此设计 |
| 自动为你选择便宜的模型 | ❌ 所有任务都用同一个模型 | ❌ | ✅ auto 路由 |
| 显示节省的费用 | ❌ | ❌ | ✅ savings 账本 |
| 计费 | 合并为一笔 | 按 Token 计费 | 🔒 订阅与低价调用彼此隔离 |
以上对比依据截至 2026 年年中公开报告中后端替换方案(类似 DeepClaude)的表现;具体情况因工具而异,也可能发生变化。
“便宜”究竟有多便宜?
繁重的基础工作其实很简单——为此支付高端费率纯属浪费。每百万 Token 的费用(截至 2026 年年中的公开标价):
| 模型 | 输入 | 输出 | 最适合 |
|---|---|---|---|
| Claude Opus(API,仅供参考) | $5.00 | $25.00 | 你会保留给高难度任务的判断工作 |
| DeepSeek V4 Flash | $0.14 | $0.28 | 代码 / 格式整理 |
| Kimi K2 | $0.60–0.95 | $2.50–4.00 | 长文档(超大上下文) |
| Qwen | $0.05–0.40 | $0.20–1.20 | 中文文案 |
在 Opus 上,一个输出 Token **约需 $25,而在 DeepSeek 上约需 $0.28——对于不需要高智能的工作,前者贵了约 90 倍。**你使用的是订阅,因此不会直接支付这 $25——主对话消耗的是配额,而不是美元。重点就在这里:每一项委派出去的日常任务,都会为你留出本可用于高难度问题的高端配额。(在 DeepSeek Flash 上总结一份 40 页的文档,费用约为 $0.005——甚至不会影响你的配额。)
价格为截至 2026 年年中的公开标价,具体费用因套餐档位和缓存情况而异,请查看各服务提供商的信息。稳定不变的是数量级上的差距,而不是精确的节省金额。
计费隔离(核心所在)
大多数“省钱”技巧都会把账单混在一起。Cheaplane 则让它们从根本上彼此隔离:
flowchart LR
A["Main agent<br/>premium subscription"] -->|"delegate(task)"| B["Cheaplane MCP<br/>own process, own key"]
B -->|HTTP| C["LiteLLM proxy<br/>localhost:4000"]
C --> D["DeepSeek / Kimi / Qwen<br/>cheap, pay-per-use"]
Cheaplane 进程**绝不会导入你的订阅服务提供商的 SDK、读取其身份验证信息或接触其 OAuth Token。**它只知道一件事:一个 HTTP 端点(你的代理)及其密钥。主对话计入你的订阅;委派调用则计入你的低价代理。两者绝不会相互串账——这不是靠策略,而是由架构保证。
快速开始
最快方式 — 使用 Claude Code,只需运行一个脚本:
git clone https://github.com/millennialdreamer/cheaplane && cd cheaplane
cp litellm.yaml.example litellm.yaml # then: export DEEPSEEK_API_KEY=sk-...
litellm --config litellm.yaml & # start the cheap-model proxy on :4000
bash setup.sh # deps + register MCP + reminder hook + verify
setup.sh 具有幂等性(可安全重复运行):它会安装依赖项、在 Claude Code 中注册 delegate MCP 服务、安装每轮提醒钩子,并端到端验证整个调用链。然后启动一个新的 Claude Code 会话即可。

更喜欢安装包? Cheaplane 已发布到 PyPI — 无需克隆,也无需硬编码路径:
pip install cheaplane # or: uvx cheaplane / pipx install cheaplane
claude mcp add delegate cheaplane
你仍需要下方第 1 步中的代理,而提醒钩子也很实用 — 这一部分需要项目仓库。
手动设置 / setup.sh 的实际操作
1. 获取一个兼容 OpenAI 的端点,用于调用低成本模型。 大多数人会在本地运行 LiteLLM,作为 DeepSeek / Kimi / Qwen 前面的代理。最精简的配置约 5 行:
# litellm.yaml — exposes DeepSeek under the model_name "deepseek"
model_list:
- model_name: deepseek
litellm_params:
model: deepseek/deepseek-chat # swap for any provider/model LiteLLM supports
api_key: os.environ/DEEPSEEK_API_KEY
pip install 'litellm[proxy]'
litellm --config litellm.yaml # serves http://localhost:4000
这里的 model_name: deepseek 与 Cheaplane 的默认别名一致,因此开箱即用。(deepseek 是 LiteLLM 内置的提供方 — 无需设置 api_base;仅在使用自定义或自托管端点时才需要添加。)已经有兼容 OpenAI 的端点(LiteLLM、OpenRouter、Ollama、vLLM……)?跳过此步骤,直接将 DELEGATE_BASE_URL 指向该端点即可。
2. 安装 Cheaplane — 从 PyPI 安装,或者从克隆的项目仓库安装(如果你还需要提醒钩子和 probe.py):
pip install cheaplane # installs a `cheaplane` command; that's the whole install
git clone https://github.com/millennialdreamer/cheaplane && cd cheaplane
uv sync # or: python -m venv .venv && .venv/bin/pip install mcp
3. 在 MCP 客户端中注册。 如果从 PyPI 安装,命令已位于你的 PATH 中:
{
"mcpServers": {
"delegate": { "command": "cheaplane" }
}
}
如果从克隆的项目仓库安装,将 .mcp.json.example 复制为项目根目录中的 .mcp.json 并修正路径(或使用 claude mcp add):
{
"mcpServers": {
"delegate": {
"command": "uv",
"args": ["run", "--directory", "/ABSOLUTE/PATH/TO/cheaplane", "python", "server.py"]
}
}
}
4. 端到端验证 — 确保第 1 步中的代理正在运行(握手 → 列出工具 → 实际执行一次委派调用):
uv run python probe.py
# ✅ chain works (main → MCP → cheap model → back)
使用 delegate
你的 Agent 现在可以使用 delegate(task) — 路由会自动完成;仅在需要时手动指定:
delegate("convert this JSON to a TypeScript interface: …") # auto → deepseek (code)
delegate("summarize this 40-page contract: …") # auto → kimi (very long input)
delegate("…Chinese text in the task auto-routes here…") # auto → qwen (Chinese copy)
delegate("translate these UI strings to Japanese", "flash") # explicit alias still wins
| 别名 | 适用场景 |
|---|---|
auto | 默认 — 根据任务本身从下方选取一个 |
deepseek | 编码 / 均衡 |
mimo | 推理 / 多步骤 |
flash | 快速 / 格式化 / 翻译 |
kimi | 长文档(超大上下文) |
qwen | 中文文案 |
别名会映射到你的 LiteLLM model_name。无需修改代码即可将它们指向你的代理 — 设置 DELEGATE_MODEL_MAP 环境变量(一个 JSON 对象),或者创建 ~/.claude/delegate-model-map.json(会热重载,无需重启);也可以编辑 server.py 中的 MODEL_ALIASES。
哪些任务适合委派,哪些应该自己处理(经验法则)
委派(交给低成本模型处理):
- 根据明确的规范生成样板代码 / 脚手架
- 机械式重构、格式化、修复 lint 问题
- 翻译;总结长文档或从中提取事实
- 常规文本:变更日志、文档字符串、提交信息
自己处理:
- 规划、架构、技术权衡
- 始终由你最终审核委派结果
- 与用户交流;需要判断的情况
- 任何细微错误代价高昂的任务
被委派的模型只能看到你的 task 字符串 — 无法访问你的对话。请让每项任务都包含完整信息:规范 + 实际输入 + 你要求的确切输出格式。
查看节省的费用
每次委派调用都会向 ~/.cheaplane/usage.jsonl 追加一行仅包含元数据 — 绝不包含任务内容。随时向你的 Agent 查询 savings(输出示例):
Cheaplane savings — all time
delegated calls : 184
tokens offloaded: ~412,300 in / ~365,800 out
premium cost avoided (Opus list): ~$11.21
actually spent (DeepSeek-class) : ~$0.16 (≈70× cheaper, in+out blended)
last 7 days : 31 calls, ~$2.04 avoided
这些数字是按公开标价估算的 — 真正节省的是从未消耗的高级额度。记录文件仅保存 token 数量和模型名称;你可以随时删除该文件,也可以设置 DELEGATE_NO_LOG=1 来完全关闭日志记录。
让你的 Agent 真正用起来
每个“委派给廉价模型”工具都有个鲜为人知的真相:**安装它并不难,难的是让你的 Agent 真正用起来。**把工具放进 Agent 后,处理真实任务几轮,它就会忘记工具的存在,转而用高级模型的 token 自己埋头处理那些苦差事。指令会逐渐沉到上下文深处,注意力也会转移。
Cheaplane 开箱即提供解决方案,你可以叠加使用以下三层:
- 技能(
SKILL.md)——教 Agent 何时委派。适用于任何客户端;它是被动的,因此可作为基础。 - 在你的
CLAUDE.md/ system prompt 中加入一行默认指令:*“动手处理本可委派的苦差事之前,先把它委派出去。”*效果更好,但静态指令在漫长对话中仍会逐渐淡出。 - 逐轮提醒钩子——可靠的方案(Claude Code)。它会在每个提示词中重新注入提醒,让这个习惯始终留在视野中。这正是让工具从已安装变为真正使用的关键。
对于其他 MCP 客户端(没有 UserPromptSubmit 钩子系统),请使用第 1–2 层——将这一行指令接入客户端支持的 system prompt。
安装钩子——安全且幂等(会备份你的设置,采用合并而非覆盖的方式,并在重复运行时去重):
bash install-hook.sh # registers hooks/delegate-reminder.sh as a UserPromptSubmit hook
# verify it's wired up:
python3 -c "import json,os;s=json.load(open(os.path.expanduser('~/.claude/settings.json')));print([h['command'] for e in s.get('hooks',{}).get('UserPromptSubmit',[]) for h in e.get('hooks',[])])"
开启新会话后,你的 Agent 每轮都会自检:“这是本可委派的苦差事吗?→ 委派出去。”
每轮提醒约消耗 60 个 token,远低于一次被遗忘的委派所浪费的数百个高级模型 token。该钩子使用 Claude Code 的 UserPromptSubmit 机制。
配置
| 环境变量 | 默认值 | 含义 |
|---|---|---|
DELEGATE_BASE_URL | http://localhost:4000 | OpenAI 兼容端点(你的代理) |
DELEGATE_API_KEY | sk-litellm | 该端点的密钥 |
DELEGATE_TIMEOUT | 120 | 单次调用超时(秒) |
DELEGATE_MODEL_MAP | (无) | JSON 别名映射,例如 {"deepseek":"deepseek-v4-flash"}——覆盖默认值,无需修改代码 |
DELEGATE_LOG | ~/.cheaplane/usage.jsonl | 用量节省记录的存放位置 |
DELEGATE_NO_LOG | (未设置) | 设为 1 可完全禁用用量记录 |
常见问题
这会泄露我的订阅凭据吗?
不会。delegate 工具在独立进程中运行,只会向你配置的端点发出普通 HTTP 请求。它不会导入你的订阅 SDK,也不会接触其身份验证信息——请参阅账单隔离:这才是关键。
用量节省记录具体记录什么?
每次调用记录一行 JSON:时间戳、别名、模型名称,以及 token/字符数量。**绝不记录任务文本,也绝不记录模型的输出。**你可以随时删除 ~/.cheaplane/usage.jsonl,或设置 DELEGATE_NO_LOG=1。
auto 如何决定使用哪个模型?
server.py 中有一个小型确定性启发式规则(_pick_model,约 20 行,可自行查看和调整):代码信号 → deepseek,超长输入 → kimi,中文内容较多 → qwen,多步骤语言任务 → mimo,简短机械性杂务 → flash。显式指定别名时始终优先使用该别名。
这和所有事情都使用同一个 API 密钥有什么区别?
使用单个 API 密钥,就意味着你不再使用订阅,并且所有工作都要按 token 付费——包括难度较高的任务。Cheaplane 会保留你的订阅作为高级主线程,只把廉价且可替换的繁琐任务交给其他模型。
除了 Claude Code 之外也能用吗?
可以——任何兼容 MCP 的客户端都可以(Cursor、Cline、Windsurf 等)。主 Agent 只需支持 MCP 工具;通用 JSON 配置请参阅手动设置。
必须使用 DeepSeek / Kimi / Qwen 吗?
不必。任何可通过 OpenAI 兼容端点访问的模型都能使用;这些别名只是方便使用的标签,你可以通过 DELEGATE_MODEL_MAP 重新映射。
为什么使用代理,而不是直接调用服务提供商?
只需一个端点和一个密钥,还能记录用量并轻松切换模型;同时可避免 MCP 服务接触服务提供商的密钥。
路线图与创意(欢迎参与)
Cheaplane 的核心刻意保持精简,但它开辟的空间很大。目前已交付:✅ 自动路由(v0.2),✅ 节省费用记录(v0.2)。仍有不少值得开发的功能——欢迎提交提案和 PR,其中大多数都很适合作为入门任务:
- 更智能的路由 — 当前路由器采用易读的启发式规则;更好的信号(或经过训练的路由器)还有很大的探索空间。
- 更丰富的节省费用仪表板 — 记录采用纯 JSONL 格式;如果能提供
cheaplane statsHTML 视图就很棒。 - 结果缓存 — 跳过重复任务的再次委派。
- 自动审查 — 对返回的代码运行 lint 和测试,通过后再决定是否信任。
- 批量/并行委派 — 一次调用即可交办多项任务。
- 更多客户端接入方案 — 提醒钩子面向 Claude Code 的
UserPromptSubmit;Cursor、Cline 等工具也需要各自的提醒方式。
设计原则:保持核心为单文件且依赖轻量——这正是整个项目的意义所在。 扩展功能应以可选方式构建,让 5 分钟的阅读体验依然只需 5 分钟。
贡献
欢迎提交 Issue 和 PR——项目只有约 250 行单文件 Python 代码,没有沉重的依赖,很容易上手修改。添加实用的模型别名、路由信号或客户端接入方案,然后提交即可。
许可证
MIT — 参见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。