planning-runtime-graph.md 14.8 KB

Planning Runtime Graph 规范

1. 目的和边界

本规范定义 Planning Agent 如何把一次需求规划运行实例化为带依赖、并发、Barrier、质量门和失败路径的执行图。

需要区分两张图:

  1. Planning Runtime Graph:Planning Agent 调查、综合、拆分、审核和写入需求的执行图;
  2. Development Unit DAG:规划通过后,下游 Code Agent 实现 Development Units 的依赖图。

前者产出后者。不得把“Planning 内部并行调查”当成“Development Units 可并行开发”的证据。

当前 Hermes 没有由本 skill 自动创建的通用 DAG 引擎。本规范是主 Planning Agent 每轮必须执行的编排契约;短时节点可映射到 delegate_task,持久跨会话工作可映射到 Hermes Kanban。

2. 控制权

主 Planning Agent 是唯一 Graph Owner,负责:

  • 选择和认领唯一规划对象;
  • 生成和修订 Graph Manifest;
  • 事实分级、冲突仲裁和业务未知判断;
  • 关键方案、Unit 边界和依赖的最终决定;
  • 所有 Base 写操作和状态流转;
  • Barrier 汇合、质量门和最终成功声明。

Sub-agent 是 Node Executor,只负责边界明确的调查、分析、草拟或审核节点。它不得:

  • 自行扩大范围或改变原始需求;
  • 把建议写成事实或业务规则;
  • 认领、修改 Base、创建子任务或流转状态;
  • 直接决定 Planning 通过;
  • 假设自己拥有父会话历史、memory 或用户交互能力。

3. Graph Manifest

认领后、首次并行 fan-out 前,主 Agent 应在当前运行上下文中建立紧凑 Manifest:

graph_id: planning:<object-type>:<record-id>:<attempt>
object:
  type: requirement | bug
  id: <record-id>
  source_revision: <known revision or fetched-at marker>
mode: inline | durable
risk: low | medium | high | critical
features:
  external_integration: true|false
  data_migration: true|false
  security_privacy: true|false
  nonfunctional_risk: true|false
  cross_repo: true|false
  technical_unknown: true|false
nodes: [...]
edges: [...]
barriers: [...]
revision_cycle: 0

Manifest 是运行控制信息,不等同于用户需求正文,不机械写入 Base。若需求事实或范围发生实质变化,必须使依赖旧基线的节点结果失效并重新编译受影响子图。

4. Node Contract

每个动态节点至少包含:

id: F_REPO
kind: investigation | synthesis | decision | planning | audit | write | verify
purpose: <一个主要结果>
condition: <何时加入 Graph>
depends_on: [F_BASE]
executor: main | leaf-subagent | kanban-profile
skills: [planning-requirement-expansion, ...]
permissions: read-only | local-artifact-write | base-write
read_set: [records, docs, repo]
write_set: []
inputs:
  facts_baseline: <version>
  goal: <明确目标>
  context: <最小充分上下文>
output_schema: <结构化结果>
validation: <客观完成检查>
critical: true|false
retry_policy: <策略>
failure_route: block | revise | degrade | recompile

4.1 通用 Sub-agent 输出 Schema

Sub-agent 返回:

status: completed | blocked | failed
facts:
  - claim: <原子事实>
    evidence: <记录/文档/文件/命令引用>
    confidence: high | medium | low
decisions: []
assumptions:
  - statement: <假设>
    verification: <如何验证>
unknowns:
  - question: <未知>
    type: business | technical
    blocking: true|false
conflicts: []
risks: []
artifacts: []
coverage: <本节点覆盖了哪些问题>
limitations: []

如果任务需要其他格式,应在节点 context 中补充,但不能省略 status、evidence、unknowns、limitations。

5. 固定串行骨架

所有新需求至少具有以下主干:

S0 Select
 → S1 Claim
 → S2 Compile Initial Graph
 → [F* Investigation Fan-out]
 → B1 Evidence Merge
 → G1 Requirement Readiness
 → S3 Outcome / Scope
 → [A* Analysis Fan-out]
 → B2 Solution Synthesis
 → S4 Unit Decomposition
 → S5 Development Unit DAG
 → [D* Unit Contract Drafting]
 → [R* Independent Review Fan-out]
 → B3 Review Merge / Revision Loop
 → W1 Serialized Base Writes
 → [V* Read-back Verification]
 → G2 Release Gate
 → S6 Complete or Reject

以下主干节点必须串行或由 Barrier 隔开:

  • 唯一对象选择与认领;
  • 统一事实基线;
  • Readiness 决策;
  • 目标和范围冻结;
  • 总体方案综合;
  • Unit 最终边界和共享契约;
  • 整体依赖与覆盖裁决;
  • Base 写入协调;
  • 最终状态流转和成功声明。

6. 动态编译规则

6.1 始终加入

  • Base 当前记录和关联记录调查;
  • 事实/决策/假设/未知分类;
  • Readiness Gate;
  • 目标、范围、行为流;
  • 测试/验收设计;
  • Unit 分解、Dependency DAG、Coverage Matrix;
  • PL 自审、写入和回读。

6.2 条件子图

触发条件 加入的节点或子图
可访问代码仓库 仓库结构、同类实现、接口、数据模型、测试事实调查
外部系统/API 提供者/消费者、版本、错误、超时、幂等、限流、Mock 和契约测试分析
数据迁移/不可逆变化 历史数据、数据质量、回填/双写、校验、灰度、回滚和演练子图
权限/认证/支付/隐私 信任边界、授权、敏感数据、审计、重放/滥用和失败关闭审核
性能/容量/SLA 指标依据、负载模型、基准、资源上限和观测子图;无事实依据不虚构数值
跨仓库/多团队 仓库边界、版本协同、契约生产者和发布顺序子图;需要持久协作时考虑 Kanban
技术未知会改变方案 time-boxed Spike Unit 设计;若阻断当前方案则停止实现型 Unit 放行
业务未知 直接进入 Reject/待修改路径,不能创建 Spike 代替业务决策
Bug 复现、预期/实际、日志/代码/测试证据、根因/假设、FAIL_TO_PASS 和 PASS_TO_PASS 子图
简单低风险局部改动 跳过无关外部研究和专项风险节点,但不得跳过事实、验收、覆盖和自审门

Graph 不是在 Intake 时一次性永久冻结。B1 合并事实后可增删分析节点;B2 方案综合后可增删 Unit 草拟和审核节点。

7. 并发规则

只有同时满足以下条件的节点才可并行:

  1. 彼此没有未满足的数据依赖;
  2. 节点输入基于同一事实基线版本;
  3. 写集合为空或完全不重叠;
  4. 输出边界和 Schema 明确;
  5. 存在后续 Barrier 负责合并和冲突处理;
  6. 并行收益大于上下文构造和合并成本。

典型并行节点:

  • Base/文档、仓库、接口、测试、外部资料的只读事实调查;
  • 范围、系统/接口、测试证据和专项风险分析;
  • 边界已冻结且互不重叠的 Unit 契约草拟;
  • Coverage、Dependency/Interface、Testability、Security/Migration 独立审核;
  • 写入完成后的多记录回读。

不得并行:

  • 两个 Agent 写同一 Base 记录或同一交付文件;
  • 多个 Agent 独立决定同一业务规则或公共契约;
  • 事实基线未完成时提前设计依赖它的方案;
  • 共享契约未稳定时独立草拟相互依赖的消费者;
  • PL 审核尚未通过时提前流转状态。

7.1 Hermes 并发映射

  • 单次 delegate_task(tasks=[...]) 不超过当前 delegation.max_concurrent_children;当前默认/本会话上限为 3;
  • Graph 宽度更大时,按拓扑和优先级分批 fan-out,不自动修改 Hermes 配置;
  • 默认使用 leaf sub-agent,主 Agent 负责所有汇合;
  • 不为了“多 Agent”使用嵌套 delegation;只有明确需要二级自治且配置允许时才使用 orchestrator;
  • 并行 Agent 不得共享可变目录或同一目标文件。即使终端会话独立,也不能假设底层执行环境完全隔离。

8. Skill 与 Agent 选择

顺序是“先选节点,再选 Skill/Executor”,不是先加载很多 skill 再寻找用途。

节点 推荐 Skill Executor
全部 Planning 节点 planning-requirement-expansion main 必须加载
飞书/Base/云文档 feishu-lark main 或只读 sub-agent;写入仅 main
仓库事实、Issue/PR github 或项目专用 skill 只读 sub-agent
外部研究 research / gemini-deepresearch leaf sub-agent
测试和质量审核 software-quality leaf sub-agent 或 main
多 Agent 编排 autonomous-ai-agents / hermes-agent main

Sub-agent 没有父会话历史。节点 context 必须显式给出目标、事实基线、路径、范围、非目标、输出 Schema、证据要求和使用的 skill 名称。不得假设父 Agent 已加载的 skill 内容会自动进入子 Agent 上下文;需要时要求子 Agent 自行加载,并把关键不可缺失规则直接写入 context。

9. Barrier 与证据合并

并行结果不能直接拼接。每个 Barrier 执行:

  1. 检查每个关键节点是否 completed;
  2. 验证输出 Schema 和证据引用;
  3. 将 claim 分类为事实、建议、假设或未知;
  4. 去重同义结论;
  5. 检测事实、字段、接口、时序和范围冲突;
  6. 更新事实基线版本;
  7. 判断是否重编译后续子图。

9.1 来源优先级

发生冲突时不按 Agent 数量投票。一般优先级为:

  1. Base 当前记录、用户明确原始要求和直接系统事实;
  2. 仓库当前实现、测试、日志和一手接口资料;
  3. 官方标准或供应商文档;
  4. 可信行业资料;
  5. Sub-agent 推断或建议。

同级一手证据冲突且无法自行验证时,标为阻塞性未知,不选择“看起来合理”的一方。

9.2 B3 强制汇合检查

  • 原始要求 → 主验收 → Unit → 测试证据覆盖;
  • Unit 无重复、无空洞、无范围外工作;
  • Dependency DAG 无环;
  • 接口生产者/消费者字段、错误、版本和时序一致;
  • 权限、安全、迁移、回滚和观测与风险相称;
  • 每个 Unit 可由单个 Code Agent 独立理解和验证;
  • 不存在阻塞性未知。

10. 故障、重试和取消

10.1 读取或网络瞬时失败

  • 可重试的只读节点由主 Agent安全重试,默认最多 2 次并改变策略或来源;
  • 连续相同调用无新信息时停止盲目重试;
  • 关键事实仍不可获取则阻断;非关键支线失败必须在 limitations 中显式记录。

10.2 节点内容不合格

Schema 缺失、无证据或扩大范围不是瞬时失败。应修订节点输入或由主 Agent补查,不对相同 prompt 机械重跑。

10.3 写操作失败或结果未知

  • 先重新读取目标系统,判断副作用是否已经发生;
  • 使用记录 ID、父记录、标题/Unit key 和当前状态进行去重;
  • 未完成 reconciliation 前不得重复创建子任务或重复状态流转;
  • 状态字段最后更新,避免把半成品标为待开发;
  • 不能证明成功时报告失败,不伪造 ID 或结果。

10.4 部分失败

  • critical 节点失败:对应 Barrier 不通过;
  • optional 节点失败:只有在主 Agent确认不影响正确性且记录 evidence gap 后才能降级继续;
  • 不允许用成功节点的数量掩盖关键节点失败。

10.5 取消传播

  • 收到停止、任务切换或父会话取消后,不再启动新节点或写操作;
  • Hermes /stop、关闭或重置会取消活动 delegation,不能把未返回结果视为完成;
  • 如果源记录在运行期间被其他人修改,停止依赖旧版本的后续节点,回读并重新编译受影响子图。

10.6 修订循环

B3 不通过时回到最接近根因的节点,不总是从头重跑。自动修订循环必须有界;同一缺陷经过两次有实质差异的修订仍无法通过时,失败关闭并记录所需决策或证据。

11. 幂等和写入隔离

  • 一轮只持有一个规划对象;
  • Claim 是第一项写操作;
  • Base 写入只有一个 main writer;
  • 子任务创建前按父记录、现有子任务、标题/稳定 Unit 标识和责任边界重新查询去重;
  • 完整描述和关系写入成功后才更新最终状态;
  • 最终回读是成功判定的一部分,不是可选检查。

12. Inline、Kanban 和 cron 的选择

Inline + delegate_task

用于:一个 Planning run 内的短时调查、分析和审核;结果必须返回主 Agent 后才能继续。

限制:非持久;子 Agent 无用户交互和 memory;父进程消失时执行不能恢复;外部副作用必须由主 Agent验证。

Hermes Kanban

用于:

  • 工作必须跨会话或进程重启;
  • 需要不同持久 profile 多轮接力;
  • 需要人工 comment/block/unblock;
  • 需要 durable dependency、retry 和审计历史;
  • 下游 Development Unit 需要在隔离 worktree 中由多个 Code Agents 按 DAG 执行。

Kanban task 应使用 parent links 表示真实依赖、idempotency key 防止自动化重复创建,并由 dispatcher 在父任务完成后提升 ready 状态。

Cron

cron 负责定时触发一个新的、自包含的 Planning run。cron session 不能依赖当前聊天历史,也不能请求现场澄清;遇到业务未知必须写入待决策问题并失败关闭。不要在 cron run 中递归创建 cron。

13. Development Unit DAG 输出

规划通过前必须生成下游 DAG:

units:
  - id: U_CONTRACT
    depends_on: []
    evidence: contract-test
  - id: U_PRODUCER
    depends_on: [U_CONTRACT]
  - id: U_CONSUMER
    depends_on: [U_CONTRACT]
  - id: U_INTEGRATION
    depends_on: [U_PRODUCER, U_CONSUMER]

下游调度按拓扑层进行,同层 Unit 只有在代码工作区、接口和写集合隔离时才能并行。Planning Agent 只产出和审核 DAG,不在本工作区实现业务代码。

14. 最终 Graph 验收

一次 Planning Runtime Graph 只有满足以下条件才 completed:

  • 所有 critical 节点完成;
  • 所有 Barrier 已汇合并处理冲突;
  • Readiness 和 PL Review Gate 通过;
  • 原始要求、Unit 和测试证据可追溯;
  • Development Unit DAG 无环且生产者/消费者一致;
  • Base 写入由单一协调者完成;
  • 最终回读证明字段、描述、关系和状态正确。

否则终态是 blocked/rejected,不使用“部分完成”冒充可流转。

15. Hermes 官方依据

  • Subagent Delegation:website/docs/user-guide/features/delegation.md
  • Delegation Patterns:website/docs/guides/delegation-patterns.md
  • Kanban Multi-Agent Board:website/docs/user-guide/features/kanban.md
  • Configuration / Delegation:website/docs/user-guide/configuration.md
  • Prompt Assembly / Context Files:website/docs/developer-guide/prompt-assembly.md
  • 在线文档:https://hermes-agent.nousresearch.com/docs/

上述资料直接支持 delegation 的上下文隔离、并发上限、取消和非持久性,以及 Kanban 的持久任务、依赖、重试、幂等键和审计能力。动态 Graph Manifest、节点 Schema、Barrier 规则、来源仲裁和 Base 单写入策略是本 Planning 流水线的综合设计。