关于 graph
通过 `omc graph run` 命令行,根据 JSON 描述文件运行确定性的多步骤编排图。适用于需要依赖跟踪、可审计日志及中断后恢复的可重复流水线。
主要功能
- 01根据 JSON 描述文件运行图
- 02支持依赖及扇出/汇合边
- 03从日志恢复运行
- 04记录运行快照
- 05支持人工审批节点
适用场景
- 01运行可重复的构建与测试流水线
- 02中断后恢复流水线
- 03审计图的执行记录
- 04暂停流水线以等待人工审批
MCP 相关
该技能通过 `omc graph run` 命令行运行编排图;输入未说明 MCP 服务或专用 MCP 工具。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ yeachan-heo/ oh-my-claudecode --skill graph安装后在 Claude Code 中输入/graph确认已加载。
详细介绍
Graph Skill
通过声明式 JSON 描述符运行确定性编排图。
运行时使用 src/graph/* 中的 sealed-descriptor 和 pure-scheduler 合约,并通过独立的 OS 进程(omc graph run)执行,因此崩溃恢复(运行中终止、重新运行、从日志恢复)可真正生效。
Usage
/oh-my-claudecode:graph <descriptor.json>
/oh-my-claudecode:graph "build then test then ask me before deploy" (author the descriptor first)
执行入口始终是 CLI 子命令:
omc graph run <descriptor.json> [--runs-root <dir>]
对于非交互式图,通过 Bash 工具运行。进度行会以 [run]、[node]、[ok]、[fail]、[join]、[done] 的形式实时输出。
When To Use
- 具有明确依赖关系(DAG)的可重复多步流水线
- 必须能够经受中断的工作:终止并重启后可从日志恢复
- 需要审计的运行:OCC 日志和投影快照位于
.omc/graph-runs/<run_id>/
不适用场景:探索性的一次性工作(使用对话或 /team);需要在运行过程中自适应重新规划的工作(图是确定性的)。
Workflow
-
提供了描述符 -> 转到第 3 步。
-
描述了流水线 -> 编写描述符 JSON(见下方架构),将其保存到项目旁边(建议使用
.omc/graphs/<name>.json),并在运行前向用户展示。每个逻辑流水线的run_id必须唯一;使用相同的run_id重新运行时会恢复,而不是重新开始。 -
审批节点:如果描述符包含任何
"kind": "human-approval"节点,请勿通过 Bash 工具运行(该处的 stdin 不支持交互;EOF 会安全地拒绝审批)。请告知用户改为交互式运行:! omc graph run <file>!前缀会在当前会话中运行,并接入实时 stdin,因此 y/n 可以正常使用。 -
运行并转达进度。退出码(规范性定义): 0 成功 | 1 终止失败 | 19 另一个写入方正在运行此任务(繁忙) 20 日志损坏或遭篡改(安全失败) | 21 恢复时描述符发生偏移 | 70 运行时崩溃(未映射的错误)
-
恢复:崩溃后重新运行相同的命令,会重放已提交的状态转换并继续执行。已完成的节点绝不会重新执行。
Descriptor Schema (minimal)
{ "descriptor_version": 1, "run_id": "unique-pipeline-id", "revision_id": "rev-1", "goal": "one line", "nodes": [ { "id": "n1", "kind": "command", "title": "...", "timeout_ms": 60000, "max_attempts": 2, "effect_policy": { "policy": "side_effect_free" }, "command": "npm test" }, { "id": "a1", "kind": "agent", "title": "...", "timeout_ms": 300000, "max_attempts": 1, "effect_policy": { "policy": "side_effect_free" }, "instructions": "..." }, { "id": "gate", "kind": "human-approval", "title": "...", "prompt": "Proceed?" } ], "edges": [ { "id": "e1", "kind": "fixed", "from": "n1", "to": "a1" } ], "entry_node_ids": ["n1"], "concurrency_limit": 2, "terminal_verification_node_id": "a1" }
边类型:fixed | conditional | fan_out/join 配对 | back_edge(通过 max_traversals 限定重试次数)。权威的 Zod 架构请参阅 src/graph/schema.ts;当前内置执行器实际会执行哪些内容,请阅读上方的 Capability Boundary 部分。
能力边界与语义(编写前请阅读)
- 边缘支持:内置命令/Agent 执行器支持
fixed边缘以及fan_out/join配对。运行时和调度器契约完全支持conditional和back_edge路由,但需要自定义 NodeExecutor 在其结果中发出route——内置执行器不会生成路由,因此依赖这些路由的图会快速失败并返回route_required,而不是进行猜测。 - 崩溃恢复保证为至少一次,适用于命令节点:如果在外部副作用发生后、日志追加前发生崩溃,恢复时会重新执行该节点。对于
idempotent命令,解析后的键会在命令启动前通过GRAPH_IDEMPOTENCY_KEY提供给命令,并记录下来供下游去重。内置执行器会拒绝reconcile;协调需要自定义执行器具备实际的外部协调权限。v1 不支持对外部副作用提供恰好一次保证。 - 命令信任边界:命令节点是具有当前工作目录进程权限的任意 shell 命令行。只运行你编写或信任的运行描述符。命令子进程接收经过允许列表筛选的环境变量(PATH、HOME/USERPROFILE、TEMP/TMP、区域设置/时区、USER 身份、
GRAPH_*,以及可选的幂等键),而不是主机的全部机密。命令不会受到文件系统/进程沙箱的限制。 - Agent 权限边界:内置 Agent 节点明确为只读。它们在当前工作目录中运行,不使用其他目录,仅可使用
Read、Glob和Grep,设置permissionMode: dontAsk,禁用会话持久化,并使用特定于提供方的环境允许列表。Agent 超时会中止并中断 SDK 查询。任何需要修改或产生外部影响的 Agent 都应使用自定义执行器。请将.omc/graph-runs/<run_id>/descriptor.json视为可执行内容。