我们如何用 Claude Code 交付 Statnive 而不烧光 token
一支 WordPress 插件团队的真实 token 预算 — 80+ 技能、24 个 MCP 连接器、200K 上下文窗口。我们测了什么、砍了什么,以及现在为每次发布把关的四个数字。
我们第一次跑 /context,只剩 12%
Statnive 是一支正在交付一款隐私优先 WordPress 分析插件的小团队。我们的代码库有两个 git submodule(插件和官方网站)、80+ 个 Claude Code 技能、24 个 MCP 连接器,以及在任何东西交付前都会跑141 项测试和 31 项合规检查的发布门禁。
前两个月,AI 辅助开发感觉像魔法。然后开始让人感觉昂贵。会话在任务中途超时。模型似乎忘掉了五分钟前读过的东西。我们的 Anthropic 账单为单个工程师爬到了每天 $6 以上。
我们第一次跑 /context,明白了原因。在我们输入第一句提示之前,我们已经用掉了上下文窗口的 88%。剩 12% 给真正的工作。
本文就是我们如何在不放弃任何技能或连接器的情况下,将这部分开销大致砍掉了三分之二 — 以及现在为每次发布把关的四个数字。
要点数字:约 54K token 的基线开销(从约 175K 降下来)、约 73% 的上下文窗口可供真正工作,每日支出从约 $6 降到约 $2–3。
那 200K token 里实际住着什么
Claude Code 给您一个 200K token 的上下文窗口。这听起来很慷慨,直到您理解在您发出第一条消息之前都有什么在啃食它。
| 组件 | 它是什么 | 未优化 | 我们的目标 |
|---|---|---|---|
| 系统提示 | 内置的 Claude Code 指令 | 约 3,200 | 约 3,200 |
| 内置工具 | Read、Write、Bash、Grep、Glob、Edit | 约 11,600 | 约 11,600 |
| 根 CLAUDE.md | 项目说明,始终加载 | 8,000+ | ≤ 1,500 |
| 技能元数据 | <available_skills> 条目 | 4,000+ | ≤ 2,500 |
| MCP 工具 schema | 24 个连接器 × 大量工具 | 48,000–120,000 | ≤ 3,000 |
| 自动压缩缓冲 | 预留余量 | 32,000 | 32,000 |
这其中三行是整场战斗:始终加载的 CLAUDE.md、技能元数据注册表,以及 MCP 工具 schema 转储。其他一切都由框架固定。
底层机制是渐进式披露(progressive disclosure)。Claude Code 的技能系统在启动时仅加载每个技能的 name 和 description 字段 — 每个技能大约 30–50 token — 把完整的 SKILL.md 正文延迟到技能真正被调用时。同样的窍门在您配置后也能用于 MCP 工具 schema 和参考文档。如果您不去配置,每一条工具定义、每一条规则、每一条说明都会永远住在上下文里。
MCP 工具开销是我们最大的漏洞
第一次跑 /context 是一种让人谦卑的体验。下面是我们在动任何东西之前看到的:
| MCP 连接器 | 工具 | 消耗 token |
|---|---|---|
| GitHub | 35 | 约 26,000 |
| Playwright(浏览器自动化) | 21 | 约 13,647 |
| Slack | 11 | 约 21,000 |
| Context7(库文档) | 约 15 | 约 8,000 |
| 其他 20 个连接器 | 约 200 | 约 60,000+ |
仅这五行在我们打开任何文件之前就消耗了约上下文窗口的 60%。问题在于架构:每个 MCP 工具 schema — 名称、描述、完整的 JSON 参数定义 — 默认都在会话开始时被注入到上下文。Docker 的 MCP 服务器交付了 135 个工具,仅它一项就消耗约 126,000 token。
为我们完成 85% 工作的修复是打开 MCP Tool Search。它在 Claude Code v2.1.7 中交付,构建一个包含工具名和描述的轻量约 5K token 索引,仅在 Claude 实际调用某个工具时才加载完整 schema。Anthropic 的内部测试显示从 134K 降到约 5K token — 砍掉 85% — 同时 MCP 评测的准确率反而上升(Opus 4:49% → 74%)。
当工具描述超过上下文窗口的大约 10% 时,激活会自动发生,但我们在每次会话都通过 /context 验证它已激活,留意「tool search enabled」那一行。
我们在一篇专门讲 MCP Tool Search 的文章里写过更多前后对比的数字以及我们保持立即加载的三个连接器。
CLAUDE.md:162 行,而不是 800
与技能和 MCP 工具不同,CLAUDE.md 的每一个字节都会在每次会话开始时加载进上下文,没有任何懒加载。这包括根文件、通过 @path/to/file 语法导入的任何文件(递归最深 5 层)以及所有全局和企业级文件。
我们的第一版 CLAUDE.md 有 820 行。它记录了每个技能、每个工作流、每条编码规范、每个发布门禁、我们 WordPress-coding-standards 配置的每一个细节。它很全面。它也在每个会话上消耗了大约 12% 的上下文窗口,包括那些与它描述的内容大部分都不相关的会话。
我们把它精简到 162 行,办法是把协议移走,并用一张触发表替代 — 一种紧凑的技能查找模式,取代冗长的逐技能文字:
## Skill triggers
| Trigger keywords | Skill | Domain |
|------------------|-------|--------|
| sprint, backlog, iteration | pm-sprint-plan | PM |
| deploy, release, ship | statnive-release | Dev |
| security, audit | sec-audit-remediate | Security |
这个模式约耗 800 token,而冗长文档要 3,000+。详尽的协议活在各自的 SKILL.md 文件里,仅在 Claude 路由到它们时才加载。.claude/rules/ 下的路径作用域规则在 Claude 处理匹配文件时挑起领域特定约束(React 约定、PHP 编码规范、发布门禁规则)。
完整的前后对比记录在我们的 CLAUDE.md 重设计文章中,但我们移除的最大单一反模式是把大型参考文件 @-import 到根 CLAUDE.md。每个 @import 都会在每次会话加载完整目标文件 — 我们曾有三个,给模型很少需要的内容增加了约 6,000 token 的永久开销。
技能分层:四个桶,一条规则
我们有 80 多个技能,覆盖产品管理、后端脚手架、QA、安全审计、WordPress 特定模式、发布打包等等。天真地加载,80 个技能 × 每个约 50 token 的元数据,就是 4,000 token 的永久开销。增长到 141 个技能(就像我们所基于的 jaan.to 框架那样),可以把它推上 14,000 token。
修复办法是 Claude Code 技能系统定义的四桶分层模型:
| 桶 | 前置元数据 | 元数据成本 | 何时使用 |
|---|---|---|---|
| 始终开启 | (默认) | 约 40 token | 模型应自动路由的核心工作流 |
| 自动可调 | (默认,简洁描述) | 约 40 token | 触发关键词强的领域技能 |
| 仅手动 | disable-model-invocation: true | 0 token | 仅斜杠命令的技能 — 罕见或具破坏性 |
| Fork / subagent | context: fork | 约 40 token | 评审、审计、不应污染主上下文的多步分析 |
一个问句测试:*主对话需要看到输出吗?*如果不需要 — 如果该技能是自包含的并返回一个摘要 — 它就是 fork/subagent 的候选,其内部 token 使用从主上下文中消失。Anthropic 记录的 subagent 是从 10,000+ token 的内部工作中返回 500–1,000 token — 在复杂任务上对主上下文大约减少 37%。
我们把大约一半的技能标为 disable-model-invocation: true — 它们仅可通过斜杠命令到达。仅这一项就省下了约 2,000 token 的基线元数据,并且实际改善了剩余自动可调技能的路由质量,因为 Claude 不再需要在近似重复之间做选择。
完整的逐桶拆解 — 包括我们如何为 Statnive 的真实技能库分类 — 在技能分层文章中。
在重活上使用 Subagent 隔离
三类工作再也不接触我们的主上下文:代码评审、安全审计和探索性研究。它们在 subagent 中运行 — 拥有自己 200K token 上下文窗口的独立 Claude 实例 — 并返回一条摘要消息。
经济学很微妙。Subagent 会话比内联工作消耗更多总 token:Anthropic 记录的 agent 团队总 token 使用量大约多 7×,因为每个 agent 都会启动一个新的 Claude 实例并附带其系统提示加载和工具初始化开销。
但我们优化的不是总 token 支出。我们优化的是:
- 主上下文清洁度。 一次读取 40 个文件并发现 3 个问题的安全审计返回一个 600 token 的摘要。如果不隔离,整个读取循环会吃掉 40K token 的主上下文,把我们推向「lost in the middle」区域,那里检索质量下降 15–47%。
- 模型路由。 Subagent 可以跑在 Haiku 4.5($1/$5 每 MTok)上,而主会话使用 Sonnet 或 Opus。只读探索不需要顶级模型 — Haiku 的 3× 成本优势在读取数百个文件的审计上很快累积。
一个普通发布日现在长什么样
在一个典型的 Statnive 发布日里,我们大约消耗 400K–600K token 的实际工作。它们去了哪里:
| 工作 | 模型 | 模式 |
|---|---|---|
| 早晨在一个开放 PR 上做代码评审 | Sonnet(主)+ Haiku(fork subagent) | Fork 评审,返回摘要 |
| 在 React 仪表盘里写新功能 | Sonnet(主) | 自动可调的 frontend-scaffold 技能,参考按需加载 |
| 跑发布门禁 | Sonnet(主) | statnive-release 技能,bash 驱动 — 无额外上下文 |
| 写一篇这样的博客文章 | Sonnet(主) | 内联起草,再 fork 一遍评审 |
提示缓存负责其余部分。Claude Code 缓存稳定前缀 — 系统提示、工具定义、技能元数据、根 CLAUDE.md — 这些每轮重复。缓存读取成本是基础价格的 0.1×,对那段稳定前缀带来约 90% 的成本降低。让内容静态在前、动态在后能最大化缓存命中,所以我们把根 CLAUDE.md 放在任何注入的动态上下文之上。
我们没有优化的部分
诚实而非仅展示能力:
- 我们还没转向重度的钩子驱动上下文。 研究表明
SessionStart钩子可以注入动态上下文(当前分支、变更文件、运行中的服务)来替代静态 CLAUDE.md 内容 — 社区案例显示进一步约 62% 的减少。我们试过,又退回了。exit code 2会在上下文中累积错误文本,这种风险吓到了我们。等 Claude Code 的钩子诊断更成熟后我们再来重审。 - 我们仍然在一些架构任务上使用 Opus。 研究建议 80% 的工作默认使用 Sonnet,把 Opus 留给复杂推理。我们对功能这么做,但在发布上对 Opus 过度依赖,因为发布失败的代价超过了边际的 Anthropic 账单。
- 我们还没为 token 预算建立 CI 门禁。 研究的玩法 — 如果根 CLAUDE.md 超过约 1,500 token、无作用域规则超过 400、或任何
SKILL.md超过 500 行就让 PR 失败 — 可以防止退化。它在路线图上。目前我们用每次会话上的/context人工检查来强制。 - 我们的数字是自我报告的。 我们是一支小团队。Anthropic 的公开数字(Tool Search 的 134K → 5K、subagent 隔离的 37%、提示缓存的 90%)在我们的测量中保持成立,但我们没有像对 WordPress 分析插件性能那样发布过严格的基准。
复利效应是真实的
四项优化 — 提示缓存、模型路由、subagent 隔离和 MCP 工具延迟加载 — 是乘法的,不是加法的。每一项单独看都温和。叠加之后,它们把一个 200K 上下文窗口从憋屈变成宽敞,把每天 $6 的习惯变成每天约 $2–3 的工具。完整的成本核算走读在经济学那篇文章中。
这对 Statnive 用户意味着什么:交付一个隐私优先分析插件的同一支团队,可以在不牺牲测试覆盖率或合规严格度的前提下,以一支大得多的团队的范围工作。每次发布仍要通过同样的 141 项测试和 31 项合规检查。AI 工作流是脚手架,而不是捷径。
我们为什么把这些公开
我们写我们如何打造最快的 WordPress tracker和我们如何测试 Statnive这样的文章,是因为我们认为 WordPress 生态值得更多诚实的工程叙事。这一点对 AI 辅助开发同样适用:声称 Claude Code 会改变您团队的内容比比皆是,但几乎没人展示 token 核算。
如果您是一支 WordPress 插件团队,或任何在大规模运行 Claude Code 的小型工程团队:今天就跑 /context。看看是什么在啃食您的窗口。我们现在为每次发布把关的四个数字是基线开销低于 30%、根 CLAUDE.md 低于 1,500 token、MCP Tool Search 已被验证激活,以及根配置中零 @-imports。这些都能在一个下午做到。
试试 Statnive
用此工作流构建的隐私优先 WordPress 分析插件在 WordPress.org 上免费。完整源码在 GitHub — 包括我们的 CLAUDE.md、我们的发布门禁技能以及完整测试套件。您的数据留在您的服务器上。我们的留在我们的。