跳至主要內容

    AGENTS.md 怎麼寫?規則寫越多,Agent 反而越貴?(2026 完整教學+範例)

    只寫 Agent 自己查不到的事,能被機器檢查的規則交給測試、lint 與 hooks

    sunny 桑尼· · 24 MIN READ · 266 次瀏覽

    AGENTS.md 怎麼寫?規則寫越多,Agent 反而越貴?(2026 完整教學+範例)
    本文目錄

    AGENTS.md 越寫越長,Agent 卻沒有比較聽話?這篇帶你搞懂該寫什麼、不該寫什麼,還附一份 30 行範例,照著改就能用!

    讓 Agent 接手一個 repo,多數人做的第一件事是寫規則檔:AGENTS.md,或 Claude Code 的 CLAUDE.md。工具也鼓勵你這樣做,Claude Code 和 Codex 都有 /init,一個指令就讓 Agent 掃過整個專案,自己寫出一份。於是規則檔越長越大:專案簡介、資料夾逐一說明、程式風格、測試方法,再加上每次踩過的坑。

    2026 年 2 月,ETH Zurich 和 LogicStar.ai 的研究團隊發表了第一份認真的對照實驗:同一批任務,給 Agent 規則檔和不給規則檔,各跑一次。結果是,給了規則檔,任務成功率沒有普遍提高,推論成本平均多了兩成以上。

    那規則檔還要不要寫?要,但寫法要換。我的判斷是:AGENTS.md 只寫 Agent 自己查不到的事;能被機器檢查的規則,交給測試、lint、hooks。一條規則該放哪裡,可以依序問三個問題。

    多數規則在「查得到」與「擋得住」前兩關就會被篩除,只有 Agent 查不到且機器擋不住的規則才需要寫進 AGENTS.md(Sunny DataScience 整理)。

    這張圖的重點在順序:先問 Agent 查不查得到,再問機器擋不擋得住,最後才問要不要寫進規則檔。多數人寫規則檔的順序剛好相反,想到什麼就先寫進去。下面一關一關看,接著看研究證據,最後給一份範例和檢查方法。

    快速回答 一條規則要不要寫進 AGENTS.md,依序問三題:Agent 讀專案自己查得到嗎?測試、lint 或 hooks 擋得住嗎?每個任務都需要嗎?前兩題都是否、第三題是,才寫進去;其他的交給機器,或放到用得到的地方,例如子資料夾。ETH Zurich 2026 年的對照實驗裡,給了規則檔,任務成功率沒有普遍提高,推論成本平均多了兩成以上。

    用三個問題篩選規則:查得到的免寫、擋得住的交給機器,剩下的才進 AGENTS.md

    第一關:Agent 自己查得到嗎?專案用 TypeScript、測試放在 tests/、套件管理用 pnpm,這些讀 package.json、tsconfig.json 和資料夾結構就知道。Coding agent 本來就會先搜尋、開檔案,把這些再寫一遍,只是讓同一件事在 context 裡出現兩次。資料夾逐一介紹也屬於這一類。ETH 那份研究檢查過:規則檔裡寫了專案概覽,Agent 找到相關檔案的速度並沒有變快。

    第二關:機器檢查得了嗎?縮排、import 順序交給 formatter;「UI 層不准直接呼叫資料庫」可以寫成 lint 規則或結構測試;「不要改已經合併的 migration」可以用 hook 擋。理由很直接:規則檔只是 Agent 讀到的一段文字。Anthropic 的文件寫得很清楚,Claude 把 CLAUDE.md 當成 context 參考,不當成強制設定;要不管 Claude 怎麼想都擋得住,得用 hook。Hook 是你寫的一支小程式,Claude Code 在固定時機一定會執行它,例如每次改完檔案、每次執行指令之前。

    第三關:每個任務都需要嗎?怎麼跑單一測試、金額要用整數存、哪個資料夾還有外部客戶在呼叫,這種不管改哪裡都得先知道的事,才寫進根目錄的 AGENTS.md。只跟某個模組有關的規則,放進那個資料夾自己的 AGENTS.md,或做成 skill,等 Agent 需要時再讀;AGENTS.md 只留一行告訴它去哪裡找。「為什麼這樣設計」的歷史決定,寫成架構決策紀錄(ADR,一份決策一個檔案,標明狀態是否還有效),同樣用一行連結指過去。

    這三關的順序有意義。越早被篩掉的規則,維護成本越低:Agent 查得到的事不用維護,機器擋得住的事不怕被忘記。真正留在 AGENTS.md 的,通常比你以為的少很多。

    ETH 對照實驗:給了規則檔推論成本多兩成,任務成功率卻沒有顯著提高

    ETH 這份研究叫〈Evaluating AGENTS.md〉。它用了兩組任務:一組是常見的 SWE-bench Lite,300 題,來自 11 個熱門 Python 專案,這些專案本來沒有規則檔,所以只測工具 /init 生成的版本;另一組是研究團隊自己收集的 138 題,來自 12 個本來就有 AGENTS.md 或 CLAUDE.md 的 Python 專案,可以比較「不給」「LLM 生成」「開發者自己寫」三種情況。Agent 有四組:Claude Code 配 Sonnet 4.5、Codex 配 GPT-5.2 和 GPT-5.1 mini,以及 Qwen Code 配 Qwen3-30B。

    給了規則檔會使每題推論成本增加約兩成(19.0%–23.0%),但對任務成功率的影響在統計上均不顯著(資料來源:Gloaguen 等人 2026 年 ETH Zurich 與 LogicStar.ai 對照實驗)。

    為什麼會這樣?論文的解釋,對寫規則檔的人很有用。

    第一,Agent 很聽話。規則檔裡提到某個工具,Agent 就真的去用:寫了 uv 的專案,Agent 平均每題用 1.6 次,沒寫的幾乎不用。寫了「改完要跑完整測試」,它就多跑測試、多搜尋、多開檔案。每一條指令都會變成額外的步驟,步驟多了,成本就上去,但這些步驟不一定和眼前的任務有關。

    第二,內容重複。研究團隊把專案裡的 README、範例和 docs/ 都刪掉,再給同一份 LLM 生成的規則檔,成功率反而平均高了 2.7%。換句話說,/init 生出來的規則檔,大部分是在重講 repo 裡本來就有的東西。

    所以論文的建議是:暫時不要用 LLM 自動生成規則檔;人寫的規則檔,只寫 README 裡沒有的事,例如專案特有的慣例,或效能、安全這類非功能需求。

    這份研究有它的邊界:只測 Python、每個條件只跑一次。另一份 2026 年 1 月的研究看了 10 個 repo、124 個 PR,發現有 AGENTS.md 時,Agent 的執行時間中位數少了約 29%,輸出 token 少了約 17%,完成率差不多。兩份研究並不矛盾:規則檔本身沒有好壞,好壞看裡面寫了什麼。寫了 Agent 查不到的捷徑,它少繞路;寫了它本來就知道的事,它多讀一遍,還可能照著做一堆不必要的檢查。

    順帶一提,這篇論文的第一版摘要寫的是「傾向降低成功率」,網路上流傳的「降 3%」也出自第一版。後來的版本加了統計檢定,改成「沒有普遍提高」。我採用的是後者。

    規則檔長度控制在百行以內:只寫讀程式碼看不出的坑與邊界,其餘指向文件

    長度。Anthropic 對 CLAUDE.md 的建議是每份 200 行以內,越長越佔 context,Claude 遵守得也越差。Codex 會把從根目錄一路到工作目錄的 AGENTS.md 串起來,預設上限是 32 KiB,超過的部分直接不讀。

    OpenAI 自己的經驗更極端。2026 年 2 月,OpenAI 工程師 Ryan Lopopolo 在〈Harness engineering〉裡寫,他們的團隊用 Codex 寫出一個約一百萬行的產品,人沒有手寫一行程式。過程中他們試過「一份大 AGENTS.md」,失敗的原因他列了四點:context 是稀缺資源,大檔案會擠掉任務本身;什麼都標重要,等於什麼都不重要;它一寫完就開始過時;一大塊文字沒辦法用機器檢查。最後他們把 AGENTS.md 縮到大約一百行,當成目錄,指向 docs/ 裡分門別類的文件。他的說法是:給 Codex 一張地圖,不要給它一千頁的操作手冊。

    同一篇文章裡,Lopopolo 用一張圖說明 docs/ 為什麼要存在:Codex 看不到的知識,對它來說就不存在。Google 文件裡的規劃、Slack 上的決定、某個人腦中的架構方向,都得寫成 repo 裡的 Markdown,AGENTS.md 這張地圖才有地方可以指。

    OpenAI 的原圖:寫在 Google 文件、Slack 或某個人腦中的決定,Codex 都看不到;寫成 repo 裡的 Markdown,Agent 才查得到。(圖片來源:OpenAI〈Harness engineering: leveraging Codex in an agent-first world〉,經 Sunny DataScience 中文重點標註)

    該寫的。對照 Anthropic 的官方建議與 GitHub 分析兩千五百多份 agents.md 的整理,值得寫進去的有這幾類:

    • Agent 猜不到的指令,尤其是怎麼跑單一測試、送出前要跑哪個檢查
    • 和語言預設不同的慣例
    • 環境的怪癖,例如必要的環境變數、本機資料庫怎麼起
    • 讀程式碼看不出來的坑
    • 邊界:哪些事直接做、哪些先問、哪些不准做
    • 指路:哪一類工作去讀哪一份文件

    實際上大家寫的,和這張清單有落差。一份分析 2,303 份規則檔的研究發現,寫實作細節與架構的各約七成,寫安全與效能這類非功能需求的只有一成五左右。前者 Agent 讀程式碼大多看得到,後者才是它最可能不知道的事。

    不該寫的。讀程式碼就知道的事、語言通用慣例、逐檔說明、常變動的資訊、長篇教學,以及「寫乾淨的程式」這種沒辦法驗證的話。Anthropic 的最佳實務文件給了一個好用的刪減標準:每一行都問,刪掉它,Claude 會不會犯錯?不會,就刪。

    下面是一份 29 行的範例。專案是示意的,一個用 Next.js 和 PostgreSQL 做的訂閱制網站:

    # AGENTS.md
    
    訂閱制網站:Next.js、PostgreSQL。這份檔案只寫讀程式碼看不出來的事。
    
    ## 指令
    - 安裝:`pnpm install`(lockfile 是 pnpm 的,不要用 npm)
    - 跑單一測試:`pnpm test -- src/billing/refund.test.ts`
    - 送 PR 前:`pnpm check`(型別、lint、測試一次跑完)
    - 本機資料庫:`docker compose up db`,第一次先跑 `pnpm db:seed`
    
    ## 不明顯的坑
    - 資料庫一律存 UTC,換成台灣時間只在 `src/lib/time.ts` 做
    - `src/legacy/` 是舊版 API,還有外部客戶在呼叫:只修 bug,不重構
    - 金額用整數「分」存,不用浮點數
    - 測試裡寄信一律走假的寄信服務,真的寄要設 `MAIL_LIVE=1`
    
    ## 邊界
    - 直接做:改 `src/` 與對應測試、新增 migration
    - 先問:新增或升級依賴、改 CI 設定、刪檔案
    - 不做:改已經合併的 migration、把 `.env` 的內容貼到任何地方
    
    ## 要深入時讀哪裡
    - 金流與退款:`docs/payments.md`
    - 為什麼這樣設計:`docs/adr/`(每份決策標了狀態)
    - 前端元件:`src/components/AGENTS.md`
    
    ## 完成的定義
    - `pnpm check` 全綠,新功能的測試在功能壞掉時會變紅
    - PR 說明寫清楚改了什麼、怎麼驗證
    

    這份範例裡沒有專案簡介,沒有資料夾逐一介紹,也沒有程式風格。風格交給 formatter,結構 Agent 自己會看。每一行都是讀程式碼看不出來的事,而且大多能被驗證:指令跑不跑得起來、路徑存不存在,都查得到。

    範例裡有一行要特別說:「不要改已經合併的 migration」。寫在 AGENTS.md,是讓 Agent 知道;要讓它做不到,還得加一道 hook。這兩層不衝突,前者讓它少走冤枉路,後者在它還是走錯時擋下來。

    能由機器檢查的規則交給 Linter、Hooks 與 CI:機器能擋住的事,不必寫進文字檔

    能被機器檢查的規則,有三個常見的去處。

    Formatter 和 linter。風格類的規則全部交給它們。Lopopolo 的團隊更進一步,把架構規則也寫成自訂 lint:每個業務模組只能依固定的層次往下依賴,違反就報錯。他們還特別把 lint 的錯誤訊息寫成「怎麼修」,Agent 撞到時,錯誤訊息本身就是修正指引。他們的原則是:文件不夠用的時候,就把規則升級成程式碼。

    Hooks。Claude Code 的官方範例是改完檔案就自動跑 Prettier,寫在專案的 .claude/settings.json:

    {
      "hooks": {
        "PostToolUse": [
          {
            "matcher": "Edit|Write",
            "hooks": [
              {
                "type": "command",
                "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
              }
            ]
          }
        ]
      }
    }
    

    從此「格式要對」這條規則不必出現在 AGENTS.md 裡,Agent 也不必花 token 去想它。擋危險指令、保護不能改的檔案,用的是執行前的 PreToolUse hook,寫法可以看〈Claude Code 權限要怎麼設?一直按「允許」真的安全嗎?(2026 完整懶人包)〉。

    測試與 CI。最後一道關卡,對所有人和所有 Agent 都一樣。前提是測試本身可信:AI 寫的測試可能在功能根本沒跑時照樣通過。測試怎麼變得可信,可以接著讀〈AI 寫的測試全過,為什麼功能還是錯的?驗證閉環完整懶人包(2026)〉。

    跨工具共用設定:在 CLAUDE.md 匯入 @AGENTS.md,並用符號連結共用 Skills

    AGENTS.md 是 OpenAI 在 2025 年 8 月和 Amp、Google Jules、Cursor、Factory 等團隊一起推出的格式,就是一份普通的 Markdown,沒有規定欄位。2025 年 12 月,它和 MCP、goose 一起成為 Linux Foundation 新成立的 Agentic AI Foundation 的創始專案,官方說已有超過六萬個開源專案在用。日本的 @IT 報導這件事時,形容它是「讓專案專屬的指引能被一致提供的標準約定」。

    各家讀它的方式不太一樣,這是最容易踩坑的地方:

    工具怎麼讀 AGENTS.md要注意

    Codex
    怎麼讀 AGENTS.md
    從 repo 根目錄一路讀到工作目錄,每層一份,串在一起;越靠近工作目錄的越後面、優先
    要注意
    預設合計 32 KiB 上限;同層有 AGENTS.override.md 時改讀它
    Claude Code
    怎麼讀 AGENTS.md
    v2.1.277(2026 年 9 月)起,工作目錄與上層都沒有 CLAUDE.md 時才讀 AGENTS.md;子資料夾的在它讀到那裡的檔案時才載入
    要注意
    有任何 CLAUDE.md 或 CLAUDE.local.md,預設就不讀 AGENTS.md
    Gemini CLI
    怎麼讀 AGENTS.md
    預設讀 GEMINI.md,要在設定的 context.fileName 加上 AGENTS.md
    要注意
    已由 Antigravity CLI 接手,後者直接讀 AGENTS.md

    Claude Code 那一列的陷阱很常見:你為了放自己的私人設定加了一份 CLAUDE.local.md,Claude Code 就默默不讀團隊的 AGENTS.md 了。最穩的寫法是讓 CLAUDE.md 只負責匯入,Claude 專屬的規則寫在匯入那行下面。官方文件說,就算新版已經會自己讀 AGENTS.md,保留這行匯入也不會讀兩次。

    Skills 也一樣。Codex 和多數工具讀 .agents/skills/,Claude Code 只讀 .claude/skills/。用符號連結指到同一份,就只需要維護一個資料夾:

    # CLAUDE.md only imports the shared rules; Claude-only notes go below this line
    printf '@AGENTS.md\n' > CLAUDE.md
    # One skills folder for every tool
    mkdir -p .agents/skills .claude && ln -s ../.agents/skills .claude/skills
    

    避免規則檔過時:用 CI 腳本檢查路徑是否存在,並開新 Session 抽測 Agent

    規則檔最常見的死法是過時:資料夾改名了、文件搬家了,規則檔還指著舊路徑,Agent 照著走就撞牆。這件事可以交給機器。

    下面這支小程式想驗證兩件事:規則檔裡用反引號標出、看起來像路徑的字,都還存在;規則檔沒有超過行數上限。前提是你習慣把路徑寫在反引號裡,上限設 150 行,可以自己調。

    #!/usr/bin/env python3
    """Check AGENTS.md: every path it mentions still exists, and the file stays short."""
    import re
    import sys
    from pathlib import Path
    
    MAX_LINES = 150
    path = Path(sys.argv[1] if len(sys.argv) > 1 else "AGENTS.md")
    text = path.read_text(encoding="utf-8")
    problems = []
    
    lines = len(text.splitlines())
    if lines > MAX_LINES:
        problems.append(f"{lines} lines, over the {MAX_LINES}-line limit")
    
    # Paths are written in backticks and contain a slash: `src/lib/time.ts`, `docs/adr/`
    for token in re.findall(r"`([^`]+)`", text):
        for word in token.split():
            if "/" in word and not word.startswith(("http", "-")):
                if not (path.parent / word).exists():
                    problems.append(f"missing path: {word}")
    
    print("\n".join(problems) or f"ok ({lines} lines)")
    sys.exit(1 if problems else 0)
    

    把上面的範例 AGENTS.md 放進一個空資料夾跑,它會列出七個不存在的路徑,從 src/billing/refund.test.ts 到 src/components/AGENTS.md,並以失敗結束;把這些檔案建出來再跑一次,就只印出 ok (29 lines)。放進 CI 或 pre-commit,資料夾一改名,規則檔就會跟著被抓出來。Claude Code 另外有 /doctor prompt-audit,會找出規則檔裡指向不存在的檔案、互相矛盾或已經過時的寫法,但它只出報告,不會自己改。

    還有一個不用寫程式的檢查:開一個新的 session,不給任何提示,問 Agent 三個問題:怎麼跑單一測試?哪些檔案不能改?這個專案最容易踩的坑是什麼?答得出來,代表規則檔有被讀到、也寫得夠清楚。答不出來,先看它到底有沒有載入這份檔案,Agent 在下決定那一刻看到什麼,〈Context Engineering 是什麼?Agent 一直犯同樣的錯怎麼辦?(2026 完整懶人包)〉有完整的排查方法。

    規則檔的邊界:商業與架構取捨由人把關,查不到且擋不住的才進 AGENTS.md

    模型越來越強,規則檔需要的份量會再往下掉。Anthropic 在 2026 年 7 月說,他們替 Claude 5 世代的模型刪掉了 Claude Code 八成以上的系統提示,內部的 coding 評測沒有可量測的退步;他們給的 CLAUDE.md 建議也是一樣的方向:保持輕量,大部分篇幅留給程式碼裡的坑,不要寫 Agent 看檔案就知道的事。

    有些規則機器檢查不了,也不適合寫進規則檔。產品該長什麼樣、哪個功能值得做、這次的取捨對不對,這些要寫在需求文件與 review 裡,由人判斷。規則檔只能讓 Agent 少走錯路,替不了這些判斷。

    小專案不必照搬這整套。一個人的 side project,AGENTS.md 十行就夠,hook 一支都不用;等到你發現自己在對話裡第三次提醒同一件事,再決定它該進規則檔,還是該變成一個檢查。

    規則檔常讓 Agent 變貴、成功率卻沒有跟著提高,原因就在這裡。要讓它第一天就找得到規則,規則檔反而要短。它第一天讀到的,應該是一百行以內、只講它查不到的事;其他的,要嘛它自己讀得到,要嘛一碰就會被機器擋下來。

    查得到的不寫,擋得住的交給機器,剩下的才進 AGENTS.md。

    常見問題

    可以用 /init 讓 Agent 自動生成 AGENTS.md 嗎?

    ETH 的研究建議暫時不要。Claude Code 和 Codex 的 /init 一個指令就能生成規則檔,但生成的內容大多在重講 README、範例和 docs/ 裡本來就有的東西;研究團隊把這些文件刪掉後,再給同一份生成的規則檔,成功率反而平均高了 2.7%。人寫的版本只寫 README 裡沒有的事。

    AGENTS.md 和 CLAUDE.md 要各寫一份嗎?

    不用。在 CLAUDE.md 第一行寫 @AGENTS.md,匯入共用規則;Claude 專屬的規則寫在這行下面。要注意 Claude Code 只要讀到任何 CLAUDE.md 或 CLAUDE.local.md,預設就不讀 AGENTS.md,所以這行匯入要保留。

    寫進 AGENTS.md 的禁止事項,Agent 一定會遵守嗎?

    不一定。規則檔只是 Agent 讀到的一段文字,Anthropic 的文件也說,Claude 只把 CLAUDE.md 當成 context 參考。要不管 Agent 怎麼想都擋得住,例如不准改已經合併的 migration,要用 hook、lint 或 CI。

    怎麼確認 AGENTS.md 有被讀到?

    開一個新的 session,不給任何提示,問 Agent:怎麼跑單一測試?哪些檔案不能改?這個專案最容易踩的坑是什麼?答不出來,先確認它有沒有載入這份檔案。規則檔也會過時:資料夾改名了,檔案還指著舊路徑。可以在 CI 加一支小程式,檢查規則檔裡的路徑都還存在、行數沒有超過上限。

    AGENTS.md 要寫多長?

    Anthropic 建議 CLAUDE.md 每份 200 行以內,越長越佔 context,Claude 遵守得也越差。OpenAI 的團隊試過一份大 AGENTS.md,後來縮到約一百行,當成指向 docs/ 的目錄。查得到的不寫、擋得住的交給機器,剩下的通常比你以為的少很多。

    延伸閱讀

    參考資料

    研究

    • Thibaud Gloaguen, Niels Mündler-Sasahara, Mark Niklas Müller, Veselin Raychev, Martin Vechev(ETH Zurich、LogicStar.ai), Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents?(arXiv 2602.11988,v1 2026-02-12,v3 2026-09-29;本文數字取自 v3) https://arxiv.org/abs/2602.11988
    • Lulla et al., On the Impact of AGENTS.md Files on the Efficiency of AI Coding Agents(arXiv 2601.20404,2026-01-28) https://arxiv.org/abs/2601.20404
    • Chatlatanagulchai et al., Agent READMEs: An Empirical Study of Context Files for Agentic Coding(arXiv 2511.12884,v2 2026-08-09) https://arxiv.org/abs/2511.12884

    官方文件與工程文章

    標準與報導

    留言0

    登入後就能留言。

    登入