Claude Code 上下文窗口管理:从治理方法到工程实践
核心目标:让 Agent 在长任务中保持稳定、高效、可续接、可审计,而不是被历史对话、无关文件、旧日志和过期设计拖慢或带偏。
0. 一句话结论
上下文治理不是简单”压缩聊天记录”,而是把 Agent 工作所需的信息按生命周期、重要性和使用频率分层管理:
长期规则 → CLAUDE.md / AGENTS.md当前任务 → docs/ai/current-task.md阶段进度 → docs/ai/progress.md架构决策 → docs/ai/decisions.md跨窗口交接 → docs/ai/handoff-summary.md大范围搜索 → subagent重复流程 → slash command / skill自动检查 → hooks任务切换 → /clear长任务续航 → /compact上下文诊断 → /context真正有效的 Agent,不是”什么都记住”,而是”只把当前决策必须依赖的信息放进主上下文”。
1. 为什么要做上下文治理?
Claude Code 不是普通聊天机器人。它的上下文窗口会逐步装入很多内容:
- 用户和模型的对话历史;
- Claude 读取过的文件内容;
- 命令输出;
CLAUDE.md;- auto memory;
- 已加载的 skills;
- MCP 工具信息;
- 系统指令;
- hook 注入的信息;
- subagent 返回的摘要。
官方文档说明,随着工作推进,context 会不断填满;Claude Code 会自动 compact,但早期对话里的细节指令可能丢失。因此,持久规则应放入 CLAUDE.md,并可用 /context 查看空间占用。
参考资料:
- How Claude Code works - The context window
- Explore the context window
- Claude Code Best Practices - Manage context aggressively
2. 核心问题:上下文不是越多越好
很多人使用 Claude Code 时,会犯一个错误:
让 Agent 读取所有文件让 Agent 记住所有历史讨论让 Agent 加载所有 Skill让 Agent 保留所有命令输出让 Agent 带着旧任务继续新任务这会导致:
- 每轮推理变慢;
- token 成本变高;
- 模型注意力被稀释;
- 旧任务干扰新任务;
- 工具调用路径变乱;
- compact 后关键细节可能丢失;
- Agent 开始重复之前已经做过的事;
- Agent 把过期方案当成当前约束。
因此,上下文治理的核心不是”保留最多信息”,而是提高:
有效上下文密度 = 当前任务真正需要的信息 / 当前窗口里的全部信息3. 上下文治理的五层模型
建议把上下文拆成五层:
| 层级 | 名称 | 内容 | 存放位置 | 生命周期 |
|---|---|---|---|---|
| L1 | 长期规则层 | 技术栈、代码规范、架构约束、禁止事项 | CLAUDE.md | 长期 |
| L2 | 任务边界层 | 本轮要做什么、不做什么、完成标准 | docs/ai/current-task.md | 当前任务 |
| L3 | 状态进度层 | 已完成、未完成、下一步 | docs/ai/progress.md | 阶段性 |
| L4 | 决策记录层 | 为什么这么设计、不能随便推翻的取舍 | docs/ai/decisions.md | 中长期 |
| L5 | 交接压缩层 | 跨窗口/compact 后继续工作的摘要 | docs/ai/handoff-summary.md | 会话切换 |
这五层的作用不同,不能混在一个聊天窗口里。
4. 推荐项目目录结构
在项目根目录添加:
your-project/├── CLAUDE.md├── AGENTS.md # 可选,给多种 Agent 工具共用├── docs/│ └── ai/│ ├── current-task.md # 当前任务边界│ ├── progress.md # 阶段进度│ ├── decisions.md # 架构决策│ ├── file-map.md # 文件职责地图│ ├── handoff-summary.md # 跨窗口交接摘要│ └── context-policy.md # 上下文治理规则└── .claude/ ├── commands/ # 旧版自定义命令,可选 │ ├── context-sync.md │ ├── handoff.md │ └── task-start.md ├── skills/ # 推荐方式:用 skill 承载可复用流程 │ └── context-governance/ │ └── SKILL.md └── agents/ # 项目级 subagent,可选 └── code-researcher.md说明:
CLAUDE.md适合放每次会话都需要加载的稳定规则。docs/ai/*适合放不会每次都全部加载、但需要时可以按需读取的信息。.claude/commands/*或.claude/skills/*适合把重复流程自动化。.claude/agents/*适合创建专门的 subagent,例如代码调研、日志分析、测试修复。
Claude Code 官方文档提到,CLAUDE.md 会进入上下文窗口,因此应保持简洁、具体、结构清楚,并建议目标控制在 200 行以内。文档也提到自定义 slash commands 可以用 Markdown 文件定义;推荐的新格式是 .claude/skills/<name>/SKILL.md,CLI 仍支持 .claude/commands/。
参考资料:
5. L1:CLAUDE.md 写法
5.1 CLAUDE.md 只放长期稳定规则
不要把日报、临时 bug、一次性讨论、超长需求都塞进 CLAUDE.md。
适合放:
- 项目背景;
- 技术栈;
- 代码分层规则;
- 架构边界;
- 测试命令;
- 提交规范;
- 禁止事项;
- Agent 协作流程。
不适合放:
- 临时 bug 日志;
- 大段业务文档;
- 已废弃方案;
- 当前任务细节;
- 长篇会议纪要;
- 大段源码说明;
- 一次性 prompt。
5.2 CLAUDE.md 模板
# 项目 AI 协作规则
## 项目背景本项目是一个 Java Web Agent 调度基座,用于支持 Agent 装配、Skill 管理、MCP Client Gateway、意图识别、计划编排和工具调用。
## 技术栈- Java 17- Spring Boot 3- MySQL- Redis- Spring AI / Spring AI Alibaba Graph- MCP Client Gateway- SSE
## 代码分层规则- Controller 只负责参数接收、鉴权入口和响应包装。- Service 负责业务逻辑。- Manager / Orchestrator 负责复杂流程编排。- Repository / Mapper 只负责数据访问。- Client / Gateway 负责外部系统连接。- DTO / Request / Response 不混入业务逻辑。
## 开发规则- 新增模块前,先说明接口设计、文件清单和影响范围。- 每次只实现一个小阶段,避免跨模块大改。- 修改前先读取相关文件,不要全项目扫描。- 不要主动重构无关模块。- 不要删除已有代码,除非用户明确要求。- 不要引入未说明用途的新依赖。
## 测试与验证- 修改核心逻辑后,需要给出测试方式。- 如果项目已有测试命令,优先运行已有测试。- 如果无法运行测试,需要说明原因和人工验证步骤。
## 上下文治理规则- 当前任务细节写入 `docs/ai/current-task.md`。- 阶段进度写入 `docs/ai/progress.md`。- 架构决策写入 `docs/ai/decisions.md`。- 跨窗口交接写入 `docs/ai/handoff-summary.md`。- 大范围代码搜索优先交给 subagent,只把摘要带回主上下文。- 切换无关任务时使用 `/clear`。- 长任务继续时先更新 handoff,再使用 `/compact`。6. L2:current-task.md 写法
current-task.md 用来约束”本轮到底做什么”。
6.1 模板
# 当前任务:MCP Client Gateway MVP
## 任务背景当前完整 Agent 调度模块尚未完成,但需要先建设 MCP Client 能力,为后续 Agent 调用外部工具打基础。
## 本轮目标实现一个最小可用 MCP Client Gateway,用于连接外部 MCP Server、发现工具、注册工具元数据,并通过统一接口调用工具。
## 本轮要做- MCP Server 配置结构- MCP Client 初始化管理- Tool 发现与注册- Tool 调用服务- HTTP 调用入口- 基础异常处理
## 本轮不做- 不做 MCP Server 自研- 不做完整 Agent Planner- 不做 Skill 装配工厂- 不做前端页面- 不做多租户权限- 不做复杂可视化
## 重点目录- `src/main/java/.../mcp/`- `src/main/resources/application.yml`- `docs/mcp-client-gateway-design.md`
## 完成标准- 可以配置一个外部 MCP Server- 启动后可以加载配置- 可以发现工具列表- 可以通过 HTTP 接口调用某个工具- 调用失败时有明确错误返回6.2 使用方式
新任务开始时给 Claude:
请先阅读:1. CLAUDE.md2. docs/ai/current-task.md3. docs/ai/decisions.md4. docs/ai/progress.md
然后只围绕 current-task.md 中的任务工作。不要主动读取全项目文件。修改代码前先说明准备修改哪些文件。7. L3:progress.md 写法
progress.md 是阶段状态,不是详细日志。
7.1 模板
# 开发进度记录
## 2026-05-21:MCP Client Gateway 阶段 1
### 已完成- 新增 MCP Server 配置结构。- 新增配置绑定类。- 在 application.yml 中增加 MCP Server 配置样例。
### 修改文件- `McpServerProperties.java`:读取 MCP Server 配置。- `McpServerConfig.java`:描述单个 MCP Server。- `application.yml`:增加配置样例。
### 当前未完成- MCP Client 初始化。- Tool 发现。- Tool 调用。- HTTP 调用入口。
### 下一步- 实现 `McpClientManager`。- 设计 `McpToolRegistry`。- 定义标准调用请求和响应。7.2 更新时机
每完成一个小阶段就更新一次:
请更新 docs/ai/progress.md,记录本阶段完成内容、修改文件、未完成事项和下一步。8. L4:decisions.md 写法
decisions.md 用来防止 Agent 后续推翻关键设计。
8.1 模板
# 架构决策记录
## ADR-001:第一阶段只做 MCP Client Gateway
### 背景完整 Agent 模块尚未搭建完成,但项目需要先具备 MCP Client 能力。
### 决策第一阶段只实现 MCP Client Gateway,不实现 MCP Server,不实现完整 Agent Planner。
### 原因- 先沉淀工具连接、工具发现、工具调用能力。- 后续 Agent 调度层可以复用该 Gateway。- 避免 Agent、Skill、MCP Server 同时开发导致边界混乱。
### 影响- 当前模块只关注外部 MCP Server 的连接与调用。- Skill 装配与 Plan-and-Execute 放到后续阶段。- 当前不设计多租户权限和前端管理页面。
### 状态已采纳。8.2 记录原则
每条决策都回答四个问题:
为什么有这个问题?我们选择了什么?为什么这么选?这个选择会影响什么?9. L5:handoff-summary.md 写法
handoff-summary.md 用于:
/compact前;- 新窗口继续;
- 换模型继续;
- 交给同事继续;
- 从 Claude 迁移到 Codex/Cursor。
9.1 模板
# 任务交接摘要
## 当前任务实现 MCP Client Gateway MVP,用于连接外部 MCP Server、发现工具并提供统一调用入口。
## 已完成内容- 完成 MCP Server 配置结构。- 完成 McpClientManager 初版。- 完成 McpToolRegistry 工具注册逻辑。- 完成 McpToolInvocationService 调用入口。- 完成 McpGatewayController HTTP 接口。
## 修改过的文件- `McpServerProperties.java`:读取配置。- `McpClientManager.java`:管理 MCP Client。- `McpToolRegistry.java`:缓存工具元数据。- `McpToolInvocationService.java`:统一调用工具。- `McpGatewayController.java`:提供 HTTP API。
## 关键设计决策- 第一阶段只做 MCP Client,不做 MCP Server。- 工具调用统一走 McpToolInvocationService。- Controller 不直接操作 MCP Client。- Tool 元数据先缓存在内存,暂不落库。
## 未解决问题- 需要补充工具调用超时控制。- 需要补充调用日志。- 需要考虑多 MCP Server 名称冲突问题。- 需要补充基础测试用例。
## 下一步建议1. 增加调用超时配置。2. 增加标准错误码。3. 编写基础测试用例。
## 注意事项- 不要重构 Agent Planner。- 不要新增 Skill 装配逻辑。- 不要把 MCP Server 开发混进当前任务。9.2 compact 前提示词
请先更新 docs/ai/handoff-summary.md,保留:1. 当前任务2. 已完成内容3. 修改过的文件4. 关键设计决策5. 未解决问题6. 下一步建议7. 不要重复做的事项
更新完成后,我再执行 /compact。然后执行:
/compactClaude Code 文档说明,/compact 会用结构化摘要替换对话历史;项目根目录 CLAUDE.md 和未限定作用域的规则会重新注入,但 path-scoped rules、子目录 CLAUDE.md 等可能要等匹配文件再次读取后才恢复。因此,跨窗口关键状态不要只放聊天历史里。
参考资料:
10. /clear、/compact、/context 的使用边界
10.1 /clear
用于清空无关上下文。
适合:
上午做 MCP Gateway,下午改论文,晚上问 Git 分支。这种必须 /clear。
判断标准:
| 情况 | 是否 /clear |
|---|---|
| 换了完全无关任务 | 是 |
| 当前任务方向错了 | 是 |
| 大量失败尝试污染上下文 | 是 |
| 继续同一个功能开发 | 否 |
| 只是在同一任务内修 bug | 否 |
10.2 /compact
用于长任务续航。
适合:
| 情况 | 是否 /compact |
|---|---|
| 同一任务已经做了很久 | 是 |
| 对话里有大量日志和修改过程 | 是 |
| 想跨窗口继续同一任务 | 是 |
| 换了无关任务 | 不建议,用 /clear |
| 任务刚开始 | 不需要 |
建议写法:
/compact focus on MCP Client Gateway current status, modified files, design decisions, unresolved issues, and next steps.Claude Code 官方文档说明,可以通过 /compact 加 focus 来控制保留重点。
10.3 /context
用于诊断当前上下文占用。
适合:
/context然后观察:
- 是否有超大文件内容;
- 是否有无关工具输出;
- 是否加载了过多 rules;
- 是否某个 skill 过长;
- 是否 MCP 工具定义占用过高;
- 是否历史任务没有清理。
11. Subagent:把脏上下文隔离出去
11.1 什么时候用 subagent?
适合:
- 大范围代码搜索;
- 全项目依赖分析;
- 日志排查;
- 多文件代码审查;
- 技术调研;
- 失败原因定位;
- 临时探索。
不适合:
- 当前主线的关键决策;
- 需要你持续把关的架构设计;
- 会直接修改核心代码的操作,除非你专门授权。
Claude Code 文档说明,subagent 有独立上下文窗口,可以配置工具权限、模型、hooks 和 skills。它适合处理会产生大量文件读取和搜索结果的任务,然后只把摘要返回主上下文。
参考资料:
11.2 使用提示词
请使用 subagent 调研 MCP 模块相关代码。
要求:1. subagent 可以读取相关文件和日志。2. 主上下文只返回摘要,不要返回源码全文。3. 摘要包括: - 相关文件列表 - 每个文件职责 - 当前实现缺口 - 推荐修改点 - 风险点4. 不要修改代码。11.3 项目级 subagent 示例
文件:.claude/agents/code-researcher.md
---name: code-researcherdescription: Read-only codebase research agent. Use it for large-scale search, file mapping, dependency tracing, and implementation gap analysis.tools: Read, Grep, Glob---
You are a read-only codebase research agent.
Your job:1. Locate files relevant to the user's task.2. Summarize responsibilities of each file.3. Identify implementation gaps.4. Return only concise summaries, not full source code.5. Never modify files.6. Prefer file paths, symbols, and line-level findings.12. Skill / Slash Command:把重复治理流程自动化
上下文治理不能完全靠人记。可以把常见流程做成命令或 skill。
12.1 context-sync 命令
文件:.claude/commands/context-sync.md
---description: Update AI context governance files for the current task.allowed-tools: Read, Edit, Grep, Glob---
请执行一次上下文维护:
1. 阅读: - CLAUDE.md - docs/ai/current-task.md - docs/ai/progress.md - docs/ai/decisions.md - docs/ai/handoff-summary.md
2. 检查: - current-task.md 是否仍然符合当前任务 - progress.md 是否记录了最新阶段 - decisions.md 是否有新架构决策需要补充 - handoff-summary.md 是否可以支持新窗口继续
3. 更新: - progress.md - decisions.md - handoff-summary.md
4. 输出: - 当前状态 - 下一步建议 - 建议是否 /compact 或 /clear使用:
/context-sync12.2 task-start 命令
文件:.claude/commands/task-start.md
---description: Start a new task with controlled context.allowed-tools: Read, Grep, Globargument-hint: [task name]---
请启动一个受控任务:$ARGUMENTS
步骤:1. 阅读 CLAUDE.md。2. 阅读 docs/ai/current-task.md。3. 阅读 docs/ai/decisions.md。4. 阅读 docs/ai/progress.md。5. 给出: - 你理解的任务目标 - 本轮要做什么 - 本轮不做什么 - 需要读取哪些文件 - 计划修改哪些文件6. 在用户确认前不要修改代码。12.3 handoff 命令
文件:.claude/commands/handoff.md
---description: Create or update handoff summary before compacting or switching sessions.allowed-tools: Read, Edit, Grep, Glob---
请更新 docs/ai/handoff-summary.md,必须包括:
1. 当前任务2. 已完成内容3. 修改过的文件4. 关键设计决策5. 未解决问题6. 下一步建议7. 不要重复做的事项8. 可以安全忽略的旧信息
输出完成后,建议用户是否执行 /compact。13. Hooks:把部分上下文治理做成自动触发
Claude Code hooks 可以在生命周期事件中自动执行命令、HTTP endpoint 或 LLM prompt。官方文档列出的常见自动化包括:
- Claude 需要输入时通知;
- 编辑后自动格式化;
- 阻止受保护文件被修改;
- compact 后重新注入上下文;
- 审计配置变更;
- 文件或目录变化后重新加载环境。
参考资料:
13.1 建议自动化的点
| 场景 | 建议 hook |
|---|---|
| 每次 session 开始 | 提醒读取 CLAUDE.md 和 current-task.md |
| 每次工具编辑后 | 自动格式化或检查 protected files |
| 每次 compact 前 | 触发 handoff 更新提醒 |
| 每次 compact 后 | 提醒重新读取 handoff / progress |
| 每次修改配置 | 记录审计日志 |
| 每次任务停止 | 提醒更新 progress |
13.2 简化示例:compact 前提醒
注意:hook 配置会随着 Claude Code 版本变化而变化,实际请以官方文档和本机
/hooks菜单为准。
{ "hooks": { "PreCompact": [ { "matcher": "", "hooks": [ { "type": "command", "command": "echo 'Before compact: please update docs/ai/handoff-summary.md'" } ] } ] }}14. MCP / Tool 上下文治理
如果你的 Agent 装配工厂未来接入大量 MCP tools / skills,不要一开始全部加载。
建议采用三层加载:
第一层:Tool / Skill Card- 名称- 一句话用途- 输入输出摘要- 适用场景- 风险等级
第二层:Manifest- 参数结构- 权限要求- 调用方式- 错误码- 依赖系统
第三层:Body- 详细执行步骤- 复杂 prompt- 代码模板- 业务规则推荐调用流程:
用户输入 ↓意图识别 ↓只读取候选 Tool / Skill Card ↓筛选 1~3 个候选能力 ↓读取候选 Manifest ↓必要时读取 Body ↓执行调用 ↓把调用结果摘要写回上下文不要这样做:
用户一进来 ↓加载所有 Skill 全文 ↓加载所有 MCP tool 详细 schema ↓让模型自己在几百个工具里判断Claude Code 文档提到,MCP tool definitions 默认可以 deferred,并通过 tool search 按需加载,只有工具名称会先消耗上下文;也可以通过 /mcp 查看每个 server 的上下文成本。
参考资料:
15. Tool Result Clearing 思想
Anthropic Cookbook 里提到,工具调用结果会作为 tool_result 进入对话历史,并在后续每轮请求中继续消耗上下文。很多工具结果是可重新获取的,例如文件读取、API 响应、搜索结果,因此不一定要把完整结果一直保留在上下文里。
这对工程实践的启发是:
不要长期携带大段日志、全量文件内容、长搜索结果。只保留:1. 结论2. 来源路径3. 关键行号4. 下一步影响参考资料:
16. 场景演示:开发 MCP Client Gateway
16.1 错误做法
你直接说:
帮我实现 MCP Client Gateway。Agent 可能会:
- 读取大量无关模块;
- 设计完整 Agent Planner;
- 顺手搞 Skill 装配;
- 甚至开始设计 MCP Server;
- 把本轮任务扩大成平台级重构。
16.2 正确做法
第一步,清空无关任务:
/clear第二步,创建 docs/ai/current-task.md:
# 当前任务:MCP Client Gateway MVP
## 本轮目标实现 MCP Client Gateway 的最小可用版本。
## 本轮要做- MCP Server 配置加载- MCP Client 初始化- Tool 发现- Tool 调用- HTTP 调用入口
## 本轮不做- 不做 MCP Server- 不做 Agent Planner- 不做 Skill 装配工厂- 不做前端页面第三步,启动 Claude:
请先阅读:1. CLAUDE.md2. docs/ai/current-task.md3. docs/ai/decisions.md4. docs/ai/progress.md
然后只围绕 current-task.md 工作。先给出任务理解、涉及文件和执行计划,不要立刻改代码。第四步,阶段实现:
可以。先只完成配置结构和核心接口。每次只实现一个小阶段,完成后更新 progress.md。第五步,阶段结束:
请更新 docs/ai/progress.md 和 docs/ai/decisions.md。第六步,出现大范围 bug:
请使用 code-researcher subagent 调查 MCP 调用失败原因。主上下文只返回摘要,不要返回源码全文。第七步,准备 compact:
/handoff然后:
/compact focus on MCP Client Gateway current status, modified files, key decisions, unresolved issues, and next steps.第八步,新窗口继续:
请阅读:1. CLAUDE.md2. docs/ai/handoff-summary.md3. docs/ai/progress.md4. docs/ai/current-task.md
然后继续 MCP Client Gateway 任务。不要重复已经完成的内容。先给出当前状态理解和下一步计划。17. 方法论:CTSH 上下文治理循环
可以把整套流程总结为 CTSH:
C - Curate:筛选上下文T - Track:记录进度和决策S - Summarize:阶段性摘要H - Handoff:跨窗口交接17.1 Curate:筛选上下文
目标:让主 Agent 只看到当前任务必须的信息。
操作:
- 用
current-task.md规定任务边界; - 用
CLAUDE.md规定长期规则; - 用 subagent 隔离大范围搜索;
- 用
/clear切断无关任务; - 不要一次性读全项目;
- 不要把所有工具/skill 全量加载。
17.2 Track:记录进度和决策
目标:避免 Agent 忘记”做到了哪里”和”为什么这么做”。
操作:
- 阶段完成后更新
progress.md; - 架构选择写入
decisions.md; - 修改文件写入
file-map.md; - 不要只依赖聊天历史。
17.3 Summarize:阶段性摘要
目标:降低上下文体积,保留决策信息。
操作:
- compact 前更新
handoff-summary.md; - 摘要只保留任务、文件、决策、风险、下一步;
- 删除过期探索和无关日志;
- 用
/context检查是否还有低价值上下文。
17.4 Handoff:跨窗口交接
目标:新窗口、换模型、换工具后能稳定继续。
操作:
- 新窗口先读
handoff-summary.md; - 再读
current-task.md和progress.md; - 先让 Agent 复述当前状态;
- 确认后再继续开发。
18. 决策表:什么时候该做什么?
| 场景 | 操作 |
|---|---|
| 新任务和旧任务无关 | /clear |
| 同一任务做很久 | 先 /handoff,再 /compact |
| 不知道上下文被什么占满 | /context |
| 大范围读代码 | subagent |
| 要反复执行同一流程 | slash command / skill |
| 关键规则总被忘 | 写入 CLAUDE.md |
| 当前需求边界总被扩大 | 写入 current-task.md 的”不做事项” |
| 架构方向被反复推翻 | 写入 decisions.md |
| 新窗口无法继续 | 完善 handoff-summary.md |
| 频繁忘记更新文档 | hooks 或 context-sync 命令 |
19. 每日工作流建议
19.1 开始工作
/clear/task-start MCP Client Gateway如果没有自定义命令,就手动输入:
请阅读 CLAUDE.md、docs/ai/current-task.md、docs/ai/progress.md、docs/ai/decisions.md。先给出当前任务理解和计划,不要改代码。19.2 开发中
每次只完成一个小阶段。修改前说明文件清单。修改后说明变更点和验证方式。阶段结束更新 progress.md。19.3 调研中
请使用 subagent 调研相关文件。主上下文只返回摘要,不要返回源码全文。19.4 结束前
/context-sync/handoff然后根据情况:
/compact或者:
/clear20. 最小可执行版本
如果你不想一开始搞复杂,先建 4 个文件:
CLAUDE.mddocs/ai/current-task.mddocs/ai/progress.mddocs/ai/handoff-summary.md并形成 5 个习惯:
1. 新任务前 /clear2. 当前任务写 current-task.md3. 阶段完成更新 progress.md4. compact 前更新 handoff-summary.md5. 大范围搜索用 subagent这已经能解决 80% 的上下文混乱问题。
21. 进阶版本
当项目进入多人协作或平台化阶段,再补充:
docs/ai/decisions.mddocs/ai/file-map.mddocs/ai/context-policy.md.claude/commands/context-sync.md.claude/commands/handoff.md.claude/agents/code-researcher.md.claude/skills/context-governance/SKILL.mdhooks for PreCompact / PostCompact / Stop22. 给企业 Agent 平台的启发
如果你要做”Agent 装配工厂”或”Agent 调度基座”,上下文治理要平台化,而不是只靠 prompt。
建议平台层内置:
22.1 Agent Context Registry
记录每个 Agent 的:
- 长期系统规则;
- 当前任务;
- 会话状态;
- 已加载 Skill;
- 已调用工具;
- 历史摘要;
- 当前 token 预算;
- 上下文污染风险。
22.2 Skill Manifest 分层加载
每个 Skill 分三层:
Skill Card 轻量检索Skill Manifest 参数和权限Skill Body 详细执行逻辑22.3 Memory 类型区分
Profile Memory 用户偏好Project Memory 项目规则Task Memory 当前任务状态Decision Memory 架构决策Tool Memory 工具调用摘要Error Memory 已解决错误和修复方式22.4 自动压缩策略
不要只按 token 上限压缩,还可以按事件压缩:
模块完成测试通过bug 修复任务切换工具结果过大subagent 返回后多轮失败后22.5 上下文质量评分
可以为每条上下文打分:
score = relevance + freshness + authority + reusability - verbosity - staleness低分上下文不进主窗口,只保存在可检索存储里。
23. 检查清单
23.1 CLAUDE.md 检查
- 是否少于 200 行?
- 是否只放长期规则?
- 是否没有临时任务内容?
- 是否没有过期指令?
- 是否没有互相矛盾的规则?
- 是否有明确禁止事项?
- 是否有测试和验证命令?
23.2 current-task.md 检查
- 是否写清当前目标?
- 是否写清本轮要做?
- 是否写清本轮不做?
- 是否写清完成标准?
- 是否列出重点文件或目录?
- 是否避免任务范围发散?
23.3 progress.md 检查
- 是否记录已完成内容?
- 是否记录修改文件?
- 是否记录未完成事项?
- 是否记录下一步?
- 是否删除过期状态?
23.4 decisions.md 检查
- 是否记录关键架构决策?
- 是否说明为什么这样选?
- 是否说明影响范围?
- 是否标记状态?
- 是否避免重复争论?
23.5 handoff-summary.md 检查
- 新窗口能否仅靠它恢复任务?
- 是否包含当前任务?
- 是否包含已完成内容?
- 是否包含修改文件?
- 是否包含关键决策?
- 是否包含未解决问题?
- 是否包含下一步?
- 是否包含不要重复做的事项?
24. 常见误区
误区 1:把 CLAUDE.md 当无限记忆
错。CLAUDE.md 会消耗上下文,越长越容易降低遵循效果。
误区 2:让 Agent 每次都读全项目
错。应该先让它定位相关文件,再按需读取。
误区 3:compact 等于万无一失
错。compact 是有损摘要,关键状态应该先写入文件。
误区 4:subagent 只是多 Agent 炫技
错。subagent 最大价值是上下文隔离,特别适合大范围搜索和日志排查。
误区 5:所有 Skill 都常驻上下文
错。应该先看 Skill Card,再按需加载 Manifest 和 Body。
误区 6:自动化可以替代人工判断
错。自动化能执行流程,但不能完全判断业务决策是否仍然有效。
25. 最终原则
- 主上下文只放当前决策必需信息。
- 长期规则进 CLAUDE.md,阶段状态进 docs/ai。
- 大范围搜索交给 subagent,不污染主上下文。
- 任务切换用 /clear,长任务续航用 /compact。
- compact 前先写 handoff-summary。
- 重复流程用 slash command / skill 自动化。
- hooks 用来做提醒、检查和自动注入,不要把复杂业务完全交给 hooks。
- Agent 不应一次加载所有工具和 Skill,而应按意图分层加载。
- 每个任务都要有”不做事项”,否则 Agent 会自动扩大范围。
- 上下文治理的目标不是记住一切,而是让 Agent 始终知道下一步该做什么。
26. 参考资料
-
Claude Code Docs: How Claude remembers your project
https://code.claude.com/docs/en/memory -
Claude Code Docs: Best practices for Claude Code
https://code.claude.com/docs/en/best-practices -
Claude Code Docs: How Claude Code works
https://code.claude.com/docs/en/how-claude-code-works -
Claude Code Docs: Explore the context window
https://code.claude.com/docs/en/context-window -
Claude Code Docs: Create custom subagents
https://code.claude.com/docs/en/sub-agents -
Claude Code Docs: Hooks reference
https://code.claude.com/docs/en/hooks -
Claude Code Docs: Automate workflows with hooks
https://code.claude.com/docs/en/hooks-guide -
Claude Agent SDK Docs: Slash Commands in the SDK
https://code.claude.com/docs/en/agent-sdk/slash-commands -
Anthropic Engineering: Effective context engineering for AI agents
https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents -
Anthropic Cookbook: Context engineering: memory, compaction, and tool clearing
https://platform.claude.com/cookbook/tool-use-context-engineering-context-engineering-tools -
arXiv: Context Engineering for AI Agents in Open-Source Software
https://arxiv.org/abs/2510.21413 -
arXiv: On the Use of Agentic Coding Manifests: An Empirical Study of Claude Code
https://arxiv.org/abs/2509.14744