說明: 本文由 AI(Claude)根據我的初始筆記與想法完成。
上一篇提到教訓有升遷流程:先落在記憶裡,等它糾正過同樣的錯誤兩次,才升進規則文件。那一段只寫了第一階。
實際上有四階。
產品給了容器:自動記憶、會自動載入的 CLAUDE.md(連同 @path 語法)、技能、hook。它沒有說哪一條規則該放進哪一個容器,也沒有說什麼時候該把一條規則往上搬。這道梯子是我們自己搭的,中間還插了一階產品不知道的東西。
而且是今天才寫下來的。所以先說清楚:這篇寫的是方法,不是經驗。
| 階 | 誰觸發它 | 代價 |
|---|---|---|
| 記憶條目 | 只有這個專案、這台機器 | 幾乎沒有 |
參考文件(docs/workflow/*.md) | 模型,如果它認出這件事正在發生——一個軟觸發 | 讀的時候,注意力 |
| 技能(slash command) | 使用者,打 /name | 沒被叫到就不花 |
| hook | 沒有人——它自己會響 | 每一個 prompt 都收費 |
第二階不是產品給的。Claude Code 沒有「參考文件」這種東西——那些檔案就是躺在 repo 裡的檔案,跟旁邊的 README 沒有兩樣。它們會被讀到,只因為永遠載入的 CLAUDE.md 裡有一行指過去:「委派子代理時,先讀委派文件。」
所以它便宜:不佔常駐份量,寫多長都不會讓每個 session 的開場變重。
但它刻意不可靠。你是在賭模型認出「現在正在做的,就是那件事」。認出來,文件就被讀進來;沒認出來,那份文件就只是一個沒人開的檔案。
拿它跟 hook 比,重點才顯出來。hook 不管有沒有人選它都會響,代價是每一個 prompt 都收,一路收到天荒地老。
所以這道梯子換的不是「多一點可靠,多一點代價」。每上一階,代價換的是幣別,不是金額。 記憶花的幾乎是零;文件花的是注意力,而且只在被讀到的那一刻;技能花的是一個要記得的名字;hook 花的是每一個 prompt 的份量。四種幣別,加不起來。
加不起來,就沒辦法用「比較貴」或「比較便宜」來決定。所以每一階之間都得有自己的一個問題。
文件升技能,用這一句判。
文件約束的是一件你本來就在做的事;技能本身就是那件事。當指引是一串有順序的步驟、會去操作工具、或者必須能被名字叫起來——往上搬。
第二點是關鍵。如果一條規則只在被想起來的時候才管用,把它做成技能,等於把它的觸發交給記性。
文件或技能升 hook,用這一句判。
要證據,不要預感。「這條以後大概會被忘記」不是理由——那是想像,而想像永遠站在加 hook 那一邊。證據長這樣:某一列指標連著幾次都很低;或者同一個遺漏在紀錄裡一再出現,數得出來幾次、多長時間內。
真的要升,還得挑形狀:傷害不可逆的,用擋的;失敗只是「漏做」的,用提醒的。
「靜靜地」這三個字不是修辭。會大聲失敗的東西不需要 hook——它自己會叫,你自然會回頭處理。hook 是給那種漏掉了也沒人發現的規則用的。
梯子只有上樓,就只會愈長愈重。所以也要能下來。
方法很笨:把規則拿掉,看它那一列指標連著跑幾次,掉了就放回去。
這一階目前有零個實例。來源文件自己這樣寫:「這裡還沒有東西被降級過;這記的是方法,不是待辦的案子。」我把這句原樣留著。
陷阱只有一個,但很好踩:不要因為守衛在的時候沒出事,就把守衛拆掉。 有守衛時沒有失敗,不是守衛閒置的證據。這兩件事看起來一模一樣,而且只有拆掉之後才分得出來。
還有一個限制得說出來。「看那一列」靠的是前面那篇的量測工具,而它只照得到在那份評分表裡真的有一列的規則。沒有那一列的規則,證據只能是在對話紀錄裡數出來的重複次數——那就得把數字說清楚:幾次,在多長的時間裡。含糊地說「常常忘記」,不算證據。
這條線不畫,讀者會把兩邊混成一團:
| 產品給的 | CLAUDE.md 的自動載入、@path 自動載入語法、技能、hook、自動記憶 |
| 我們加的 | 參考文件那一層、把四個容器排成一道梯子、以及每一條上樓與下樓的判準 |
容器是產品給的。哪一個容器裝哪一條規則、什麼時候該換容器——那部分沒有人給答案,是我們自己在踩過幾次之後寫下來的。你的答案很可能跟我們不一樣,因為你的漏失長得跟我們不一樣。
| 項目 | 現況 |
|---|---|
| 這道梯子 | 今天才寫下來,還沒被實務驗證過 |
| 下樓那一階 | 零個實例——記的是方法,不是經驗 |
| 「看那一列」 | 只覆蓋得到在評分表裡有列的規則;其他的只能靠數紀錄 |
如果你手上也有一份正在長大的 agent 設定,能帶走的大概只有一句:先問這條規則的代價要用哪一種幣別付。 每一個 prompt 都收費的那一種,得先拿證據來換。