context-mode 恢复会话完整指南:--continue 与 /resume 全状态还原详解
【免费下载链接】context-modeContext window optimization for AI coding agents. Sandboxes tool output (98% reduction), persists session memory, and enforces routing across 17 platforms via MCP + hooks.项目地址: https://gitcode.com/GitHub_Trending/cl/context-mode
context-mode是一款面向 AI 编程智能体的上下文窗口优化工具:它沙箱化工具输出(最高降低 98% 的上下文占用),将会话记忆持久化到本地 SQLite,并通过 MCP + hooks 在 17 个客户端平台强制执行路由。本文带你彻底搞懂它的会话恢复能力——如何用--continue与/resume在会话被压缩或中断后一键还原全部工作状态,让 AI 从你上一条指令继续干活,而不用你重复任何解释。
为什么你需要 context-mode 的会话连续性
AI 智能体在长任务中会不断消耗上下文窗口:读文件、抓网页、跑测试……一旦窗口写满,客户端会压缩(compact)对话来腾空间。压缩之后,模型常常"失忆"——忘了自己在改哪些文件、哪些任务进行中、你最后一条指令是什么。
context-mode 的Session Continuity(会话连续性)正是为解决这个问题而设计:
- ✅ 会话期间每一个有意义的事件(文件编辑、Git 操作、任务、错误、你的决策)都被持久化到按项目隔离的 SQLite 数据库;
- ✅ 对话被压缩,或者你用
--continue、--resume、/resume恢复时,工作状态自动重建,模型直接从你上一条提示词继续,不需要你重复任何内容; - ⚠️ 注意一个关键规则:如果不带
--continue启动新会话,上一个会话的数据会被立即清理——新会话意味着干净起点。想接续上次工作,恢复参数是必须的。
五大 Hook 协同:会话恢复是如何工作的
会话恢复不是单一命令的功劳,而是多个生命周期 Hook 协同的结果(完整实现见 hooks/sessionstart.mjs 与 hooks/precompact.mjs):
| Hook | 在恢复流程中的角色 |
|---|---|
| PostToolUse | 每次工具调用后捕获文件、任务、Git、错误等事件 |
| UserPromptSubmit | 捕获你的决策与修正("用 X 代替 Y"、"别做 Z") |
| Stop | 捕获智能体回合结束状态 |
| PreCompact | 压缩前读取全部事件,构建优先级快照并入库 |
| SessionStart | 压缩后或恢复时,取回快照重建工作上下文 |
核心时序如下:
PreCompact 触发 → 从 SQLite 读取该会话全部事件 → 构建按优先级分层的 XML 快照(≤ 2 KB) → 快照存入 session_resume 表 SessionStart 触发(source: "compact" / "resume") → 取回已存储快照 → 写入结构化事件文件 → 自动索引进 FTS5 全文库 → 构建包含 15+ 分类的 Session Guide → 将 <session_knowledge> 指令注入上下文 → 模型带着完整工作状态,从你最后一条提示词继续三种恢复方式:--continue、--resume 与 /resume 用法详解
在 Claude Code 等支持会话恢复的客户端中,context-mode 对三种恢复入口全部生效:
claude --continue—— 继续当前项目最近一次会话。SessionStart Hook 会以source: "resume"触发,优先读取该会话 ID 的实时事件表;claude --resume <session-id>—— 恢复指定会话;/resume(选择器)—— 在会话列表中挑选任意一段历史对话。
其中/resume选择器有一个巧妙设计:它会给恢复的会话发一个全新的 session id,其实时事件表是空的。此时 hooks/sessionstart.mjs 会自动降级,从项目的session_resume表中认领最近一份未被消费的快照(claimLatestUnconsumedResume),照样完成状态重建。换句话说:选择器负责选对话,context-mode 负责把之前的工作状态"注水"回来。
全状态还原:Session Guide 到底还原了什么
恢复完成后,模型收到的不是一堆原始日志,而是一份结构化的Session Guide叙事文档,涵盖 19 个类别:
- Last Request—— 你最后一条提示词,模型不会反问"我们刚在做什么";
- Tasks—— 复选框格式的任务清单(
[x]已完成 /[ ]待办); - Files Modified—— 会话中触碰过的全部文件;
- Key Decisions—— 你的修正与偏好("用 X 代替 Y");
- Unresolved Errors—— 尚未修复的错误 + "错误→修复"配对;
- Git—— 执行过的 checkout / commit / push / status 操作;
- Plans、Constraints、Blockers、Environment—— 计划模式、发现的限制、阻塞项、工作目录与环境;
- Project Rules、MCP Tools Used、Skills Used等其余类别。
快照有≤ 2 KB 的预算,采用优先级分层:预算紧张时,低优先级事件(会话意图、MCP 工具计数)先被丢弃,而关键状态(活动文件、任务、规则、决策)永远保留。更细粒度的事件数据同时被索引进 FTS5 全文库,模型可用ctx_search按需精确检索。
快照如何构建与存储:关键源码导读
| 环节 | 说明 | 关键文件 |
|---|---|---|
| 事件捕获 | Hook 从每次工具调用中提取结构化事件 | hooks/posttooluse.mjs |
| 快照构建 | 优先级分层的 XML 快照生成 | src/session/snapshot.ts |
| 会话数据库 | 按项目隔离的 SQLite 存储与快照读写 | src/session/db.ts |
| 恢复注入 | startup / compact / resume / clear 四分支处理 | hooks/sessionstart.mjs |
| 会话指令 | Session Guide 与 FTS5 索引写入 | hooks/session-directive.mjs |
两个容易忽略但很有用的细节:
- 💡
--continue会话还保留已索引的文档:ctx_fetch_and_index的 24 小时 TTL 缓存跨重启生效,恢复会话无需重新抓取,不浪费任何上下文 token; - 💡数据不会无限堆积:不带
--continue的全新启动会触发清理(保留 7 天窗口),配合ctx purge可随时清空知识库。
平台支持:哪些客户端能恢复会话
会话恢复依赖 Hook 支持,不同平台完整度不同。以 Claude Code 为例是完整支持:全部 Hook 触发、捕获工具事件与用户决策、构建压缩快照,并在压缩、--continue、--resume、/resume后恢复状态;Gemini CLI、VS Code Copilot、JetBrains Copilot 为高覆盖;Cursor 目前暂不支持压缩后的会话恢复。完整能力对照表见 docs/platform-support.md。
会话恢复排障清单
遇到问题时,按顺序检查:
ctx doctor—— 一键诊断运行时、hooks 注册、FTS5 与插件状态,全部应显示[x];ctx stats—— 查看会话事件数量,确认事件确实在被捕获;- 确认启动时带了
--continue/--resume,或使用了/resume选择器——否则数据按设计已被清理; - 相关行为回归测试可参考 tests/session/continuity.test.ts 与 tests/session/resume-leg-boundary.test.ts,覆盖压缩恢复与 resume 边界场景。
写在最后
context-mode 把"会话记忆"从模型的一次性上下文,变成了本地可持久、可检索、可回滚的资产。--continue一行命令背后,是 PreCompact 建快照、SessionStart 注水还原、FTS5 按需检索的完整链路——下次 AI 忘记"我们在做什么"时,你只需要恢复会话,而不是重讲一遍需求。🚀
【免费下载链接】context-modeContext window optimization for AI coding agents. Sandboxes tool output (98% reduction), persists session memory, and enforces routing across 17 platforms via MCP + hooks.项目地址: https://gitcode.com/GitHub_Trending/cl/context-mode
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考