Claude Code 的上下文窗口(Context Window)保存了 Claude 在一次会话中知道的一切——你的指令、它读取的文件、它自己的回复,以及一些从不会出现在你终端里的内容。官方文档提供了一个完整的时间线,本文将其转化为文字版的深度拆解。
会话启动前:已经预装的内容
在你输入第一个字之前,以下内容就已经加载进上下文:
- CLAUDE.md
- 自动记忆(Auto memory)
- MCP 工具名称
- Skill 描述
你自己的额外设置也可能在这里加入更多内容,比如 Output Style或通过 --append-system-prompt 追加的文本——两者都以同样的方式进入系统提示词(System Prompt)。
# 会影响启动时上下文体积的因素
claude --append-system-prompt "额外的团队约定文本"
# ↑ 这段文本会和 CLAUDE.md 一样,进入系统提示词部分工作过程中:持续增长的部分
随着 Claude 工作,上下文会持续增长:
- 每次文件读取都会增加上下文
- 路径限定的规则(path-scoped rules)会在匹配的文件被读取时自动加载
- PostToolUse Hook 会在每次编辑后触发
后续追问:Subagent 如何隔离大量读取
A subagent handles the research in its own separate context window, so the large file reads stay out of yours. Only the summary and a small metadata trailer come back.
这正是 Subagents 存在的核心价值——当你追问一个需要研究大量文件的问题时,Subagent 在自己独立的上下文窗口里处理这些大文件读取,只有摘要和一小段元数据会返回到你的主上下文中,大量原始内容不会污染你的对话。
会话末尾:Compaction 如何重构对话
当对话变长,/compact 会用一份结构化摘要替换掉对话历史。这里有一个 v2.1.198 引入的细节:
As of v2.1.198, the summarization request inherits your session's extended thinking configuration.
也就是说,如果你的会话本来就开启了 Extended Thinking,生成摘要时也会用 Thinking 模式推理(但只影响摘要生成过程本身,不会改变你会话后续的设置)。
Compaction 之后:哪些内容能存活,哪些会消失
这是本文档最实用的一张表——不同机制加载的指令,在 Compaction 之后的命运完全不同:
| 机制 | Compaction 之后 |
|---|---|
| 系统提示词和 Output Style | 不受影响;不属于消息历史的一部分 |
| 项目根目录 CLAUDE.md 和无范围限定的规则 | 从磁盘重新注入 |
| 自动记忆 | 从磁盘重新注入 |
带 paths: frontmatter 的规则 | 丢失,直到匹配文件再次被读取 |
| 子目录中嵌套的 CLAUDE.md | 丢失,直到该子目录中的文件再次被读取 |
| 被调用过的 Skill 正文 | 重新注入,但每个 Skill 上限 5000 Token、总计上限 25000 Token,超出部分优先丢弃最旧的 |
| Hooks | 不适用;Hooks 作为代码运行,不是上下文的一部分 |
关键启示一:路径限定规则会「隐身」
带 paths: frontmatter 的规则和嵌套 CLAUDE.md,本质上是在触发文件被读取时才加载进消息历史,所以 Compaction 会把它们和其他内容一起摘要掉,下次读到匹配文件时才会重新加载。如果某条规则必须在 Compaction 后依然存在,解决方法是:去掉 paths: frontmatter,或者把它移到项目根目录的 CLAUDE.md 中。
关键启示二:Skill 正文会被截断,且保留开头
Truncation keeps the start of the file, so put the most important instructions near the top of
SKILL.md.
这是一个直接影响 Skill 编写习惯的细节——截断只保留文件开头部分,所以编写 SKILL.md 时,应该把最重要的指令放在文件靠前的位置,确保即使被截断也不会丢失关键信息。
上下文快满时可以主动做的三件事
Claude Code 会在接近上限时自动执行 Compaction,但你也可以在此之前主动介入:
# 1. 带焦点的手动压缩:在开始新的长任务前,指定要保留什么
> /compact focus on the auth bug fix
# 2. 切换任务时清空,避免旧对话挤占空间和消耗 Token
> /clear
# 3. 把大量读取委托给 Subagent,让文件内容留在 Subagent 自己的上下文里
> 帮我研究一下这个模块的历史实现,用一个 subagent 来做更大的上下文窗口选项
如果你需要的是更大的窗口而不是更小的对话,Fable 5、Sonnet 5、Opus 4.6 及更新版本、Sonnet 4.6 都支持 100 万 Token 的上下文窗口(Sonnet 5 默认即以 1M 运行,不需要额外选择 [1m] 变体)。
总结
理解 Context Window 的完整生命周期——启动预装 → 工作中累积 → Compaction 摘要 → 各机制存活规则不同——能帮你更精准地控制上下文预算:把关键规则放进不带 paths: 的项目级 CLAUDE.md、把大量文件读取甩给 Subagent、把 SKILL.md 的重点内容前置。这些细节看似琐碎,但在长会话、大项目场景下,直接决定了 Claude 是否还「记得」你真正在意的约束条件。
来源:Explore the context window — Claude Code 官方文档,Anthropic