
项目根目录里那份 CLAUDE.md 越写越长改一个 CSS 样式时Claude Code 却还在读数据库迁移规范、发布流程和监控平台说明。要看清 CLAUDE.md、Skills、MCP、Subagents、Hooks 各自烧掉多少 token单靠感觉没有用得让会话先跑在可计量的通道上。TaoToken 在这里不是替换 Claude Code而是给出一层统一接入的 API 通道。打开 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建一把 Key把 Claude Code 的ANTHROPIC_BASE_URL填成https://taotoken.net/api再启动会话输入/usage上下文账本才有数字可对。很多团队配 Claude Code 扩展的顺序是反的先把 CLAUDE.md 写成百科再装一堆 Skill、MCP最后发现每次小改动都拖着整座知识库。真正该先做的是让 token 消耗可以被观察。可观察之后你才会知道哪一段常驻文本在每一轮请求里收税哪一类工具只在被调用时才出现哪一些扩展看起来很大、实际却不在主会话里占位置。下面从配置通道开始再回到/usage里逐项对账。1. 为什么在 Claude Code 里跑 /usage比背扩展名单更重要1.1 从一条 CSS 改动被数据库迁移规范拖住说起一个很典型的场景项目根目录的 CLAUDE.md 里塞了编码规范、提交规范、部署流程、数据库迁移步骤、PR Review 清单、测试命令、线上排障手册甚至整段业务背景。刚开始很舒服Claude Code 每次启动都能读到这些信息回答也显得很懂项目。过一段时间问题就冒出来。明明只是改一个按钮样式Claude Code 却会主动谈发布风险、迁移顺序、监控指标。上下文窗口还没真正用在代码上已经被一堆并不相关的常驻信息占了一大块。此时如果去问“到底是 CLAUDE.md 贵还是 MCP 贵”没有/usage的数据就只能猜。1.2 /usage 之前先让会话跑在可计量的 API 通道上Claude Code 的/usage会展示当前 session 的 token 使用情况并且能把消耗归因到 skills、subagents、plugins、MCP servers 等来源。前提是这次会话确实跑在一条能计量、能归因的 API 通道上。如果通道本身不透明/usage最多只能看到总数没法帮你判断是 CLAUDE.md 常驻太重还是某个 MCP 工具返回了太多日志。所以操作顺序应该反过来先去 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建 Key再把 Claude Code 指向https://taotoken.net/api然后才启动会话、输入/usage。通道配通之后Claude Code 仍然在做代码库分析但成本账本开始有迹可循。1.3 上下文成本不只是钱还有窗口容量和注意力token 成本最直观但 Claude Code 里的上下文成本还有两层。一层是窗口容量常驻内容越多真正留给代码、错误日志、测试输出、用户意图的空间越少。窗口接近上限时系统会压缩历史压缩必然带来信息取舍。另一层更隐蔽是注意力污染。Claude Code 会在当前上下文里推断任务意图。如果同一个 session 里同时有部署规范、安全审计清单、数据库迁移手册、前端样式约束它有时会把轻量任务看得过重。人类工程师也一样桌面上摊满十份文档时关键那一页反而容易被忽略。/usage能帮你看见第一层另外两层要靠加载时机的设计来治。2. 把 Claude Code 的 ANTHROPIC_BASE_URL 指到 TaoToken2.1 在官网创建 Key不要把它和 Base URL 混用准备材料只有两样一把 API Key一个填进工具的 Base URL。Key 从 TaoToken 创建登录后进入控制台即可生成本文一律用YOUR_API_KEY占位。Base URL 填https://taotoken.net/api末尾不要加/v1也不要带任何 UTM 参数。这里最容易犯的错是把浏览器里打开的落地页地址直接复制进ANTHROPIC_BASE_URL。落地页是给人点的用来注册、创建 Key、看模型广场、看用量填进 Claude Code 的地址是接口地址。两者职责不同混用会直接导致请求失败。2.2 环境变量写法适合临时会话和容器如果你只想在当前终端里跑一次 Claude Code可以用环境变量。把下面三行里的占位符换成真实值然后启动claudeexport ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENYOUR_API_KEY export ANTHROPIC_MODELYOUR_MODEL_ID claudeYOUR_API_KEY必须从 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 创建。YOUR_MODEL_ID不要凭记忆写也不要用网上抄来的日期后缀以 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end 模型广场当时列表为准。环境变量方式的好处是干净关掉终端就结束不会污染其他项目。2.3 settings.json 写法适合长期在项目里用如果希望每次打开 Claude Code 都自动走这条通道可以写进~/.claude/settings.json的env字段。格式如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: YOUR_API_KEY, ANTHROPIC_MODEL: YOUR_MODEL_ID } }保存后重新打开 Claude Code。注意ANTHROPIC_BASE_URL仍然不能带/v1也不能把utm_source拼进去。ANTHROPIC_AUTH_TOKEN和ANTHROPIC_MODEL是 Claude Code 认的字段不要套到其他工具的配置文件里。配好之后先随便问一句项目相关问题确认能正常返回再进入/usage对账。3. CLAUDE.md 与 Skills/usage 里最容易被看见的常驻税3.1 CLAUDE.md 每轮都在场/usage 会把它摊进每次请求CLAUDE.md 的加载策略非常直接session start 时加载完整内容。官方成本文档也明确写过CLAUDE.md 会在 session start 被 loaded into context。如果里面包含 PR review 或 database migrations 这类特定流程的详细说明即使你正在做无关任务这些 token 也仍然会在场。所以 CLAUDE.md 适合放“项目宪法”而不是“项目百科”。像使用 pnpm、提交前跑单元测试、不要编辑生成文件、后端服务位于 services/ 下这类规则短、稳定、跨任务有效。而蓝绿部署步骤、支付 PR 检查清单、历史数据迁移流程虽然重要但不是每一轮对话都需要。塞进 CLAUDE.md就等于每次问一个小问题都让它把整套流程重新读一遍。在/usage里CLAUDE.md 的成本表现为一种“底噪”你还没开始聊具体任务token 已经跟着每轮请求走。这也是为什么官方建议尽量让 CLAUDE.md 保持在 200 行以内。想验证它有多贵可以临时在项目里把它复制成两份一份精简、一份臃肿分别开新会话跑/usage对比首轮 token 差异。数字会告诉你常驻文本的税有多重。3.2 Skills 是半常驻描述进场正文按需Skills 比 CLAUDE.md 精细。默认情况下session start 时 Claude 会看到 skill 的描述信息用来判断何时使用真正的完整内容在 skill 被使用时才加载。这意味着 Skills 不是零成本但成本分成两段描述是半常驻正文是按需。如果团队安装了几十个 skill每个 description 又写得像产品说明书低成本也会慢慢堆起来。设计原则很像 IDE 插件插件可以多但每个插件的激活条件要清楚描述要短。不要把 README 写进 description更不要把整段提示词复制进去。在/usage里观察 Skills重点看两类会话一类是绝对用不到某个 skill 的任务另一类是明确触发该 skill 的任务。前者能看到描述常驻的成本后者能看到正文加载后的增长。如果两次差异不明显可能是 skill 描述写得太长如果差异很大则说明正文确实值得按需加载。3.3 用 disable-model-invocation 和 skillOverrides 把自动入口关掉有些 skill 只适合人工手动触发例如/release-prod、/generate-audit-report、/sync-translation-files。对于这类工作流可以把disable-model-invocation设为 true阻止 Claude 自动加载该 skill只保留/name手动触发。官方文档说明这个开关会把 skill 从 Claude 的 context entirely 移除直到被手动调用。如果 skill 不是自己写的还可以通过 settings 里的skillOverrides控制可见性例如on、name-only、user-invocable-only、off。其中user-invocable-only可以让 skill 对 Claude 隐藏但仍保留在/菜单里。真实团队里一个legacy-contextskill 就很适合这样处理平时 Claude Code 不必自动考虑它真要改老系统时人工输入/legacy-context再加载。把 Skills 配好之后回到/usage再看一次 session 消耗你会发现主上下文的底噪降了而任务型知识仍然能在需要时进来。这就是“半常驻”带来的弹性。4. MCP、Subagents、Hooks 在 /usage 里的三种延迟曲线4.1 MCP工具名常驻完整 schema 延迟返回数据才是大头MCP 解决的问题是连接。Claude Code 可以通过 Model Context Protocol 连接外部工具、数据库和 API让 Claude 直接读取和操作外部系统而不是靠人工把 issue tracker 或 monitoring dashboard 的内容复制进聊天窗口。但从上下文成本看MCP 的关键是延迟加载。官方成本文档写得很清楚MCP tool definitions 默认是 deferred所以只有 tool names 会进入 context直到 Claude 使用某个具体工具时完整定义才进入上下文。官方还建议用/context查看空间消耗并禁用不活跃的 MCP servers。这让 MCP 的常态成本比较低启动时 Claude Code 知道有 GitHub、Slack、PostgreSQL、Sentry、Figma 这些工具存在但不会把每个工具完整 schema 全塞进上下文。真正贵的是工具返回的数据。连接 PostgreSQL 本身不贵让 Claude Code 查询一个百万行表再返回大段结果就很贵。连接 Sentry 本身不贵让它拉回一整页 stack trace、breadcrumb、request payload、release history就会快速占满主上下文。在/usage里MCP 的成本往往不是一条平滑曲线而是一次调用后突然抬升。合理做法是让 MCP 工具支持聚合查询只返回最近一小时 top error group、影响用户数、最新 stack trace 摘要、关联 commit。少传原始材料多传结构化结果。4.2 Subagents独立窗口做脏活主会话只收摘要Subagents 的关键不是更聪明而是隔离。官方 subagents 文档提到subagent 可以通过独立上下文保存主会话上下文把探索和实现隔离出去并可以限制工具使用、复用配置、使用专门的 system prompt。成本文档也建议把运行测试、抓取文档、处理日志这类 verbose operations 委派给 subagents这样大量输出留在 subagent 的上下文里只把摘要返回主会话。一个典型场景是大型仓库探索。主会话目标很简单修复支付模块里 expired card 用户结账失败的问题。Claude Code 可以启动一个 read only subagent 去扫src/payments/、相关测试、错误日志、路由入口subagent 最终只回报问题路径、关键文件、建议修改点。主会话不需要承受 subagent 中间读过的几十个文件也不需要保留一整屏 grep 输出。在/usage里subagent 的成本会体现在总 token 上但主会话的上下文增长被压住了。它不是不消耗 token而是把 token 消耗换成上下文隔离。判断标准也很简单看中间过程是否值得保留在主会话。全文日志、测试长输出、文档检索结果、候选文件列表适合交给 subagent产品需求讨论、架构取舍、接口语义约定应该留在主会话。4.3 Hooks默认不占上下文但 additional context 要克制Hooks 和前面几个功能不太一样。它不是让 Claude 多知道什么而是在 Claude Code 生命周期的特定节点执行外部动作。官方 hooks 文档说hooks 是用户定义的 shell commands会在特定点执行用于确定性控制行为例如格式化代码、发送通知、校验命令、执行项目规则。从上下文成本看hook 最优雅的地方是它默认不占主上下文。hook 在外部运行不需要把脚本内容每次塞给 Claude。只有 hook 返回了 additional context才会对上下文产生影响。所以 PreToolUse hook 可以拦截危险命令PostToolUse hook 可以自动格式化文件任务结束 hook 可以发桌面通知这些都不需要占用 Claude 的注意力。但要小心 hook 的输出。一个 hook 如果每次都把完整 lint report、完整 test report、完整 dependency audit report 返回给 Claude那它就从零上下文工具变成了上下文喷泉。好的 hook 应该像过滤器只把需要 Claude 处理的最小信息返回。比如测试命令的 hook 只返回失败测试和错误附近几行。在/usage里Hooks 通常不会让 token 明显增长一旦增长就要检查是不是某个 hook 返回了整片海。5. Code intelligence 为什么经常是负成本项5.1 symbol navigation 替代 grep 后读多个文件Code intelligence 的上下文成本很有意思。它不是单纯增加上下文而是在很多场景下减少上下文。官方成本文档说Code intelligence plugins 可以给 Claude 精确的符号导航而不是依赖文本搜索。一次 go to definition 可以替代 grep 后读取多个候选文件。没有语言服务器时我们找一个函数定义可能会 grep 出十几个结果再打开三四个文件判断哪个是真的。Claude Code 也会做类似动作每读一个文件都在消耗上下文。有 Code intelligence 后它可以直接拿到 symbol location、diagnostics、type errors。这些诊断信息本身也会进入上下文但通常比整片文件内容小得多也更精确。在 TypeScript monorepo 里这个差异很明显。一个createOrder可能在 service、mock、test、controller、SDK wrapper 里都出现。没有 code intelligenceClaude Code 很容易读一堆候选文件。接上 TypeScript language server 后它能直接跳到真实定义再看引用位置。对大型 Java、ABAP、TypeScript、Go 项目来说Code intelligence 往往是省上下文的工具而不是花上下文的工具。5.2 diagnostics 即时纠错减少编译日志更关键的是 diagnostics 具有即时纠错价值。Claude Code 改完一个文件后如果 language server 直接报告类型错误它就能立刻修复而不必运行全量测试。对前端项目来说这可能少读很多编译输出对类型系统较强的项目来说symbol navigation 和诊断反馈会显著减少盲目探索。在/usage里Code intelligence 的成本应当看作投资。它会加载一些诊断和符号位置信息但它让 Claude Code 少走弯路少读无关文件少把整段编译日志塞进聊天。上下文账本里很多时候它是负成本。你要观察的不是它有没有产生 token而是它有没有让后续请求的总 token 下降。6. 跑通后回控制台对账验证、排障与下一步6.1 用同一把 Key 在模型对话里发测试消息配置保存后先在 TaoToken 模型对话 里用同一把 Key 发一条测试消息确认模型 ID 和 Base URL 没填错。这一步能快速区分是 Key 的问题、模型 ID 的问题还是 Claude Code 配置文件没生效。测试通过后再回到 Claude Code 里输入/usage看看这次 session 的 token 消耗有没有按预期出现。如果/usage里看不到扩展归因先确认会话是否真的跑在https://taotoken.net/api这条通道上。环境变量和settings.json同时存在时优先级可能让实际生效的值和你以为的不一样。可以用/context辅助查看当前上下文构成再对照/usage的数字。6.2 常见配置错多了 /v1、Key 放错字段、模型 ID 不在列表第一种错是ANTHROPIC_BASE_URL多写了/v1。填进工具的地址是https://taotoken.net/api末尾不带/v1。多出来之后Claude Code 可能报 404 或找不到模型。第二种错是 Key 放错字段比如把ANTHROPIC_AUTH_TOKEN写成别的变量名或者填了从其他平台复制的 Key表现通常是 401。第三种错是模型 ID 不在模型广场列表里凭记忆写了一个不存在的 ID请求会被拒绝。还有一种不容易发现的错settings.json写在了项目目录而不是~/.claude/settings.json或者 JSON 格式有误导致整个文件没被读取。改完配置后可以新开一个终端会话先打印环境变量确认再启动 Claude Code。排障时不要同时改多个地方一次只改一个变量改完就发一条测试消息。6.3 去控制台看这次 Claude Code 调用有没有记上账当 Claude Code 配通并能稳定跑/usage之后真正的调优才开始。你可以给同一个项目做两次会话一次保留臃肿的 CLAUDE.md 和全部 MCP另一次只保留精简常驻加按需 Skill分别记录/usage的第一轮和第五轮 token。对比之后哪些扩展在烧 token 会变得非常具体。长期在 Claude Code 里写代码可以打开 Coding Plan 看套餐是否够用Key 在 控制台 API Keys 创建和管理Claude Code 环境变量对照见 接入文档。把/usage的数字和控制台用量放在一起看你就能判断下一次该砍 CLAUDE.md 里的哪一段该给哪个 MCP 加聚合该把哪类探索丢给 subagent。