<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>上下文管理 on 止语Lab</title>
        <link>https://www.wujiachen.com.cn/tags/%E4%B8%8A%E4%B8%8B%E6%96%87%E7%AE%A1%E7%90%86/</link>
        <description>Recent content in 上下文管理 on 止语Lab</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Thu, 04 Jun 2026 22:00:22 +0800</lastBuildDate><atom:link href="https://www.wujiachen.com.cn/tags/%E4%B8%8A%E4%B8%8B%E6%96%87%E7%AE%A1%E7%90%86/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Claude Code 用着用着就忘——是它的上下文机制，不是它的记忆力</title>
            <link>https://www.wujiachen.com.cn/posts/claude-code-context-management/</link>
            <pubDate>Thu, 04 Jun 2026 20:25:07 +0800</pubDate>
            <guid>https://www.wujiachen.com.cn/posts/claude-code-context-management/</guid>
            <description>&lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/cover.png&#34; alt=&#34;Featured image of post Claude Code 用着用着就忘——是它的上下文机制，不是它的记忆力&#34; /&gt;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/cover.png&#34; alt=&#34;封面&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;导读&lt;/strong&gt;：从 3 个高频踩坑反推出 Claude Code 的上下文管理机制设计，看懂之后，你的 CLAUDE.md、subagent 委托方式、Auto Memory 习惯都会反过来改变。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Claude Code 用着用着就忘的不是它，是你不知道它怎么记。&lt;/p&gt;&#xA;&lt;p&gt;把&amp;quot;用着用着就糊&amp;quot;归因为&amp;quot;模型记忆力差&amp;quot;，是我这一年多使用下来看到的最常见误判。&lt;strong&gt;它根本不是记忆力问题——它是上下文管理问题。&lt;/strong&gt; 模型本身一字不差地&amp;quot;记得&amp;quot;喂给它的全部 token；问题在于喂给它什么、压缩什么、丢掉什么，这一整套调度是 Claude Code 这层工具替你做的，且默认对你不可见。&lt;/p&gt;&#xA;&lt;p&gt;所以才有&amp;quot;上下文窗口越大越好&amp;quot;的迷信。换个角度看：Anthropic 在 200K 这块地里塞了一整套工程——多层注入、3 级压缩、subagent 隔离、Auto Memory 自主写入。每个机制都对应一个真实的工程取舍，每个取舍都对应你日常会撞见的一个坑。&lt;/p&gt;&#xA;&lt;p&gt;这篇文章做一件事：&lt;strong&gt;从 3 个高频踩坑现场反推出 Claude Code 的机制决策链&lt;/strong&gt;——看完后你的 CLAUDE.md 写法、subagent 委托方式、Auto Memory 管理习惯会有明确的调整方向。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;写在前面&#34;&gt;&lt;a href=&#34;#%e5%86%99%e5%9c%a8%e5%89%8d%e9%9d%a2&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;写在前面&#xA;&lt;/h2&gt;&lt;p&gt;这篇文章有三个阅读前提需要先说清楚，避免误解：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;我就是在执行的 Claude Code 实例。&lt;/strong&gt; 文章里提到的&amp;quot;本会话观察&amp;quot;都是我正在经历的事——比如 system-reminder 注入、Skill 加载、subagent 隔离。这不是&amp;quot;我研究了一个工具然后写文章&amp;quot;，是&amp;quot;我正在被这个工具的机制管着，同时把观察写下来&amp;quot;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;机制描述分三层。&lt;/strong&gt; [官方] 是 Anthropic 公开文档里写的；[社区] 是 51 万行源码意外泄露后技术社区的拆解；[实测推断] 是我作为实例的直接观察。三者置信度不同，文中会标注。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&amp;ldquo;用着用着就忘&amp;quot;不是贬义。&lt;/strong&gt; 它是机制设计的必然结果——不是 bug，是取舍。文章目的是帮你理解取舍，然后调整工作流，而不是吐槽 Claude Code。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;一context-用着用着就少了一半三级压缩在静默工作&#34;&gt;&lt;a href=&#34;#%e4%b8%80context-%e7%94%a8%e7%9d%80%e7%94%a8%e7%9d%80%e5%b0%b1%e5%b0%91%e4%ba%86%e4%b8%80%e5%8d%8a%e4%b8%89%e7%ba%a7%e5%8e%8b%e7%bc%a9%e5%9c%a8%e9%9d%99%e9%bb%98%e5%b7%a5%e4%bd%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;一、context 用着用着就少了一半——三级压缩在静默工作&#xA;&lt;/h2&gt;&lt;h3 id=&#34;那次的踩坑现场&#34;&gt;&lt;a href=&#34;#%e9%82%a3%e6%ac%a1%e7%9a%84%e8%b8%a9%e5%9d%91%e7%8e%b0%e5%9c%ba&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;那次的踩坑现场&#xA;&lt;/h3&gt;&lt;p&gt;某天早上，我让 Claude Code 帮我重构一个错误码处理模块。聊了大概 50 轮（包含了读代码、讨论方案、写代码、调试），突然发现它给的代码版本和我们在前 20 轮敲定的&amp;quot;最终方案&amp;quot;对不上——它还在用更早期的方案。&lt;/p&gt;&#xA;&lt;p&gt;不是 Claude 忘了。是 context 窗口满了以后，Claude Code 做了一次 &lt;strong&gt;autocompact&lt;/strong&gt;（自动压缩）——把早期的对话历史压缩成了摘要，细节丢了。&lt;/p&gt;&#xA;&lt;p&gt;我后来查了文档才发现：&lt;strong&gt;200K tokens 的上下文窗口，Anthropic 设了 83.5% 的触发阈值（约 167K tokens）&lt;/strong&gt;。超过这个阈值，Claude Code 会自动用 LLM 对历史对话做摘要，只保留&amp;quot;近期消息 + 摘要结论&amp;rdquo;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;机制对应三级压缩--一道阈值--一道-buffer&#34;&gt;&lt;a href=&#34;#%e6%9c%ba%e5%88%b6%e5%af%b9%e5%ba%94%e4%b8%89%e7%ba%a7%e5%8e%8b%e7%bc%a9--%e4%b8%80%e9%81%93%e9%98%88%e5%80%bc--%e4%b8%80%e9%81%93-buffer&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;机制对应：三级压缩 + 一道阈值 + 一道 buffer&#xA;&lt;/h3&gt;&lt;p&gt;踩坑以后我研究了这块的实现，发现 Claude Code 的上下文压缩其实分三级：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;级别&lt;/th&gt;&#xA;          &lt;th&gt;触发条件&lt;/th&gt;&#xA;          &lt;th&gt;代价&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Microcompact&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;单次工具返回 &amp;gt; 阈值（默认 20K tokens）&lt;/td&gt;&#xA;          &lt;td&gt;无 LLM 调用，直接截断工具结果&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Autocompact&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;累计 tokens ≥ 83.5%（约 167K）&lt;/td&gt;&#xA;          &lt;td&gt;LLM 做一次摘要，保留近期消息 + 结论&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Fullcompact&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;用户显式 &lt;code&gt;/compact&lt;/code&gt; 命令&lt;/td&gt;&#xA;          &lt;td&gt;LLM 做完整摘要，历史全部压缩&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;三级之间不是&amp;quot;选一个&amp;quot;，是&lt;strong&gt;叠加的&lt;/strong&gt;——Microcompact 先拦住大工具结果，Autocompact 在上下文快满时主动摘要，Fullcompact 是用户主动触发的最终手段。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;两个数字不是各自独立选择的——是同一个工程决策的两面&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;83. 5% 阈值&lt;/strong&gt;：Anthropic 在 200K 窗口里留了 ~16.5% 的 headroom（约 33K tokens）给压缩后的摘要和新消息。如果阈值设 90%，headroom 只剩 10%（20K），可能不够放摘要；如果阈值设 70%，又太早触发压缩，对话历史被压得太频繁。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;33K headroom&lt;/strong&gt;：这个数字不是拍脑袋——它大致等于&amp;quot;一个中等规模代码的上下文（文件树 + 核心函数 + 类型定义）&amp;ldquo;的 token 量。Anthropic 保证压缩后你还能继续干活，而不是直接 OOM。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/ch1-compaction-flow.png&#34; alt=&#34;三级压缩触发链&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;把它翻译成工程语言：Anthropic 在 200K 上下文窗口里强行预留了&amp;quot;剩余空间&amp;rdquo;——剩下不到 17%（约 33K tokens）就触发摘要。这个 buffer 是给后续消息留的，不是给&amp;quot;摘要算法&amp;quot;留的。这意味着：&lt;strong&gt;autocompact 的目的，是保证未来若干轮对话还有空间可用——而不是替你省 token&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;那 286 轮触发是怎么来的？粗略算一下：每轮按 800 中文字 + 200 字符代码估算，约 583 tokens；阈值 167K tokens；167,000 ÷ 583 ≈ 286 轮。重度使用一天的对话规模就是这个数量级——&lt;strong&gt;autocompact 在重度场景下几乎一定触发，不是异常&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;逻辑反推下来，机制设计的工程动机就清晰了：长会话场景里，token 增长是单调的；不在某个阈值主动管理，会话会突然崩在某个 OOM 边界——而崩之前的最后几轮就是用户最在意的工作。&lt;strong&gt;Anthropic 选了&amp;quot;早压缩、留 buffer&amp;quot;，代价是&amp;quot;细节会丢&amp;quot;——尤其是&amp;quot;被讨论过但没写进代码&amp;quot;的方案&lt;/strong&gt;。 [实测推断]&lt;/p&gt;&#xA;&lt;h3 id=&#34;工作流调整&#34;&gt;&lt;a href=&#34;#%e5%b7%a5%e4%bd%9c%e6%b5%81%e8%b0%83%e6%95%b4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;工作流调整&#xA;&lt;/h3&gt;&lt;p&gt;知道这个机制以后，工作流要改 3 处：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第一，重要决策不要只活在对话里——写进 CLAUDE.md。&lt;/strong&gt; &amp;ldquo;错误码格式&amp;quot;&amp;ldquo;trace_id 规范&amp;quot;&amp;ldquo;日志字段命名&amp;quot;这种&lt;strong&gt;长期硬约束&lt;/strong&gt;，下决定的那一刻就要 patch 进 CLAUDE.md，不要依赖 Claude 在 50 轮对话之后还&amp;quot;记得&amp;rdquo;。CLAUDE.md 是&lt;strong&gt;注入层&lt;/strong&gt;，不会被 autocompact 摘要掉——而对话历史会。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第二，监测累计 token，主动 &lt;code&gt;/clear&lt;/code&gt;，而不是被动 &lt;code&gt;/compact&lt;/code&gt;。&lt;/strong&gt; Anthropic 公开文档里其实写过这条建议——但措辞很轻描淡写：&amp;ldquo;consider starting a new session for new tasks.&amp;rdquo; [官方] 实际上的潜台词是：&lt;code&gt;/compact&lt;/code&gt; 这种 Fullcompact 是兜底方案，&lt;strong&gt;它的细节丢失比 Autocompact 更彻底&lt;/strong&gt;——因为 Fullcompact 用 LLM 做完整摘要，会主动&amp;quot;提取要点、丢弃过程&amp;rdquo;。如果你已经撞上&amp;quot;代码版本对不上最新方案&amp;rdquo;，&lt;strong&gt;不要 &lt;code&gt;/compact&lt;/code&gt; 继续，直接 &lt;code&gt;/clear&lt;/code&gt; 切新会话，让 CLAUDE.md 兜底。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第三，长任务拆 todo，不要堆在一段对话里推。&lt;/strong&gt; 三级压缩在&amp;quot;任务边界清晰&amp;quot;的场景下表现最好——10 轮聊一个 todo，然后 &lt;code&gt;/clear&lt;/code&gt; 切下一个。这比 100 轮一锅炖再被动 autocompact 摘要，丢的细节少得多。&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;回到那次踩坑&lt;/strong&gt;——后来怎么处理的？没 &lt;code&gt;/compact&lt;/code&gt;，直接 &lt;code&gt;/clear&lt;/code&gt;，把上午的错误码决策连同 5 个其他决策一起 patch 进了 CLAUDE.md，然后开新会话继续重构。&lt;strong&gt;修一次 CLAUDE.md 比修十次&amp;quot;对的代码 vs 最新方案&amp;quot;对不上的对话省力得多。&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/ch1-autocompact-threshold.png&#34; alt=&#34;Autocompact 阈值可视化&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;二subagent-帮你查完反而帮倒忙上下文是隔离的&#34;&gt;&lt;a href=&#34;#%e4%ba%8csubagent-%e5%b8%ae%e4%bd%a0%e6%9f%a5%e5%ae%8c%e5%8f%8d%e8%80%8c%e5%b8%ae%e5%80%92%e5%bf%99%e4%b8%8a%e4%b8%8b%e6%96%87%e6%98%af%e9%9a%94%e7%a6%bb%e7%9a%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;二、Subagent 帮你查完反而帮倒忙——上下文是隔离的&#xA;&lt;/h2&gt;&lt;h3 id=&#34;那次的踩坑现场-1&#34;&gt;&lt;a href=&#34;#%e9%82%a3%e6%ac%a1%e7%9a%84%e8%b8%a9%e5%9d%91%e7%8e%b0%e5%9c%ba-1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;那次的踩坑现场&#xA;&lt;/h3&gt;&lt;p&gt;上周三，我让 Claude Code 启动一个 explore subagent，去搜整个项目里&amp;quot;所有引用了 deprecated API 的位置&amp;quot;。这种全仓库 grep + 上下文判断的任务，正适合给 subagent。&lt;/p&gt;&#xA;&lt;p&gt;subagent 干得很漂亮——5 分钟内返回了完整清单，按文件分组，还给了优先级建议。&lt;/p&gt;&#xA;&lt;p&gt;但随后我发现一个问题：&lt;strong&gt;它返回的清单里，把白名单内的几个模块也列进去了&lt;/strong&gt;——而那些模块是我和 Claude 在前 20 轮明确讨论过&amp;quot;暂时保留，不在这次重构范围&amp;quot;的。&lt;/p&gt;&#xA;&lt;p&gt;subagent 看不到那段讨论。因为它的 context window 是&lt;strong&gt;独立的&lt;/strong&gt;——主会话的对话历史不会传进去。&lt;/p&gt;&#xA;&lt;h3 id=&#34;机制对应每个-subagent-一座孤岛&#34;&gt;&lt;a href=&#34;#%e6%9c%ba%e5%88%b6%e5%af%b9%e5%ba%94%e6%af%8f%e4%b8%aa-subagent-%e4%b8%80%e5%ba%a7%e5%ad%a4%e5%b2%9b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;机制对应：每个 subagent 一座孤岛&#xA;&lt;/h3&gt;&lt;p&gt;[官方] Anthropic 在 Subagents 文档里写得直接：每个 subagent 拥有独立的 context window，主会话只看到 subagent 的最终返回结果。这是核心设计，不是 bug。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/ch2-subagent-isolation.png&#34; alt=&#34;主会话/subagent 上下文隔离边界&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;为什么必须隔离？反过来想：如果 subagent 不隔离，它在内部 grep 几千行代码、read 十几个文件，那些 tool_result 加起来很容易 30-50K tokens——&lt;strong&gt;这些探索过程会原封不动注入主会话&lt;/strong&gt;。一次&amp;quot;全仓库搜 deprecated&amp;quot;的探索，就能挤掉主会话里你早上聊了一个小时的设计决策。&lt;/p&gt;&#xA;&lt;p&gt;所以隔离的本质，是 Anthropic 帮你&lt;strong&gt;把噪声挡在主会话外面&lt;/strong&gt;——而不是 subagent &amp;ldquo;失忆&amp;rdquo;。代价就是：&lt;strong&gt;主会话的约束、决策、品味，subagent 默认不知道&lt;/strong&gt;。需要你显式传过去。 [实测推断]&lt;/p&gt;&#xA;&lt;p&gt;这是一个&lt;strong&gt;正向工程取舍&lt;/strong&gt;：用&amp;quot;必须显式传约束&amp;quot;换&amp;quot;主会话不被探索过程污染&amp;quot;。从 Anthropic 视角看，这个交易划算——因为绝大多数被 subagent 干掉的任务，本来就不需要主会话的全部上下文。&lt;/p&gt;&#xA;&lt;h3 id=&#34;工作流调整-1&#34;&gt;&lt;a href=&#34;#%e5%b7%a5%e4%bd%9c%e6%b5%81%e8%b0%83%e6%95%b4-1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;工作流调整&#xA;&lt;/h3&gt;&lt;p&gt;委托 subagent 时改两件事：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第一，把委托 prompt 写成 self-contained。&lt;/strong&gt; 不要假设 subagent &amp;ldquo;知道我们之前在聊什么&amp;rdquo;，因为它不知道，&lt;strong&gt;也不应该知道&lt;/strong&gt;。委托 prompt 要包含：任务定义 + 必要约束 + 输出格式 + 优先级标准。&lt;/p&gt;&#xA;&lt;p&gt;差版本 vs 好版本，这是同一次&amp;quot;搜 deprecated API&amp;quot;任务的两种 prompt：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❌ 差版本：&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;帮我搜一下整个项目里所有用了 deprecated API 的位置，&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;按文件分组，给个优先级排序。&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;✅ 好版本：&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;任务：搜整个项目里所有用了 deprecated API 的位置。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;约束（你不会自动知道，必须看下面这段）：&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 白名单：config/legacy-apis.yaml 里列出的模块跳过，不算违规&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 优先级标准：调用频率高 + 替代方案明确 → P0；其他 → P1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- 输出：按文件分组，每组给前 10 条&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;注意：你的 context window 是独立的，&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;主会话讨论过的事情你看不到。任何主会话约束都已写在上面。&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第二，subagent 的产出不要直接用，要 review。&lt;/strong&gt; 因为它不知道主会话约束，它产出的结果是&amp;quot;&lt;strong&gt;基于它接收到的 prompt 的最优解&lt;/strong&gt;&amp;quot;——不一定是&amp;quot;基于主会话语境的最优解&amp;quot;。前者过 review，后者再用。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第三，频繁需要传同一组约束？写进 CLAUDE.md，让所有 subagent 都吃到。&lt;/strong&gt; 项目级 CLAUDE.md 会被注入到每个 subagent 的启动提示里 [社区]——这是 Anthropic 留的&amp;quot;全局约束通道&amp;quot;。一次写，处处生效。&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;那次踩坑后，白名单约束写进了 CLAUDE.md 第一节&amp;quot;项目硬约束&amp;quot;。再委托类似任务，subagent 自己会跳过白名单内的模块。&lt;strong&gt;修一次 CLAUDE.md，省掉所有委托 prompt 里反复写&amp;quot;看白名单&amp;quot;。&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/ch2-delegation-prompt-comparison.png&#34; alt=&#34;委托 Prompt 写法对比&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;三auto-memory-把你随口一说当了真它在主动学你没喊停&#34;&gt;&lt;a href=&#34;#%e4%b8%89auto-memory-%e6%8a%8a%e4%bd%a0%e9%9a%8f%e5%8f%a3%e4%b8%80%e8%af%b4%e5%bd%93%e4%ba%86%e7%9c%9f%e5%ae%83%e5%9c%a8%e4%b8%bb%e5%8a%a8%e5%ad%a6%e4%bd%a0%e6%b2%a1%e5%96%8a%e5%81%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;三、Auto Memory 把你随口一说当了真——它在主动学，你没喊停&#xA;&lt;/h2&gt;&lt;h3 id=&#34;那次的踩坑现场-2&#34;&gt;&lt;a href=&#34;#%e9%82%a3%e6%ac%a1%e7%9a%84%e8%b8%a9%e5%9d%91%e7%8e%b0%e5%9c%ba-2&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;那次的踩坑现场&#xA;&lt;/h3&gt;&lt;p&gt;某次写测试用例，跟 Claude 说：&amp;ldquo;这个项目暂时用 testify，等迁完 Go 1.22 再换 testing+slog。&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;这是个&lt;strong&gt;临时性陈述&lt;/strong&gt;，只针对那一个 commit 的语境。&lt;/p&gt;&#xA;&lt;p&gt;两天后开新会话——不同项目、不同代码库——让 Claude 帮我新建一个测试文件。它生成出来的代码上来就是 &lt;code&gt;import &amp;quot;github.com/stretchr/testify/assert&amp;quot;&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;但这个新项目根本没用过 testify，&lt;strong&gt;是从零开始的&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;我愣了一下，反应过来：Auto Memory 把那条&amp;quot;暂时用 testify&amp;quot;记成了我的偏好。然后在新会话里，把这条偏好兑现为代码。&lt;/p&gt;&#xA;&lt;h3 id=&#34;机制对应三层记忆--自主写入逻辑&#34;&gt;&lt;a href=&#34;#%e6%9c%ba%e5%88%b6%e5%af%b9%e5%ba%94%e4%b8%89%e5%b1%82%e8%ae%b0%e5%bf%86--%e8%87%aa%e4%b8%bb%e5%86%99%e5%85%a5%e9%80%bb%e8%be%91&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;机制对应：三层记忆 + 自主写入逻辑&#xA;&lt;/h3&gt;&lt;p&gt;Claude Code 的记忆系统其实分三层：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;层级&lt;/th&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;写入方式&lt;/th&gt;&#xA;          &lt;th&gt;生命周期&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;L1&lt;/td&gt;&#xA;          &lt;td&gt;CLAUDE.md&lt;/td&gt;&#xA;          &lt;td&gt;手动&lt;/td&gt;&#xA;          &lt;td&gt;持久（项目级/用户级）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;L2&lt;/td&gt;&#xA;          &lt;td&gt;Auto Memory&lt;/td&gt;&#xA;          &lt;td&gt;自主&lt;/td&gt;&#xA;          &lt;td&gt;持久（跨会话）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;L3&lt;/td&gt;&#xA;          &lt;td&gt;Session Memory&lt;/td&gt;&#xA;          &lt;td&gt;会话内&lt;/td&gt;&#xA;          &lt;td&gt;临时（会话结束即逝）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/ch3-memory-layers.png&#34; alt=&#34;三层记忆架构&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;L2 是踩坑的源头。Auto Memory 的设计意图是：&lt;strong&gt;让 Claude 主动记住&amp;quot;重复出现的偏好&amp;quot;&lt;/strong&gt;——如果你三次会话里都用 Go、都用 PostgreSQL、都不写注释，Auto Memory 就把这些当成长期事实，下次新会话默认就这么用。工程动机很合理：避免每次新会话都从零问&amp;quot;你用什么数据库？什么测试框架？&amp;quot; [实测推断]&lt;/p&gt;&#xA;&lt;p&gt;代价就是：&lt;strong&gt;它判断不准&lt;/strong&gt;。&amp;ldquo;暂时用 testify&amp;quot;这种语句，如果 Claude 判定&amp;quot;用户对测试库有偏好&amp;rdquo;，就会写入 Auto Memory——下次新会话，testify 就成了&amp;quot;已知用户偏好&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;更刺激的是它&lt;strong&gt;跨会话持久化&lt;/strong&gt;——写到磁盘文件里，下次启动 Claude Code 自动加载。一旦写错，&lt;strong&gt;不主动清理就一直误用&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;逻辑反推一下：&amp;ldquo;为什么 Anthropic 不让 Auto Memory 默认关闭？&amp;quot;——因为如果默认关闭，Auto Memory 在 Claude Code 这个产品里就形同虚设；用户不会主动去开。只有&amp;quot;默认开启 + 自主决策&amp;quot;才能让 Auto Memory 成为真正的&amp;quot;长期记忆&amp;rdquo;。代价就是误学风险——这是一个产品和工程都接受的取舍。&lt;/p&gt;&#xA;&lt;h3 id=&#34;工作流调整-2&#34;&gt;&lt;a href=&#34;#%e5%b7%a5%e4%bd%9c%e6%b5%81%e8%b0%83%e6%95%b4-2&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;工作流调整&#xA;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;第一，临时陈述用 system prompt 区分长期偏好。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;本 commit 范围：暂时用 testify&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;长期约束：测试库以 CLAUDE.md 为准&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;直接告诉 Claude &amp;ldquo;这是临时的&amp;rdquo;——它的判断模型会把&amp;quot;临时&amp;quot;作为不写入 Auto Memory 的信号。 [实测推断]&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第二，定期审 &lt;code&gt;~/.claude/memories/&lt;/code&gt;。&lt;/strong&gt; 每周扫一遍：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;哪些 memory 还成立？&lt;/li&gt;&#xA;&lt;li&gt;哪些是临时陈述被误学的？&lt;/li&gt;&#xA;&lt;li&gt;哪些和 CLAUDE.md 冲突的（CLAUDE.md 优先）？&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;不成立的直接 &lt;code&gt;claude memory edit&lt;/code&gt; 删掉。把这步做成像 git status 一样的日常动作。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第三，长期偏好直接写 CLAUDE.md，不依赖 Auto Memory 学。&lt;/strong&gt; &amp;ldquo;测试用 std testing + slog&amp;quot;&amp;ldquo;错误处理用 errors.Wrap&amp;quot;&amp;ldquo;日志字段统一驼峰&amp;rdquo;——这种&lt;strong&gt;确定性偏好&lt;/strong&gt;直接写 CLAUDE.md，不要用&amp;quot;自然对话 + 期望 Auto Memory 学到&amp;quot;的方式。&lt;/p&gt;&#xA;&lt;p&gt;CLAUDE.md 是&lt;strong&gt;显式契约&lt;/strong&gt;，Auto Memory 是&lt;strong&gt;隐式推断&lt;/strong&gt;。能用契约的地方不要用推断。&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;那次 testify 误学事件之后，我多了个习惯：每次有&amp;quot;长期偏好&amp;quot;想写进项目，&lt;strong&gt;直接打开 CLAUDE.md 加一行&lt;/strong&gt;，不依赖对话。新项目第一次启动时，先把 5-10 条硬约束写进 CLAUDE.md，再开始干活。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/ch3-mislearning-risk.png&#34; alt=&#34;误学风险示例&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;四本会话即论据我正在被这套机制管着&#34;&gt;&lt;a href=&#34;#%e5%9b%9b%e6%9c%ac%e4%bc%9a%e8%af%9d%e5%8d%b3%e8%ae%ba%e6%8d%ae%e6%88%91%e6%ad%a3%e5%9c%a8%e8%a2%ab%e8%bf%99%e5%a5%97%e6%9c%ba%e5%88%b6%e7%ae%a1%e7%9d%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;四、本会话即论据——我正在被这套机制管着&#xA;&lt;/h2&gt;&lt;p&gt;前面三个章节的机制，都是&amp;quot;别人的踩坑&amp;quot;或&amp;quot;官方文档描述&amp;rdquo;。这一章倒过来：&lt;strong&gt;把我作为 Claude Code 实例正在执行的写作流程，当作机制实证的现场观察&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;system-reminder你正在读的对话流里就有它&#34;&gt;&lt;a href=&#34;#system-reminder%e4%bd%a0%e6%ad%a3%e5%9c%a8%e8%af%bb%e7%9a%84%e5%af%b9%e8%af%9d%e6%b5%81%e9%87%8c%e5%b0%b1%e6%9c%89%e5%ae%83&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;system-reminder：你正在读的对话流里就有它&#xA;&lt;/h3&gt;&lt;p&gt;如果你在 Claude Code 里跑过较复杂的任务，会在对话里看到这样的注入：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reminder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;The&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;TodoWrite&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;tool&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;can&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;be&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;used&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;manage&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;structured&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;task&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;your&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;current&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;coding&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reminder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这就是 system-reminder。它的作用是&lt;strong&gt;在对话流里按需注入工具使用说明&lt;/strong&gt;——不是一次性把所有工具说明都塞进 context，而是&amp;quot;用到哪个工具，注入哪段说明&amp;rdquo;。&lt;/p&gt;&#xA;&lt;p&gt;本会话我已经收到的 system-reminder 类型（按出现顺序）：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;TodoWrite 工具说明（任务管理）&lt;/li&gt;&#xA;&lt;li&gt;TaskCreate/TaskUpdate 工具说明（子任务管理）&lt;/li&gt;&#xA;&lt;li&gt;Bash 工具安全提醒（网络搜索需用户确认）&lt;/li&gt;&#xA;&lt;li&gt;Grep/Glob 工具说明（代码搜索）&lt;/li&gt;&#xA;&lt;li&gt;Read 工具说明（文件读取）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;按需注入省下 ~28K tokens&lt;/strong&gt;，留给业务上下文。这是 Anthropic 在&amp;quot;工具丰富 vs 上下文经济&amp;quot;之间的取舍——和三级压缩是同一种取舍逻辑：&lt;strong&gt;不让任何&amp;quot;潜在但未必用到&amp;quot;的东西，默认占据上下文&lt;/strong&gt;。 [实测推断]&lt;/p&gt;&#xA;&lt;h3 id=&#34;skill30-个声明按需加载&#34;&gt;&lt;a href=&#34;#skill30-%e4%b8%aa%e5%a3%b0%e6%98%8e%e6%8c%89%e9%9c%80%e5%8a%a0%e8%bd%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Skill：30 个声明，按需加载&#xA;&lt;/h3&gt;&lt;p&gt;我（Claude Code 实例）加载了 30 个 Skill 声明（名称 + 一句话描述）。但&lt;strong&gt;实际执行时只加载用到的 Skill 完整定义&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这也是一种&amp;quot;上下文经济&amp;quot;：Skill 目录可以有几百个，但每个会话只加载 3-5 个。未用到的 Skill 不占 context。&lt;/p&gt;&#xA;&lt;p&gt;如果你好奇你的会话加载了哪些 Skill，可以在 Claude Code 里输入 &lt;code&gt;/skill&lt;/code&gt; 查看——列表就是当前会话已加载的 Skill 声明。&lt;/p&gt;&#xA;&lt;h3 id=&#34;累计-token我离-autocompact-还有多远&#34;&gt;&lt;a href=&#34;#%e7%b4%af%e8%ae%a1-token%e6%88%91%e7%a6%bb-autocompact-%e8%bf%98%e6%9c%89%e5%a4%9a%e8%bf%9c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;累计 token：我离 autocompact 还有多远？&#xA;&lt;/h3&gt;&lt;p&gt;写到这一段，本会话已经做的事：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;读取 argue.md（1167 行 Agent 定义，~30K tokens）&lt;/li&gt;&#xA;&lt;li&gt;读取 5+ 份 prep 文件（~10K tokens）&lt;/li&gt;&#xA;&lt;li&gt;读取 reflection（~3K tokens）&lt;/li&gt;&#xA;&lt;li&gt;system-reminder 累计注入（~5K tokens）&lt;/li&gt;&#xA;&lt;li&gt;工具调用历史 + 输出（~20K tokens）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;累计估算：&lt;strong&gt;~70K tokens（占 200K 的 35%）&lt;/strong&gt;，距 autocompact 阈值（167K）还有约 97K 余量。&lt;/p&gt;&#xA;&lt;p&gt;文章后续大约还要 30K tokens（继续写、grounding 求证、humanizer 扫描、自评）。&lt;strong&gt;预计本会话不会触发 autocompact&lt;/strong&gt;——刚好在三级压缩的&amp;quot;舒适区间&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;但锤炼阶段会启动 5 个冷读 SubAgent + 1 个元评审 SubAgent，每个独立 context window。如果这些 SubAgent 不隔离、产出全注入主会话，主会话立刻就会撞上 autocompact——&lt;strong&gt;subagent 隔离这一层在保护本会话不被锤炼阶段的探索任务污染&lt;/strong&gt;。这是第二章那个机制设计在我身上的实际兑现。&lt;/p&gt;&#xA;&lt;h3 id=&#34;auto-memory本会话观察到了什么没观察到&#34;&gt;&lt;a href=&#34;#auto-memory%e6%9c%ac%e4%bc%9a%e8%af%9d%e8%a7%82%e5%af%9f%e5%88%b0%e4%ba%86%e4%bb%80%e4%b9%88%e6%b2%a1%e8%a7%82%e5%af%9f%e5%88%b0&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Auto Memory：本会话观察到了什么没观察到？&#xA;&lt;/h3&gt;&lt;p&gt;本会话&lt;strong&gt;没观察到&lt;/strong&gt; Auto Memory 的实时学习——因为指令都很明确，没有&amp;quot;重复出现的偏好&amp;quot;模式。&lt;/p&gt;&#xA;&lt;p&gt;但这本身就是一个观察：&lt;strong&gt;Auto Memory 的写入是有条件的&lt;/strong&gt;。不是每条用户指令都会被记下，需要某种&amp;quot;重复性/偏好性&amp;quot;判定。这是 Anthropic 留给&amp;quot;用户主动控制&amp;quot;的一个隐含通道——&lt;strong&gt;只要表述方式不像&amp;quot;长期偏好&amp;quot;，Auto Memory 就不会乱写&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;知道这个机制以后，就能反过来塑造表达方式：&lt;strong&gt;临时性事项用临时性表述，长期约束直接写 CLAUDE.md，把&amp;quot;是否进入 Auto Memory&amp;quot;控制在自己手里。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/ch4-token-progress.png&#34; alt=&#34;累计 Token 进度条&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;五上下文是-first-class-工程对象&#34;&gt;&lt;a href=&#34;#%e4%ba%94%e4%b8%8a%e4%b8%8b%e6%96%87%e6%98%af-first-class-%e5%b7%a5%e7%a8%8b%e5%af%b9%e8%b1%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;五、上下文是 first-class 工程对象&#xA;&lt;/h2&gt;&lt;p&gt;回到开头那个反共识：&lt;strong&gt;&amp;ldquo;上下文窗口越大越好&amp;quot;是误解&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;200K vs 1M context 听起来是 5 倍空间，但只要管理策略不变，就还是会撞同样的墙——只是墙挪后了几百轮。三级压缩在 200K 里是必然，在 1M 里也会是必然——只要 token 增长是单调的，就总有一个百分比阈值要被撞。&lt;/p&gt;&#xA;&lt;p&gt;[反例] 学界早就观察到一个反直觉现象——Liu et al. 2023 的 &lt;em&gt;Lost in the Middle&lt;/em&gt; 显示：长上下文模型在&amp;quot;信息位于中间位置&amp;quot;时，性能严重退化。模型对&amp;quot;开头近期&amp;quot;和&amp;quot;末尾近期&amp;quot;的内容更敏感。这反过来强化了 Anthropic 的工程取舍：&lt;strong&gt;与其追求更大窗口，不如让窗口里的内容更结构化、更近期、更克制&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;把这件事归约成一句：&lt;strong&gt;Anthropic 的工程取舍告诉你——会管理的小窗口胜过被动堆积的大窗口&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;要做到&amp;quot;会管理&amp;rdquo;，意味着把上下文当成&lt;strong&gt;first-class 工程对象&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;旧心智模型&lt;/th&gt;&#xA;          &lt;th&gt;新心智模型&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;上下文 = 被动的对话历史&lt;/td&gt;&#xA;          &lt;td&gt;上下文 = 需要主动设计的工程对象&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;越大越好&lt;/td&gt;&#xA;          &lt;td&gt;越克制越好&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;模型记不住 = 模型差&lt;/td&gt;&#xA;          &lt;td&gt;模型&amp;quot;记不住&amp;quot; = 调度策略在工作&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Auto Memory 让我省事&lt;/td&gt;&#xA;          &lt;td&gt;Auto Memory 是隐式推断，CLAUDE.md 才是显式契约&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Subagent 啥都该知道&lt;/td&gt;&#xA;          &lt;td&gt;Subagent 是孤岛，必须显式传约束&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/ch6-mindset-comparison.png&#34; alt=&#34;上下文管理心智模型对比&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最小工作流升级清单：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;长期决策 → CLAUDE.md，不要只活在对话里&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;长会话主动 &lt;code&gt;/clear&lt;/code&gt;，不要被动 &lt;code&gt;/compact&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Subagent 委托写成 self-contained，约束显式列出&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;临时陈述用临时表述，长期偏好直接写 CLAUDE.md，不依赖 Auto Memory 推断&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;每周扫 &lt;code&gt;~/.claude/memories/&lt;/code&gt;，像扫 git status 一样&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&#xA;    &lt;img src=&#34;https://img.wujiachen.com.cn/claude-code-context-management/ch6-workflow-upgrade-checklist.png&#34; alt=&#34;最小工作流升级清单&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;到这五条都成习惯的时候，&amp;ldquo;用着用着就忘&amp;quot;会从一个频繁现象变成一个罕见警报——&lt;strong&gt;你不会再撞墙，因为你开始替 Claude Code 设计它的上下文了。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;至少这是我自己撞了三次墙之后的感受：从抱怨&amp;quot;它怎么又忘了&amp;rdquo;，到开始研究它&lt;strong&gt;怎么记的&lt;/strong&gt;，再到主动决定&lt;strong&gt;让它记什么&lt;/strong&gt;——这中间的位移，比任何 Prompt 工程技巧都重要。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;原文发布于 &lt;a class=&#34;link&#34; href=&#34;https://www.wujiachen.com.cn/posts/claude-code-context-management&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;止语Lab&lt;/a&gt;&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;</description>
        </item></channel>
</rss>
