关于 rehydrate
rehydrate 是用于在上下文摘要或中断后恢复工作流状态的 Agent 技能。它从 MCP 事件存储读取权威状态,并与仓库实际情况核对。
主要功能
- 01单次调用恢复工作流上下文
- 02读取完整状态或指定字段
- 03依据事件数据确认工作流是否存在
- 04将状态与 Git 实际情况核对
- 05发现过期的工作流引用
适用场景
- 01在上下文摘要后继续工作
- 02中断后返回工作流
- 03核对工作流状态与 Git 分支
- 04区分未初始化的工作流和缺失的状态文件
MCP 相关
使用 exarchos MCP 工具读取和恢复工作流状态,并发现活跃工作流。工作流数据存储在 MCP 事件存储中。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ lvlup-sw/ exarchos --skill rehydrate安装后在 Claude Code 中输入/rehydrate确认已加载。
详细介绍
工作流重新载入技能
概述
在不启动新会话的情况下,恢复完整的工作流上下文,并使其能够在上下文自动摘要后继续保留。
此技能负责工作流状态的读取/恢复:读取当前状态,将其与 Git 实际情况核对,并确认工作流是否存在。有关写入操作(初始化、更新、转换、记录交接),请参阅 @skills/checkpoint/SKILL.md。
触发条件
在以下情况下启用此技能:
- 摘要后恢复上下文(
rehydrate <featureId>) - 上下文压缩后 Agent 的行为发生偏移(不再主动发出事件或使用工具)
- 休息一段时间后继续工作流
状态位置
工作流状态存储在 MCP 事件存储中,而非文件系统中。使用 exarchos:exarchos_workflow get 读取状态,并使用 exarchos_view pipeline 查找活动工作流。不要扫描 ~/.claude/workflow-state/*.state.json——该路径已弃用,文件可能过期或为空。
事实来源——此工作流是否存在?
工作流状态存在于两个位置,混淆两者会导致错误地得出“未跟踪”的结论:
- SQLite 事件存储(
events+ 投影后的workflow_state+streams)——用于判断工作流是否存在的权威记录。rehydrate/get会读取此处。 - (状态目录下的)
<featureId>.state.json文件——承载事件投影无法推导的计划状态信息(审查状态、声明的任务列表、维度调查结果)的辅助“规划器标记”。已跟踪的工作流可能没有此文件(例如 CLI 工具、测试,以及首次update前仍在进行的工作流),因此不能将其作为工作流存在与否的判断依据。
**规范的存在性检查:**使用 rehydrate 响应封装中的 _meta.workflowExists(true/false),或等效地检查 data.workflowState.featureId 是否非空。对从未执行过 init 的 featureId 进行冷探测时,会返回 success: true 和空的初始文档,并且 _meta.workflowExists: false;此操作无副作用(不会发出 workflow.rehydrated 事件)。绝不要根据磁盘上 .state.json 文件是否存在来推断工作流是否存在。
重新载入工作流
使用 exarchos:exarchos_workflow,并设置 action: "rehydrate" 和 featureId: "<id>"——它会通过一次调用返回一个响应封装,其中包含规范的重新载入文档(workflowState、taskProgress、artifacts、blockers、阶段操作手册和后续操作)。无需通过多步 get fields=[...] 来组合信息。
如果 featureId 未知或用户尚未指定,请改用 exarchos_view pipeline 列出活动工作流,并询问要重新载入哪一个,然后使用所选的 featureId 再次调用 rehydrate。pipeline 视图默认按仓库范围筛选——它只列出调用方所在的仓库,因此在其他仓库中启动的工作流不会显示。每个响应都会报告 unscopedTotal(范围筛选前的数量);当 unscopedTotal 大于 page.total 时,隐藏的条目位于其他仓库中(或是未记录身份的旧条目)——请使用 scope: "all"(或明确指定 repoRoot)重新查询,以显示这些条目。
读取状态(定向)
如需定向读取,而非完整重新载入,请使用 exarchos:exarchos_workflow,并设置 action: "get" 和 featureId:
- 完整状态:仅使用
featureId调用 - 特定字段:添加
query,按点分隔路径查询(例如query: "phase"、query: "tasks")。响应中的data包含一个键,即查询内容:{ "phase": "<phase>" } - 多个字段:添加
fields数组以投影指定字段(例如fields: ["phase", "featureId", "tasks"])
通过 fields 进行字段投影只会返回请求的顶层键,从而降低令牌开销。
获取摘要
摘要后恢复上下文时,优先使用 action: "rehydrate"(一次调用即可获得阶段操作手册和后续操作)。如需最精简的读取,可使用 action: "get" 和 featureId,获取适合用于重建编排器上下文的摘要。
输出格式
将返回的文档呈现为精简的行为上下文(与压缩后的上下文形态相同),让 Agent 一次性恢复认知:
## Workflow Rehydrated: <featureId>
**Phase:** <phase> | **Type:** <workflowType>
### House Rules (apply every action this turn forward)
**Skill:** <phasePlaybook.skillRef or "(no playbook for this phase)">
**Tools:** <phasePlaybook.tools rendered as bullets>
**Required model-emitted events:** <phasePlaybook.events rendered as bullets — e.g. `task.progressed`, `phase.advanced`>
**Auto-emitted events (runtime fires these):** <phasePlaybook.autoEmittedEvents rendered as bullets>
**Transition:** <phasePlaybook.transitionCriteria> | Guard: <phasePlaybook.guardPrerequisites>
**Validation scripts:** <phasePlaybook.validationScripts joined>
### Event Emission Hints
<_eventHints.missing rendered as bullets, or "(none — phase machinery satisfied)">
### Task Progress
<task table>
### Artifacts
- Design: <path or "not created">
- Plan: <path or "not created">
- PR: <url or "not created">
### Next Action
<suggested action, from the envelope's `next_actions`>
> **Discipline reminder:** every task transition this turn forward MUST land on the workflow event stream via `exarchos_event.append` or `delegate` subagent emission. Direct `Edit` / `Bash` / `git` actions on task branches without corresponding events will desync the workflow tracker (see RCA `docs/rca/2026-05-08-rehydrate-behavioral-gap.md`).
保持输出精简——仅包含必要的状态和行为指导;完整详情保留在文件中,不放入对话。
对照状态
要确认状态与 git 实际情况一致,请运行 rehydrate <featureId>——重新水合投影会折叠最后一个快照之后的新事件,并在返回的封套中指出偏差。若需深入手动核验,请运行协调脚本:
exarchos_orchestrate({
action: "reconcile_state",
stateFile: "<state-file>",
repoRoot: "<repo-root>"
})
当 passed: true 时: 状态一致。
当 passed: false 时: 发现差异——检查输出,并通过 exarchos:exarchos_workflow 使用 action: "update" 解决(参见 @skills/checkpoint/SKILL.md)。
最佳实践
- 恢复时对照核验 - 操作前始终确认状态与 git 状态一致
- 读取状态,不要凭记忆 - 摘要之后,从事件存储中读取,而不是依赖记忆
- 单次调用获取 - 一次
rehydrate调用即可返回完整的规范文档;避免分步读取 - 通过
_meta.workflowExists确认是否存在 - 切勿根据磁盘上的.state.json文件推断是否存在
故障排查
状态不同步
如果工作流状态与 git 实际情况不符:
- 运行
rehydrate <featureId>——重新水合投影会纳入最后一个快照之后的新事件 - 如果仍需手动检查:将重新水合文档中的
workflowState/artifacts与git log和分支状态进行比较 - 通过
exarchos:exarchos_workflow使用action: "update"更新状态,使其与 git 实际情况一致(参见@skills/checkpoint/SKILL.md)
恢复时发现过期状态
如果状态引用了已不存在的分支或工作树:
- 运行
rehydrate <featureId>——重新水合文档会指出过期引用 - 对照
git branch -a/git worktree list找出偏差 - 通过
exarchos_workflow update更新,使其与 git 实际情况一致
存在多个活动工作流
如果存在多个工作流状态文件:
- 系统会使用最近更新的活动(未完成)工作流
- 对过期工作流使用
exarchos:exarchos_workflow,设置action: "cancel"和dryRun: true,以预览清理操作 - 开始新工作流前,先取消过期工作流
工作流示例
-
上下文丢失后恢复:使用
exarchos:exarchos_workflow,设置action: "rehydrate"和featureId: "user-authentication",以获取上下文恢复输出。 -
检查状态:使用
exarchos:exarchos_workflow,设置action: "get"和featureId: "user-authentication"。 -
确认是否存在:从重新水合封套中读取
_meta.workflowExists——如果值为false,则该功能从未作为工作流启动,因此应如实报告,而不是根据文件系统检查将其标记为“未跟踪”。