name: 工作流技能设计器 description: 用于设计orchestrator+phases结构化工作流技能的元技能。创建SKILL.md协调器,具有渐进式相位加载、TodoWrite模式和数据流。在“设计工作流技能”、“创建工作流技能”、“工作流技能设计器”时触发。 allowed-tools: Task, AskUserQuestion, TodoWrite, Read, Write, Edit, Bash, Glob, Grep
工作流技能设计器
用于创建遵循orchestrator + phases模式的结构化工作流技能的元技能。生成完整的技能包,SKILL.md作为协调器,phases/文件夹用于执行细节。
架构概述
┌─────────────────────────────────────────────────────────────────┐
│ 工作流技能设计器 │
│ → 分析需求 → 设计协调器 → 生成相位 │
└───────────────┬─────────────────────────────────────────────────┘
│
┌───────────┼───────────┬───────────┐
↓ ↓ ↓ ↓
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ 相位 1 │ │ 相位 2 │ │ 相位 3 │ │ 相位 4 │
│ 需求分析 │ │ 协调器设计 │ │ 相位设计 │ │ 验证与集成 │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
↓ ↓ ↓ ↓
工作流配置 SKILL.md phases/ 完整技能包
生成 0N-*.md
目标输出结构
此元技能生成的技能遵循此结构:
.claude/skills/{技能名称}/
├── SKILL.md # 协调器:协调、数据流、TodoWrite
├── phases/
│ ├── 01-{相位名称}.md # 相位执行细节(完整内容)
│ ├── 02-{相位名称}.md
│ ├── ...
│ └── 0N-{相位名称}.md
├── specs/ # [可选] 领域规范
└── templates/ # [可选] 可重用模板
核心设计模式
从成功的工作流技能实现(workflow-plan、project-analyze等)提取的模式:
模式 1:协调器 + 渐进式加载
SKILL.md = 纯协调器。包含:
- 架构图(ASCII)
- 带
Ref: phases/0N-xxx.md标记的执行流 - 相位参考文档表(按需读取)
- 相位间数据流
- 核心规则和错误处理
相位文件 = 完整执行细节。包含:
- 完整代理提示、bash命令、代码实现
- 验证清单、错误处理
- 输入/输出规范
- 下一个相位链接
关键规则:SKILL.md通过Ref:标记引用相位文档。相位文档仅在执行该相位时读取,而非一次性全部读取。
模式 2:TodoWrite 附件/折叠
相位开始:
→ 子任务附加到TodoWrite(进行中 + 待处理)
→ 协调器顺序执行子任务
相位结束:
→ 子任务折叠回高级摘要(已完成)
→ 下一个相位开始
模式 3:相位间数据流
相位 N 输出 → 存储在内存/变量 → 相位 N+1 输入
└─ 或写入会话文件以持久化
每个相位通过以下方式接收先前相位的输出:
- 内存变量(sessionId、contextPath等)
- 会话目录文件(.workflow/active/{sessionId}/…)
- 规划笔记(累积约束文档)
模式 4:条件相位执行
相位 N 输出包含条件标志
├─ 条件满足 → 执行相位 N+1
└─ 条件未满足 → 跳转至相位 N+2
模式 5:输入结构化
用户输入(自由文本) → 相位 1 前结构化为格式:
目标: [目标]
范围: [边界]
上下文: [背景/约束]
模式 6:交互式偏好收集(SKILL.md责任)
工作流偏好(自动模式、强制探索等)必须在SKILL.md中通过AskUserQuestion收集在调度到相位之前。相位引用这些作为workflowPreferences.{key}上下文变量。
反模式:在相位文件中通过$ARGUMENTS.includes(...)解析命令行标志(--yes、-e、--explore)。
// 正确:在SKILL.md中(相位调度前)
const prefResponse = AskUserQuestion({
questions: [
{ question: "是否跳过确认?", header: "自动模式", options: [
{ label: "交互式(推荐)", description: "交互模式" },
{ label: "自动", description: "跳过所有确认" }
]}
]
})
workflowPreferences = { autoYes: prefResponse.autoMode === 'Auto' }
// 正确:在相位文件中(仅引用)
const autoYes = workflowPreferences.autoYes
// 错误:在相位文件中(标志解析)
const autoYes = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
模式 7:直接相位交接
当一个相位需要调用同一技能内的另一个相位时,直接读取和执行相位文档。不要通过Skill()路由回SKILL.md。
// 正确:直接交接(executionContext已设置)
Read("phases/02-lite-execute.md")
// 使用executionContext执行(模式 1)
// 错误:技能路由(不必要的往返)
Skill(skill="workflow-lite-plan", args="--in-memory")
模式 8:相位文件卫生
相位文件是内部执行文档。它们不得包含:
| 禁止项 | 原因 | 正确位置 |
|---|---|---|
标志解析($ARGUMENTS.includes(...)) |
偏好收集在SKILL.md | 通过AskUserQuestion在SKILL.md |
调用语法(/skill-name "...") |
非用户面向文档 | 移除或仅SKILL.md |
转换来源(Source: Converted from...) |
实现细节 | 移除 |
技能路由用于相位间(Skill(skill="...")) |
使用直接相位读取 | 直接Read("phases/...") |
执行流
相位 1:需求分析
└─ Ref: phases/01-requirements-analysis.md
├─ 输入源:命令、描述、用户交互
└─ 输出:workflowConfig(相位、数据流、代理、条件)
相位 2:协调器设计(SKILL.md)
└─ Ref: phases/02-orchestrator-design.md
├─ 输入:workflowConfig
└─ 输出:.claude/skills/{名称}/SKILL.md
相位 3:相位文件设计
└─ Ref: phases/03-phase-design.md
├─ 输入:workflowConfig + 源内容
└─ 输出:.claude/skills/{名称}/phases/0N-*.md
相位 4:验证与集成
└─ Ref: phases/04-validation.md
└─ 输出:已验证技能包
相位参考文档(按需读取):
| 相位 | 文档 | 目的 |
|---|---|---|
| 1 | phases/01-requirements-analysis.md | 从各种源分析工作流需求 |
| 2 | phases/02-orchestrator-design.md | 生成具有协调模式的SKILL.md |
| 3 | phases/03-phase-design.md | 生成相位文件,保留完整执行细节 |
| 4 | phases/04-validation.md | 验证结构、引用和集成 |
输入源
此元技能接受来自多个源的工作流定义:
| 源 | 描述 | 示例 |
|---|---|---|
| 现有命令 | 转换.claude/commands/协调器 + 子命令 |
plan.md + session/start.md + tools/*.md |
| 文本描述 | 用户用自然语言描述工作流 | “创建一个3相位的代码审查工作流” |
| 需求文档 | 结构化需求文件 | requirements.md 包含相位/代理/输出 |
| 现有技能 | 重构/重新设计现有技能 | 将扁平技能重组为相位 |
Frontmatter转换规则
从命令格式转换到技能格式时:
| 命令字段 | 技能字段 | 转换 |
|---|---|---|
name |
name |
添加组前缀:plan → workflow-plan |
description |
description |
追加触发短语:Triggers on "xxx" |
argument-hint |
(移除) | 参数在输入处理部分处理 |
examples |
(移除) | 示例移至内联文档 |
allowed-tools |
allowed-tools |
扩展通配符:Skill(*) → Skill,添加常用工具 |
group |
(移除) | 嵌入在name前缀中 |
协调器内容映射
SKILL.md与相位文件的内容:
SKILL.md(协调器)
| 部分 | 内容 | 源 |
|---|---|---|
| Frontmatter | 名称、描述、allowed-tools | 命令frontmatter(转换后) |
| 架构概述 | 相位流ASCII图 | 从执行结构派生 |
| 关键设计原则 | 协调规则 | 从命令协调角色提取 |
| 执行流 | 带Ref:标记的相位序列 + 相位参考表 |
命令执行过程 |
| 核心规则 | 协调约束 | 命令核心规则 |
| 输入处理 | 结构化格式转换 | 命令输入处理 |
| 数据流 | 相位间数据传递 | 命令数据流 |
| TodoWrite模式 | 附件/折叠生命周期 | 命令TodoWrite部分 |
| 相位后更新 | 规划笔记 / 状态更新 | 命令相位间更新代码 |
| 错误处理 | 失败恢复 | 命令错误处理 |
| 协调器清单 | 相位前后动作 | 命令协调器清单 |
| 相关命令 | 先决条件和后续 | 命令相关命令 |
相位文件(执行细节)
| 内容 | 规则 |
|---|---|
| 完整代理提示 | 从源命令中保留逐字 |
| Bash命令块 | 保留逐字 |
| 代码实现 | 保留逐字 |
| 验证清单 | 保留逐字 |
| 错误处理细节 | 保留逐字 |
| 输入/输出规范 | 如果源中不存在则添加 |
| 相位标题 | 添加# Phase N: {名称} |
| 目标部分 | 添加## 目标与要点 |
| 下一个相位链接 | 添加## 下一个相位与链接 |
关键规则:相位文件必须忠实于源内容。不要总结、缩写或简化。相位文件是执行指令 - 每个bash命令、每个代理提示、每个验证步骤都必须保留。
SKILL.md模板
---
name: {技能名称}
description: {描述}. 在“{触发1}”、“{触发2}”时触发。
allowed-tools: {工具}
---
# {标题}
{一段描述此技能做什么以及产生什么。}
## 架构概述
{显示相位和数据流的ASCII图}
## 关键设计原则
1. **{原则}**:{描述}
...
## 交互式偏好收集
在调度到相位前通过AskUserQuestion收集工作流偏好:
{AskUserQuestion代码与偏好派生 → workflowPreferences}
## 自动模式默认值
当`workflowPreferences.autoYes === true`时:{自动模式行为}。
## 执行流
{带Ref:标记的相位序列}
**相位参考文档**(执行相位时按需读取):
| 相位 | 文档 | 目的 |
|------|------|------|
| 1 | [phases/01-xxx.md](phases/01-xxx.md) | ... |
...
## 核心规则
1. {规则}
...
## 输入处理
{如何将用户输入转换为结构化格式}
## 数据流
{相位间数据传递图}
## TodoWrite模式
{带示例的附件/折叠生命周期描述}
## 相位后更新
{相位间状态更新}
## 错误处理
{失败恢复规则}
## 协调器清单
{相位前后动作列表}
## 相关命令
{先决条件和后续}
相位文件模板
# Phase N: {相位名称}
{一句描述此相位目标的描述。}
## 目标
- {目标1}
- {目标2}
## 执行
### 步骤 N.1: {步骤名称}
{完整执行细节:命令、代理提示、代码}
### 步骤 N.2: {步骤名称}
{完整执行细节}
## 输出
- **变量**:`{变量名称}`(例如,`sessionId`)
- **文件**:`{输出文件路径}`
- **TodoWrite**:标记相位N完成,相位N+1进行中
## 下一个相位
返回到协调器,然后自动继续到[相位 N+1: xxx](0N+1-xxx.md)。
设计决策框架
设计新工作流技能时,回答这些问题:
| 问题 | 影响 | 示例 |
|---|---|---|
| 多少相位? | 目录结构 | 通常3-7相位 |
| 哪些相位是条件的? | 协调器逻辑 | “仅当conflict_risk >= 中时相位3” |
| 哪些数据在相位间流动? | 数据流部分 | sessionId、contextPath、configFlags |
| 哪些相位使用代理? | 相位文件复杂性 | 代理提示需要逐字保留 |
| TodoWrite粒度是什么? | TodoWrite模式 | 一些相位有子任务,其他是原子性 |
| 是否有规划笔记模式? | 相位后更新 | 跨相位累积状态文档 |
| 错误恢复是什么? | 错误处理 | 重试一次然后报告,vs 回滚 |
| 是否需要偏好收集? | 交互式偏好收集 | 通过AskUserQuestion在SKILL.md收集,传递为workflowPreferences |
| 相位N交接给相位M吗? | 直接相位交接(模式 7) | 直接读取相位文档,而非Skill()路由 |