Community研究與資料分析github.com

toyin-software-factory/audit

在全新專案、缺乏文件的既有程式碼庫,或單一區域(例如 /audit src/auth)上執行 /audit,以引導專案的 AI 情境,建立所有後續技能都會讀取的 AGENTS.md 檔案。會寫入與工具無關的 AGENTS.md 以及簡潔的 CLAUDE.md 指標,僅新增缺少的部分;絕不覆寫已精心維護的內容。

audit 是什麼?

此技能的核心任務是為軟體專案建立並維護 AI 可讀的情境檔案(AGENTS.md),確保後續所有的 AI 工具與代理程式(如 Claude Code、Cursor、Codex 等)都能理解專案結構、慣例與開發標準。它能夠處理三種主要情境:全新專案(綠地開發)、完全沒有文件的既有程式碼庫(棕地開發),以及已有部分文件的專案。在綠地模式下,它會詢問編碼標準並根據答案與架構決策來建立根層級的 AGENTS.md;在棕地模式下,它會掃描整個程式碼庫,自動判斷哪些資訊應放在根層級、哪些應放在巢狀的區域層級;在既有文件的情境下,它只會以「有條件地新增遺漏內容」的方式進行差異補充,絕不覆寫任何現有的內容。它能夠處理單一或多個工作區的儲存庫(monorepo),並會遷移舊版的 CLAUDE.md 內容。此外,它也提供一個「工作流程設定訊號」,能正確識別剛透過自動化流程建立好的綠地專案,避免將其誤判為棕地專案。

相容平台✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/toyin-software-factory/factory-template/tree/HEAD/.claude/skills/audit

Installed? Explore more 研究與資料分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

輸出風格(平實文字,無破折號,無連字符)

此技能產生的所有檔案與訊息,請一律使用平實簡單的語言。以「你」稱呼讀者,語氣溫暖直接,像同事一樣,並將每個步驟呈現為建議(可執行或跳過),而不是命令。保留具有實際意義的技術術語,並以平實的文字加以說明。絕不使用破折號或連字符作為標點符號:不用 em dash、en dash,也不使用連字符構成的複合詞。請寫 read only,而不是 read-only。用簡單的詞語來表達,或重新組織句子。程式碼、檔案路徑、命令旗標,以及其他技能比對時會用到的值,則保留其連字符。使用簡短的句子、逗號或括號。清晰比花俏更重要。

此技能的功能

情境引導器:寫入所有後續技能與 AI 工具都會讀取的 AGENTS.md 檔案。

  • 綠地開發(尚無程式碼):詢問編碼標準,根據回答以及(如果 /scope 已設定)領域標頭中的建置方式(名稱與一句話原則)來播種根層級的 AGENTS.md。在專案透過所選技術棧建立好之後執行(/scope → /architect 決定技術棧 → 建立 → /audit);太早執行是沒有意義的。
  • 棕地開發,無文件(有程式碼,無 AGENTS.md):掃描整個專案,寫入根層級的 AGENTS.md 以及巢狀的 <area>/AGENTS.md 檔案,判斷哪些是全域性的(根層級)與哪些是區域特定(巢狀)。
  • 棕地開發,部分有文件:檢查現有的根層級與巢狀文件,與整個程式碼庫進行比對;僅新增缺少的部分(新的全域事實、未記錄區域的巢狀文件);絕不覆寫已精心維護的內容。

不建立規格(/architect 負責此項)、不維護變更後的檔案(/sync 負責此項),也不撰寫功能範圍(/scope 負責 docs/scope/)。

情境檔案慣例(AGENTS.md 是標準)

持久性的情境資訊存在於與工具無關的 AGENTS.md(根層級與巢狀)中;所有代理程式(Codex、Cursor、Claude Code 等)都會讀取它。CLAUDE.md 只是一個一行的指標,其完整內容透過 Claude Code 的 @ 匯入功能來引入同層級的 AGENTS.md(確切的指標內容位於 agent-prompt.md 中);兩者之間絕不重複內容。

  • 將知識寫入 AGENTS.md。若缺少則建立它。絕不覆寫現有的 AGENTS.md(可能由使用者或工具撰寫);以保守且有條件的方式填補缺口,並取得許可。
  • 遷移既有內容:一個有內容但沒有 AGENTS.md 的 CLAUDE.md → 請求許可,將其內容移至新的 AGENTS.md,並將 CLAUDE.md 替換為指標。絕不默默丟棄已精心維護的內容。
  • 根層級保持簡短且全域性;巢狀的 AGENTS.md 僅用於確實具有實際慣例的重要區域(與先前應用於 CLAUDE.md 的根層級/巢狀規則相同)。

範圍

一個區域路徑參數(例如 auth、src/payments)會觸發階段 3。若無參數,則下列的「前置檢查」信號會將路線引導至階段 0(不明確:詢問是新專案還是既有專案)、階段 1(綠地開發:詢問標準,播種根層級)、階段 2(已建立但無根層級 AGENTS.md:整個儲存庫掃描),或階段 4(根層級 AGENTS.md 已存在:填補缺口)。一個有內容但沒有 AGENTS.md 的既有 CLAUDE.md 會被遷移,然後視為階段 4。

行動 vs 詢問

階段 1 在建立根層級 AGENTS.md 之前,會透過多選題詢問編碼標準問題。階段 2 立即行動,不問問題;它會寫入根層級及其判斷為必要的巢狀文件。階段 3 和 4 會先探索再行動,但在修改現有的根層級 AGENTS.md 或遷移既有 CLAUDE.md 之前,會請求許可;階段 4 會先報告為未記錄區域建立的巢狀文件,然後在確認後才套用。

成品所有權

AGENTS.md 檔案包含內容:如果根層級不存在則建立(階段 1、2),如果 <area>/AGENTS.md 不存在且經判斷有必要則建立(階段 2、3、4);當一個已存在時,則填補缺口或提議新增內容並取得許可;絕不覆寫。CLAUDE.md 檔案僅為指標(根層級和區域),如果不存在則建立;一個有內容的既有 CLAUDE.md 會在有許可的情況下遷移到 AGENTS.md。在建立巢狀 AGENTS.md 時,在根層級 AGENTS.md 的 ## Context files 下新增恰好一行指標:- [<area>/AGENTS.md](<area>/AGENTS.md) (<一行描述>)。絕不在每個子資料夾都建立,僅在存在不同慣例的地方建立。

可攜性(任何作業系統,任何代理程式)

  • 命令:git 是唯一必需的 CLI,在所有作業系統上都相同。其他 Shell 片段(檔案計數、find、[ -f ])是 POSIX 參考,不是實際的指令稿;請使用代理程式的跨平台檔案工具(搜尋/glob、讀取、寫入)來列出、計數和檢查存在性。
  • 捆綁的檔案存放在此技能的資料夾中:agent-prompt.md、階段模式檔案(modes/*.md)以及模式預設集(patterns/*.md)。將該資料夾解析為絕對路徑。在路由時讀取相符的階段模式檔案,然後在寫入時讀取 agent-prompt.md 加上 SELECTED 模式預設集。其中的全大寫預留位置(PHASE、AREA、ADDITIONAL_STANDARDS、MONOREPO_OR_NO、INSTALLED_SKILLS、DECLINED_TOOLS 等)是你在前置檢查和問題回合中收集到的輸入;在讀取時逐一套用。
  • 不支援互動式提問?請以純文字形式提出任何多選題,並附上相同的選項。

執行

主執行緒在每個階段負責寫入;它絕不會將 AGENTS.md 的寫入工作交給子代理程式。唯一的子代理程式是唯讀的「偵察兵」(最便宜的模型,Claude Code:haiku,絕不使用會話模型),僅在需要大規模掃描時才產生;它會回傳一個簡潔的地圖,主執行緒據以寫入。小型專案或單一區域不需要偵察兵;直接讀取。在寫入之前,請讀取 agent-prompt.md(角色設定、各階段指示、範本),在階段 1 還需讀取所選的模式預設集;然後按照指示寫入。僅在寫入時才讀取 agent-prompt.md,而不是在前置檢查期間。

前置檢查(主執行緒在執行任何其他動作之前執行此項)

收集多個信號(僅檔案數會誤導:脚手架會膨脹它,不熟悉的語言會使它歸零):

  1. 情境檔案:根層級 AGENTS.md 存在 → ROOT_EXISTS;僅有內容的 CLAUDE.md → ROOT_LEGACY;兩者皆無 → ROOT_MISSING。
  2. 跨常見生態系的原始碼計數(副檔名如 .ts/.tsx/.js/.jsx/.py/.go/.rs/.java/.rb/.swift/.kt/.php/.cs/.dart/.ex/.exs/.scala/.c/.cpp/.h/.lua/.clj),排除供應商/產生的目錄(node_modules、.git、dist、build)和設定檔(*.config.*)。
  3. 已建立的信號:git log --oneline 的提交歷史深度;真實的清單檔案(package.json、pyproject.toml、go.mod、Cargo.toml、composer.json、*.csproj、pubspec.yaml、mix.exs、Gemfile)。
  4. Monorepo 信號:工作區標記(pnpm-workspace.yaml、turbo.json、package.json 中的 "workspaces" 欄位)或根層級附近的任何 apps/*/package.json / packages/*/package.json。
  5. 工作流程設定信號(WORKFLOW_SETUP):根層級 AGENTS.md 不存在,但工作流程已經決定了技術棧,亦即存在一個 docs/specs/ 架構規格(包含 ## Proposed stack 章節),和/或 docs/scope/ 有一個「Stack and architecture」(或類似基礎結構)的功能。這是預期的綠地開發順序(/scope → /architect 決定技術棧 → /develop 建立 → /audit):剛建立好,仍需要捕獲編碼標準。當此信號觸發時,現在存在的清單檔案和脚手架原始碼是脚手架,而不是既有的程式碼庫。

選擇階段。檢查的順序很重要:工作流程設定信號的優先級高於原始程式碼計數,因為一個全新的脚手架雖然有清單檔案和原始碼檔案,但仍然屬於綠地開發。

條件階段
提供的參數是區域路徑階段 3
ROOT_EXISTS(或遷移後的 ROOT_LEGACY)階段 4
ROOT_MISSING 且 WORKFLOW_SETUP(存在技術棧規格和/或範圍技術棧功能)階段 1,即使現在存在清單檔案和脚手架原始碼。詢問編碼標準;根據規格的技術棧來播種根層級。絕不將剛建立的工作流程專案視為棕地開發。
ROOT_MISSING,無 WORKFLOW_SETUP,無原始碼檔案且無清單檔案階段 1
ROOT_MISSING,無 WORKFLOW_SETUP,有程式碼(原始碼 ≥ 10 或一個清單檔案),≥ 2 次提交且明顯是真實的功能程式碼(不僅是脚手架)階段 2,任何語言
ROOT_MISSING,無 WORKFLOW_SETUP,有程式碼但看起來像未動過的脚手架,或 ≤ 1 次提交,或你無法分辨是綠地還是棕地開發階段 0,詢問

為什麼是這個順序:一個全新的脚手架雖然有清單檔案和入門檔案,但仍然屬於綠地開發,所以僅原始程式碼計數會將其誤判為棕地開發並跳過標準問題;工作流程設定信號能捕捉到這種情況並將其路由到綠地開發。真正的棕地開發(階段 2)意味著真實的功能程式碼、真實的歷史記錄,且沒有正在進行的工作流程設定。任何不明確的情況都歸入階段 0;絕不將可能是綠地的專案預設為棕地。

Monorepo(MONOREPO=yes):根層級加上每個工作區的輕量存根,按需深化。每個工作區(apps/*、packages/*)都是一個第一等的區域;其主要文件存放在工作區根層級(packages/api/AGENTS.md),絕不埋在更深的地方。整個儲存庫的執行不會深度掃描每個工作區;寫入儲存庫根層級的 AGENTS.md(monorepo 範圍的工具、共用慣例)加上來自其清單檔案的每個工作區的輕量存根,不進行程式碼掃描,並包含根層級指標。當工程師執行 /audit packages/api(階段 3)或首次在那裡建置時,才會進行完整的慣例/陷阱/關鍵檔案掃描。工作區內部值得擁有自己文件的地方(packages/ui/src/mdx/)會獲得一個額外的文件,並從工作區根層級文件連結。一個已埋在工作區內但沒有工作區根層級文件的文件:詢問:「packages/ui 在 src/mdx/ 下有一個情境檔案,但其根層級沒有。將其移至 packages/ui/AGENTS.md,還是保留為巢狀文件並在新建的 packages/ui/AGENTS.md 下連結?」若是移動:將其重新定位到工作區根層級。若是保留巢狀:建立工作區根層級的 AGENTS.md 並保留深層文件,從根層級連結。根據上述慣例遷移既有 CLAUDE.md 的內容。在寫入時套用 MONOREPO=yes 加上工作區清單。

既有內容遷移(任何階段):在 ROOT_LEGACY 的情況下,在繼續之前請求許可:「我找到一個包含專案情境但沒有 AGENTS.md 的 CLAUDE.md。我將把其內容移至一個新的 AGENTS.md(以便所有工具都能讀取),並將 CLAUDE.md 替換為一個指標。繼續嗎?」若同意:將內容原封不動地複製到 AGENTS.md,然後將 CLAUDE.md 替換為指標;現在 AGENTS.md 已存在,因此以階段 4(填補缺口)繼續。若不同意:保持兩者不變,繼續而不進行遷移。巢狀的 <area>/CLAUDE.md 也適用相同規則。

路由至所選階段

階段 0(不明確)在下方直接處理。對於階段 1 到 4,僅讀取相符的模式檔案,然後按照指示執行:

  • 階段 1(綠地設定) → modes/greenfield.md
  • 階段 2(整個儲存庫掃描) → modes/whole-repo.md
  • 階段 3(區域掃描) → modes/area.md
  • 階段 4(填補缺口) → modes/gapfill.md

不要讀取其他模式檔案。綠地和整個儲存庫模式會額外讀取 modes/tool-skills.md 以進行代理程式技能 / MCP 掃描(區域和填補缺口執行則跳過此項)。

階段 0:分類(僅在前置檢查不明確時)

不要猜測。透過代理程式的互動式選項選擇器(Claude Code 上的 AskUserQuestion)或具有相同選項的純文字來詢問一次。根據哪個信號較強(類似脚手架且有清單檔案但歷史記錄少的樹狀結構傾向「新專案」;真實的功能程式碼和深層歷史記錄傾向「既有程式碼庫」)來標記一個選項為 (recommended),並且選擇器在最後新增一個自由文字自訂欄位:

  • 問題:「我無法判斷這是一個新專案還是一個既有的程式碼庫(<說明原因,例如:存在一個清單檔案,但我沒有看到任何我能辨識的語言的原始碼,或檔案看起來像未動過的脚手架>)。是哪一種?」
  • 標題:「專案狀態」
  • 選項:1. New project,「我將詢問您的編碼標準並播種情境。」 → 階段 1(讀取清單檔案/脚手架以取得技術棧;仍然詢問標準)。2. Existing codebase,「我將掃描現有內容並記錄下來。」 → 階段 2。

所有階段之後

如果在應該寫入 AGENTS.md 時卻沒有寫入(檔案缺少/為空),則報告失敗並重新執行;不要轉達它並未產生的成功訊息。否則轉達報告:發現了什麼(2 到 4 個要點)、寫入了什麼(檔案路徑)、提議或跳過了什麼(如果找到現有檔案)。

模式預設集

請參閱 patterns/ 目錄,了解階段 1(綠地模式)中使用的四種編碼風格預設集。

寫作指南

請參閱 agent-prompt.md(主執行緒在寫入時讀取它;其中包含各階段指示和 AGENTS.md 範本)。

Individual skills in this repo

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

相關技能