Communitygithub.com

DevOtts/plan-it

將模糊的想法轉化為可構建的交付套件 — 從探索、規格到敏捷拆分,包含凍結的 CONTRACT 與每個功能主線的強制性測試合約。這是通往 /build-it 的規劃前端。

plan-it 是什麼?

plan-it 是一個專為 AI 代理(如 Claude Code、Cursor、Codex)設計的規劃技能,旨在將模糊的需求轉變為結構化、可執行的交付套件。它涵蓋整個規劃生命週期:探索(研究實際情況)、規格(撰寫設計文件)和敏捷拆分(產出 PRD、功能主線、測試與共享合約),最終輸出一個完整的『可構建套件』。該技能的核心是五條不可協商的規則,包括凍結共享合約、將所有需要人類決策的項目集中到一個閘門、驗證每個代理的輸出是否實際寫入磁碟、根據即時系統而非儲存庫進行規劃,以及將管線控制流交由顯示狀態圖管理。plan-it 的關鍵差異化優勢在於其『測試合約』——每個 PRD 或功能主線在規劃階段就必須附帶最多 20 個具體的測試案例,作為交付質量的強制標準;功能只有在 100% 通過這些測試後才算完成。它支援三個人類決策閘門(範圍、決策、交付),其餘階段則可完全自主運行。Plan-it 支援所有主要平台(Claude Code、Cursor、Codex、Copilot 等),並透過 machine.json 狀態圖與 .plan-it/state.json 狀態檔案來實現可中斷與恢復的執行。

相容平台✓Claude Code✓Codex CLI✓Cursor✓Antigravity
npx skills add DevOtts/plan-it

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

plan-it 是做什麼的?

將模糊的需求 → 產出可構建的交付套件。 這是規劃 指揮者:生命週期中紀律嚴明的前半段,精確終止於 /build-it 開始之處。它執行 探索(研究實際情況)、規格(撰寫設計文件) 以及 敏捷拆分(PRD、功能主線、測試、共享合約)—— 然後進行交接。

  /plan-it  ─────────────►  docs/ + delivery/  ─────────────►  /build-it
  (探索 → 規格 → 計劃)   (可構建的套件)            (構建它)

可直接由人類使用,也可由任何接收新需求並必須將其轉化為交付套件、 然後派遣工作者的指揮代理使用。


五條不可協商的規則(請執行這些規則 — 不要只是建議)

這些是從每次成功運行中逆向工程得出的承重規則。 如果你違反任何一條,下游構建將會偏移或默默失敗。

  1. 在任何並行規劃之前,先凍結共享的 CONTRACT。 CONTRACT 是 法律:規範的實體、結構、API/介面、列舉、儲存庫/分支對應,以及 『已發佈』的定義。團隊依據它來撰寫;任何跨領域的發現都 以帶有日期的修正案形式折回它(v1.0 → v1.1 …)。 沒有凍結合約 → 就沒有並行團隊。

  2. 將所有僅需人類決策的項目批次處理到一個閘門中。 不要預先決定任何 不可逆轉的事項(儲存庫拓撲、託管方式、產品名稱、架構模式、 自建或採購)。將它們一起提出,每個都附上建議, 然後讓人類按編號回答。這個閘門是人類注入願景的地方,而不僅僅是挑選 選項 — 留出空間讓他們添加你沒有提出的概念。用擁有者 + 日期鎖定每個 答案。

  3. 驗證每個代理在磁碟上的輸出 — 『空閒中 ≠ 已交付』。 一個團隊進入 空閒狀態並不表示它寫入了檔案。在任何分派之後,檢查實際路徑是否存在且 非空,然後再繼續。如果某個團隊將其輸出保留在訊息中,請指示它 Write 到確切的絕對路徑。永遠不要相信『完成』。

  4. 在凍結之前,根據即時系統而非儲存庫來制定計劃。 對於任何觸及運行中系統的計劃,儲存庫只是一個假設;已部署的 現實才是真相,而且它們會偏移。在凍結 CONTRACT 之前,請根據 實際系統進行驗證,並將觀察結果寫入(而非從儲存庫推導出的猜測)。 經過實戰檢驗:在一個計劃中,每一次中途修正都追溯到一個由儲存庫推斷的 假設與現實相矛盾 — 錯誤的規範識別碼(清單已偏離已部署的目錄)、 一個存在但指向無效主機的配置值、『待構建』的元件其實已部署, 以及一個找到的憑證是錯誤的那個。請參閱第 3 階段的即時接地閘門以了解具體檢查項目。

  5. 執行機器,而不是文字。 管線的控制流程存在於 machine.json(明確的狀態圖)中,而不是此文件中 — 此文字 解釋了機器。調用時,讀取或初始化 .plan-it/state.json(在目標專案中) 並從其 state 恢復;在每個轉換時寫入它。在每個有守衛的轉換處, 執行守衛對應的子命令(node scripts/gate-check.mjs <check> …), 並且在非零退出碼時絕不推進 — 修復、重新執行,然後轉換。如果 Node 不可用, 請手動執行相同的檢查並將其記錄在狀態檔案中(降級,絕不中斷)。完整 協定:references/machine.md。


確定性核心(v2)— 為何是機器

以文字形式撰寫的控制流程(『執行步驟 1,絕不跳過閘門』)就是 確定性文獻中所謂的文字控制流程:它依賴模型在一個漫長、 容易摘要化的上下文中的紀律,而有時模型不會遵循它。v2 在適當的 抽象層級上反轉了這一點 — 邊緣的非確定性,核心的確定性:

  • machine.json — 與 XState v5 相容的管線狀態圖:15 個狀態、 三個人類閘門(meta.gate + meta.human)、有守衛的轉換,以及 在 parallelPlanning 上的 AMENDMENT 自迴圈。貼到 stately.ai/viz 上查看。
  • .plan-it/state.json — 持久化的運行:當前狀態、閘門批准 (擁有者 + 日期)、合約版本、已驗證的工件註冊表、歷史記錄。這 使得運行能夠在崩潰或全新會話後存活。
  • scripts/gate-check.mjs — 作為退出碼的守衛:verify(規則 3, 空閒 ≠ 已交付)、freeze(規則 1,無合約 → 無團隊)、handoff( 可機械化的 playbooks §F 部分)、state(規則 2,閘門已記錄)、 adversary(規則 6 / D4 — 失敗模式深度:一個建模的機器必須覆蓋或 放棄五個級聯類別;線性工作流程不適用)。LINT_CLEAN 和 ADVERSARY_CLEAN 轉換(verify → adversaryGate → handoff)閘門作用於 最後兩個。

模糊的階段 — 探索、綜合、規格撰寫、判斷 — 保持 LLM 在節點(在機器中標記為 llmAtTheNode)。不要將其形式化; 建模只有在取代混亂時才是儀式。詳細資料、狀態檔案結構, 以及恢復協定:references/machine.md。

硬性執行(v2.1,僅在 Claude Code 上安裝插件): 一個 PreToolUse 掛鉤(scripts/hooks/planit-guard.mjs)在運行的合約未凍結時拒絕 對 PRD/功能主線交付物進行 Write/Edit 呼叫 — 規則 1 不再只是一個指令, 而是變成裝配架拒絕的事情。失敗開放:它永遠不會觸及非 plan-it 的工作。 僅技能安裝則依賴規則 5 的紀律。


測試合約 — 品質差異化因素(使其不可協商)

能最大程度提升交付程式碼品質的單一事項:每個 PRD/功能主線結尾時生成 其自己的測試合約 — 最多約 20 個具體的使用案例/場景,用於驗證 實作 — 並且功能在 100% 通過它們之前不算『完成』。 構建代理不能只交付功能;它必須滿足合約,並透過 /iterate 直到綠燈。

這是一個有名且經過驗證的學科:範例規格(Gojko Adzic)+ ATDD/BDD 用於程式碼(具體範例變成可執行的驗收測試和 活動文件),以及評估驅動開發用於技能/LLM 功能 (註冊具有預期輸出的黃金測試,迭代直到它們通過)。在規劃時 撰寫案例是重點 — 它們成為具有約束力的合約,而非事後想法。

測試合約的規則:

  1. 在規劃時撰寫 — 撰寫每個功能主線/PRD 的最後一步就是其 測試合約。預期輸出現在被註冊(『先設計;預期輸出已註冊』),而非在構建過程中發現。
  2. 每個功能最多約 20 個高品質案例 — 足以驗證真實行為 + 邊界;不是數千個淺層案例(品質 > 數量 — 自動大量生成 = 『敷衍的內容』, 根據評估文獻)。從真實/可能的失敗模式中提取案例。 每種形狀的計數規則: 大型形狀-1 多團隊計劃持有每個功能主線 ≥10 個案例的底線 (每個功能主線都是一個大型功能);小型形狀(單一技能/功能,S/M)撰寫 整個套件約 20 個案例(每個功能主線幾個)。永遠不要同時兩者 — 根據形狀選擇, 這樣審查者就不會將一個正確的小型套件標記為測試不足。
  3. 具有約束力 — 完成定義 = 合約 100% 通過;在此之前,請使用 /iterate。無 部分發佈;無基於模擬的 VERIFIED(一個目標無法觸及的 [REAL] 案例 → IMPLEMENTED-NOT-VERIFIED,永遠不是假的綠燈)。
  4. 根據實作選擇測試類型(單元 / 端到端 / 使用案例 / 壓力 測試中的一個或多個):
實作測試類型方式
CRUD / REST API使用案例(快樂路徑+邊界)+ 端到端每個場景透過 API 和 透過使用 Chrome CDP 的 UI(chrome-cdp-control)執行;對邏輯進行單元測試
技能 / 提示 / LLM 函數使用案例 + 預期輸出執行它,比較實際與預期 — 封閉式輸出精確匹配,開放式輸出使用評分標準 / LLM 作為評判(make-eval、promptfoo、DeepEval G-Eval)
代理 / 有狀態 / 多步驟壓力場景 + 使用案例六個軸:非同步、分派、升級、人類閘門、遞迴、循環防護(設定/預期/通過)
純邏輯 / 函式庫單元 + 基於屬性列舉案例 + 不變量
資料管線 / 遷移黃金值 + 端到端手動計算的預期值;冪等性/回滾
任何有負載/濫用表面的東西壓力 / 對抗性並發、速率、格式錯誤的輸入、紅隊
  1. 執行路徑: /full-qa 執行合約,/iterate 將它循環到 100%, chrome-cdp-control 驅動 UI 場景。合約是從 plan-it 到 build-it 的橋樑:/build-it 的完成定義 = 此合約。

文法與合約標頭格式:references/formats.md(測試合約區塊 + §4–5)。


自主性姿態(引導式自主爆發)

以高努力度自主執行研究與撰寫,但在三個閘門處停止:

閘門何時你問什麼
G1 — 範圍接收後(第 2 階段)在投入精力前確認規模(功能 vs 計劃)+ 編號的完成定義
G2 — 決策規格草擬後(第 7 階段)批次處理的『只有你能做的決策』,每個都附有建議
G3 — 交付在敏捷拆分之前(第 8 階段)『規格看起來一致 — 繼續進行 PRD/功能主線?』

閘門之間的所有事情都在無人值守下運行。建議在一開始使用 /effort xhigh (你不能自己設定 — 告訴使用者如果他們還沒執行,請執行 /effort xhigh)。


第 0 階段 — 接收

機器優先(規則 5): 如果目標專案中存在 .plan-it/state.json, 執行 node scripts/gate-check.mjs state .plan-it/state.json 並從列印的狀態恢復 — 不要重新啟動 history 中已有的階段。如果它不存在, 現在就以 intake 狀態創建它(結構在 references/machine.md 中),並在 本次運行剩餘部分的每次轉換中保持更新。

接受以任何形式到達的需求:一個腦力激盪、一個貼上的 逐字稿、一個需求清單,或一句話。預期是指標,而不是內容 — 會話名稱(/read-chat "<name>")、儲存庫路徑、文件夾。你的工作是去 獲取實際情況,而不是被動接收。

預先捕獲:

  • 原始的願景,使用使用者自己的話語(你將在 02 §1 中引用它)。
  • 指標,指向先前的會話 / 儲存庫 / 文件以供研究。
  • 使用案例(自動偵測 — 這將驅動 G1 閘門的封裝形狀):
    • 全新單一應用程式,綠地開發 · 大型現有儲存庫上的功能 · 從頭開始的多子系統計劃 · 多應用平台(許多 PRD) · 重構/遷移/技術債 · 研究探勘(尚未構建) · PM/看板 自動化 · 記錄/稽核一個已構建的系統。
  • 研究方法:預設為在 xhigh 使用並行 Claude 團隊。

如果需求真的只是一個模糊的段落,沒有指標和一個現有的儲存庫, 那也沒問題 — 第 3 階段的預先接地會找到目標。


第 1 階段 — 完成定義鎖定

將模糊的文字重組為一個編號、可個別驗證的完成定義

  • 一個簡短的陳述假設清單。這是你與使用者針對規劃工作本身的合約。

範例形狀:

本次規劃運行的完成定義:
  1. 實際情況調查文件(每個聲明 → 路徑:行號或表格)
  2. 解決每個發現/矛盾的願景 + 架構文件
  3. 資料/介面合約
  4. …(自動調整大小 — 請參閱第 2 階段)
  N. 交接:合約已凍結,每個 PRD+功能主線有 ≥10 個測試,啟動提示
假設:<清單>

第 2 階段 — 範圍與形狀管理者 ⏸ 閘門 G1

在投入精力之前,先選擇大小(多少)和 形狀(何種形式)。 與使用者確認兩者。

大小根據工件數量縮放:

信號大小
單一功能,1 個子系統S
多功能 / 新子系統,1–2 個儲存庫M
從頭開始的計劃 / 許多子系統L

形狀根據使用案例選擇(完整定義 + 使用案例→形狀表在 references/templates.md D 部分):

  1. 多文件 + delivery/(基線)— 從頭開始的計劃,並行團隊。
  2. 單一檔案 PRD-as-everything — 綠地單一應用程式;CONTRACT 內嵌為 G-規則。
  3. 研究 → 鎖定架構 → 主體+階段 PRD — 大型現有儲存庫上的功能。
  4. implementation/<name>/ 與編號的 PRD-NN — 多應用平台,許多 PRD。
  5. 重構/技術債工作流目錄 — 原地棕地開發。 (+ 研究探勘、可執行看板和反向文件模式 — 請參閱 D 部分。)

階段相同 — 只有工件數量和形式變化。不要給一個功能一個 4 團隊的組織; 不要給一個棕地重構一個綠地願景文件。 呈現所選的大小 + 形狀 + 編號的完成定義,並在繼續之前得到同意。 同意後,在 .plan-it/state.json 中記錄 G1 = {approved, owner, date} 加上 所選的大小/形狀 — G1_APPROVED 轉換由 gateRecorded 守衛。


第 3 階段 — 預先接地

在任何分派之前,定位確切目標,以便代理獲得精確的路徑,而不是模糊的指示:

  • 如果安裝了會話閱讀技能(/read-chat 或類似功能),則用它解析指標會話; 否則請求相關的逐字稿或摘要。
  • ls/grep 命名的儲存庫;找到 docs/、結構檔案、進入點。
  • 如果儲存庫連接了 wiki(根據其 CLAUDE.md),則讀取 wiki 熱快取/索引。

輸出:一個 {subsystem → 要讀取的確切路徑} 的清單,為研究團隊提供種子。

即時接地閘門(規則 4)— 當計劃觸及一個運行中的系統時

儲存庫告訴你應該是真實的;即時系統告訴你實際上是什麼。在 第 8 階段凍結之前執行此操作,並將發現作為觀察到的事實寫入 CONTRACT:

  • 配置可達性,而非存在性。 對於計劃依賴的每個環境/配置槓桿 (基本 URL、API 主機、功能標誌),實際訪問它 — 不要只確認它已設定。一個值 可以被設定為一個已死的主機,並通過『是否存在』檢查,同時默默破壞生產環境。
  • 即時註冊表 / 規範識別碼。 重複。

…

[為翻譯而截斷]

相關技能