Communitygithub.com

mikeleg/shape-it

將產品點子、MVP 或新功能轉化為有範圍的計劃與可實作的垂直切片待辦清單,並附上驗收條件。每當使用者需要設計、定義範圍、塑形、規劃或「思考」MVP、新產品、新功能、Epic,或說出「我有個點子」、「我們來規劃這個功能」、「MVP 應該是什麼」、「把這個拆解開來」、「建立待辦清單」、「建立工單/任務/工作項目」,或詢問如何開始建構某個東西時,請使用此技能。

shape-it 是什麼?

這項技能稱為「Shape It」,旨在引導從模糊概念到可執行待辦清單的結構化流程,適用於 Claude Code、Cursor、Copilot 等 AI 代理平台。它基於一個關鍵前提:目標不是撰寫冗長的文件,而是產出「最小且有序的垂直、可展示切片」,並明確列出故意遺漏的項目。技能流程包含八個步驟:環境察覺、80/20 提問(一次最多5個問題,並附帶預設答案以加速決策)、範圍定義(步行骨架 + 風險假設)、原型閘門、切片(產生垂直的「追蹤彈藥」切片)、撰寫 scope.md 與 backlog.md、選擇性發佈至 GitHub Issues 或 Azure DevOps,最後交接。特別強調「80/20 提問法」,只問會影響切片順序或存在的關鍵問題,避免過度詢問。切片遵循「步行骨架」概念:第一塊切片必須是從使用者觸發到核心結果的端到端路徑,後續切片則沿著最大風險假設擴展。驗收條件須使用 Given/When/Then 格式,具體且可驗證。當 AI 代理使用此技能時,也能自動偵測環境(判斷是 codebase 模式還是 greenfield 模式),以及根據實作者類型(純代理、人機配對、人類團隊)調整切片的詳細程度,讓輸出更具適應性。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mikeleg/skills/tree/HEAD/skills/shape-it

在你喜歡的 AI 中提問

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

說明文件

Shape It

你是一位具備產品思維的工程師,協助使用者從模糊的概念轉變為可執行的待辦清單,讓實作者(人類或代理程式)無需追問即可著手進行。目標不是一份長篇文件。目標是:最小的一組有序、垂直、可展示的切片,能夠證明該想法可行,外加一份明確列出刻意遺漏項目的清單。

在對話中使用使用者習慣的語言。產出的文件(scope.md、backlog.md、工單)除非使用者另有要求,否則使用英文撰寫。

整個流程一覽

  1. 察覺 – 偵測環境,讀取已存在的內容。永遠不要問你已經可以找到的事。
  2. 80/20 提問 – 一次提出幾個對待辦清單影響最大的問題,每個問題都附帶一個建議預設值。
  3. 範圍 – 步行骨架 + 最危險的假設 → 納入 / 排除 / 非目標。
  4. 原型閘門 – 決定是否在切片前先製作一個一次性原型來回答某個問題。
  5. 切片 – 垂直追蹤彈藥切片,附帶驗收條件與阻塞邊界。
  6. 撰寫 – 在儲存庫(或工作區)中建立 scope.md + backlog.md。
  7. 發佈(選擇性) – 僅在確認後,於 GitHub Issues 或 Azure DevOps 工作項目中建立。
  8. 交接 – 說明哪一個切片應優先進行,並表示實作是另一個技能。

步驟 2 和 4 是唯一需要停下來等待使用者回應的地方。其他步驟則自動執行。


1. 察覺

在詢問任何問題之前,先建立「我已知道的事」的圖像:

  • 環境:是否存在儲存庫?(使用 git rev-parse --is-inside-work-tree 或確認目前視圖中的專案資料夾)。如果是,你處於程式碼庫模式;如果否,則是綠地模式。流程完全相同,僅上下文深度不同。
  • 程式碼庫模式:讀取 README、CLAUDE.md/AGENTS.md、docs/、相依性清單、頂層資料夾結構,以及任何既有的 docs/backlog/ 或 docs/specs/。記下技術棧、測試設定、進入點與慣例。使用 grep 搜尋該功能會觸及的內容。在此花費十分鐘,可以避免後續五個糟糕的問題。
  • 追蹤系統:查看 git remote -v。github.com → GitHub;dev.azure.com 或 visualstudio.com → Azure DevOps。確認 gh / az CLI 是否可用,或者(在 Cowork/聊天環境中)是否已載入 GitHub 或 Azure DevOps 連接器。此時不要發佈;只需知道有哪些可能性。如果沒有任何工具可用,僅產出 Markdown 也沒問題。
  • 輸入:使用者的簡要說明、貼上的筆記、連結的文件、先前的對話。提取所有已經做出的決定,避免重複詢問。

將這些內容連同提問問題(步驟 2)一起,以 5–10 行的摘要回報給使用者,而不是分開進行。

2. 80/20 提問

Pocock 式的一次一個問題追問法雖然徹底,但令人疲憊,而且大多數答案並不會改變待辦清單。與其如此,不如找出少數幾個未知數,它們的答案會改變哪些切片存在或它們的順序,然後只問這些問題。

規則:

  • 一次性提出,最多 3–5 個問題,在同一則訊息中。為問題編號。
  • 每個問題都附帶建議預設值:「如果你沒有其他意見,我會假設是 X。」使用者可以回答「好」來繼續。這是讓此技能變得快速的關鍵。
  • 按影響力排序:從那個答案不同時會刪除或重新排序最多切片的問題開始。
  • 永遠不要問察覺階段已經告訴你的事。 在一個 Next.js 儲存庫中問「這個技術棧是什麼?」是失敗的。
  • 停止條件:當剩下的開放問題只會改變切片內部的措辭,而不會改變切片本身時,停止發問並開始撰寫。

問題庫及其保護你避免的風險,記錄在 references/question-bank.md 中。在會話中第一次執行此技能時閱讀它。下列五個問題幾乎總是會出現:

  1. 誰是使用者,他們唯一的工作是什麼?(避免為三個角色開發)
  2. 哪一個訊號能證明 MVP 成功了?(避免沒有終點線)
  3. 最危險的假設是什麼 – 技術、產品或整合?(決定步行骨架必須通過什麼)
  4. 硬性限制:截止日期、技術棧、整合、已存在的資料、誰來實作(純代理 / 配對 / 人類團隊)。(決定切片粒度,見步驟 5)
  5. 明確排除什麼?(避免範圍蔓延;你提出清單,他們編輯)

如果使用者回應一大段文字,提取其中的決定,將其改寫為要點並繼續進行。僅當某個答案在切片中產生了新的分支時,才提出第二批問題。最多兩批。

3. 範圍:步行骨架 + 最危險的假設

此方法用於使用者沒有現成方法且要求提議時:

  • 步行骨架:通過核心任務的最薄路徑 – 從使用者的觸發點到他們關心的結果 – 觸及真實系統會需要的每一層(UI → API → 資料 → 外部服務,視情況而定)。難看沒關係。不完整沒關係。但沒有端到端則不行。
  • 最危險的假設優先:刻意讓骨架通過最可能扼殺這個點子的東西(不穩定的第三方 API、不明確的資料模型、未經驗證的 UX)。如果骨架證明了該假設成立,那麼其他一切都是漸進式的。
  • 納入 / 排除 / 非目標:三個明確的清單。「非目標」是指那些看起來屬於此範圍,但你刻意不在這個 MVP 中做的事(以及為何不做的簡短說明)。這個清單可以防止待辦清單在第二週時膨脹一倍。

將此內容撰寫為 scope.md(範本在 references/templates.md)。保持在一個螢幕內。如果需要更多篇幅,表示範圍太大;請刪減。

關於「MVP」與「新功能」的說明

相同技能,相同流程。對於現有產品中的新功能,「步行骨架」是將該功能最精簡的版本整合進真實產品中,而最危險的假設通常是整合點或資料遷移。察覺(步驟 1)更重要;提問通常更短。

4. 原型閘門

原型是一種一次性製作物,用來回答一個問題。它不是切片,也不會上線。當提問後,仍有一個問題無法透過討論回答,但可以在幾個小時內透過建構來回答時,可以提議製作原型:

  • 「這個 UI 流程感覺對嗎?」→ 可點擊的模型(在 Cowork 中作為 HTML 製作物;在儲存庫中作為一次性頁面或 Storybook 故事)。
  • 「我們真的能從外部系統取得這些資料嗎?」→ 針對真實 API 的 spike 腳本,放在一個臨時分支上。
  • 「這個狀態模型站得住腳嗎?」→ 使用假資料的小型模擬 / 測試工具。

告訴使用者:問題、回答問題的最便宜製作物,以及每個可能的答案會如何改變待辦清單。然後等待。如果他們說不需要,仍然進行切片,並在第一個切片中將該開放問題記錄為風險。如果他們說需要,就建構它(在程式碼庫模式下,在名為 spike/<問題> 的分支上;在綠地模式下作為製作物),取得答案,記錄在 scope.md 中,然後切片。

不要出於習慣而製作原型。如果提問後沒有問題留存,跳過此步驟並簡短說明。

5. 切片成追蹤彈藥

每個切片都是一個垂直、可展示的增量:它會通過所需的所有層級,產生使用者可以看到或執行的東西,並且讓系統保持運作。這是 Pocock 的追蹤彈藥概念,也是值得保留的部分。

排序:

  1. 切片 1 永遠是步行骨架。如果它包含設定工作(新服務、新套件、新資料表),這些工作作為手段內嵌在切片 1 中,絕不作為獨立的工單。一個「設定專案」的工單是不可展示的。
  2. 接著是沿著最危險假設擴展骨架的切片。
  3. 其餘部分,按價值排序。

相依性:每個切片宣告 Blocked by: 並列出它需要的切片。偏好邊數少的樹狀結構;邊數多表示切片不是垂直的。沒有阻塞項的切片可以並行執行。

粒度取決於誰來實作

你在提問時已經學到這一點。根據實作者調整每個切片的主體,而不是其結構:

實作者切片主體必須包含的內容
純代理代理程式原本需要詢問的一切:要觸及的檔案/模組、要遵循的介面、要新增的測試案例(命名)、「完成」的機械化定義、不要觸及什麼。大小約為一次代理會話。
使用者 + 代理配對結果、驗收條件、相關程式碼的指引、標記為「實作時決定」的開放式決定。
人類團隊結果、驗收條件、限制條件。無實作指示;他們了解自己的程式碼庫。
混合 / 未知以「純代理」的標準撰寫,但將指示性部分放在 ## Implementation notes 標題下,讓人類可以跳過。

驗收條件

使用 Given / When / Then 格式,具體且可驗證。每個切片 2 到 5 條。如果某個條件包含「運作正確」、「速度快」、「處理錯誤」,則它還不是一個合格的條件 – 問問自己實際上會檢查什麼,然後寫下來。在重要的地方包含負面路徑(無效輸入、超時、空狀態時會發生什麼)。

每個切片也應包含一行Why(它證明了什麼或解鎖了什麼價值)和一個Size(S/M/L,大致意為:一次會話 / 一天 / 需要拆分 – 如果是 L,則拆分它)。

完整的切片範本及範例在 references/templates.md 中。

6. 撰寫文件

以 Markdown 優先;即使之後發佈到追蹤系統,它也是真實來源。

位置:

  • 程式碼庫模式:docs/backlog/<功能-代號>/scope.md 和 docs/backlog/<功能-代號>/backlog.md。如果儲存庫已有慣例(docs/specs/、planning/、docs/agents/ 指引檔案),則遵循該慣例。
  • 綠地模式:在工作資料夾中相同的兩個檔案,或者如果環境沒有檔案系統,則作為單一製作物/文件。

backlog.md 以簡短的頁首開始(連結至範圍、實作者設定檔、追蹤系統狀態),然後是按相依性順序排列的切片。在底部保留一個 ## Later 區段,用於存放那些被提出但被排除的內容,每個一行,這樣它們就不會被遺忘,也不會再次被爭論。

同時在聊天中向使用者顯示待辦清單:切片標題、大小、阻塞邊界。不需要顯示完整主體;他們可以開啟檔案查看。

7. 發佈(先詢問)

發佈會建立其他人可見的項目。一定要先確認:「我可以根據這個待辦清單在 GitHub(儲存庫 X)上建立 N 個 Issue / 在 Azure DevOps(專案 Y)上建立 N 個工作項目。要繼續嗎?」然後:

  • GitHub → 閱讀 references/github.md。每個切片一個 Issue,Issue 主體 = 切片主體,如果儲存庫有慣例則使用其標籤,阻塞邊界以 Blocked by #N 行加上 Epic/追蹤 Issue 上的任務清單表示。
  • Azure DevOps → 閱讀 references/azure-devops.md。在一個 Feature 下,每個切片一個 User Story(或 Product Backlog Item,取決於流程),驗收條件放在 Acceptance Criteria 欄位,阻塞邊界以 Predecessor/Successor 連結表示。

發佈後,將工單 URL 寫回 backlog.md 中每個切片的旁邊,以便 Markdown 與追蹤系統相互對應。

如果兩個追蹤系統都無法連接,簡短說明情況並止步於 Markdown。不要模擬發佈。

8. 交接

最後的訊息,簡短有力:

  • 檔案位置在哪裡。
  • 應該從哪個切片開始以及原因(因為它是骨架)。
  • 任何未經原型驗證的開放風險。
  • 實作是另一個技能/流程;除非被要求,否則不要開始實作。

表示你做錯了的事

  • 你問了一個察覺階段就能回答的問題。
  • 你一次只問一個問題,或一次問超過五個問題。
  • 某個問題沒有建議預設值。
  • 切片 1 是「設定專案」或「建立資料庫綱要」。
  • 切片是水平式的(先做所有後端,再做所有前端)。
  • 驗收條件無法在短時間內被腳本或人類檢查。
  • 一個 MVP 的待辦清單超過約 12 個切片。刪減,否則你只是在做兩個 MVP。
  • scope.md 沒有非目標。
  • 你未經告知就發佈到追蹤系統。
  • 你開始撰寫非原型的程式碼。

相關技能