Context Weight
无论启动时加载了什么,在会话中的每个请求都会被重新发送。一个 150k token 的 CLAUDE.md,在每个请求开始之前就要花费 150k token。本技能负责测量这个负载,削减它,并用数字证明削减的效果。
脚本位于本技能目录下的 scripts/cw.py。请从本文件所在位置解析其绝对路径。它需要 Python 3.8+,无其他依赖。它从不修改用户的文件,仅输出数字,从不输出对话内容,唯一会写入的文件是使用 --svg 或 --open 时生成的图片。
实时仪表? 对于“我的上下文现在有多满”,请使用工具的内置命令:Claude Code 的 /context,Codex 的 /status。本技能关注的是仓库和历史记录。
1. 称重(只读)
python3 <技能目录>/scripts/cw.py report <仓库路径> --days 30 --svg
--svg 还会将报告绘制成一张图片,存放在系统临时文件夹中,并在最后一行输出其路径(图片: ...)。将该路径提供给用户,以便他们快速查看数字;--open 可以在用户要求查看时自动打开图片。使用 --svg 文件路径 可以自定义保存位置,除非用户要求,否则不要使用仓库内的路径。
文本输出包含四个部分:
- 每个工具启动时加载的指令文件,以估计 token 数表示;
- 每个工具预算内的技能列表占用;
- 该仓库已测量的会话数据;
- 排名后的问题发现。
更窄的视图:files <仓库>、skills <仓库>、sessions --top 20、sessions --project <项目名> --compare-at YYYY-MM-DD。任何视图均可添加 --json。
当你向用户报告时,请提供:
- 每个工具的启动 token 数;
start(会话第一个请求的中位上下文大小);start%(所有输入中启动负载被重复发送的比例);>阈值 tok的比例;- 问题发现。
说明哪些数字是估计值(files、skills),哪些是测量值(sessions)。Claude Code 的技能预算取决于模型的上下文窗口,但日志中不会记录:cw.py 默认假设为 200k 并会说明。如果用户运行的是 1M 上下文的模型,请使用 --window 1000000 重新运行。
2. 根据数字选择杠杆
| 信号 | 杠杆 |
|---|---|
仓库指令文件超过约 5k token,且 start% 较高 | 精简指令文件(步骤 3) |
>阈值 tok 超过 50% | 会话卫生(步骤 4) |
| “不同工具遵循不同规则” | 统一为一份 AGENTS.md(步骤 3) |
| Codex 报告“见不到”的警告 | 精简,或将部分内容移至嵌套的 AGENTS.md 文件 |
| 技能列表超出预算 | 卸载不用的技能或插件。先询问,这是用户的配置 |
从最大的数字开始。不涉及的数字则不要改动。
3. 精简指令文件
完整流程见 references/slimming.md。在编辑之前请先阅读。
简化步骤:
- 备份文件,然后记录
cw.py files <仓库>。 - 将每个部分归类为以下五种之一:规则(保留,使其简洁)、指针、参考、日志或重复。
- 将参考和日志移到
docs/agent-notes/。仅保留一行纯路径指针。不要使用@:Claude Code 在启动时展开@import,而 Codex 会忽略它们。 - 将核心文件控制在 200 行以内、约 5k token,保持在 Codex 的 32 KiB 链限制内。
- 使 AGENTS.md 成为唯一的规范文件。CLAUDE.md 保留
@AGENTS.md以及仅适用于 Claude 的行。 - 证明:
verify-split退出码为 0,files显示下降,并且通过--max-tokens门控。
移动文本是安全的。删除知识需由用户决定:在删除任何不是明确重复的行之前,请先询问。
4. 会话卫生
大多数输入 token 来自长会话的后期请求。每个请求都会重新发送之前的所有内容。
- 每个会话处理一个任务。
- 当上下文超过窗口的一半,或任务发生变化时,编写一个简短的工作交接(目标、状态、下一步、涉及的文件),然后重新开始。在 Claude Code 中使用
/clear,在 Codex 中使用/new。这优于反复压缩。 - 避免将大量工具输出放入上下文:过滤、截断,或写入文件后只读取所需部分。
5. 证明
- 立即证明: 对比精简前后的
cw.py files <仓库>,并检查verify-split退出码是否为 0。 - 防止重新膨胀: 在 CI 或 pre-commit 中添加
python3 <技能目录>/scripts/cw.py files . --max-tokens 6000。当仓库指令文件增长超过限制,或 Codex 会截断其中任何部分时,退出码为 1;当路径错误时退出码为 2,从而避免因拼写错误通过检查。 - 实际使用数天后: 运行
cw.py sessions --project <项目名> --compare-at <改动日期>,报告改动前后的start和start%。
在最后一个命令运行了改动后的会话数据之前,不要声称已实现节省。
退出码
0 正常,1 检查失败(--max-tokens、verify-split),2 输入错误(路径缺失、文件无法读取、日期错误)。错误信息输出到 stderr。
参考
references/harnesses.md:每个工具加载的内容和时间、大小限制、技能文件夹,并附有来源。references/slimming.md:精简步骤和验证方法。