⚠️ 源单薄性声明 本条目主要基于 Anthropic 官方 3 份文档 + Boris 散点。全部是 Anthropic 阵营内视角。 已讲清楚:context window 基本概念 / Claude Code 里怎么填满 / compaction 机制 / 怎么控制 还没听到:独立用户”上下文爆了”的真实恢复故事、非 Claude 模型的 context 管理差异、长 session 的账单实际开销 视为”Anthropic 的官方工作机制介绍”而非业界普遍经验。
一句话
Context window = LLM 一次能”看见”的 token 上限。Claude Code 的一个 session 里,你和 AI 来回说的话、它读过的文件、跑过的命令输出,全部加起来不能超过这个上限——超了就要”压缩”(compaction)。
为什么要关心这个
两个现实后果:
后果 1:忘事
当 context 快满,Claude Code 会自动 compact——把老的对话压缩成摘要。你早期说过的细节(某个命名约定、某个边缘情况)可能被压没。下半 session 它就”忘”了。
后果 2:烧钱
长 session 里 context 越塞越大。每次 API 调用都要把全部 context 发一遍——token 成本累积。一个不注意就是一天几刀变成几十刀。
Claude Code 启动时自动加载什么
来源:claude-code-docs/context-window.md。
Session 一开就占的部分(你看不见但它在吃 token):
| 内容 | 大约 tokens | 说明 |
|---|---|---|
| System prompt | ~4,200 | Claude Code 本体行为规则 |
| Auto memory (MEMORY.md) | ~680 | 前 200 行或 25KB |
| Environment info | ~280 | cwd、平台、shell、git |
| MCP tools 名字 | ~120 | 只是名字,schema 懒加载 |
| User CLAUDE.md | 变 | ~/.claude/CLAUDE.md 全文 |
| Project CLAUDE.md | 变 | 当前 + 父目录的全部 CLAUDE.md |
| Skills registry | 变 | 每个 skill 的 name + description |
| Subagent registry | 变 | 每个 subagent 的 name + description |
| Git status | 变 | 分支、改动、最近 commit |
关键点:CLAUDE.md 是全文加载,不像 MEMORY.md 有 25KB 限制。所以 CLAUDE.md 写太长会拖慢每次启动。
Work 阶段什么东西吃 context
来源同上。表里几个特别值得注意的:
@filemention:整个文件内容被加载,包括那个文件向上一路的 CLAUDE.md(!)Bash的输出:默认全部进 context(用BASH_MAX_OUTPUT_LENGTH可截断)- Skill 被触发:整个
SKILL.md全文加载 + 它调用的 supporting files - Subagent 返回:只返回summary——subagent 自己的工作在独立 context 里跑(context 隔离,这是个很重要的优化)
Compaction 机制(约 95%+ 触发)
来源:context-window.md 和 how-claude-code-works.md。
当 context 超过阈值(默认 ~95%,可通过 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE 改):
- 先清老的工具输出
- 如果还不够,总结对话
- 保留:用户的 prompt 和 Claude 的关键回答
- 从磁盘重新注入项目 root 的 CLAUDE.md(不是从内存摘要——这点是新手常忽略的好消息)
什么会活下来
- Project root CLAUDE.md(重新读磁盘)
- 最近调过的 skill 们(每个前 5000 tokens,总计 25K 预算)
- 你的 prompt 和 Claude 的回答(如果需要会被总结)
- 当前正在跑的工具调用和输入
什么可能丢
- 老的工具输出(首先清)
- session 前期的详细指令
- 嵌套的 CLAUDE.md(子目录的 CLAUDE.md,下次 Claude 访问那子目录时会重载)
三个控制手段
手段 1:CLAUDE.md 加 Compact Instructions 段
# Compact Instructions
When compacting, always preserve:
- The full list of modified files
- Any test commands
- Current debugging state告诉 Claude 压缩时必须保留哪些东西。
手段 2:显式 compact + focus
/compact focus on the API changes
手动触发 compaction,同时指明”压缩后请保留 API 变更的细节”。
手段 3:partial compact
按 Esc + Esc → 选某条消息 → “Summarize from here”。只压缩你选中点往后的部分。
检查工具:/context
/context
显示一个彩色 grid,告诉你 context 现在哪些东西在占位,并给出优化建议(如”某个工具输出太大可清理”)。
Boris 的散点做法
来源:how-boris-uses-cc.md 里散点提及:
- 长 session 尽量拆分——一件事干完
/clear重开,不要把 5 件事堆一个 session - 重要状态写进 CLAUDE.md——不指望 context 保留,指望 CLAUDE.md 下次重读
- subagent 用于上下文隔离——跑一个需要读很多文件的分析任务,塞进 subagent,它自己烧自己的 context,只返 summary 给主 session
(第 3 条特别重要——subagent 不是”功能划分”,首先是”context 预算管理”。)
陈彬视角
“context 管理”是最被低估的基本功。很多人跑 Claude Code 跑着跑着越来越慢、越来越贵、越来越忘事——根本原因是 context 爆了但自己没意识到。
三条实战经验
/context养成习惯——一个 session 每半小时输一次,看看占比分布。- CLAUDE.md 别写太长——它每次启动全文加载。控制在 200-300 行以内(awesome-claude-code 23 份样本的中位数)。
- 一件事一个 session——写完一个功能、修完一个 bug、读完一本书——
/clear新开。别把”从早上到晚上”一直塞一个 session 里。
一个反直觉的观察
memory 里放太多反而有害。很多人觉得”让 AI 记得越多越好”——错。context 有限的前提下,你每多加一条,就是挤掉另一条。
CLAUDE.md 加规则前应该问:这条规则值得每次启动都加载吗?还是可以放进某个 skill(按需加载)?
needs_sources(明确待补)
- 独立用户”上下文爆了”的真实故事
- 非 Claude 模型的 context 对比(GPT / Gemini 是怎么管 context 的)
- 长 session 的 token 账单实例
- compact 翻车案例(压缩后变傻的例子)
关联
- 前置:Claude Code 入门 · CLAUDE.md 完全解读
- 进阶:Claude Code 进阶_hooks_settings_plugins
- 相关:Agent vs Skill vs Workflow(subagent 的 context 隔离)