我合作過的多數企業開發團隊,現在都同時使用一種以上的 AI 編碼代理。平台團隊把 Claude Code 定為標準,前端團隊付費使用 Cursor,所有人都透過組織的 GitHub Enterprise 合約擁有 GitHub Copilot,有人正用 Codex 排程背景任務,資料團隊則有一半的筆電裝了 Gemini CLI。每個工具都讀取自己的指示檔案,而每份檔案都是由最早採用該工具的人寫的。半年後,CLAUDE.md 裡的建置命令已經錯了,.cursorrules 仍禁用一個團隊現在依賴的函式庫,而沒有人說得出哪份檔案才是權威來源。本指南針對這種情況提出單一設定策略:以 AGENTS.md 作為供應商中立的單一事實來源,周圍環繞精簡的工具專屬轉接檔,明確規定哪些內容必須留在工具專屬檔案中,再加上讓這些檔案保持可信的治理機制。每一項關於工具讀取哪些檔案的說法,都已對照該供應商目前的文件查證,並在文中附上連結。
問題所在:五個工具、五份檔案、持續漂移
指示檔案就像交給新進工程師的入職文件,差別在於這位工程師會在每一個工作階段開始時重讀它,而且當內容錯誤時從不反駁。這讓漂移的代價高得前所未有。一份過時的 README.md 只浪費新人一個下午;一份過時的指示檔案卻會讓存放庫中的每一個代理工作階段走上同一條錯路,而且因為每個工具各有自己的檔案,漂移還不均勻:Claude Code 可能知道新的測試執行器,Copilot 卻仍在跑舊的。
我已在企業團隊的 CLAUDE.md 指南與企業 AI 編碼的 AGENTS.md 指南中分別介紹過這兩份最常見的檔案。那兩篇文章說明每份檔案裡該放什麼。本文則位於它們之上,回答那個不斷出現在搜尋查詢與探索會議中的問題:當團隊同時運行多個代理時,哪份檔案勝出?又要如何停止維護同一套規則的五份複本?
簡短的答案是:你不需要維護五份複本。你只維護一份,並且精確理解每個工具如何使用它。
每個工具讀取什麼
下表是我當初開始釐清這一切時最希望手邊就有的參考。它根據各供應商目前的文件建立,表格之後的各工具小節則提供細節與連結。
| 工具 | 主要指示檔案 | 巢狀與優先順序 | 文件記載的限制與匯入 | 是否讀取 AGENTS.md? |
|---|---|---|---|---|
| Claude Code | CLAUDE.md 或 .claude/CLAUDE.md、CLAUDE.local.md、.claude/rules/*.md、受管的 CLAUDE.md | 工作目錄及每個上層目錄中的檔案在啟動時載入;子目錄檔案按需載入;全部串接,最接近者最後讀取 | @path 匯入最多四層;每份檔案目標低於 200 行 | 是,當工作目錄或其上層不存在 CLAUDE.md 時(v2.1.277 以上),或透過 @AGENTS.md 匯入 |
| OpenAI Codex | AGENTS.md(AGENTS.override.md 優先) | 先讀 ~/.codex/,再從專案根目錄往下到工作目錄每個目錄取一份檔案,依序串接,越近的檔案越優先 | 合併鏈受 project_doc_max_bytes 限制,預設 32 KiB | 原生支援 |
| GitHub Copilot | .github/copilot-instructions.md、帶有 applyTo glob 的 .github/instructions/*.instructions.md | 存放庫層級與符合的路徑專屬檔案同時使用;順序為個人、存放庫、組織指示 | 未記載平台大小限制 | Cloud agent、GitHub.com 上的 code review、VS Code chat 與 Copilot CLI 會讀取;GitHub.com、Visual Studio 與 JetBrains 中的 Copilot Chat 不會 |
| Cursor | 帶有 description、globs、alwaysApply 的 .cursor/rules/*.mdc | Team Rules、Project Rules、User Rules 依序合併,衝突時較前者勝出 | 規則保持在 500 行以內;被參照的檔案不會內嵌 | 是,根目錄與子目錄皆支援,合併後以較具體者勝出 |
| Gemini CLI | GEMINI.md | 全域 ~/.gemini/GEMINI.md、工作區目錄及其上層,再即時載入子目錄檔案 | @file.md 匯入;context.fileName 接受檔名清單 | 是,當 context.fileName 包含 AGENTS.md 時 |
| Windsurf | .windsurf/rules/*.md(現在偏好 .devin/rules/)、舊版 .windsurfrules | 在工作區中搜尋規則並向上至 Git 根目錄;trigger 模式為 always_on、glob、model_decision、manual | 每份工作區規則檔 12,000 字元,全域檔案 6,000 字元 | 是,根層檔案永遠啟用,子目錄檔案以 glob 自動限定範圍 |
Claude Code:CLAUDE.md 及其分層
Claude Code 的記憶文件依載入順序列出四個範圍:由 IT 部署的受管政策檔(macOS 為 /Library/Application Support/ClaudeCode/CLAUDE.md,Linux 與 WSL 為 /etc/claude-code/CLAUDE.md,Windows 為 C:\Program Files\ClaudeCode\CLAUDE.md)、位於 ~/.claude/CLAUDE.md 的使用者檔案、位於 ./CLAUDE.md 或 ./.claude/CLAUDE.md 的專案檔案,以及供個人筆記使用、已加入 gitignore 的 ./CLAUDE.local.md。Claude 在啟動時載入工作目錄及其每個上層目錄中的 CLAUDE.md,從檔案系統根目錄往下串接,因此最接近的檔案最後讀取;子目錄中的檔案則只在它讀取、寫入或編輯該子目錄中的檔案時才載入。
有三個細節對共用策略至關重要。第一,@path/to/file 匯入語法會把另一份檔案拉進上下文,路徑相對於包含該匯入的檔案解析,且最多可嵌套四層;程式碼區段與圍欄程式碼區塊內的匯入會被忽略。第二,Anthropic 的建議是每份 CLAUDE.md 目標低於 200 行,而匯入並不會降低這個成本,因為被匯入的檔案會與匯入它的檔案一同載入。第三,.claude/rules/*.md 檔案會與專案 CLAUDE.md 一起載入,而 frontmatter 中的 paths: 欄位可以把規則限定於符合的檔案,只在 Claude 處理這些檔案時才載入。如果你想逐層了解一個 Claude Code 存放庫的全貌,包括 skills 與 hooks,請閱讀Claude Code 專案的解剖。
OpenAI Codex:AGENTS.md 加上覆寫檔案
Codex 是這個格式最初為其打造的工具,而它的 AGENTS.md 文件是我找到的對巢狀行為最精確的描述。Codex 先在其主目錄(~/.codex,或 CODEX_HOME)中查找,此處只使用第一個非空檔案,且 AGENTS.override.md 優先於 AGENTS.md。接著它從專案根目錄(通常是 Git 根目錄)開始往下走到目前目錄,每個目錄最多取一份檔案,順序為 AGENTS.override.md、AGENTS.md,再到 project_doc_fallback_filenames 中列出的任何名稱。這些檔案從根層往下以空白行分隔串接,所以越靠近工作目錄的指示在提示中越後出現,也就越優先。
多數團隊忽略的限制在這裡:project_doc_max_bytes 預設把合併大小限制在 32 KiB,一旦鏈達到該上限,Codex 就停止加入檔案。一份臃腫的根層檔案可能在無聲無息間把套件層級的檔案擠出上下文。
GitHub Copilot:三種指示檔案
GitHub 關於存放庫自訂指示的文件描述了三類檔案:涵蓋整個存放庫的 .github/copilot-instructions.md;放在 .github/instructions/ 下、frontmatter 中帶有 applyTo glob(以及可選的 excludeAgent,值為 code-review 或 cloud-agent)的路徑專屬 NAME.instructions.md 檔案;以及代理指示檔案:存放庫中任何位置的 AGENTS.md,以最接近的檔案優先,或是根目錄中單一的 CLAUDE.md 或 GEMINI.md。當路徑專屬檔案符合且存放庫層級檔案也存在時,兩者都會使用。在各來源之間,個人指示的排序高於存放庫指示,存放庫指示又高於組織指示,但所有相關的指示集都會提供給模型,因此 GitHub 的建議是避免矛盾,而不是依賴排序。
問題在於支援矩陣。Copilot cloud agent、GitHub.com 上的 Copilot code review、VS Code 中的 Copilot Chat 與 Copilot CLI 會讀取 AGENTS.md。GitHub.com、Visual Studio 與 JetBrains IDE 中的 Copilot Chat 會讀取 .github/copilot-instructions.md,但不讀 AGENTS.md。Copilot code review 還會從 pull request 的 head 分支而非 base 分支讀取指示,當你在同一個 PR 中更改這些檔案時,這點很重要。
Cursor:.cursor/rules 與 AGENTS.md
Cursor 的規則文件把專案規則描述為 .cursor/rules/ 下的 .mdc 檔案(放在那裡的純 .md 檔案因為沒有 frontmatter 而會被忽略),帶有三個 frontmatter 欄位:alwaysApply: true 讓規則進入每一次對話,globs 在符合的檔案進入上下文時附加規則,而只有 description 時則由代理決定是否採用。規則依 Team Rules、Project Rules、User Rules 的順序合併,衝突時較前的來源勝出。Team Rules 在 Team 與 Enterprise 方案中由 Cursor 儀表板管理,而且可以強制執行,使用者無法停用。Cursor 也要求規則保持在 500 行以內,並提醒規則中參照的檔案不會被內嵌;代理只會在它決定需要時才用工具去讀取。
AGENTS.md 被記載為 .cursor/rules 在簡單情境下的純 Markdown 替代方案,支援放在專案根目錄與子目錄,巢狀指示會與其上層合併,並以較具體的檔案優先。舊版指南描述的單一 .cursorrules 檔案在目前的規則頁面上完全沒有出現。請把它視為舊版並進行遷移。
Gemini CLI:可重新命名的 GEMINI.md
Gemini CLI 的上下文檔案文件描述了全域的 ~/.gemini/GEMINI.md、在已設定工作區目錄及其上層找到的 GEMINI.md 檔案,以及當工具觸及任何目錄時即時載入其檔案,向上直到受信任的根目錄。所有找到的內容都會串接並隨每次提示送出。支援 @file.md 匯入,相對與絕對路徑皆可。這裡的關鍵功能是 settings.json 中的 context.fileName,它接受單一名稱或清單,而文件自己的範例正是 ["AGENTS.md", "CONTEXT.md", "GEMINI.md"]。/memory show 會印出合併後的上下文,/memory reload 則重新掃描檔案。
Windsurf:有字元限制的規則
Windsurf 的規則文件現在位於 Devin Desktop 之下,偏好 .devin/rules/*.md,並保留 .windsurf/rules/*.md 作為後備;舊版的單一檔案 .windsurfrules 仍會被讀取。每份規則檔帶有一個 trigger,值為 always_on、glob、model_decision 或 manual。全域規則檔限制在 6,000 字元,每份工作區規則檔限制在 12,000 字元,這是本文所有工具中文件記載最嚴格的限制。AGENTS.md 在任何目錄都受支援:根層檔案永遠啟用,子目錄檔案則自動以 glob 限定在其所在目錄。在 Git 存放庫中,搜尋也會向上走到 Git 根目錄,而企業 IT 可以部署唯讀的系統規則。
單一來源策略:AGENTS.md 加上精簡轉接檔
為什麼 AGENTS.md 是事實來源
AGENTS.md 規範是沒有必填欄位的純 Markdown,由 Linux Foundation 旗下的 Agentic AI Foundation 管理,其支援者名單包括 Codex、Cursor、Gemini CLI、Windsurf、GitHub Copilot 的 coding agent、VS Code、Zed、JetBrains Junie、Devin、Aider、Factory 等,使用它的開源專案超過 60,000 個。它是比較表中唯一一份每個工具都能原生讀取、或可設定為讀取的檔案。其他檔案都望塵莫及:CLAUDE.md 由 Claude Code 讀取,而且只有根目錄那份會被部分 Copilot 介面讀取;GEMINI.md 由 Gemini CLI 與同樣那些 Copilot 介面讀取;.cursor/rules 只有 Cursor 會讀。
因此共用慣例放進 AGENTS.md,其他每份檔案都變成轉接檔:要麼是一份只保留工具專屬指示並拉入共用檔案的精簡存根,要麼是一份由 CI 保持同步的產生複本。
Claude Code:匯入,不要複製
這裡的陷阱在於預設行為。Anthropic 的文件指出,只有在工作目錄或其任何上層目錄中沒有 CLAUDE.md、.claude/CLAUDE.md 或 CLAUDE.local.md 時,Claude 才會讀取 AGENTS.md。一個同時擁有兩份檔案的存放庫(因為有人為了 Claude 專屬筆記而加了 CLAUDE.md),會在 Claude Code 中無聲地停止載入 AGENTS.md。文件記載的解法是把 @AGENTS.md 放在 CLAUDE.md 的第一行;Claude 會先讀取被匯入的檔案,再讀取其下的 Claude 專屬內容,而文件也確認這種匯入絕不會造成重複讀取。
符號連結(ln -s AGENTS.md CLAUDE.md)也可行,但 Anthropic 警告,若有任何人在 Windows 上 clone,建立符號連結需要系統管理員權限或開發人員模式,而且除非啟用 core.symlinks,Git 會把已提交的符號連結簽出為一行文字檔。我的客戶大多至少有一位 Windows 開發者,所以我使用匯入。另外還有一個 Project instructions 設定,值為 claude-md-and-agents-md,但它只在使用者、--settings 或受管設定中生效,在專案與本機設定中會被忽略,所以你無法把它提交到存放庫。匯入才是可攜的答案。
GitHub Copilot:產生,不要指向
對於會讀取 AGENTS.md 的 Copilot 介面,你已經完成了。對於 GitHub.com、Visual Studio 與 JetBrains 中的 Copilot Chat,唯一會載入的存放庫檔案是 .github/copilot-instructions.md。在那份檔案裡寫「請讀取 AGENTS.md」,等於仰賴模型自行決定去開啟它,這正是 Anthropic 針對「用文字告訴 Claude 去讀 AGENTS.md 的 CLAUDE.md」所指出的同一個弱點。可靠的做法是在 CI 中從 AGENTS.md 產生 .github/copilot-instructions.md,加上一行說明它是產生檔的標頭,並設一道檢查,當兩者分歧時讓流程失敗。路徑專屬的 Copilot 行為(例如只套用於 **/*.sql 的規則)則放在 .github/instructions/*.instructions.md,共用檔案中沒有對應的機制。
Cursor、Gemini CLI、Codex 與 Windsurf
Cursor 原生讀取根層與巢狀的 AGENTS.md,因此 .cursor/rules 可以縮減為 Cursor 專屬、以 glob 限定範圍的行為,以及任何管理員透過 Team Rules 強制執行的內容。Gemini CLI 需要提交一行設定:在 .gemini/settings.json 中把 context.fileName 設為 ["AGENTS.md", "GEMINI.md"],之後 GEMINI.md 只保留 Gemini 專屬指示。Codex 與 Windsurf 無須設定即可讀取共用檔案;對 Codex 而言,請讓整條鏈保持在 32 KiB 以內,AGENTS.override.md 只用於暫時性的本機覆寫,而如果你用 Codex 做 GitHub 程式碼審查,請在最接近受管程式碼的 AGENTS.md 中加入 ## Code Review Rules 區段,這是 OpenAI 文件記載的機制。
無法共用的部分
指示檔案是給模型看的文字。任何由工具強制執行、而非向模型建議的內容,都留在該工具自己的設定中,而且每個工具都不一樣:
| 關注點 | 可放進 AGENTS.md 共用? | 所在位置 |
|---|---|---|
| 建置、測試、lint 命令、慣例、邊界 | 可以 | 根層與巢狀的 AGENTS.md |
| 工具權限(allow、ask、deny) | 不行 | Claude Code 的 .claude/settings.json 與 settings.local.json;其他各工具自己的設定;Cursor 用 Team Rules 強制行為 |
| 在工具呼叫前後執行的 hook | 不行 | Claude Code settings.json 的 hooks;沒有共用的對應機制 |
| MCP 伺服器註冊 | 不行 | 各工具自己的設定;Claude Code 把它放在自己的設定檔,而非 CLAUDE.md |
| 路徑範圍規則 | 部分 | 共用範圍用巢狀 AGENTS.md;工具專屬範圍用 Claude Code 帶 paths 的 .claude/rules/、Cursor 的 globs、Copilot 的 applyTo、Windsurf 的 glob |
| 組織層級政策 | 不行 | Claude Code 的受管 CLAUDE.md 與受管設定;Cursor Team Rules;Copilot 組織指示;Windsurf 系統規則 |
| 個人、未提交的筆記 | 不行 | CLAUDE.local.md、~/.codex/AGENTS.override.md、Cursor User Rules、Gemini 的 ~/.gemini/GEMINI.md |
Anthropic 的記憶頁面說得很直白:Claude 把 CLAUDE.md 當作上下文,而非強制執行的設定;若要不論模型如何決定都阻止某個動作,應使用 PreToolUse hook 或 permissions.deny 規則。本指南中的每一份檔案都是如此。把規則寫進 AGENTS.md,讓每個代理都知道,然後在工具的設定與 CI 中強制執行那些真正重要的規則。
monorepo 優先順序:根層與套件層級檔案
表中的每個工具都支援根層檔案加巢狀檔案,而每個工具合併它們的方式都略有不同。共用 AGENTS.md 策略能否站得住腳,就看這裡。
| 工具 | 根層檔案 | 巢狀檔案 | 如何合併 |
|---|---|---|---|
| Claude Code | 啟動時與每個上層目錄一起載入 | 當 Claude 觸及該目錄中的檔案時按需載入 | 串接,最接近者最後;claudeMdExcludes 可略過你永遠不想要的檔案 |
| Codex | 最先載入 | 從根目錄往下到工作目錄每個目錄一份 | 由根層往下串接,越近的檔案越後、越強;在 32 KiB 停止;AGENTS.override.md 取代該目錄的檔案 |
| GitHub Copilot | 當它是最接近的檔案時使用 | 距離檔案最接近的 AGENTS.md 優先 | 文件未說明巢狀檔案是否與根層合併 |
| Cursor | 永遠套用 | 套用於該目錄及其子目錄 | 與上層合併,較具體者勝出 |
| Gemini CLI | 全域加上工作區及其上層 | 當工具觸及該目錄時即時載入 | 串接 |
| Windsurf | 永遠啟用 | 自動以 glob 限定在其目錄 | glob 符合時兩者同時生效 |
從這張表可以導出兩條規則。第一,撰寫每一份巢狀 AGENTS.md 時,都要讓它無論根層檔案是否也在上下文中都正確。Copilot 的文件沒有承諾會合併,Codex 可能截斷,而 Claude Code 只在代理真的觸及該目錄時才載入巢狀檔案。請重複那一兩條若遺漏就會造成災難的邊界,並且永遠不要與根層矛盾;Anthropic 關於指示衝突時模型「可能任意選一個」的提醒,適用於每一個代理。第二,讓根層檔案保持精簡。Anthropic 的 200 行目標與 Codex 的 32 KiB 上限是約束你設計的兩個數字,一份維持在約 10 KB 以下的根層檔案,能在 Codex 開始丟棄之前,為兩三份套件檔案留出空間。
對於擁有數十個套件的團隊,Claude Code 的大型程式碼庫指引建議採用兩層切分:根層加上每個套件一份檔案,由該套件的擁有者維護,並用 claudeMdExcludes 排除你從不處理的套件。這套所有權模型可以直接對應到其他每個工具的巢狀 AGENTS.md 檔案。
哪些內容屬於共用檔案、哪些屬於工具專屬檔案
| 內容 | 放在 | 原因 |
|---|---|---|
| 安裝、建置、測試、lint 與格式化命令,逐字照抄 | AGENTS.md | 每個代理都會執行它們;最常見的漂移就是過時的命令 |
| 存放庫配置與各項內容的位置 | AGENTS.md | 省下每個代理相同的探索工作 |
| 語言、框架與風格慣例,各附一個具體範例 | AGENTS.md | 慣例與工具無關 |
| 邊界:絕不編輯產生的程式碼、絕不修改已合併的 migration、絕不提交秘密 | AGENTS.md,並在巢狀檔案中重複 | 必須在截斷與部分載入時仍存活 |
| 安全規則:設定從哪裡來、哪些模組需要人工審查 | AGENTS.md | 不論是哪個代理做出變更都適用 |
| Pull request 與 commit 慣例 | AGENTS.md | Codex、Copilot code review 與 Claude Code 都會開啟或審查 PR |
| 計畫模式、模型選擇、effort、自動記憶 | CLAUDE.md | Claude Code 的概念 |
權限規則、hooks、MCP 伺服器、claudeMdExcludes | .claude/settings.json | 強制執行的設定,不是文字 |
| 針對某個框架以 glob 附加的規則 | .cursor/rules/*.mdc、.github/instructions/*.instructions.md、.windsurf/rules/*.md | 「符合即附加」的行為沒有共用的對應機制 |
| Codex 程式碼審查規則 | AGENTS.md 中的 ## Code Review Rules 區段 | Codex 從共用檔案讀取它 |
我對每一行套用的測試是:如果開發者明天換了工具,這條指示仍然成立嗎?若是,它屬於 AGENTS.md。若它只在某一個產品內才有意義,它就屬於該產品的檔案。
治理:所有權、審查、版本控管、秘密、測試
所有權。把 AGENTS.md、各轉接檔與同步指令碼加入 CODEOWNERS,由平台或開發者體驗團隊擁有根層檔案,各套件團隊擁有自己的巢狀檔案。Anthropic 的 monorepo 指引對每個目錄的 CLAUDE.md 檔案也提出同樣的建議:各目錄的擁有者維護自己的檔案。
審查。指示檔案的每一次變更都像程式碼一樣經過 pull request。Claude Code 在這裡提供了一個助手:/doctor prompt-audit(v2.1.283 以上)會檢查 CLAUDE.md、CLAUDE.local.md 與 AGENTS.md 檔案以及規則與 skills,找出參照不存在的檔案或命令、為舊模型撰寫的指示,以及彼此矛盾的檔案,並提出修改建議,在你接受之前不會改動任何內容。在合併共用檔案的變更之前先執行它,即使促成這次變更的工具不是 Claude Code。
版本控管。這些檔案存放在 Git 中,所以本身就有版本。團隊常忘記的是要刻意為產生的複本做版本控管:提交 .github/copilot-instructions.md,並在它過時時讓 CI 失敗,而不是在建置時無聲地重新產生,讓沒有人看到差異。
秘密。絕對不行。這些檔案會被每一個工具在每一位開發者的機器上注入模型上下文,送往該工具呼叫的任何供應商,並被產生器複製。AGENTS.md 中的一條連接字串,就等於五家供應商請求日誌中的一條連接字串。個人檔案 CLAUDE.local.md 與 ~/.codex/AGENTS.override.md 雖已加入 gitignore,但仍會進入上下文,所以也不是放秘密的地方。請讓代理指向環境變數或秘密管理服務,並以強制機制支撐這條規則:Claude Code 的 permissions.deny 規則(例如 Read(./.env))不論模型意圖如何都會阻止讀取。
測試指示。把共用檔案的變更當成建置指令碼的變更,在每個工具中做煙霧測試。先確認載入:Claude Code 中的 /context 會在 Memory files 下列出檔案,Gemini CLI 中的 /memory show 會印出合併後的上下文,GitHub.com 上的 Copilot Chat 使用了 .github/copilot-instructions.md 時會在 References 中列出它,而 OpenAI 建議用 codex -c log_dir=./.codex-log 寫出可供稽核的日誌。然後執行一組固定的提示(「哪個命令執行測試?」、「資料庫查詢應該放在哪裡?」),並比較各工具的回答。任何不一致都是你在開發者之前就抓到的漂移。
範本
一組簡短而務實的範本,可直接複製。這個存放庫是一個虛構的支付平台;請替換成你的具體內容。
AGENTS.md(事實來源)
# AGENTS.md: Payments Platform
## Project
Node 22 / TypeScript 5.6 monorepo using pnpm workspaces.
Services live under `services/`, shared libraries under `packages/`.
## Commands
- Install: `pnpm install --frozen-lockfile`
- Build: `pnpm -r build`
- Test: `pnpm -r test` (run before every commit)
- Lint and format check: `pnpm lint && pnpm format:check`
## Conventions
- TypeScript strict mode. No `any` without a comment explaining why.
- Database access goes through `packages/db`. No raw SQL in route handlers.
- Commit subjects: `<package>: <imperative summary>`, for example `api: add idempotency keys`.
## Boundaries
- Never edit files under `**/generated/`. Run `pnpm codegen` instead.
- Never modify a migration that has merged. Add a new one.
- Never commit secrets or `.env*` files. Configuration comes from the environment.
- Changes under `services/payments/` require a human reviewer from the payments team.
## Pull requests
- Title format: `[<package>] <summary>`. Run lint and tests before opening the PR.
## Code Review Rules
- Flag any new dependency without a justification in the PR description.
- Flag raw SQL strings outside `packages/db`.CLAUDE.md(精簡轉接檔)
@AGENTS.md
## Claude Code
- Use plan mode for any change under `services/payments/`.
- Permissions, hooks and MCP servers are configured in `.claude/settings.json`. Do not duplicate them here..cursor/rules/testing.mdc(Cursor 專屬、以 glob 限定範圍)
---
description: Testing conventions for the payments monorepo
globs: "**/*.test.ts"
alwaysApply: false
---
- Use Vitest. Never add Jest.
- Wrap database tests in a transaction that rolls back.
- Shared project rules live in AGENTS.md; this file holds Cursor-specific behaviour only..gemini/settings.json(把 Gemini CLI 指向共用檔案)
{
"context": {
"fileName": ["AGENTS.md", "GEMINI.md"]
}
}scripts/sync-agent-instructions.sh(產生 Copilot 複本)
#!/usr/bin/env bash
set -euo pipefail
{
echo "<!-- GENERATED from AGENTS.md. Edit AGENTS.md and run scripts/sync-agent-instructions.sh. -->"
cat AGENTS.md
} > .github/copilot-instructions.md
# In CI, fail when the committed copy is out of date:
git diff --exit-code -- .github/copilot-instructions.md團隊導入計畫
- 第 1 週:盤點。列出每個存放庫中的每一份指示檔案,例如用
git ls-files | grep -Ei 'claude\.md|agents\.md|cursorrules|cursor/rules|copilot-instructions|instructions\.md|gemini\.md|windsurf'。記錄每份檔案的作者與最後變更時間。挑一個開發活躍的存放庫作為試點。 - 第 2 週:整併。用「這在任何工具中都成立嗎?」的測試,把試點的檔案合併成一份
AGENTS.md。Claude Code 的/init會讀取既有的 Cursor 與 Copilot 檔案,設定CLAUDE_CODE_NEW_INIT=1後還會讀取AGENTS.md、Windsurf 與 Cline 檔案,並提出整併草稿;把它當起點,而不是結果。撰寫精簡的CLAUDE.md、Gemini 設定與 Copilot 同步指令碼。刪除.cursorrules與任何重複的文字。 - 第 3 週:試點。找三到五位開發者,確保他們合起來涵蓋團隊使用的每一個工具。每人先執行載入檢查與固定提示組,再正常工作一週,記錄代理忽略或做錯的每一條指示。修正檔案,而不是修正開發者。
- 第 4 週:制度化。加入
CODEOWNERS項目、CI 同步檢查與存放庫範本。決定哪些內容移到組織層:Claude Code 的受管CLAUDE.md與受管設定、Cursor Team Rules、Copilot 組織指示與 Windsurf 系統規則,是必須套用於每個存放庫的規則該去的地方。接著把這套模式推展到下一批存放庫,每個存放庫一個 pull request。
該怎麼做
- 盤點所有存放庫中的每一份指示檔案,並為每份檔案指定擁有者。
- 建立一份根層
AGENTS.md,包含命令、配置、慣例、邊界、安全規則與 PR 慣例,並保持在 200 行以內。 - 若已有
CLAUDE.md,把@AGENTS.md放在第一行,並把所有非 Claude 專屬的內容移出去。 - 若有人使用 Gemini CLI,在已提交的
.gemini/settings.json中把context.fileName設為包含AGENTS.md。 - 從
AGENTS.md產生.github/copilot-instructions.md,並加入一道在它過時時失敗的 CI 檢查。 - 刪除
.cursorrules;保留.cursor/rules/*.mdc用於以 glob 限定範圍、僅限 Cursor 的行為。 - 為每個套件加入巢狀
AGENTS.md,各自獨立完整、絕不與根層矛盾,並重複關鍵邊界。 - 把權限、hooks 與 MCP 註冊移進各工具的設定,並用 deny 規則與 CI 強制執行重要的規則。
- 搜尋每一份指示檔案中的秘密、移除它們,並為
.env讀取加上 deny 規則。 - 把這些檔案加入
CODEOWNERS,在合併變更前執行/doctor prompt-audit,並在每次變更後對每個工具做煙霧測試。
常見問題
AGENTS.md 與 CLAUDE.md 有什麼不同? AGENTS.md 是供應商中立的檔案,由 Linux Foundation 旗下的 Agentic AI Foundation 管理,Codex、Cursor、Copilot 的代理、Gemini CLI 與 Windsurf 都會讀取。CLAUDE.md 是 Claude Code 自己的檔案,擁有 @path 匯入、受管政策層、CLAUDE.local.md 與路徑範圍規則,這些是共用格式所沒有的。共用慣例放進 AGENTS.md;一份精簡的 CLAUDE.md 匯入它並加上 Claude 專屬指示。
Claude Code 會讀取 AGENTS.md 嗎? 會,自 v2.1.277 起,但只在工作目錄或其上層不存在 CLAUDE.md、.claude/CLAUDE.md 或 CLAUDE.local.md 時。兩份檔案都存在時,它只讀取 CLAUDE.md,除非把 Project instructions 設為 claude-md-and-agents-md。可攜的解法是在 CLAUDE.md 第一行加上 @AGENTS.md 匯入。
我應該用 .cursorrules 還是 .cursor/rules? 請使用 .cursor/rules/*.mdc 或一份純文字的 AGENTS.md。Cursor 目前的文件涵蓋 .mdc 專案規則、Team Rules,以及根目錄與子目錄中的 AGENTS.md;它已不再記載 .cursorrules。
GitHub Copilot 會讀取 AGENTS.md 嗎? Copilot cloud agent、GitHub.com 上的 code review、VS Code 中的 Copilot Chat 與 Copilot CLI 會。GitHub.com、Visual Studio 與 JetBrains IDE 中的 Copilot Chat 不會,只依賴 .github/copilot-instructions.md,所以請從 AGENTS.md 產生那份檔案。
monorepo 中的巢狀 AGENTS.md 檔案如何運作? 規範指出最接近的檔案勝出,而明確的提示會覆寫一切。Codex 由根層往下串接,越近的檔案越強,預設在 32 KiB 停止;Cursor 把巢狀檔案與上層合併;Windsurf 以 glob 自動限定範圍;Copilot 採用最接近的檔案。撰寫巢狀檔案時請確保它們永遠不與根層矛盾。
如果你的團隊不只在管理指示,也在打包可重用的代理行為,gh skill GitHub CLI 指南說明了 skills 如何在 Copilot、Claude Code、Cursor、Codex 與 Gemini CLI 之間安裝與固定版本;同樣的單一來源紀律在那裡也適用。
需要多一雙手嗎?Big Hat Group 為美國與加拿大的組織提供應用程式開發顧問服務,從為期兩週的 AI 編碼代理設定審查,到橫跨所有存放庫的完整多代理導入。預約探索會議,和我們聊聊你的環境。
資料來源
- Claude 如何記住你的專案(CLAUDE.md、匯入、規則、AGENTS.md),Claude Code 文件
- 設定檔與優先順序,Claude Code 文件
- 在 monorepo 或大型程式碼庫中設定 Claude Code,Claude Code 文件
- AGENTS.md 規範,Agentic AI Foundation
- 使用 AGENTS.md 的自訂指示,OpenAI Codex 文件
- 為 GitHub Copilot 新增存放庫自訂指示,GitHub Docs
- GitHub Copilot 自訂指示支援,GitHub Docs
- Rules,Cursor 文件
- 使用 GEMINI.md 檔案提供上下文,Gemini CLI 文件
- 規則與記憶,Devin Desktop(Windsurf)文件