TL;DR: 在裝任何框架之前,有一層治理是免費的:在專案根目錄放一個
AGENTS.md或CLAUDE.md,養成開口要求 evidence 的習慣,開始任務前先說清楚什麼不能動。這三件事不能替代跨 session 的狀態管理,但能擋掉大部分常見問題。這篇說的就是怎麼做、做到什麼程度、在哪裡會失效。
有一段時間我的 Claude Code 工作流裡沒有任何框架,只有對話和一堆臨時 prompt。某天我做了兩個改變:把專案的架構決策寫進一個 CLAUDE.md,還有在每次 AI 說「好了」的時候問一句「commit SHA 是什麼?」
一類問題幾乎消失了:AI 在新 session 裡對著不存在的設計模式寫程式碼的情況,以及我接受了「完成」卻發現什麼都沒變的情況。不是所有問題都解決了。但那兩件事的性價比,讓我後來開始認真想「在裝框架之前,這個層面的治理到底能做多少」。
這篇是AI 代理常見痛點與我們的嘗試的延伸。那篇列了五個反覆出現的問題,這篇專門回答:只靠 prompt 習慣和 skill 選擇,能解決多少?
記憶檔案:解決跨 session 失憶的最低成本方案
AI 代理在每一個新對話都是空白狀態。它不記得上次的架構決策,不記得你說過不要用哪個 pattern,也不記得你已經有一個 utils/auth.ts,所以它再寫一個新的。這個問題在 IEEE Spectrum 的報導裡有量測數據:長 session 後期,AI 重複生成已存在函式、忽視早期建立的 coding convention 的頻率明顯上升。
三個工具在試圖解決同一個問題:
AGENTS.md 是 OpenAI Codex 最初設計的慣例,後來被 Cursor、GitHub Copilot 和 Google Antigravity 等主流工具廣泛採納。它的設計邏輯是:在任何工具讀取它之前,先告訴工具「這個專案是怎麼運作的、你可以做什麼、不可以做什麼」。
CLAUDE.md 是 Anthropic 針對 Claude Code 的版本。Claude Code 在每個新 session 開始時自動注入這個檔案的內容,所以你放在這裡的東西就等於是每次都在對話開頭重新說一遍。
.cursor/rules 是 Cursor 的對應物。原理相同。
這三個慣例同時存在,說明「怎麼讓 AI 記住專案規則」這個問題是通用的,不是某個工具特有的。選哪個取決於你主要用什麼工具,你不需要三個都放,放一個就有效果。
這類記憶檔案最有用的內容通常是三類:架構限制(「這個 repo 用 Repository pattern,不要把業務邏輯寫進 controller」)、命名規範(「service 命名用 XxxService,不要用 XxxManager」)、以及「不要碰」清單(「/database/migrations 只有在明確被要求的時候才能動」)。
一個重要的注意:這類檔案要短。研究觀察和實踐都指向同一個上限:200 行、2000 token 以內。超過這個長度,重要的規則會被稀釋。AI 技術上還是讀了整個檔案,但前面讀到的東西到後面已經注意力不足。寫 CLAUDE.md 的時候,如果你覺得需要加第六條規則,先問自己第一條能不能刪掉。
Skill 選擇:要求愈具體,干擾愈少
在 Claude Code 或 Cursor 的一次工作 session 裡,你可以載入很多 context:整個 codebase 的 README、過去的對話歷史、多個技能文件。但「載入愈多愈好」是個陷阱。
一個改一行 typo 的任務,不需要知道整套測試策略、部署規範和 API 設計原則。把這些全部塞進 context,不會讓 AI 更謹慎,只會讓它在「哪些規則現在適用」這件事上分配更少的注意力給真正重要的那個。
這不是 Agentic OS 特有的問題,是任何 Claude Code 或 Cursor session 都存在的情況。具體做法是:開始一個任務之前,先想清楚這個任務需要知道什麼,然後只提供那些。一個 tiny-fix 說「這是那行 code,幫我修」就夠了;一個涉及多個模組的功能開發才需要交代設計模式、測試策略和資料庫規範。
結果是給了 AI 密度更高的相關資訊,不是更少的資訊。
Evidence 習慣:不問則不說
這是成本最低的一個改變,也是讓我最驚訝的一個。
AI 說「完成了」的時候,它有可能真的完成了,也有可能完成了 90% 然後遇到小問題就繞過去了,也有可能整個理解方向就錯了。這三種情況在它的輸出裡,有時候看起來幾乎一樣。
養成一個習慣:在接受任何「完成」之前,要求一個具體的 artifact。
不是一個表單,也不是一套流程,就一句話:「commit SHA 是什麼?」「把 test 跑一遍,貼輸出給我」「你改了哪個檔案,第幾行?」
這個習慣有效的原因不只是讓你可以查。問這個問題本身會讓 AI 把它沒說清楚的地方說出來。 很多時候,我問「測試有過嗎」,它才會說「啊,那個測試我還沒跑,因為 X 的 setup 有問題」,而這個資訊如果我沒問,它可能就默默略過了。
誠實地說:這個習慣很累。問了十幾次之後你開始理解為什麼人們想要自動化這件事,框架裡的 evidence gate 就是把這個問答自動執行。但作為一個習慣,它能擋掉大概六七成的「接受了看起來完成的東西、後來發現沒有」的情況。
範圍宣告:先說不要碰什麼
開始一個複雜任務之前,明確告訴 AI 它應該不要碰什麼。
具體的說法比模糊的說法有效:「你在做 authentication module。除非我明確說,不要碰 /api/payments 和 /database/migrations 底下的任何東西」比「專注在 auth 就好」有用得多。
原因不完全是「AI 會遵守」,它不是每次都遵守。而是宣告了邊界之後,AI 在不確定的時候開始問問題而不是自己決定。我給了這樣的指令之後,在它原本會直接去改 payments module 的地方,它變成問我「這邊需要我更新 payment 的驗證邏輯嗎?」——這個轉變很有價值。
這個觀察跟 Pete Hodgson 對 AI coding assistant 失效模式的分析有直接的關係:當一個問題存在很多可能的解法,AI 選中你心目中那個的機率趨近於零。把解法空間縮小(也包括把「不能碰的部分」明確劃出來),大幅提高了它走向你要的方向的機率。這是流程問題,跟模型能力無關。
在從「下指令」到「蓋系統」裡,我說過「AI 只活在那一次的對話框裡」。宣告範圍是在這個限制之內,盡量讓它知道那個對話框的邊界在哪裡。
這個層面的治理做到什麼、做不到什麼
做得到的:讓 AI 在新 session 裡記得你的架構決策(記憶檔案)。讓它在不確定的時候問你而不是自己做決定(範圍宣告)。讓你在接受輸出之前有一個具體的查核點(evidence 習慣)。把技能文件控制在合理長度,避免注意力被稀釋(skill 選擇)。
做不到的是跨 session 的連貫狀態。記憶檔案解決的是「規則記得住」的問題,不是「上次做到哪裡」的問題。如果你的任務橫跨多個 session,每次開始你還是要手動交代背景——或者接受 AI 從頭重推一遍。Evidence 習慣的疲勞感也是真實的:問個五十次之後,你會想要自動化。這不是壞事——這是你已經知道在哪裡需要更正式的結構的訊號。範圍宣告在複雜任務下同樣會降解,涉及的模組愈多,「先說不要碰什麼」就愈難窮舉。
這個層面的治理是真實的,不是「沒有框架的窮人版」。但它有天花板。當你開始覺得每次的 context 交接很重複、evidence 問答讓你厭倦、範圍宣告的清單比任務本身還長——那就是你已經碰到這個層面的邊界了。
Agentic OS 是開源專案,記憶檔案的範本和設計說明都在這裡:github.com/KbWen/agentic-os