一键导入
plan-run
依 plan.md 的 Dependencies DAG 推進實作 — Python 狀態機決定下一步(非 LLM 判斷),自動串接 TaskCreate/TaskUpdate。觸發:使用者要求依 plan 推進、要求 task tracking 對齊 DAG、或抱怨 LLM 跳步漏步。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
依 plan.md 的 Dependencies DAG 推進實作 — Python 狀態機決定下一步(非 LLM 判斷),自動串接 TaskCreate/TaskUpdate。觸發:使用者要求依 plan 推進、要求 task tracking 對齊 DAG、或抱怨 LLM 跳步漏步。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
本 repo 自持 agent 定義目錄索引(complexity-triage / doc-reviewer / doc-updater / tdd-guide),供 design、update 等 skill 的 general-purpose subagent 呼叫時引用定義與檢查清單;本身非直接可呼叫的 skill,不會出現在指令清單中。
萬用助手 — 自動分析情境、盤點可用資源、智慧路由至最佳 agent/skill 組合,一鍵完成複雜工作流。
開發設計 — 自動盤點可用資源,透過 Plan agent 建立完整實作計畫,輸出至 plans/active/<slug>.md 供使用者確認後才進入實作。
更新知識庫 — 依序執行文件更新、審查、context 整理、pattern 提取,將本次 session 的變更沉澱為文件與知識。
貼上 Notion URL,自動抓取頁面需求內容,串接 /design 建立實作計畫。
產生跨 context 接手 prompt — 萃取本次對話的目標、進度、決策、未完成項目,輸出可直接貼到新 session 或 /compact 之後使用的自包含 prompt。
| name | plan-run |
| description | 依 plan.md 的 Dependencies DAG 推進實作 — Python 狀態機決定下一步(非 LLM 判斷),自動串接 TaskCreate/TaskUpdate。觸發:使用者要求依 plan 推進、要求 task tracking 對齊 DAG、或抱怨 LLM 跳步漏步。 |
| allowed-tools | Bash, Read, Agent, AskUserQuestion, TaskCreate, TaskUpdate, TaskList |
| argument-hint | <plans/active/xxx.md 路徑> |
| redundancy-peers | ["design"] |
依照 plan.md 的 Dependencies DAG 推進實作;判斷邏輯與理由見下方設計原則。
scripts/plan_runner.py 控制 step 順序、依賴檢查、status transition;LLM 不負責「下一步是什麼」的判斷,只負責把 transition 回傳的 step 拿來執行(呼叫 agent、跑命令),完成後回報 complete / fail<plan-dir>/.plan-state/<slug>.state.json 保存所有 step 狀態 + previously_reported_ready(給 delta 模式用)next — full bootstrap(~2.8KB),列出全部 ready 完整模板;只在 session 開始 / 失去 context 時呼叫一次,之後改讀 delta output(下文不再重述)complete / fail / skip — delta 模式(150~2KB 視解鎖數而定),只列「本次新解鎖」的完整模板,先前已展示過的 ready 只列 IDindex — 純 trace(~500 chars),ID + status 一覽,給「驗證 trace 完整性」用--format=json 給 tooling若 plan 來自 /design 的 planner subagent(典型徵兆:**Step N: title** 標頭、- **Field**:value 全形冒號、Dependencies 含「Phase N 完成」/ 括號註解等自由文字),跑 init 會 No steps found。先 normalize:
# 1. 預覽 diff
python3 ~/Documents/agent-skills/scripts/plan_runner.py normalize "$ARGUMENTS" --diff
# 2. diff 合理 → 落地(自動備份至 <plan>.bak)
python3 ~/Documents/agent-skills/scripts/plan_runner.py normalize "$ARGUMENTS" --write
Normalize 做的事:
**Step N: title** → - [ ] **S<phase>.<N>** — title(依目前 Phase 自動補 S-code)- **Field**:value → - Field: value(2 空格縮排 + ASCII 冒號)Phase N 完成 → 該 Phase 最後一個 stepPhase X Step Y → SX.YStep N → S<current_phase>.N(Step 2 已建立 base))丟棄Normalize 後 stderr 會列出 WARN: 行,重點看 Dependencies 翻不出 ID 的(保留原文留給 user 修)。
python3 ~/Documents/agent-skills/scripts/plan_runner.py init "$ARGUMENTS"
輸出包含:
total_steps、phase_order、ready_steps(初始可執行的 step IDs)warnings(解析警告,例如 dep 用 ~ range 語法)若 init 回傳 No steps found in plan → 回 Step 0 跑 normalize。
若已存在 state,先跑 plan_runner.py status "$ARGUMENTS" 看狀態再決定;需重新初始化用 init --force。
呼叫 TaskCreate(subject="<plan title>", activeForm="<plan title> 推進中"),成功後把 task_id 寫回 state(給 audit + child task 的 addBlockedBy 用):plan_runner.py set-parent "$ARGUMENTS" --task-id=<parent_task_id>。
若 TaskCreate 不可用(tool deferred、quota 滿、user 沒開 task tracking),記 warning 直接進 Step 3 —— state machine 不依賴 task_id,整個推進流程不會中斷。
迴圈直到 transition output 顯示 Progress: N/N — ALL DONE。
跑 python3 ~/Documents/agent-skills/scripts/plan_runner.py next "$ARGUMENTS" 取得當前所有 ready steps 的完整 instruction 模板;之後改讀 complete / fail / skip 帶的 delta 資訊。
## Next hints 可能已 pre-create)
TaskUpdate(<hint_task_id>, in_progress),不要 TaskCreate 重複TaskCreate(照搬模板裡的 task_create.subject / activeForm / addBlockedBy)→ 拿到 task_idplan_runner.py start "$ARGUMENTS" <step_id> --task-id=<task_id>start 的 ## Next hints 區塊(如有)→ batch TaskCreate 列出的 next step 為 pending(addBlockedBy = 當前 task_id),讓 user 看到「已完成 N + 進行中 1 + 下一步 hint」的 sliding windowagent / command / skill 欄位plan_runner.py complete "$ARGUMENTS" <step_id> → output 會自動帶 ## Required sync 內含 TaskUpdate(<task_id>, completed) 指令,跟著做plan_runner.py fail "$ARGUMENTS" <step_id> --reason="<msg>" → 同上但 status=failed每次 complete / fail / skip 的 output 依現況附帶對應區塊:## Required sync(有 task_id 時,含 TaskUpdate(...) 完整指令)、## Newly unlocked (N)(新解鎖 step 的完整 instruction 模板,搭配 3b reconcile 規則判斷 TaskCreate 或 TaskUpdate)、## Still ready (M): <ids>(僅列 ID,模板已給過)、## In progress (N)(僅列 ID + task_id)、## Blocked (N)(列出 blocking 原因);全部空則顯示 (no ready / in_progress / blocked steps)。start 另可能含 ## Next hints(下一個 pending step 的完整 instruction,3b step 3 用)。
讀到 Newly unlocked 套 3b reconcile rule 進入下個 step;Still ready 只是提醒(instructions 在更早的 output 裡)。
fail 後 downstream 自動 blocked。用 AskUserQuestion 詢問:
Step
<id>失敗:<reason>後續 blocked steps:<list>
- 重試 —
plan_runner.py reset --step=<id>+ 重新進入 3b- 跳過 —
plan_runner.py skip <id>(風險自負)- 中止 — 停止迴圈
若 context 被 compaction 砍掉了某 step 的指令、或回到 session 時不確定狀態:跑 plan_runner.py index "$ARGUMENTS"(~500 chars)看整體 trace,或跑 plan_runner.py next "$ARGUMENTS" 重新拿完整模板(會 reset delta 追蹤)。
/goal 包外層不想每個 step 完成都手動確認,可用 Claude Code 內建 /goal 包外層自動續跑:
/goal plan_runner.py status "$ARGUMENTS" 顯示 all_done=true(無 failed/blocked/in_progress)OR stop after 30 turns
評估者(預設 Haiku、不呼叫工具)每輪讀 transcript 判斷是否達成;未達成自動續跑,達成自動 clear。3d 的失敗 HITL gate 仍生效(fail 後仍須在主 turn 走 AskUserQuestion,/goal 不會自動跳過),故每次 transition 後跑一次 plan_runner.py index 把狀態 surface 給評估者看。一個 session 僅能一個 /goal;對 plan 不確定、高風險 step、多 plan 平行跑、或想逐步確認時不要用。
summary.all_done == true 後:
TaskUpdate(<parent_task_id>, status=completed)/plan-archive 歸檔 plan 至 plans/completed/plan_runner.py dag "$ARGUMENTS"(或加 --format=dot)。
| Skill | 角色 |
|---|---|
/design | 產生 plan(state machine 的輸入源) |
/notion-plan | 從 Notion 抓需求 → /design |
/plan-run | 依 plan 推進(本 skill) |
/plan-archive | 完成後歸檔 |
/verify-fix-loop、/code-review、/simplify | 在個別 step 中被引用 |
/goal(Claude Code 內建) | optional 包外層,讓 DAG 自動推進至 all_done(見 3f) |
state machine 依下列規則解析 plan.md:
| 元素 | 格式 |
|---|---|
| Phase 標頭 | ### Phase N:<名稱> 或 ### Phase N: <名稱> |
| Step 標頭 | - [ ] **<step_id>** — <title> 或 - [ ] <step_id> — <title>(** bold 可省略) |
| Step ID | S\d+(\.\d+)?[a-z]?(例:S0.1、S1a、S3.1a、S12) |
| Step 欄位 | - <key>: <value>(縮排 2 空格) |
| 可辨識欄位 | Files、Action、Agent、Skill、Command、Agent/Skill、Dependencies、Risk |
| Dependencies 值 | 逗號、斜線、空白分隔的 step ID 清單;支援 range 語法 |
Range 語法(自動展開為 plan 內出現順序的完整 ID list):
Dependencies: S4.1 ~ S6 → [S4.1, S4.2, S4.3, S5, S6](依 plan 中出現順序)~、...、..、–、— 五種分隔符Dependencies: S0.1, S1.1 ~ S2, S3 也合法/design 產出的 plan 已符合格式。手寫 plan 可省略 ** 並使用 range 簡寫。
pending ──start──> in_progress ──complete──> completed
│ │
│ └──fail──> failed
│
├──(dep 失敗自動)──> blocked
│
└──skip──> skipped
| Status | 意義 |
|---|---|
pending | 等待中(deps 未滿足或未啟動) |
in_progress | 執行中(已 TaskCreate 並回寫 task_id) |
completed | 完成 |
failed | 失敗(需使用者決定後續) |
blocked | 因 dep 失敗而 block;dep reset 後自動回 pending |
skipped | 使用者主動跳過;後續 deps 視同 completed 解 block |
state transition 由 Python 強制驗證,不允許 completed → pending 等非法轉移(避免覆寫已完成工作)。