是什么

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 输出(通过 additionalContext JSON 字段进入上下文)
  • 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

关联

实践要点

  • 把持久规则放在 CLAUDE.md,不要依赖对话历史——压缩后对话历史会丢失
  • 用 Subagent 隔离大量文件读取,只让摘要回到主上下文
  • 不相关任务之间用 /clear 重置上下文,而不是在同一会话中堆积
  • 路径规则(带 paths: 的 rules)在压缩后会丢失,重要规则放在项目根 CLAUDE.md
  • 上下文接近满时,Claude 可能开始「忘记」早期指令——这是性能下降的信号