super-plumber
by LUKAWI
README.md
# Super Plumber
> 把复杂的软件交付变成一张可以设计、执行、检查和回溯的工作流图。
[](https://www.npmjs.com/package/@lukawi/super-plumber)
[](LICENSE)
[](https://github.com/LUKAWI/super-plumber)
Super Plumber 是一个面向开发者、自动化工具和 coding agent 的工作流编排工具。它把一份容易被遗漏的任务清单,转换成带有依赖关系、执行状态、验收标准和交接记录的任务图。
你可以只用 CLI 管理一张图,也可以接入 MCP,让 agent 读取图、认领节点、逐步上报进度;需要长期观察时,再打开只读的 Web UI。所有核心数据都是 YAML 文件,能够直接用 Git 查看、评审、分支和恢复。
English: [README.en.md](README.en.md) · npm: [@lukawi/super-plumber](https://www.npmjs.com/package/@lukawi/super-plumber) · 文档手册:[integrations/src/manual.md](integrations/src/manual.md)
## 它能解决什么问题?
很多开发任务失败,并不是因为没人写代码,而是因为工作过程缺少这些信息:
- 哪些事情必须先做,哪些事情可以并行?
- 什么结果才算完成,而不是“代码已经改过了”?
- 一个 agent 换手后,另一个 agent 能否继续?
- 设计决定、接口契约和失败原因在哪里可查?
- 任务卡住时,是依赖没完成、执行者失联,还是方案本身需要改变?
Super Plumber 把这些信息放到同一个可校验的结构里:
~~~text
需求与验收目标
│
▼
entry → 澄清范围 → 实现 → 测试与验证 → exit
│ │
└─ depends_on / validates / fan_out / fan_in
│
交接单 + 审计事件 + Git diff
~~~
图不是项目管理界面的另一种画法。图中的依赖会参与调度和门禁,节点中的完成标准会参与验收,状态变更会留下审计记录。
## 什么时候适合使用?
| 场景 | 你可以怎样使用 Super Plumber |
| --- | --- |
| 新功能开发 | 把需求拆成澄清、实现、测试、发布等节点,明确先后顺序和每一步的完成标准。 |
| 重构或迁移 | 用依赖边表达迁移顺序,用验证节点确认旧路径、新路径和回滚方案。 |
| 多人或多 agent 协作 | 每个人认领独立节点,交付摘要和真实产物路径,后来者按图继续。 |
| 研究驱动的方案 | 把研究结果、技术决策和实现分开;关键未知会影响计划时,用 program 工作流逐步解雾。 |
| 发布和验收 | 用状态机、检查点、verdict 和导出文档记录从“可运行”到“可交付”的证据链。 |
| 长时间观察 | 用 Web UI 观察 running、blocked、failed 和 ready 节点,必要时打开节点详情或快照差异。 |
如果只是查一个问题、改一行配置或运行一次命令,直接处理通常更快;不需要为了一个小动作建立完整的任务图。
## 产品特色
| 特色 | 你得到什么 |
| --- | --- |
| 图驱动的执行顺序 | 依赖关系直接参与调度,不需要靠聊天记录记住先后。 |
| 有证据的完成状态 | 每个节点都有完成标准、检查点和交接单,完成结论可以复核。 |
| 适合换手和并行 | 每个执行者领取独立节点,交付真实产物路径,下一位可以从图上继续。 |
| 三种访问方式 | CLI 适合人类操作,MCP 适合 agent,Web UI 适合只读观察;三者读取同一份图。 |
| 文件优先 | YAML 可读、可 diff、可放进 Git,不依赖数据库或云端账号。 |
| 领域信息和工作信息放在一起 | context、术语表和 ADR 与任务关联,决定不会散落在项目之外。 |
## 核心概念
### 一张图
一张图有一个入口 entry 和一个出口 exit:
- entry 描述要解决的需求;
- exit 描述最终交付物和验收标准;
- 节点表示可执行的工作或领域知识;
- 边表示依赖、验证、并行、回退或领域关系。
图的内容存放在 .graph/ 下。一个工作区可以有多张命名图,例如 feature-auth、data-migration 和 release-1-0。
### 一个节点
一个 task 节点通常包含:
| 字段 | 作用 |
| --- | --- |
| id / label | 稳定标识和人类可读名称。 |
| plan | 做什么、输入来自哪里、结果交给谁。 |
| definition_of_done | 可观察、可复核的完成标准。 |
| checkpoints | 执行期间逐步上报的检查点。 |
| execution_report | 交接摘要、产物路径、阻塞信息和验收结论。 |
| status | pending、ready、running、passed 等状态机状态。 |
节点像一个小型交付包:下一位执行者不需要从聊天记录里猜上下文。
### 两类边
参与拓扑排序和 ready 门禁的边:
| 边 | 含义 |
| --- | --- |
| depends_on | B 必须等待 A 完成。 |
| validates | 一个节点验证另一个节点的结果。 |
| fan_out | 一个节点完成后,多个下游节点可以并行。 |
| fan_in | 多个上游完成后,汇聚节点才可以开始。 |
用于运行时表达或领域建模的边:
| 边 | 含义 |
| --- | --- |
| shares_context | 传递共享上下文,但不构成 ready 门禁。 |
| fallback | 源节点耗尽重试预算时,列出替代路线。 |
| iterates | 标记需要反复优化的关系。 |
| decides | ADR 对任务或领域顶点的管辖关系。 |
| relates | bounded context 之间的领域关系。 |
### 状态机
任务节点常见路径是:
~~~text
pending → ready → running → passed
└→ failed → pending (重试)
running → pending (回收失联认领)
任意状态 → cancelled
~~~
有三条重要规则:
1. ready 需要满足所有门控前驱;
2. failed 重试受 max_attempts 约束;
3. running 不能直接“口头完成”:必须有 execution report,检查点必须聚合,且不能有 failed verdict。
context 是无状态的领域顶点,ADR 使用 proposed → accepted → superseded 三态机。ADR 的接受和废弃属于治理裁决,不会被普通执行步骤静默完成。
## 五分钟快速开始
### 1. 安装
前置要求:Node.js 20 或更高版本,以及 npm。
~~~bash
npm install -g @lukawi/super-plumber
graph --version
~~~
如果你要运行当前仓库中的源码版本:
~~~bash
git clone https://github.com/LUKAWI/super-plumber
cd super-plumber
npm ci
npm run build
npm --prefix web-ui ci
npm --prefix web-ui run build
npm link
~~~
### 2. 创建一张图
下面用“给报告增加 CSV 导出”作为例子:
~~~bash
mkdir csv-export-demo
cd csv-export-demo
graph init csv-export -l "报告 CSV 导出"
graph update-graph \
--entry-desc "为报告增加可下载的 CSV 导出" \
--exit-desc "用户可以下载正确编码的 CSV,测试和验收证据齐全" \
--add-criteria "导出的列和筛选结果与报告一致" \
--add-criteria "浏览器下载和 API 调用均有测试"
~~~
### 3. 把工作拆成节点
~~~bash
graph create-node -i clarify -l "澄清导出契约" -t task --level 1 \
--plan-desc "确定列顺序、编码、日期格式和空值规则" \
--dod "导出字段和示例文件已确定"
graph create-node -i implement -l "实现 CSV 导出" -t task --level 1 \
--plan-desc "实现服务端导出和下载响应" \
--dod "API 能返回可下载的 CSV" \
--dod "错误输入有明确响应"
graph create-node -i verify -l "验证导出结果" -t task --level 1 \
--plan-desc "覆盖字段、编码、筛选和下载行为" \
--dod "自动化测试通过" \
--dod "真实导出文件可复核"
graph add-edge -i e1 -s clarify -t implement --type depends_on
graph add-edge -i e2 -s implement -t verify --type depends_on
~~~
### 4. 检查图并查看下一步
~~~bash
graph validate
graph status
graph next
~~~
validate 会检查 schema、节点和边的引用、拓扑关系以及循环。next 会把可认领、等待依赖、执行中和疑似卡住的节点分桶显示;脚本或 agent 可以使用 JSON 输出:
~~~bash
graph next --json
~~~
刚创建的节点通常会出现在 ready_eligible。它表示前置条件已经满足,可以进入待执行状态,但还没有被执行者认领:
~~~bash
graph update-status -i clarify -s ready
~~~
之后由执行者通过 MCP 或执行脚本把节点原子认领为 running。
### 5. 打开可视化面板
~~~bash
graph serve
~~~
默认打开 http://localhost:8934。CI、远程终端或无头环境使用:
~~~bash
graph serve --no-open
~~~
## 一次完整交付怎么进行?
设计阶段完成图和验收标准后,执行阶段按下面的顺序推进:
### 认领
先从 next 找到 ready 节点,再原子认领。并发情况下只有一个执行者会成功:
~~~text
graph_update_node_status({
id: "clarify",
status: "running",
claim_by: "backend-agent"
})
~~~
也可以在有执行脚本的环境中使用:
~~~bash
node .pi/skills/plumber-execute/scripts/sp.mjs claim clarify backend-agent
~~~
### 上报检查点
一个节点有多个步骤时,每完成一步就上报一次:
~~~text
graph_update_checkpoint({
node_id: "implement",
checkpoint_id: "cp1",
status: "passed"
})
~~~
### 提交交接单
交接单应指向真实产物,而不是只写“已完成”:
~~~text
graph_update_execution_report({
node_id: "implement",
summary: "CSV 导出接口已完成并接入报告筛选",
artifacts: [
"src/export/csv.ts",
"tests/export/csv.test.ts",
"tmp/examples/report.csv"
],
blockers: [],
notes: "UTF-8 with BOM,日期统一为 ISO 格式"
})
~~~
没有 MCP 客户端时,可用脚本提交:
~~~bash
node .pi/skills/plumber-execute/scripts/sp.mjs report \
implement \
"CSV 导出接口已完成" \
"src/export/csv.ts,tests/export/csv.test.ts" \
"" \
"UTF-8 with BOM;日期为 ISO 格式"
~~~
### 验收与完成
交付者提交报告后,由裁决者或人类根据完成标准检查证据,记录 verdict,再将节点置为 passed。图会拒绝没有报告、检查点未完成或已有失败裁决的 passed 状态。
例如,裁决通过后:
~~~bash
graph verdict -i implement --verdict passed --note "CSV 文件和自动化测试已核对"
graph update-status -i implement -s passed
~~~
## 选择工作流档位
先问两个问题:
1. 是否存在会改变交付范围、主要方案或关键依赖的未知?
2. 如果没有,一个会话是否可以完成并验收?
| 档位 | 适合情况 | 典型做法 |
| --- | --- | --- |
| quick | 目标清晰,一次会话可以完成 | 小图或单节点;可以省略复杂的设计审核。 |
| standard | 目标清晰,但需要多个节点、会话或执行者 | 完整设计、审核、执行和验收流程。 |
| program | 关键未知会让当前计划失效 | 先记录未知和毕业条件,再用研究节点取得证据,逐步形成可信计划。 |
可以在初始化时写入档位:
~~~bash
graph init csv-export -l "报告 CSV 导出" --class standard
~~~
使用插件时,/plumber 只负责判断是否需要 Super Plumber、选择档位、定位图和给出下一入口;它不会自动建图、认领节点或启动执行。需要直接工作时,使用 /plumber-design、/plumber-execute 或 /plumber-join。
## 多图工作区
一个项目可以同时维护多张图:
~~~bash
graph init feature-auth -l "认证功能"
graph init data-migration -l "数据迁移"
graph list
graph switch feature-auth
graph status
~~~
需要一次命令访问指定图时,使用 --graph:
~~~bash
graph status --graph data-migration
graph next --graph feature-auth --json
~~~
目标图解析顺序是显式 --graph、SUPER_PLUMBER_GRAPH、工作区 active、default。切图和读图不会悄悄把命令指向另一张图;非法图名会直接报错并列出可用图。
## Web UI:只读的拓扑观察面板
graph serve 提供一个本地 Web UI。它读取同一份 .graph 数据,不承担写入状态的职责,因此适合在开发过程中长时间打开:
- 按状态、层级和关键词过滤节点;
- 查看工作流图或领域图;
- 点开节点、边、context 和 ADR 的详细信息;
- 查看 running 节点和依赖关系;
- 比较快照,识别新增、删除和修改;
- 断线后自动重连,支持键盘导航和 reduced-motion。
画布上的颜色表示状态,界面上的写操作仍通过 CLI 或 MCP 完成。你可以让团队成员只打开面板查看进度,而不授予他们修改图状态的权限。
## MCP:让客户端直接操作工作流
启动内置 MCP Server:
~~~bash
graph-mcp
~~~
通用 MCP 配置示例:
~~~json
{
"mcpServers": {
"super-plumber": {
"command": "npx",
"args": ["-y", "@lukawi/super-plumber", "graph-mcp"]
}
}
}
~~~
如果使用当前源码而不是已发布 npm 包:
~~~json
{
"mcpServers": {
"super-plumber": {
"command": "node",
"args": ["/absolute/path/to/super-plumber/dist/mcp/server.js"]
}
}
}
~~~
MCP 工具覆盖四类操作:
| 类别 | 典型操作 |
| --- | --- |
| 读取与调度 | 读取节点、遍历依赖、搜索图、查看 next 和多图前沿。 |
| 设计 | 建图、建节点、建边、设置 entry/exit、创建 ADR。 |
| 执行 | 原子 claim、checkpoint、execution report、回收失联认领。 |
| 验收与版本 | verdict、validate、事件日志、snapshot、diff、rollback。 |
读取接口支持分页和紧凑模式,适合大图;所有参数经过 schema 校验,错误会返回可解析的错误信息。
## Agent 工具接入
仓库提供几种工作方式,核心图数据保持一致:
| 接入方式 | 用法 |
| --- | --- |
| CLI | 人类直接使用 graph 命令设计和检查图。 |
| MCP | Claude、Codex、OpenCode 等支持 MCP 的客户端调用 graph_* 工具。 |
| pi | 把仓库根目录的 .pi/ 复制到目标项目,使用 skills 和 sp.mjs。 |
| Claude Code / ZCode | 安装 integrations/plugin/ 中的插件,使用 plumber-design、plumber-execute 等入口。 |
| Codex | 通过官方插件市场安装;插件包内包含 graph-mcp 和 6 个 skills。 |
插件安装:
~~~text
/plugin marketplace add lukawi/super-plumber
~~~
Codex 插件市场:
~~~bash
codex plugin marketplace add lukawi/super-plumber
codex plugin add super-plumber --marketplace lukawi-super-plumber
~~~
主要入口的分工:
- plumber-design:把需求拆成图,填写依赖和验收标准,并在执行前请求审核;
- plumber-execute:按依赖顺序认领节点、上报检查点和交接单;
- plumber-join:在缺少上下文时进入已有图,确定下一步后交给执行阶段;
- plumber:只做只读路由提示;
- plumber-tdd:节点明确要求测试先行时,约定 seam 并执行红绿循环;
- plumber-review:由第二双眼复核节点产物。
## 领域建模:context 和 ADR
除了任务节点,图还可以记录两个领域对象:
- bounded context:记录边界和术语表,导出后成为领域文档;
- ADR:记录决策、背景、备选方案、理由和后果。
创建 ADR:
~~~bash
graph adr create \
--title "导出服务使用 UTF-8 with BOM" \
--decision "统一生成带 BOM 的 UTF-8 CSV"
~~~
导出领域文档:
~~~bash
graph export --docs
~~~
多图工作区会按图名生成 docs/<图名>/adr、contexts、CONTEXT-MAP.md 和 DECISIONS.md。图是事实来源,Markdown 是可阅读、可提交的视图。
## Git 和文件存储
图数据是普通文件:
~~~text
.graph/
├── active # 工作区默认图
├── workspace-events.jsonl
└── csv-export/
├── graph.yaml
├── nodes/*.yaml
├── edges/*.yaml
├── events.jsonl
├── snapshots/
└── index/
~~~
因此你可以:
- 用 git diff 评审一次图变更;
- 用分支隔离不同方案;
- 用 snapshot、diff 和 rollback 对比或恢复设计;
- 在 code review 中同时评审代码和交付计划。
index/ 是可重建的派生数据;节点和边 YAML、graph.yaml 与事件日志才是需要重点管理的内容。本仓库的 .gitignore 忽略运行时 .graph,实际项目是否提交它由团队的审计和恢复要求决定。
## CLI 速查
所有命令都有 --help。下面按用途列出完整命令面:
| 类别 | 命令 |
| --- | --- |
| 工作区和图 | init、switch、list、rename-graph、delete-graph、serve |
| 设计 | create-node、get-node、update-node、delete-node、add-edge、delete-edge、update-graph、approve、graduate-fog、adr |
| 执行 | next、survey、update-status、reclaim、verdict |
| 检查和版本 | status、validate、rebuild、export、snapshot、snapshots、diff、rollback、events |
常用命令:
~~~bash
graph create-node --help
graph get-node -i implement --json
graph status --json
graph events --node implement --last 20
graph snapshot -m "CSV export before release"
graph diff --json
~~~
## 常见问题
### 为什么 graph init 要求图名?
图名应该描述内容或范围,例如 feature-auth、billing-migration。命名图能让同一个工作区同时维护多个主题,也能避免 default 这种无法说明用途的图名。
### 为什么不能直接把 pending 改成 running?
running 表示节点已经被某个执行者认领。先进入 ready,系统才能检查前置依赖;再进入 running,系统才会记录执行者和开始时间。
### 为什么 passed 被拒绝?
检查节点是否已经有非空 execution_report,所有 checkpoint 是否为 passed 或 skipped,以及 verification 是否存在 failed verdict。执行阶段不要跳过交接单。
### MCP 升级后行为没有变化
MCP Server 是常驻进程。升级 npm 包后重启客户端或重新连接 MCP Server,才能加载新版本。
### 页面是空的
确认当前目录或 MCP workspace root 中存在 .graph,并检查是否切到了正确的图:
~~~bash
graph list
graph status --graph <name>
~~~
### 图校验出现警告
warning 和 error 的含义不同。先运行 graph validate --json,按文件和节点定位;悬空引用、非法边端点和循环通常需要立即修复,术语重复或缺少契约可能只是需要确认的提醒。
## 开发和测试
~~~bash
git clone https://github.com/LUKAWI/super-plumber
cd super-plumber
npm ci
npm run typecheck
npm run build
npm test
npm --prefix web-ui ci
npm --prefix web-ui run typecheck
npm --prefix web-ui run build
npm --prefix web-ui test
~~~
集成资产的唯一正本在 integrations/src/。如果修改了 skill、脚本、命令或手册,运行:
~~~bash
node scripts/sync-integrations.mjs
node scripts/sync-integrations.mjs --check
node dist/cli/index.js export --docs --check
~~~
## 项目状态
当前发布为 **1.0.0 stable**。MCP/CLI v1 语义已冻结;源码包含 CLI、MCP、Web UI、纯文件存储、多图工作区、领域 context/ADR、快照和审计日志。
~~~text
Tests: 895(后端)+ 122(前端)✅ | CLI: 30 命令 | MCP: 27 工具 | 状态机: 7 态 + ready 门禁 + max_attempts + passed 硬门禁 | 边类型: 9 种 | 存储: YAML + Git
~~~
- GitHub:[LUKAWI/super-plumber](https://github.com/LUKAWI/super-plumber)
- npm:[@lukawi/super-plumber](https://www.npmjs.com/package/@lukawi/super-plumber)
- 操作手册:[integrations/src/manual.md](integrations/src/manual.md)
- 领域文档:[docs/roadmap-to-1-0-0/](docs/roadmap-to-1-0-0/)
## License
MIT © 2026 Super Plumber contributors
This server cannot be deployed
Maintenance
ActivityActive
ResponsivenessNo issues