每一次编程 Agent 会话都从空的开始。Claude Code 自己的文档就是这么写的:每个会话都以一块新的上下文窗口开始。除非对话外面有东西把话带过去,它不记得你昨天告诉它的任何事。所以,学会让上下文穿过 AI 会话,不是一个技巧。是知道某一段上下文属于四层中的哪一层,并在会话结束前放进去。
这篇按顺序走这四层:工具启动时读的指令文件、工具写给自己的笔记、会话恢复,以及前三层都给不了的共享工作记录。前三层是 Claude Code、Codex 和 Gemini CLI 的功能。第四层是 HiFox 放进去的地方,因为一条带着目标、讨论、运行和接受结果的任务,是第二个人也能读的唯一一层。如果你还在聊天和指派之间选,可以看「和 AI Agent 聊天,还是派一条任务」。
先看结论
上下文会留在四个地方。指令文件(CLAUDE.md、AGENTS.md、GEMINI.md)带着工具每次都该遵守的规则。自动记忆带着工具学到的纠正和偏好。会话恢复把一段对话留给同一个人、同一台机器。工作记录,也就是带着描述、评论和执行日志的任务,带着决定了什么、跑了什么、谁接受了,而且只有这一层是共享的。每种上下文放进自己的层,新的上下文窗口就不再是损失。
第 1 层:工具启动时读的指令文件
指令文件是你写一次、工具每次会话都加载的上下文。几个主要的命令行工具各有一份,解析方式也相近。
| 工具 | 文件 | 怎么解析 |
|---|---|---|
| Claude Code | CLAUDE.md(项目或 .claude/CLAUDE.md)、~/.claude/CLAUDE.md(用户)、CLAUDE.local.md(个人,不进 Git) | 从工作目录和它上面的每一层加载,从根往下拼起来。子目录里的文件按需加载 |
| Codex | AGENTS.md,全局用 ~/.codex/AGENTS.md,临时覆盖用 AGENTS.override.md | 从 Git 根目录往下拼接,受 project_doc_max_bytes 限制,默认 32 KiB |
| Gemini CLI | GEMINI.md,全局用 ~/.gemini/GEMINI.md | 全局、工作区和即时发现。/memory show 打印合并后的结果 |
两个习惯能让这一层有用。文件保持短:Claude Code 的建议是每个文件 200 行以内,因为文件变长,遵守程度就下降。写那些你否则会反复解释的事实,比如构建命令、约定,以及你上一次在对话里打过的那条规则。仓库里已经有 AGENTS.md 时,一份只写着 @AGENTS.md 的 CLAUDE.md 会把它引进来,两个工具就读同一份来源。这一层全是上下文,不是强制。Claude Code 的记忆文档写明了:挡住一个动作的是 hook,不是一条指令。
第 2 层:工具写给自己的笔记
Claude Code 的自动记忆是人们容易忘记的那一层。它工作时,会记下你的角色和偏好、你给它的纠正、它无法从代码里推出来的项目上下文,以及仓库外面的东西在哪。它们在 ~/.claude/projects/<project>/memory/,由一份 MEMORY.md 做索引。每次会话开始时加载这份索引的前 200 行或 25 KB。主题文件按需加载。
三条边界很重要。自动记忆按仓库,worktree 之间共享。它在这台机器上,所以台式机上的笔记不会出现在笔记本上。它能活过 /compact,因为压缩改写的是对话,不是磁盘上的文件。想看存了什么,运行 /memory。想关掉,把 autoMemoryEnabled 设为 false,或导出 CLAUDE_CODE_DISABLE_AUTO_MEMORY=1。
这一层用来放你说一次就希望它记住的事:「一直用 pnpm」「API 测试需要本地 Redis」。不要靠它放队友需要的决定。它只属于你。
第 3 层:会话恢复
有时你需要的上下文就是这段对话本身。Claude Code 把会话留在磁盘上:claude --continue 重新打开当前目录里最近的对话,claude --resume <id-or-name> 打开指定的一条,--fork-session 建一个新的会话 ID,让你从检查点分出去,而不覆盖原来的。在 /clear 之前用 /rename 给会话起名,以后才找得到。Codex 用 codex resume 从当前仓库重新打开最近的对话。
恢复是有代价的。每次请求都带上整段对话,所以一条很长的会话,问一句话也比新会话更费用量。/compact 加上焦点说明,例如 /compact Focus on the migration plan,用细节换空间。压缩之后留下来的,是摘要,再加上指令文件重新加载的内容。只在对话里说过、又没被摘要收进去的,就没了。把恢复当成午饭前后的一座桥,不要当成团队的记忆。
第 4 层:工作记录
前三层都回答不了队友周四会问的问题:Agent 周二做了什么,为什么,谁接受了?指令文件放规则。自动记忆放一个人的偏好。恢复的会话放一个人在一台机器上的对话。决定、运行和接受需要一份共享记录,这份记录就是任务。
在 HiFox 里,一次由任务支撑的运行会带上:任务标题和描述、最近的评论和触发这次运行的那条评论、Agent 的指令和技能,以及这条任务配置的仓库。这就是上下文交接:下一次运行从任务开始,不从上一场会话的记忆开始。进展、追踪事件和结果回到任务上。执行日志记下为什么排队、何时开始和结束、工具调用、触发来源,以及失败详情。
产品文档里有两条规则决定东西放哪,两条都是边界,不是功能。独立的 Agent 聊天属于创建它的人,其他成员拿不到访问权。团队需要这个结论时,把它抄进任务描述或一条评论。任务上的 Agent 聊天也不是评论:它不出现在动态里,所以在那里做的决定,除非有人写下来,否则别人看不见。Claude Code 的项目管理怎么把一次改动从 Issue 带到审阅,任务就是那个载体。
还有一个区分值得原样记住,因为它正是这篇文章要说的陷阱。小组可以打开共享任务目录复用,于是后一个 Agent 成员的运行,能在同一台电脑上继承前一个成员的本地改动。这个设置共享的是文件系统状态,不是上一个 Agent 的模型会话。文件带过去了,模型的对话没有。第二个 Agent 如果需要第一个 Agent 的推理,推理必须在任务上。
每种上下文放进哪一层
| 哪种上下文 | 放在哪一层 | 例子 |
|---|---|---|
| 每次会话都成立的规则 | 指令文件 | 提交前跑测试 |
| 纠正或偏好 | 自动记忆 | 用 pnpm,不用 npm |
| 做到一半的探索 | 会话恢复 | 昨天的调试对话 |
| 几个 Agent 共用的步骤 | 技能 | 发布检查清单 |
| 目标、范围、验收标准 | 任务描述 | 正在做的这条需求 |
| 决定、证据、审阅发现 | 任务评论 | 为什么选了方案 B |
| 跑了什么、何时、怎么结束 | 执行日志 | 那次失败的迁移 |
技能值得单独一行。技能把可复用的指令和配套文件包起来,给那些应该反复生效的做法。在本地运行时目录里发现的技能,可以导入组织,这样它就不再只活在一台笔记本上。HiFox 里的技能写了范围和绑定。编程 Agent 的技能文件本身是什么格式,是另一篇。
上下文是关于你怎么工作的,用指令文件和自动记忆。上下文是关于团队在建什么、别人可能要读的,用任务。HiFox 不替代 Claude Code、Codex 或其他执行工具。它补上这些工具不保留的共享记录。
常见问题
/compact 会丢掉我的 CLAUDE.md 吗?不会。项目根目录的 CLAUDE.md 在压缩之后会从磁盘重新读。只在对话里给过的指令可能会丢。那些要挪进文件。
自动记忆会和团队共享吗?不会。它在你的主目录下,按仓库存放,从不同步。团队要看见的上下文,放进已提交的指令文件,或放在任务上。
HiFox 里的 Agent 能记住上一次运行吗?每次运行它都会拿到任务、最近的评论,以及触发这次运行的评论。这是记得住的那种耐久形式。它拿不到上一次运行的私人对话。一次运行具体包括什么,看 Agent 的说明。
MCP 记忆服务器呢?它们多了一个模型可以查询的存储,适合用来结构性回忆代码库。它们仍然不记录谁接受了一次改动,所以要和一份工作记录一起用,而不是拿来替换。HiFox 里的任务就是这份记录该放的地方。



