1. 没有统一真源
语义散在技能说明、聊天记录和人工约定里。改了文档不等于改了行为,改了行为不等于更新了文档。
写给每一个用 Claude Code 做工作流的人
很多工作流在最初几天表现很好。然后你会发现:文件被覆盖、步骤被跳过、失败无法复盘、同样的坑反复踩。 这些不是"用法不对",而是缺少一套系统性的治理结构。WorkflowProgram 就是为了解这类问题而存在的。
这份教程会从最常见的问题出发,一步步带你理解 WorkflowProgram 的每一层设计为什么存在、怎么协作、以及你能从中借鉴什么。
第一步:看见问题
如果你做过 Claude Code 工作流,下面这些场景你大概率遇到过至少三个。 WorkflowProgram 不是凭空发明概念,它的每一层设计都是为了回应某个具体的失控场景。
语义散在技能说明、聊天记录和人工约定里。改了文档不等于改了行为,改了行为不等于更新了文档。
这一轮先做设计再写文件,下一轮可能直接跳到写文件。步骤漏掉、重复或者乱序,全靠运气。
模型一旦直接覆盖目标文件,用户手工维护的内容可能丢失,冲突和回退都变得很难处理。
最后只知道"失败了",但不知道问题出在设计层、执行层、环境层还是判定层。
只有最终产物,没有上下文快照、状态记录、事件记录和运行报告。出了问题只能猜。
"脚本跑完了"不等于"按约束执行成功了"。退出码 0 只能说明没有 crash,不能说明满足了业务约束。
这次踩的坑、总结的教训留在聊天记录里,下一轮还是从零开始。
同一句话这次落到 develop,下次落到 validate。入口不稳定,后面的行为就不可预期。
第二步:理解设计哲学
很多工作流一开始就是“写一个技能说明,再补几个代理说明,最后改一下设置”。 这种做法能快速启动,但很难持续维护。原因是它把四件本质不同的事情混在了一起。
先有一份机器可读的设计真源,再从它生成给人读的说明和维护文档。 想改行为,先改真源;不要反过来改说明文档试图影响实际执行。
要有一层专门负责步骤推进、状态转移、边界检查和证据落盘。 模型在节点内理解和生成,但节点之间怎么切换应该由程序决定。
生成者不能同时做裁判。要有独立的验证层基于证据和约束给出结论。 生成成功不等于验证通过。
单次经验和长期规则要分开管理。 前者记录这次学到了什么,后者决定下一轮有哪些事必须做、绝不能做。
第三步:划清边界
如果输入、输出、证据全混在一个目录里,你很快就会分不清"谁是参考、谁是交付、谁是中间态"。 三根目录是 WorkflowProgram 最基础的边界契约。
WorkflowProgram 自身的能力仓:skills、agents、脚本、模板。它只被读取,永远不被修改。
实际路径:dist/plugin/
用户的目标项目。最终交付的 .claude/ 资产在这里。只能通过 managed apply 写入,不能直接覆盖。
实际路径:用户项目根目录
单次运行的隔离空间。spec、候选资产、状态、事件、报告全在这里,运行结束后可完整回溯。
实际路径:TARGET_ROOT/.workflowprogram/runs/<run-id>/
第四步:理解生命周期
S0 到 S6阶段不是为了多几个数字好看,而是为了让每一段职责都能被独立验证、回退和复盘。 设计和执行混在一起,最后出了问题只能从头来过;拆开之后,你可以精确定位到"在哪一步、因为什么"出了问题。
不同意图不需要走完所有阶段。四种核心意图各有自己的阶段路径:
S1 → S2 → S3 → S4 → S5 → S6从需求到交付的完整链路
S5 → S6对已有 workflow 做结构审计
S5只做一次验证判定
S6从 lessons 中提炼改进
第五步:看懂运行机制
WorkflowProgram 做了一个关键判断:需要稳定执行、稳定落盘、稳定复验的部分,不能留在 prompt 里。
所以两个角色各有分工:
具体地说,workflow-entry.py 把下面这条脚本链串成固定顺序,不依赖模型"记得下一步该做什么":
第六步:分清入口关系
很多工作流一开始只有一个入口:用户说一句话,模型就直接开始做事。 这样的问题是,同类请求可能落到不同流程,入口行为会越来越不稳定。 更稳的做法是先做一层“入口识别”,把请求归到正确的主流程,再继续往下执行。
workflowprogram-orchestrate。第七步:理解写入安全
这是很多人第一次听到会觉得“多此一举”的设计。但只要你经历过一次“模型把你手工维护的配置覆盖了”, 你就会明白:写入安全是工作流工程化的硬分水岭。
到了当前实现里,这条受控写入链具体落在这些文件和产物上:
managed-assets.py plan:生成变更计划managed-assets.py apply-staged:执行受控应用managed-files.json:记录托管文件清单RUN_ROOT/outputs/candidate/:候选资产区managed-change-plan.json:变更计划managed-change-result.json:变更结果第八步:分清三层验证
如果"生成"和"验证"是同一个角色负责,生成成功就容易被误当成验证通过。 WorkflowProgram 把验证拆成三层,每层有明确的职责边界:
先回答“这次运行在形式上是不是合格的”。例如有没有越界写入、有没有留下最小证据、状态和失败类型是不是落在允许范围内。
再回答“这次运行算不算真正达成目标”。这层不看单一退出码,而是综合入口、边界、流程、产物和失败映射来下结论。
最后补上真实运行场景中的动态证据,确认这套设计不仅在静态结构上成立,也能在实际运行时留下足够信息。
到了当前实现里,这三层分别落在这些角色上:
workflow-runner.py:执行约束层workflowprogram-validate / workflow-s5-judge.py:结果判定层runtime_smoke.py:动态补证据层RUN_ROOT/state.json控制面状态快照RUN_ROOT/events.jsonl事件流(可重放)RUN_ROOT/transcript.md运行过程 transcriptvalidation-runtime-report.mdS5 判定报告(人类可读)s5-validation-summary.jsonS5 判定摘要(机器可读)第九步:理解测试
WorkflowProgram 的测试不是只看命令退出码,而是分层证明: 设计是不是合法、执行是不是合规、判定是不是成立、真实运行时是不是留下了足够证据。
先验证设计真源、说明文档和派生产物之间有没有互相打架,确保“纸面设计”本身是完整且一致的。
再验证执行过程是不是遵守了边界、状态推进和最小证据要求,避免“看起来执行了,其实已经越界或漏证据”。
最后用一组固定场景去跑成功、失败、冲突、越界等情况,证明这套工作流在真实使用中也能稳定给出结果。
python3 .claude/scripts/validate-workflow.py
python3 .claude/scripts/validate-workflow-spec.py --spec <workflow-spec.yaml>
python3 .claude/scripts/validate-workflow-lowlevel.py \
--spec <workflow-spec.yaml> \
--lowlevel <workflow-lowlevel.md>
python3 .claude/scripts/validate-run-state.py --state <RUN_ROOT>/state.json
python3 tools/runtime_smoke.py --fixture empty-project
python3 tools/runtime_smoke_matrix.py --json
第十步:建立长期记忆
不会学习的 workflow 只有执行,没有演进。 S6 的核心价值是:把一次运行中积累的经验,变成下一轮运行的输入。
lessons.md 是追加式日志。每次运行的失败经验、冲突和待提炼约束都写在这里,只追加不读取(或只读最新几条)。超过 10 条就归档。
s6-lessons-delta.md 把这次运行的 run_id、failure_kind 和约束候选收成独立增量。它由 validate-lessons-delta.py 校验。
.claude/rules/constraints.md 用 ALWAYS/NEVER 固化稳定经验。新会话只加载这个文件,不加载完整 lessons 日志,避免上下文膨胀。
lessons.md 和 constraints.md,用设计真源和能力矩阵避免实现漂移。它不是"只要求别人做闭环"。
第十一步:认清仓库结构
.claude/commands/源码层命令入口.claude/skills/源码层 skills 与模板.claude/scripts/确定性脚本链与校验器dist/plugin/构建后的运行时载荷tests/fixtures、expectations、transcriptsdocs/HighLevel、LowLevel、教程和状态索引.claude/scripts/、.claude/skills/、设计文档;dist/plugin/、PPT、报告和 view/lowlevel 都应从真源重建,不建议长期手工维护。
第十二步:落地到你的项目
不要先写 SKILL.md。先把产品边界想清楚。下面这 6 个问题, 每一个都对应着 WorkflowProgram 四层设计中的某一层。
.claude/ 文件?workflow-spec.yaml)快速上手
需要 Python 3.10+ 和 pyyaml。
git clone https://github.com/Logic-70/WorkflowProgram-CN
cd WorkflowProgram-CN
pip install pyyaml
python tools/build_plugin.py
在你的目标项目目录中:
cd your-project
claude --plugin-dir /path/to/WorkflowProgram-CN/dist/plugin
workflowprogram-orchestrate 会自动路由到正确的入口:
"为当前项目设计一个 code review workflow"
"审计当前项目的 workflow 结构"
"验证当前项目的 workflow 资产"
运行结束后,在你的项目中查看:
.workflowprogram/runs/<run-id>/
state.json # 控制面状态
events.jsonl # 事件流
validation-runtime-report.md
深入阅读