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优化, 应用安全, 开发工具, 成本控制, 提示词工程, 策略决策点