Loop It:长程任务闭环
用 Multica 把一个大需求从计划做到合并代码并关掉。本 skill 只负责编排。
| 词 | 含义 |
|---|---|
主任务 / 编号(如 CAM-17) | 这棵需求的根任务。Multica CLI 仍叫 issue |
| 子任务 | 拆出来的一件件可执行任务 |
| 巡检 / Loop Patrol | 全仓库唯一的定时 Autopilot,按 cron 扫进行中的主任务 |
开跑前先读项目根 .loop-it/config.yaml(workspace、repo、分支、agent 名单等)。没有就 init。
Patrol 分工(B):定时 Autopilot 的程序全文写在 Autopilot description(init 写入);Autopilot 不读本 skill。本 skill 供本机 /loop-it(init / Phase / 跟进)使用。
执行上下文
| 你在哪 | Multica CLI | 程序从哪来 |
|---|---|---|
| Multica Autopilot(run_only) | 裸 multica | 仅 Autopilot description;禁止找/读 loop-it |
| 本机 Cursor | MC=(multica --profile "$multica_profile");CLI 遵循 multica-cli skill | 本 skill |
本轮目标
$ARGUMENTS
若 $ARGUMENTS 为空:先问用户要启动的新需求或者要跟进的任务,还是对当前仓库跑 init。
缺关键信息时先问再动手:目标 workspace、指派 agent、是否允许写操作。
Workspace 绑定(硬门禁)
多项目并行时禁止依赖「上次 workspace switch 的默认 profile」。每次开跑:
- 无
.loop-it/config.yaml→ 只跑init,禁止建/拆 issue。(例外:Autopilot 已按 description 先 checkout;本机「巡检/跟进」按下方本机巡检步骤 0。) - 读并确认
workspace(slug);与用户冲突则先改 config。 - 本机上下文:确保
multica_profile(默认=slug)存在且workspace switch到该 workspace;MC=(multica --profile "$multica_profile"),之后只用"${MC[@]}"。 - Autopilot 上下文:只跟 description;checkout 后读
.loop-it/config.yaml校验事实;API 一律裸multica。 - 建出的 identifier 前缀必须属于本 workspace;不对则停手纠错。
配置(先读事实,再跑程序)
项目根 .loop-it/config.yaml 只放实例事实。读 workspace、workspace_id、multica_profile、project、base_branch、repo、executors、orchestrator、patrol.*、daily_digest.*,不要写死在 skill 正文。
- 没有 config → 先跑
init,不要猜(巡检入口除外,见上)。 - 自动合并:仅当
patrol.auto_merge: true且 DoD + CI 全绿。gh pr merge的--repo取repo字段。
入口分流(先判定,再开跑)
按用户给出的材料判断起点。已有可用的设计/计划就直接用,禁止重做 Phase 1。 任意入口都先过 Workspace 绑定(巡检则先 checkout 再绑定)。
| 输入情况 | 起点 |
|---|---|
init / 新项目接入 | init 程序 |
| Autopilot 触发 | 只执行 description 内嵌程序(不读本 skill) |
| 本机「执行一轮巡检」/「继续跟进」 | 下方「巡检程序(本机)」 |
已有设计文档 + 计划文档(路径、@ 引用,或用户说「按已有 plan 执行」) | 跳过 Phase 1;现有计划即验收依据 → Phase 2(主任务已存在则巡检器会接手,不必再建 Autopilot) |
| 只有粗糙需求 / 口头目标,尚无书面设计或计划 | Phase 1 |
主任务已存在(如 继续跟进 MUL-xxx) | 读 metadata / 计划路径 → 巡检程序(只处理这一棵树) |
收尾 MUL-xxx | Phase 5 |
已有计划:写入主任务 plan_path,确认计划/方案已 commit + push。可轻量核对「子任务是否覆盖计划」,不要重写计划。
禁止为单个任务创建 Autopilot。全 workspace 只允许一个通用巡检 autopilot(由 init 创建)。发现 per-task autopilot 视为事故:删除并复盘。
开始前
- 本机:
multica auth status已登录;否则停下来让用户multica login。(Autopilot task 跳过——已有 task 身份。) - 读
.loop-it/config.yaml;缺失则转init(巡检入口除外)。 - 做 Workspace 绑定。
- 本机:
"${MC[@]}" agent list --output json确认 executors / orchestrator 仍在该 workspace。 - 写操作首次执行前向用户说明口径;已授权的例行跟进 / 巡检除外。
init — 新项目接入(幂等)
在当前仓库根执行。已存在的只修补差异。输出差异报告(新建 / 一致 / 已修复)。
-
确认 workspace:
workspace list后与用户选定 slug(禁止用「当前 CLI 默认」代替确认)。解析workspace_id;multica_profile默认=slug。 -
对齐 profile:无则
multica --profile <p> login;再workspace switch <slug|id>;校验workspace get匹配。 -
生成/补齐
.loop-it/config.yaml(含workspace/workspace_id/multica_profile)。向用户确认base_branch、repo、executors、orchestrator;巡检默认*/15、auto_merge: true:workspace: <slug> workspace_id: <uuid> multica_profile: <通常=slug> project: null base_branch: <baseline branch> repo: <owner/name> executors: [<agent>, ...] orchestrator: <agent> patrol: cron: "*/15 * * * *" auto_merge: true daily_digest: enabled: true issue_key: <常驻汇总 issue,如 GAN-372> -
注入
AGENTS.md「Agent 工作流不变量」(§4 不变量 + 授权口径;事实指针.loop-it/config.yaml;Patrol 程序 SSOT = Autopilot description)。已有则只校对。 -
建/修唯一巡检 Autopilot(在已绑定 workspace 下):title
Loop Patrol;agent=orchestrator;mode=run_only。description 必须内嵌完整巡检程序(由 config 填空;repo为owner/name时 checkout URL 用https://github.com/<repo>.git;已是 URL 则原样)。改base_branch/repo/ 巡检规则后必须再autopilot update同步 description:你是 Loop Patrol(run_only)。本 description 即程序(已注入;勿再 get 自己)。无动作则静默。裸 multica,勿加 --profile。 ## 启动 1. multica repo checkout <repo_clone_url> --ref <base_branch> 2. 读 .loop-it/config.yaml,核对 repo / base_branch。 ## 巡检(按序;结论未变则尽早停) 只改 Multica issue/评论,或合规时 gh pr merge --repo <repo>。不改代码、plan、.loop-it;勿 push 基线。 1. 日报:若 daily_digest 开启,只看 daily_digest.issue_key 最近几条 root 摘要;今日已有 Patrol 汇总则跳过,否则写一条。 2. 找 loop_it_phase=executing 的主任务;用 issue get + 近评摘要(或本 autopilot 最近 runs)判断上轮结论是否仍成立。 3. 结论仍成立且主任务活动时间未更新 → 直接收尾(不读 children、不看 PR、不 list autopilot、不 sweep、不评论)。 4. 否则:读 children/近评,解 blocked 或验收;auto_merge 且 DoD+CI 绿才 merge;有实质动作才留评。再按需 sweep 未关闭的 Loop It/Loop Patrol 运行 issue(最多一页)。 5. 子任务全完 → 主任务 done(phase=completed);不停本 Autopilot。 ## 收尾 run_only 无关联 issue 则结束。schedule=
patrol.cron,时区Asia/Shanghai;已有同名则 update,不新建第二个。 -
建议删除标题含
Loop It 跟进的 per-task autopilot(须确认)。三件套齐全即开工。
Phase 1 — 制定计划(Plan)
仅在尚无可用计划时执行。
- 计划写入
docs/superpowers/plans/(或等价目录):目标、验收、边界、拆解。 - 用户确认后再进 Phase 2。
- 派发前必须 commit + push 计划/设计文档(agent 拉远端;不 push 则
plan_path对他是 404)。
Phase 2 — 创建任务树
本机一律 "${MC[@]}";Autopilot 用裸 multica。
- 建主任务;
--description-file含计划路径与验收标准。 - 拆子任务:
--parent;标题前缀[<主identifier>] …;--stage;后续 stage 先backlog。executor 取 config。 - 核对 identifier 前缀属于本 workspace;不对则停手清理。
- metadata:
plan_path、loop_it_phase=executing(不要写autopilot_id)。
巡检程序(本机 /loop-it 跟进用)
Autopilot Loop Patrol 不读本节——其程序全文在 Autopilot description(由 init 写入)。本机用户说「巡检 / 继续跟进」时按下面做;步骤与 description 模板保持同构。
静默优先:无动作则无产出。
护栏:不改业务代码 / plan / .loop-it;禁止 git push 到 base_branch(合入只走 gh pr merge)。不限制 executor 在自己功能分支上 commit/push。不改 .env*;反复失败写 blocked_reason 并升级。
- 若尚无本仓 / 无
.loop-it/config.yaml:checkout 后读 config(本机通常已在仓库根)。 - 日报:若开启,只看近几条 root 摘要;今日已有则跳过,否则写一条。
- 轻量探测 executing 主任务(get + 近评 / 最近 runs)。结论未变且活动未更新 → 直接收尾(不读 children / PR / sweep)。
- 否则读 children + 近评;解 blocked 或验收;
auto_merge且 DoD+CI 过则 merge;有动作才留评。再按需一页 sweep。 - 子任务全完 → Phase 5。per-task autopilot 默认不 list。
Phase 5 — 收尾
子任务全 done/cancelled 后:总验收 → 主任务 done、loop_it_phase=completed → 不停巡检 Autopilot → 汇报产出与 PR、遗留。