Kulaxyz/token-diet
GitHub: Kulaxyz/token-diet
为 AI 编程 Agent 提供常驻式 token 精简技能,在不损失正确性的前提下平均降低约 31% 的 API 账单。
Stars: 591 | Forks: 1
# token-diet
面向编程 agent 的常驻 token 效率提升技能 — **Claude Code, Codex, Cursor,
Windsurf, Cline**。在不损失正确性的前提下,精简整个会话(回复、文档、测试、
代码、上下文、工具使用)中的 token。**账单平均降低约 31%**
(根据会话类型不同,降幅为 −17% 到 −54%),并且在 Sonnet 5 的实际运行中**输出量减少 −30% 到 −81%**。
*去除冗余,保留核心。*
## 安装
```
# 单行命令 — 自动检测 Claude Code、Codex 等:
curl -fsSL https://raw.githubusercontent.com/Kulaxyz/token-diet/main/install.sh | bash
# 通过 `bash -s --` 传递选项,例如 telegraphic 级别:
curl -fsSL https://raw.githubusercontent.com/Kulaxyz/token-diet/main/install.sh | bash -s -- --ultra
```
或者克隆并运行 `./install.sh`(`--ultra` 极简电报式聊天 · `--uninstall` 移除)。
使用 `-a claude|codex|cursor|windsurf|cline|all|print` 指定目标 agent,或者添加
`--project` 将其安装到当前 repo 中,而不是全局安装。它
常驻运行 — 无需针对每条消息输入命令 — 但也可按需使用 `/token-diet [on|lite|ultra|off]`。
## 功能说明
- **回复** — 直接给出答案;不要前置废话(“好的!这里是……”)或后置废话
(“如果需要……”);报告增量结果,而非叙述过程。
- **文档 / 记忆 / 交接 / 计划 / 注释** — 用最少的字数把事情说清楚;只注释非显而易见的*原因*,不注释代码本身。
- **测试** — 仅针对关键和核心/边缘路径,进行分组;每次会话 ≤10 个;绝不跳过
涉及资金/授权/数据丢失的测试。
- **代码** — 只构建被要求的内容(YAGNI);简洁且符合惯例;无死代码;
绝不晦涩难懂。
- **上下文** — 先 grep 再读取;只读需要的行,绝不读整个
文件;批量读取;减少轮次;绝不重新读取刚刚编辑过的文件。
- **工具** — 批量执行独立调用;**一旦获取到足够信息就立即停止行动**;
在迭代过程中进行有针对性的测试运行。
- **Sub-agents** — 将广泛的*有界*搜索委派给更便宜的模型;自己保留
对正确性敏感的验证;提供紧凑、完整的指令。
- **护栏** — 简洁原则仅适用于输出,绝不适用于推理:正确性、
关键测试覆盖率以及原封不动的代码/命令/错误信息是不可触碰的底线。
## 级别
`on`(默认 — 包含以上所有) · `lite`(仅限沟通 + 产物) ·
`ultra`(极简电报式聊天/进度汇报;代码、测试、文档保持精确) · `off`。
## 之前 / 之后 — `ultra` 聊天回复(token 计数已测量,`o200k_base`)
**正常 — 102 tokens:** “好问题!你的 Stripe webhook 签名
验证失败的原因是,你将已经解析的 JSON body 传递给了
`constructEvent`。Stripe 是根据请求的原始字节来计算
签名的,所以一旦你的框架将 body 解析为 JSON,字节就不再
匹配,从而导致验证失败。你应该做的是读取原始请求
body —— 例如在 Next.js 路由处理器中使用 `req.text()` —— 然后将该
字符串传递给 `constructEvent`。如果你需要代码片段,请告诉我!”
**token-diet `ultra` — 34 tokens (−66%):** “`constructEvent` 验证基于原始
字节 → 解析后的 JSON 会失败。读取原始 body(`req.text()` / Buffer),将其传给
`constructEvent`。在 `webhook/route.ts` 处修复。”
相同的修复,相同的标识符,相同的路径 — 只是去除了冗余。
## 数据(Sonnet 5 实际运行)
输出节省量是一致的;账单的降幅取决于会话中输出
与不可避免的文件读取的比例:
| 会话类型 | 输出 | 账单 |
|---|--:|--:|
| 重输出(建议、规划、解释) | −81% | −54% |
| 代码更改 + 测试(`nestjs/nest`, 1673 个文件) | −49% | −22% |
| 重读取理解 | −30% | −17% |
| **平均** | **−53%** | **−31%** |
平均值是三种场景的未加权平均值;54% 是最佳情况,
并非典型表现。每次运行的正确性均保持稳定。方法及完整表格:[`bench/RESULTS.md`](bench/RESULTS.md);
使用 `ANTHROPIC_API_KEY=… node bench/bench.mjs` 进行复现。
## 常驻机制的工作原理
skill 主体是按需加载的,因此为了使其*始终*生效,安装程序会
通过每次会话都会触发的通道注入指令:一个 `SessionStart` hook
(Claude Code),或一个始终加载的上下文文件(Codex `AGENTS.md`,
Cursor/Windsurf/Cline 规则文件)。与 [caveman](https://github.com/JuliusBrussee/caveman) 使用的是相同的技巧。
标签:AI编程助手, MITM代理, SOC Prime, Token优化, 应用安全, 开发工具, 成本控制, 提示词工程, 策略决策点