用途
Sequencer 用于把松散的流水线指令——箭头、项目符号或普通文字——解析为有序任务列表,然后通过子代理逐步执行,并在步骤之间累积上下文。当用户提出类似流水线编排的需求时使用该技能。
主要能力
- 解析多种形式的输入:箭头、项目符号或普通文字,识别出每一步及其类型。
- 步骤类型包括:技能步骤(匹配 /something,通过 Skill("something") 调用)、代理步骤(匹配 (agent: name) 或 @agent-name,生成具名代理)、并行分组(匹配 ( a | b ),并发运行组内步骤)、自然语言步骤(其余内容,由 Claude 直接执行)。
- 步骤默认按顺序运行;带括号并用 | 分隔的分组会并行执行。
- 通过子代理执行技能步骤和代理步骤,并在步骤间传递累积上下文。
- 使用任务跟踪工具跟踪进度,3 步及以上的流水线始终适用任务跟踪。
使用方式
子命令分发
根据输入开头判断用户调用的子命令:
/seq help:加载 references/syntax-reference.md 并原样显示。/seq generate <description>:把自然语言描述解析为 DSL 形式,展示给用户审批,然后通过默认流程执行。- 其他(
/seq <pipeline>):解析并执行流水线。
上下文加载
只加载当前阶段所需的参考,不要预先加载全部参考:
- 解析输入时:加载 references/parsing-guide.md,不加载 execution-model、syntax-reference。
- 执行步骤时:加载 references/execution-model.md,不加载 parsing-guide、syntax-reference。
- 显示帮助时:加载 references/syntax-reference.md,不加载 parsing-guide、execution-model。
根据输入跳过某些指导:输入为单步时跳过任务跟踪(单步开销大于价值);没有 ( ... | ... ) 分组时跳过 execution-model.md 中的并行执行逻辑(无可并行内容);/seq help 调用时完全跳过解析和执行(只显示参考)。
执行流程
- 解析:加载 references/parsing-guide.md,读取用户输入并识别每一步及其类型。若某步有歧义,将其分解为候选解释并用 AskUserQuestion 让用户选择,意图不清时绝不猜测。
- 规划:创建运行目录 /tmp/seq-{run-id}/,其中 {run-id} 是短随机标识符。以编号列表向用户展示执行计划,等待用户确认后再执行。若用户修改计划,则重新解析修改后的版本。
- 执行:按顺序处理每一步。技能步骤生成通用子代理,提示其调用 Skill('{{skill-name}}') 并传入参数,读取上一步的输出文件作为上下文,完成后把输出摘要写入当前步骤文件。代理步骤生成具名代理类型,提示类似。自然语言步骤在主对话中内联执行(不生成子代理),因为可能需要用户交互,输出由自己写入文件。并行分组同时生成所有组内步骤为独立子代理,各自写入文件,全部完成后合并输出供下一步使用。每步完成后通过 TaskUpdate 标记任务完成。
- 报告:所有步骤完成后展示摘要,包括已完成步骤(含通过/失败状态)、遇到的错误及解决方式、运行目录路径。
适用场景
- 需要把多步操作编排为流水线并按序或并行执行的场景。
- 需要把自然语言描述转换为可执行 DSL 流水线的场景。
- 需要跨步骤累积上下文、由子代理分工执行的复杂任务。
限制与规则
- 执行前必须先展示计划并等待用户确认,绝不静默执行。流水线可能调用破坏性技能(如 /commit、自定义脚本),静默执行会剥夺用户最后的纠错机会。
- 始终累积上下文:每个步骤的子代理提示都包含上一步的输出文件路径,否则步骤相互孤立,流水线失去组合价值。
- 自然语言步骤内联运行,只有技能和代理步骤才生成子代理;为内联步骤生成子代理会切断用户交互通道。
- 并行分组在继续前必须合并:下一步顺序步骤等待所有并行分支完成,否则上下文不完整会破坏下游步骤。
- 失败时先分解再询问:把失败步骤拆成更小子步骤并定位问题,再向用户求助。
- 绝不臆造技能名称:若 /something 不匹配已知技能,询问用户意图。
- 绝不嵌套子代理:运行技能步骤的子代理应直接调用 Skill 工具,而非再生成子代理。
- 绝不重用运行目录:始终生成新的 {run-id},避免旧输出污染新流水线上下文。