mcpField
R
rehydrate

rehydrate

github.com/lvlup-swAgent 工作流22101 次安装1 天前更新
代码仓库

关于 rehydrate

rehydrate 是用于在上下文摘要或中断后恢复工作流状态的 Agent 技能。它从 MCP 事件存储读取权威状态,并与仓库实际情况核对。

主要功能

  1. 01单次调用恢复工作流上下文
  2. 02读取完整状态或指定字段
  3. 03依据事件数据确认工作流是否存在
  4. 04将状态与 Git 实际情况核对
  5. 05发现过期的工作流引用

适用场景

  1. 01在上下文摘要后继续工作
  2. 02中断后返回工作流
  3. 03核对工作流状态与 Git 分支
  4. 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——该路径已弃用,文件可能过期或为空。

事实来源——此工作流是否存在?

工作流状态存在于两个位置,混淆两者会导致错误地得出“未跟踪”的结论:

  1. SQLite 事件存储(events + 投影后的 workflow_state + streams)——用于判断工作流是否存在的权威记录。rehydrate/get 会读取此处。
  2. (状态目录下的)<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)。

最佳实践

  1. 恢复时对照核验 - 操作前始终确认状态与 git 状态一致
  2. 读取状态,不要凭记忆 - 摘要之后,从事件存储中读取,而不是依赖记忆
  3. 单次调用获取 - 一次 rehydrate 调用即可返回完整的规范文档;避免分步读取
  4. 通过 _meta.workflowExists 确认是否存在 - 切勿根据磁盘上的 .state.json 文件推断是否存在

故障排查

状态不同步

如果工作流状态与 git 实际情况不符:

  1. 运行 rehydrate <featureId>——重新水合投影会纳入最后一个快照之后的新事件
  2. 如果仍需手动检查:将重新水合文档中的 workflowState / artifacts 与 git log 和分支状态进行比较
  3. 通过 exarchos:exarchos_workflow 使用 action: "update" 更新状态,使其与 git 实际情况一致(参见 @skills/checkpoint/SKILL.md)
恢复时发现过期状态

如果状态引用了已不存在的分支或工作树:

  1. 运行 rehydrate <featureId>——重新水合文档会指出过期引用
  2. 对照 git branch -a / git worktree list 找出偏差
  3. 通过 exarchos_workflow update 更新,使其与 git 实际情况一致
存在多个活动工作流

如果存在多个工作流状态文件:

  1. 系统会使用最近更新的活动(未完成)工作流
  2. 对过期工作流使用 exarchos:exarchos_workflow,设置 action: "cancel" 和 dryRun: true,以预览清理操作
  3. 开始新工作流前,先取消过期工作流

工作流示例

  1. 上下文丢失后恢复:使用 exarchos:exarchos_workflow,设置 action: "rehydrate" 和 featureId: "user-authentication",以获取上下文恢复输出。

  2. 检查状态:使用 exarchos:exarchos_workflow,设置 action: "get" 和 featureId: "user-authentication"。

  3. 确认是否存在:从重新水合封套中读取 _meta.workflowExists——如果值为 false,则该功能从未作为工作流启动,因此应如实报告,而不是根据文件系统检查将其标记为“未跟踪”。

评论

支持 Markdown