是什么
Claude Code 的上下文窗口(约 200K tokens)保存着一次会话中 Claude 知道的所有内容:系统提示、CLAUDE.md、Auto Memory、文件读取内容、命令输出、对话历史。上下文填满时性能下降,管理上下文是使用 Claude Code 的核心约束。
核心机制
会话启动时自动加载(用户看不到):
- 系统提示(约 4200 tokens)
- Auto Memory(MEMORY.md 前 200 行或 25KB)
- 环境信息(工作目录、平台、git 状态)
- MCP 工具名称(schema 延迟加载)
- Skill 描述(内容按需加载)
- 全局 CLAUDE.md + 项目 CLAUDE.md
会话过程中动态增加:
- 用户消息(完整显示)
- 文件读取(终端只显示一行,内容进入上下文)
- 路径规则(匹配文件时自动加载,终端显示「Loaded」提示)
- 命令输出(终端显示摘要,完整输出进入上下文)
- Hook 输出(通过
additionalContextJSON 字段进入上下文) - Subagent 只返回摘要,大量文件读取留在 Subagent 自己的上下文
压缩(Compaction)后的存活情况:
| 机制 | 压缩后 |
|---|---|
| 系统提示和 output style | 不变(不在消息历史中) |
| 项目根 CLAUDE.md 和无路径规则 | 从磁盘重新注入 |
| Auto Memory | 从磁盘重新注入 |
带 paths: 的路径规则 | 丢失,等下次读取匹配文件时重载 |
| 子目录嵌套 CLAUDE.md | 丢失,等下次读取对应目录文件时重载 |
| 已调用的 Skill 内容 | 重新注入(单个上限 5000 tokens,总计 25000 tokens) |
关键细节
- 运行
/context查看实时上下文占用分类和优化建议 - 运行
/memory检查启动时加载了哪些 CLAUDE.md 和 Auto Memory 文件 - 运行
/compact focus on the API changes手动压缩并指定保留重点 - 运行
/compact后 Skill 描述不会重新注入,只有实际调用过的 Skill 内容会保留 - 文件读取是上下文消耗的主要来源,一个大文件可能消耗数千 tokens
关联
- how-claude-code-works — agentic loop 和上下文管理机制
- memory — CLAUDE.md 和 Auto Memory 加载规则
- extend-claude-code — 各扩展的上下文开销对比
- best-practices — 上下文管理最佳实践
实践要点
- 把持久规则放在 CLAUDE.md,不要依赖对话历史——压缩后对话历史会丢失
- 用 Subagent 隔离大量文件读取,只让摘要回到主上下文
- 不相关任务之间用
/clear重置上下文,而不是在同一会话中堆积 - 路径规则(带
paths:的 rules)在压缩后会丢失,重要规则放在项目根 CLAUDE.md - 上下文接近满时,Claude 可能开始「忘记」早期指令——这是性能下降的信号