Community程式設計與開發github.com

EvolveHQ/docflow

評估並新增一個「慣例」(CONVENTION,即可重複使用的規則、實務或命名/流程標準)到以文件為主的儲存庫中 — 先判斷是否值得編寫成慣例,然後將其導向正確的位置(AGENTS.md 硬性規則、CONVENTIONS.md 指引、GLOSSARY 詞條,或如果是單次決策則導向 /new-adr)。對於過早或重複的慣例會提出異議。當使用者說「新增慣例」、「將此設為規則」、「記錄此實務」、「我們應該總是做 X」或呼叫 /add-convention 時使用。不適合記錄單一架構/產品決策(請使用 /new-adr),也不適合排入待辦工作(請使用 /new-plan)。

docflow 是什麼?

這個 AI 代理技能「add-convention」是一個嚴謹的守門員和路由工具,專門用於在以文件為主的軟體儲存庫中新增可重複使用的慣例(規則、實務或標準)。它首先透過一個結構化的評估協議來判斷某個慣例是否值得編寫,避免過早或重複的規範。然後根據慣例的性質,將其智能地路由到四個可能的文件目標:`AGENTS.md` 的硬性規則、`CONVENTIONS.md` 的指引、`GLOSSARY.md` 的詞條,或者如果是單次架構/產品決策則移交給 `new-adr` 技能。此技能支援受控的深度選擇(快速、引導式、完整),並會逐步提問以確保所有重要決策都獲得使用者確認。它可在 Claude Code、Cursor 或 Codex 等支援技能定義的 AI 編碼代理平台中使用。最終輸出一致的 git 提交,並提供一個強制性的「狀態一覽」摘要區塊,記錄本次執行的動作、整體狀態以及剩餘待辦事項,確保完全透明且可稽核。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EvolveHQ/docflow/tree/HEAD/plugins/docflow/skills/add-convention

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

add-convention

新增一個慣例 — 但僅在評估它是否應該存在以及應歸屬於何處之後。此技能扮演守門員和路由器的角色,而非僅是記錄員。

步驟 0 — 前置條件和背景

  1. 確認儲存庫已初始化完成。
  2. 完整閱讀 CONVENTIONS.md 和 AGENTS.md,以便偵測與現有規則的重疊並判斷適合度。

步驟 0.5 — 評估(先執行)

執行共用的評估協議;分類(步驟 1)和路由(步驟 2)問題都在此協議下提出:

  • 優先重複使用已提供的答案。 將請求或本次對話中已提供的適用選擇(包括深度)視為已回答。在不重複詢問的情況下摘要它們;預設值永遠不會取代明確的選擇。如果每個重要選擇都已提供,則繼續進行。僅詢問缺失或衝突的重要選擇。儲存庫偏好本身不是當前的答案或執行授權。

  • 未解決選擇的深度選擇器。 如果未提供深度且仍有選擇待定,請詢問這次評估應深入何種程度:快速 — 每個選擇都採用其建議的預設值;僅仍會詢問無法推導出預設值的問題(自由文字的基本問題);引導式 — 僅詢問下方標記為高影響力的問題,加上自由文字的基本問題;完整 — 詢問下方所有問題。如果儲存庫的 CONVENTIONS.md 記錄了 Assessment depth:,請在詢問時預先選取它作為建議選項;已記錄的深度絕不會被靜默套用。否則,當請求在幾乎沒有背景的情況下到達時建議使用完整,當請求已完全明確時則建議使用快速。在任何問題時,操作者可以回答「從這裡開始使用預設值」或「深入處理」;立即遵循此切換。

  • 一次只問一個問題,每個問題都帶有建議選項和一行理由;等待每個答案。

  • 使用結構化選擇(單選或多選)。如果主機暴露了結構化的單選/多選問題工具,請使用它並標記建議選項;否則以純文字列出選項 A/B/C 並指出建議選項。僅在無法列舉選項時使用自由文字(例如確切的措辭)。

  • 操作者做決定。 在沒有答案的情況下永遠不要越過問題,並且在沒有背景的情況下呼叫時永遠不要猜測範圍。

問題(跳過請求中已回答的任何問題):

  1. 值得編寫成慣例? — 是(可重複、穩定、可測試)或否(一次性、重複、易變動、模糊)。建議:依據步驟 1 的分類結果;此問題是後續問題的門檻。 (高影響力 — 在引導式中詢問。)
  2. 歸屬位置 — AGENTS.md 硬性規則 / CONVENTIONS.md 指引 / GLOSSARY.md 詞條 / 實際上是決策(移交給 new-adr 技能)。建議:依規則的性質而定(見步驟 2)。 (高影響力 — 在引導式中詢問:錯誤的歸屬位置會造成移動的麻煩。)
  3. 在驗證閘道中強制執行? — 是 / 否。建議:否,除非該規則是可機械式檢查的。
  4. 措辭 — 自由文字(規則陳述本身;在所有深度級別都會詢問)。

步驟 1 — 評估:這值得編寫成慣例嗎?

執行分類。在以下情況下建議不新增:

  • 現有慣例已涵蓋(明確或隱含地)— 指向它而不是重複。
  • 這是一次性決策,非重複性決策 — 編寫它只會增加雜訊。
  • 它很可能會變動 — 過早制定的規則會變成過時的累贅。
  • 它太過模糊,無法如實寫出地進行測試或執行。

在以下情況下建議新增:這是一個重複性決策,其模糊性導致返工,且規則穩定,並且可以表述為代理無需進一步解讀即可遵循。在執行任何操作之前,說明你的建議和理由。

步驟 2 — 路由:它屬於哪裡?

決定歸屬位置,並解釋選擇:

  • 代理必須遵守的硬性規則 → AGENTS.md §Hard rules 中的一個要點,內容放在 CONVENTIONS.md 中。用於不可協商的約束。
  • 創作 / 流程指引 → CONVENTIONS.md 中的一個章節。用於提供資訊但不用作門檻的「我們做事的方式」。
  • 共用詞條 / 定義 → GLOSSARY.md(如果不存在則建立它 — 新增第一個詞條會啟用詞彙表層;將其放置在記錄的成品根目錄)。閱讀儲存庫的 CONVENTIONS.md §Glossary 並檢查其實際宣告的規則;標準結構是可選的 H1 標題和可選的介紹性文字,然後恰好一個兩列表格,其表頭為 Term | Definition。每個詞條佔一個獨立行。永遠不要將詞條記錄為標題、要點或段落,也永遠不要新增第二個表格或不同的欄位列形狀。宣告較舊或不相關詞彙表慣例的 §Glossary 並不代表採用了此表格:使用標準形狀並提供稽核技能的單獨同意規則和檔案遷移,而不是複製舊形狀。GLOSSARY.md 不存在仍然是有效的狀態;此技能僅在實際要新增詞條時才建立。
  • 實際上是決策而非慣例(具有替代方案和後果的架構、產品或技術選擇)→ 這是一個 ADR。停止並提供 new-adr 技能;不要將決策埋在 CONVENTIONS 中。

如果慣例是分類/流程規則(例如如何分類傳入的工作),則優先選擇 CONVENTIONS.md,並在 AGENTS.md 中僅對不可協商的部分加入硬性規則要點。

步驟 3 — 起草並確認

為其歸屬檔案起草確切的措辭。保持簡潔、可測試,並使用儲存庫的語言。顯示差異。在寫入之前確認。

步驟 4 — 寫入並提交

套用編輯。如果慣例升級為硬性規則,請確保 AGENTS.md 和 CONVENTIONS.md 保持一致。使用 Conventional Commit(docs: ...);未觸及 ADR 則不需要 Rationale: 頁尾,但如果儲存庫的協定要求對慣例變更進行此標記,則應添加。

新增或擴充詞彙表。 使用下方定義的標準結構和已宣告規則的檢查;形狀不得在不同執行之間偏移。

  • 規則的來源。 如果 CONVENTIONS.md 沒有 §Glossary 章節(早於此機制的舊儲存庫,或在記錄規則之前啟用的層),則回退到上述產品預設標準形狀:可選的 # Glossary 標題和介紹文字,然後一個 Term | Definition 表格。不要為該儲存庫發明不同的形狀,也不要靜默編輯不相關的慣例。
  • 讀取已宣告的規則。 當 §Glossary 存在時,讀取它實際宣告的內容。如果它描述了標準的兩欄 Term | Definition 表格,則遵循它,並且僅在明確請求時才變更它。如果它陳述了不同的或較舊的詞彙表慣例(要點、文字、另一種欄位列形狀),則儲存庫尚未採用此表格:不要複製舊形狀,也不要靜默重寫規則。使用標準形狀來處理詞條,並提供稽核技能的遷移,該遷移將規則和檔案作為一個單獨同意的差異一起涵蓋。
  • 記錄慣例。 當 §Glossary 不存在時,提議(作為其自己的已確認編輯,與正在新增的詞條分開)在 CONVENTIONS.md 中記錄一個 ## Glossary 章節,說明實際使用的形狀。顯示該差異,並且僅在使用者接受時才寫入它;永遠不要重寫或重新排序 CONVENTIONS.md 的其他章節以騰出空間,如果使用者拒絕,則保持詞彙表標準但保持 CONVENTIONS.md 不變。
  • 建立檔案。 寫入可選的 # Glossary 標題和儲存庫所需的任何簡短介紹文字,然後是單個兩欄表格,表頭為 Term | Definition,並將新詞條作為其第一行。不要發明佔位符詞條。
  • 擴充現有檔案。 逐位元組保留標題、介紹文字、條目順序和每個現有行。將新詞條作為一個新行附加;永遠不要重建、重新排序或重新格式化檔案,也永遠不要引入第二個表格。
  • 定位錨點。 如果新詞條的行可以從傳入連結已使用的標題定位錨點到達,則將該定位錨點保留在該行上而不是丟棄目標;如果無法保留定位錨點,則停止並標記它,而不是猜測。
  • 保留含義。 完全按照提供的內容保留詞條的拼寫、別名、連結和內聯程式碼。將文字豎線轉義為 \|。如果定義真的是多行的,則將其保留在一個儲存格中,使用 <br> 進行強制換行,而不是擴散到額外的行。
  • 重複和歧義。 如果詞條已存在,則顯示現有和提議的定義,並詢問是否更新或保留現有行。永遠不要靜默合併、替換或為同一個詞條新增第二行,也永遠不要猜測定義。
  • 非標準檔案。 如果現有的 GLOSSARY.md 是要點、文字、標題或混合形狀,不要附加衝突的行,也不要因新增詞條而作為副作用重寫檔案。揭露非標準結構並提供稽核技能的同意遷移;僅在使用者接受具體差異時才應用它。被拒絕的遷移會保留使用者保持的檔案。

命名執行的規則和傳播;列出未更新的儲存庫。

結案報告

每次執行結束時,包括被阻擋、失敗和停止的執行,都必須以一個標題為 Status at a glance 的章節結束,其中包含以下三個標籤:

  • This run: 僅實際嘗試的動作及其結果;引用每個驗證閘道的確切輸出和退出碼,包括逾時或中斷。
  • Overall: implemented(已實作)、partially verified(部分驗證)、verified(已驗證)、blocked(被阻擋)、failed(失敗)或 unknown(未知)。通過的子步驟不等於整體通過;不完整或缺失的證據永遠不會變成成功。
  • Yet to do: 每個剩餘的動作、未解決的發現、驗證、清理或所需的輸入。僅在整個任務可驗證完成時才寫入 None;永遠不要因為預算耗盡而省略工作。

常規進度訊息不需要區塊。保持最終結果簡潔,並區分在 PR 上準備的工作和已確認交付的工作。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相關技能