第 08 期 | /caveman:compress — 压缩你的 CLAUDE.md,每次省 46% 输入 Token
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)
(申请发送: agentupdate)
🎯 学习目标
学完本期你将掌握:
- 输入 Token 与输出 Token 的区别,以及为什么压缩输入同样重要
/caveman:compress的使用方法和文件处理机制- 压缩的安全规则——哪些内容会被压缩,哪些不会
- 在不同平台上使用 compress 的最佳实践
📖 核心内容
8.1 被忽视的成本:输入 Token
前面几期我们一直在讲如何压缩 Agent 的输出。但实际上,还有一个更隐蔽的 Token 消耗来源:输入。
每次你启动一个 Claude Code 会话,Agent 会自动读取:
CLAUDE.md(项目级规则)~/.claude/CLAUDE.md(用户级规则)- 各种 Skill 文件
- MCP 配置
graph TD
A["会话启动"] --> B["读取 CLAUDE.md
~1200 tokens"]
A --> C["读取 ~/.claude/CLAUDE.md
~800 tokens"]
A --> D["读取 Skill 文件
~500 tokens"]
A --> E["读取 MCP 配置
~300 tokens"]
B --> F["总输入: ~2800 tokens
每次会话都要支付"]
C --> F
D --> F
E --> F
F --> G["一天 20 次会话
= 56,000 输入 tokens/天
= 仅上下文加载就花费 ~$0.84/天"]这些文件在你的整个项目生命周期内很少改变,但每次会话启动都要重新读取和支付 Token。这就是 caveman-compress 要解决的问题。
8.2 Compress 的工作原理
graph LR
A["CLAUDE.md
1200 tokens
人类可读版"] -->|"/caveman:compress CLAUDE.md"| B["处理流程"]
B --> C["CLAUDE.md
648 tokens
压缩版 (Claude 读)"]
B --> D["CLAUDE.original.md
1200 tokens
备份 (人类读)"]
E["每次会话启动"] -->|"读取"| C
F["开发者维护"] -->|"编辑"| D
style C fill:#90EE90,stroke:#2E8B57
style D fill:#87CEEB,stroke:#4169E1核心设计:
- 原始文件被备份为
.original.md(你继续编辑这个) - 原始文件被覆盖为压缩版(Claude 读这个,更少 Token)
- 技术内容保持不动,只有散文描述被 Caveman 化
8.3 使用方法
基础用法
# 在 Claude Code 中
> /caveman:compress CLAUDE.md
# 输出:
# ✅ Compressed CLAUDE.md (1200 → 648 tokens, saved 46%)
# 📄 Original saved as CLAUDE.original.md
压缩其他文件
# 压缩用户级偏好
> /caveman:compress claude-md-preferences.md
# 压缩项目笔记
> /caveman:compress project-notes.md
# 压缩待办列表
> /caveman:compress todo-list.md
# 压缩任何 Markdown 上下文文件
> /caveman:compress any-context-file.md
在其他平台上
| 平台 | 使用方式 |
|---|---|
| Claude Code | /caveman:compress <filepath> |
| Antigravity | 请用 caveman compress 压缩 GEMINI.md 文件 |
| Gemini CLI | /caveman:compress GEMINI.md 或自然语言 |
| Codex | $caveman-compress AGENTS.md |
| OpenCode | 请压缩 AGENTS.md 文件,保留代码和路径,只压缩散文 |
8.4 安全规则:什么不会被压缩
这是 compress 最重要的设计原则——技术内容永远不会被修改:
graph TB
subgraph Safe["✅ 不会被压缩 (原样保留)"]
A1["代码块
```python...```"]
A2["URL 链接
https://..."]
A3["文件路径
src/utils/auth.ts"]
A4["命令行
npm install / git commit"]
A5["标题 / Heading
# ## ###"]
A6["日期 / 版本号
v2.3.0 / 2026-04-22"]
end
subgraph Compressed["🔧 会被压缩 (Caveman 化)"]
B1["散文描述
'This project is a...'"]
B2["解释性段落
'The reason we chose...'"]
B3["冗余修饰
'Please make sure to always...'"]
end
style Safe fill:#E8F5E9,stroke:#4CAF50
style Compressed fill:#FFF3E0,stroke:#FF9800压缩前后对比
压缩前 (CLAUDE.md):
# Project Architecture
This project is built using a modern microservices architecture
with TypeScript as the primary language. We chose this approach
because it provides better scalability and allows independent
deployment of each service.
## Important Rules
Please make sure to always follow these guidelines when making
changes to the codebase:
1. Always run `npm test` before committing
2. Use the `src/utils/logger.ts` module for all logging
3. Database queries must go through `src/db/repository.ts`
压缩后 (CLAUDE.md → Claude 读这个):
# Project Architecture
Microservices, TypeScript primary. Independent deploy per service.
## Important Rules
1. Run `npm test` before commit
2. Log via `src/utils/logger.ts`
3. DB queries through `src/db/repository.ts`
备份 (CLAUDE.original.md → 你编辑这个):
保持原始完整内容不变。
8.5 日常维护工作流
graph TD
A["需要更新项目规则"] --> B["编辑 CLAUDE.original.md"]
B --> C["重新压缩"]
C --> D["/caveman:compress CLAUDE.md"]
D --> E["CLAUDE.md 更新为新的压缩版"]
D --> F["CLAUDE.original.md 更新为新的备份"]
G["⚠️ 不要直接编辑 CLAUDE.md!"] -->|"会被下次压缩覆盖"| B
style G fill:#FFEBEE,stroke:#F44336⚠️ 重要提醒:
- 编辑 → 修改
CLAUDE.original.md - 压缩 → 运行
/caveman:compress CLAUDE.md - 不要直接编辑压缩后的
CLAUDE.md,它会在下次压缩时被覆盖
8.6 各平台的上下文文件对应表
| 平台 | 主上下文文件 | 压缩命令 | 备份文件 |
|---|---|---|---|
| Claude Code | CLAUDE.md |
/caveman:compress CLAUDE.md |
CLAUDE.original.md |
| Antigravity | GEMINI.md |
自然语言请求压缩 | GEMINI.original.md |
| Gemini CLI | GEMINI.md |
/caveman:compress GEMINI.md |
GEMINI.original.md |
| Codex | AGENTS.md |
$caveman-compress AGENTS.md |
AGENTS.original.md |
| OpenCode | .config/opencode/AGENTS.md |
自然语言请求压缩 | 手动备份 |
💻 实战练习
练习:压缩你的项目 CLAUDE.md
- 查看当前 CLAUDE.md 的 Token 数(粗略估计:1 个英文单词 ≈ 1.3 token,1 个中文字 ≈ 2 token)
- 运行
/caveman:compress CLAUDE.md - 对比压缩前后的 Token 数
- 确认 CLAUDE.original.md 是否正确保存了原文
- 启动一个新会话,确认 Agent 能正常读取压缩版
📊 压缩效果统计
根据 Caveman 官方基准测试,不同类型的文件压缩率:
| 文件类型 | 平均压缩率 | 说明 |
|---|---|---|
| 纯散文描述 | ~55-60% | 最高压缩潜力 |
| 规则 + 代码混合 | ~40-46% | 最常见场景 |
| 代码为主的文件 | ~15-20% | 代码不压缩,仅压缩注释 |
| 纯代码文件 | ~5% | 几乎无压缩空间 |
💡 最佳实践:将
CLAUDE.md中的"是什么"和"为什么"写在散文段落里(这些会被压缩),将"如何做"写在代码块和命令里(这些保持原样)。
📝 本期要点回顾
- 输入 Token 是每次会话的隐性成本,CLAUDE.md 每次启动都要重新支付
/caveman:compress将散文压缩为 Caveman 风格,平均节省 46% 输入 Token- 安全保证:代码块、URL、文件路径、命令行、标题、版本号永不压缩
- 压缩后编辑
*.original.md,不要直接编辑压缩版 - 各平台都有对应的上下文文件(CLAUDE.md / GEMINI.md / AGENTS.md),都可以压缩