Appearance
探索上下文窗口
Claude Code 的上下文窗口包含 Claude 在会话中知道的一切:你的指令、读取的文件、自身响应,以及从不出现在终端的内容。了解各类机制何时加载、占用多少 token,以及 /compact 压缩后哪些内容会重新注入,有助于管理上下文使用效率。用 /context 查看实时分类用量,用 /memory 检查 CLAUDE.md 和自动记忆文件的加载情况。
Claude Code 的上下文窗口包含 Claude 在会话中知道的一切:你的指令、读取的文件、它自己的响应,以及从不出现在终端的内容。理解各类机制何时加载,有助于管理上下文使用效率和成本。
会话时序:什么时候加载什么
输入第一条消息之前
以下内容在你开始对话前就已进入上下文:
- 系统提示词:Claude Code 的内置指令(包含所选的输出风格)
- CLAUDE.md:项目根目录和父目录中的 CLAUDE.md 文件
- Auto memory:
~/.claude/CLAUDE.md等用户级记忆文件 - MCP 工具名称:已连接 MCP 服务器的工具列表
- Skill 描述:已配置 skill 的描述信息
通过 --append-system-prompt 传入的文本也在此时进入系统提示词。
Claude 工作过程中
- 每次文件读取都会增加上下文
- 带
paths:frontmatter 的路径范围规则在匹配文件读取时自动加载 - 子目录中的 CLAUDE.md 在对应目录内的文件被读取时加载
PostToolUsehooks 在每次编辑后触发
子代理研究
使用子代理时,大量文件读取在独立的上下文窗口中进行,只有摘要和元数据返回给主会话,大幅节省主上下文空间。
压缩(/compact)后的存活情况
长会话使用 /compact 时,Claude Code 将对话历史压缩为结构化摘要。各机制的处理方式:
| 机制 | 压缩后行为 |
|---|---|
| 系统提示词和输出风格 | 不变,不属于消息历史 |
| 项目根目录 CLAUDE.md 和无范围规则 | 从磁盘重新注入 |
| Auto memory | 从磁盘重新注入 |
带 paths: frontmatter 的规则 | 丢失,直到匹配文件再次被读取 |
| 子目录 CLAUDE.md | 丢失,直到对应子目录内的文件再次被读取 |
| 已调用的 skill 内容 | 重新注入,每个 skill 上限 5,000 token,总上限 25,000 token;最旧的被优先丢弃 |
| Hooks | 不适用,hooks 作为代码运行,不占上下文 |
关键说明:
- 路径范围规则和子目录 CLAUDE.md 在消息历史中加载,因此压缩时与其他内容一起被摘要化,下次读取匹配文件时重新加载
- 如果规则必须在压缩后持续生效,去掉
paths:frontmatter,或将其移到项目根目录的 CLAUDE.md 中 - Skill 内容在压缩后重新注入,但大型 skill 会按每 skill 上限截断(保留文件开头),最重要的指令应写在
SKILL.md顶部
检查你的实际会话
可视化演示使用的是示意性数据。要查看你的实际上下文用量:
/context返回按类别细分的实时用量,并附带优化建议。
/memory检查启动时加载了哪些 CLAUDE.md 和 auto memory 文件。
相关文档
- 扩展 Claude Code — CLAUDE.md vs skills vs rules vs hooks vs MCP 的选型
- 存储指令和记忆 — CLAUDE.md 层级和 auto memory
- 子代理 — 将研究委托给独立上下文窗口
- 最佳实践 — 将上下文管理作为主要约束
- 降低 token 用量 — 保持低上下文用量的策略
常见问题
Q: 为什么有些 CLAUDE.md 内容在长会话后消失了?
子目录 CLAUDE.md 和带 paths: frontmatter 的规则是在消息历史中加载的,压缩(/compact)时会随其他历史内容一起被摘要化。如果需要跨压缩持续生效,去掉 paths: frontmatter 或将内容迁移到项目根目录的 CLAUDE.md 中。
Q: 如何知道当前会话消耗了多少上下文?
运行 /context 查看按类别细分的实时 token 用量和优化建议。状态栏也可以配置显示上下文使用百分比,见Status Line 文档。
Q: 子代理会占用我的主会话上下文吗?
不会。子代理在独立的上下文窗口中运行,文件读取等操作不会占用主会话空间,只有子代理的摘要和元数据返回给主会话。