您並不是透過一次一條訊息地輸入指令來管理員工。您給他們一份合約、一段試用期,以及衡量他們是否值得領薪水的方法。Fable 5 也需要同樣的待遇。
問題來了。Fable 5 可以連續運作數小時不需您介入,自行啟動其子 Agent,並在一夜之間完成一週的積壓工作。但它每用一個 token 就要花真金白銀,一旦您留下模糊的範圍,它就會超額交付,而且它維護錯誤答案的能力比大多數人維護正確答案的能力還強。
放任不管,它就會變成一個用昂貴代價產出自信廢話的機器。但只要套上合約,它就幾乎等於一個全職員工,每天成本只需幾美元。
這就是那份合約。不是理論,而是實際的檔案,按照您撰寫的順序,並圍繞一個真實的部署來建構:我已經透過 pm2 在巴黎的 VPS 上運行的監控機器人。驗證流程和計費表不是我的攻擊面。RPC 金鑰、錢包地址和即時區塊鏈交易才是。以下系統就是為此而建,而不是為了一個通用的 SaaS 儲存庫。
五個部分。每個部分交付一個檔案。總設定時間:不到兩小時。
設定
1claude CLI (Claude Code) 搭配 Fable 5 存取權限 # 使用額度,設有上限2llm CLI + OpenRouter 金鑰 # 用於便宜的模型3jq、git、pm2、cron4已運行機器人的 VPS
您最終會得到:
1agent-contract/2 CONTRACT.md # 第 1 部分:僱用條款3 ops/4 shift.sh # 第 3 部分:每日輪班5 dispatcher.md # 路由提示,僅限 Fable6 intake.md # 廉價讀取器,先讀取日誌7 worker.md # 廉價模型,負責打字8 reviewer.md # 全新的 Fable,檢查工作9 boundaries.md # 第 2 部分:它能碰和不能碰的範圍10 guardrails/signoff.sh # 第 2 部分:決定性的「是/否」11 personnel/12 trust.tsv # 第 4 部分:誰贏得了自主權13 standing-checks/ # 第 4 部分:必須保持為真的事項14 incidents/15 log.tsv # 第 5 部分:什麼出錯了和何時出錯16 runbook.md # 第 5 部分:該怎麼處理17 Makefile
在開始之前,有一條值得引用的規則,因為它為後續的一切定下了基調:
一個自己批改作業的 Agent,就是一個給自己加薪的 Agent。
這個系統中的任何環節都不會檢查自己的工作。一次都沒有。
第 1 部分:合約 (CONTRACT.md)
員工合約不是一份建議清單。它是數字、硬性限制,以及無論員工是否同意都會被強制執行的條款。請用同樣的方式撰寫這個檔案。不要用「請」或「試試看」。模型會像實習生繞過從不檢查的主管一樣,繞過軟性語言。
1# CONTRACT.md23## 硬性限制(沒有例外,不必問第二次)4- 未經批准,絕不碰觸錢包金鑰、.env 檔案或 RPC 憑證。5- 未通過簽核,絕不將變更推送至運行中的機器人程序(pm2 restart)。6- 未經事先詢問,單次提交變更行數絕不超過 150 行。7- 絕不根據自己對輸出的解讀就聲稱任務已完成。8 完成的意思是簽核腳本回傳 0。其他任何條件都不算數。9- 絕不憑空發明 API 端點、合約地址或設定值。10 如果儲存庫中沒有,請停下來詢問。11- 絕不新增相依套件。請在 ops/shift-log.md 中記錄,然後停下來。12- 絕不編輯或刪除測試、警報閾值或監控條件,以使某項測試通過。13 那不是修復,那是詐欺。14- 絕不在輪班內以「高」以上的努力程度運行。「極高」僅適用於您手動觸發的一次性審查,絕不用於自動化循環。15- 絕不在回應中敘述或解釋您的內部推理過程。這會顯得很樂於助人。但在 Fable 5 上,它反而可能觸發拒絕分類器。1617## 任務路由(誰做什麼,最便宜的勝出)18| 模型 | 每任務成本 | 野心 | 判斷力 | 品味 |19|------|-----------|------|--------|------|20| claude-fable-5 | 高 | 低 | 10 | 10 |21| claude-opus-4-8 | 中 | 中 | 8 | 9 |22| claude-sonnet-5 | 低 | 高 | 7 | 7 |23| 便宜 OSS 工人 | 最低 | 最高 | 5 | 4 |24251. 決定下一步要做什麼、審查 diff、打破僵局 -> Fable 5,唯讀,高努力。262. 讀取原始日誌、傾印資料或任何超過 50,000 token 的內容 -> 便宜的工人模型。27 絕不使用 Fable。那是用總監的薪水去讀試算表。283. 任何使用者或鏈直接互動的內容 -> 在出貨前,品味分數必須達到 8 或以上。294. 其他所有情況 -> sonnet-5,中等努力,出錯時升級一級。3031## 定義32- 「判斷力」= 能否在無人監督下處理桌上最困難的事情33- 「完成」= 簽核腳本退出碼為 0,句號34- 「小」= 變更行數少於 50 行35- 「清理」= 行為完全一致,變更前後簽核皆為綠色3637## 唯一算數的完成定義38- 每個任務在開始工作前,都必須有一個機器可檢查的終點線。39- 由一位未看過計畫也未看過草稿的審查員進行檢查。40- guardrails/signoff.sh 擁有最終決定權。不是審查員,而是腳本。41- 如果工人和審查員連續兩次意見不一致,則交由人類處理。42 不進行第三次意見徵詢,不使用打破平局的模型。
請換上您自己的數字。任何您有 80% 的時間會放行,但仍稱之為「完成」的事項,都必須附上一個數字或一個「絕不」,否則就刪掉它。
第 2 部分:邊界與簽核
一份員工合約,如果沒有對他們可以觸碰的範圍進行背景調查,以及一個在出貨前簽核的主管,就毫無意義。兩個檔案。
ops/boundaries.md:
1## 可獨立作業2在分支上起草修復;更新 shift-log.md;重新啟動*非生產*測試實例;標記過時的資料來源34## 需要我的簽名5任何涉及 wallets/、.env*、config/rpc.json 的內容;任何超過 300 行的 diff;任何對運行中 pm2 程序的變更;任何會發送交易的動作67## 立即叫醒我8審查員對同一修復失敗兩次;路由器提供了與請求不同的模型;每日花費超過了限制;某項持續檢查變紅;任何要求私鑰的情況
ops/guardrails/signoff.sh(請編輯指令以符合您的機器人):
1#!/usr/bin/env bash2set -e3npm run typecheck --if-present4npm test --if-present5pm2 describe "$BOT_NAME" | grep -q "status.*online" || exit 1
在系統中的任何其他項目上線之前,請先手動執行此腳本一次。如果它在您目前的設定上無法順利通過,那這就是實際上的第一個任務。所有下游作業都假設這個腳本會說真話。
第 3 部分:輪班
以下是成敗關鍵的算式。如果讓 Fable 5 負責打字,一場完整的對話很快就會花掉真金白銀,如果讓它連續寫幾個小時,甚至會達到四位數。但如果讓 Fable 5 負責決策,而由一個便宜的模型負責打字,帳單就會完全不同,大約只需要 15-20% 的 token,就能獲得 100% 的判斷。
因此,輪班由四個員工組成,而不是一個:
- 一個近乎免費的模型讀取隔夜的日誌和 pm2 輸出。只說「安靜」或「有動作可做」。
- Fable 5,唯讀,決定唯一最具價值的事情,並撰寫工作指令。它不碰觸程式碼。
- 一個便宜的工人模型在隔離的分支上執行工作指令。
- 一個全新的 Fable 5 實例,只看規格和 diff,投票通過或失敗。
第 2 部分中的決定性腳本會投下打破平局的關鍵一票。每次都這樣。

ops/shift.sh:
1#!/usr/bin/env bash2set -euo pipefail3cd "$(dirname "$0")"4DAILY_BUDGET="${DAILY_BUDGET_USD:-5}"5INTAKE_MODEL="${INTAKE_MODEL:-openrouter/deepseek/deepseek-v4-flash}"6WORKER_MODEL="${WORKER_MODEL:-openrouter/moonshotai/kimi-k2.6}"78# 1. 讀取,成本極低9pm2 logs --lines 100 --nostream | llm -m "$INTAKE_MODEL" -s "$(cat intake.md)" \10 >> shift-log.md11grep -q "status: actionable" shift-log.md || { echo "安靜輪班"; exit 0; }1213# 2. 調度,Fable,極高努力,唯讀,決定後停止14claude -p "$(cat dispatcher.md)15LOG: $(cat shift-log.md)16TRUST: $(cat personnel/trust.tsv)17BOUNDARIES: $(cat boundaries.md)" \18 --model claude-fable-5 --effort xhigh --allowedTools "Read" \19 --output-format json > /tmp/order.json2021SERVED=$(jq -r '.modelUsage | keys[0] // "claude-fable-5"' /tmp/order.json)22[[ "$SERVED" != *fable* ]] && { echo "重新路由,放棄此次執行" >> shift-log.md; exit 2; }2324jq -r '.result' /tmp/order.json > work-order.json25ACTION=$(jq -r .action work-order.json)26[[ "$ACTION" == "stop" ]] && exit 027[[ "$ACTION" == "queue" ]] && { echo "已排入佇列等待簽名" >> shift-log.md; exit 0; }2829# 3. 執行,便宜工人,隔離分支30BR="shift-$(date +%s)"31git worktree add "../$BR" -b "$BR" >/dev/null32( cd "../$BR" && llm -m "$WORKER_MODEL" -s "$(cat "$OLDPWD/worker.md")" \33 "$(cat "$OLDPWD/work-order.json")" > shift-notes.md )3435# 4. 審查,全新的 Fable,僅規格和 diff,無其他內容36VERDICT=$(claude -p "$(cat reviewer.md)37SPEC: $(jq -r .spec work-order.json)38DIFF: $(cd "../$BR" && git diff)" \39 --model claude-fable-5 --effort high --allowedTools "" \40 --output-format json | jq -r .result)4142# 5. 唯一能出貨的投票43if [[ "$VERDICT" == PASS* ]] && ( cd "../$BR" && "$OLDPWD/guardrails/signoff.sh" ); then44 echo "通過,根據信任等級已出貨或排入佇列" >> shift-log.md45else46 echo "失敗:$BR 保留待審查" >> shift-log.md47fi
由 Fable 做出的決策和由 Fable 打出的程式碼,是兩種不同的價格標籤。只有決策才值得支付較高的價格。
第 4 部分:人事檔案
信任不是公司層級的設定。它是逐項任務贏得的,就像您不會因為一個新員工的履歷看起來很棒,就在第一天把生產環境的金鑰交給他們一樣。
personnel/trust.tsv 會追蹤每項重複性工作(以名稱區分)的執行次數、通過次數和當前等級。
- 監視:執行次數少於 10 次,或通過率低於 90%。僅限草稿,沒有例外。
- 試用期:執行 10-19 次,通過率達 90% 以上。每次都會排入佇列等待您的簽名。
- 已清除:執行 20 次以上,通過率達 95% 以上。無需您介入即可出貨。

已清除的任務如果出錯,不會有警告。它會直接降回試用期,並將錯誤訊息輸出到 stderr,然後 cron 會把這個訊息郵寄給您。自動降級是唯一真正有效的降級方式。
人事檔案的另一半是 personnel/standing-checks/。每項完成的工作都會在這裡晉升為一條指令,必須永遠保持為真,每天檢查一次:
1# personnel/standing-checks/bankr-claim-monitor.md2predicate: pm2 describe bankr-claim-monitor | grep -q "status.*online" && \3 sqlite3 claims.db "select count(*) from claims where ts > strftime('%s','now','-1 day')" | grep -qv "^0$"4last-verified: 2026-07-085on-violation: 叫醒我,不要盲目自動重啟
一項只驗證過一次的任務,並不是完成了。它只是一個帶有時間戳記的假設。
每天透過 cron 執行檢查。一個失敗的 predicate 表示某個曾經為真的事項,現在默默地不再為真了,而且如果沒有這個檔案,沒有人會注意到。
第 5 部分:事件報告
這是原始操作手冊忽略的部分,但當系統在處理真實金錢的基礎設施上運行時,這部分才是真正重要的。每個 Agent 系統最終都會做一些您不希望它做的事。問題在於,您是從乾淨的日誌中發現,還是從一個被掏空的錢包中發現。
ops/incidents/runbook.md:
1| 訊號 | 含義 | 處理方式 |2|------|------|----------|3| exit 2 (重新路由) | 不同的模型處理了請求 | 丟棄輸出,絕不基於它建構任何東西,明天重試 |4| stop_reason: refusal | 安全分類器拒絕,HTTP 200 | 不是錯誤,檢查日誌;如果一項任務持續拒絕,該任務大概觸碰了不該碰的東西 |5| 簽核對同一修復失敗兩次 | 工人和審查員無法達成一致 | 移交給人類審查,不要自動進行第三次重試 |6| 持續檢查變紅 | 某項已完成的事項不再為真 | 檢查最後驗證日期,比對自那時起出貨的 diff,不要自動還原 |7| 每日花費超過限制 | 預算超支 | 停止輪班,閱讀 shift-log.md,找出哪個階段失控了 |8| 任務觸碰 wallets/.env/rpc | 邊界違規嘗試 | 硬性停止,如果 boundaries.md 被遵守,這不應該發生;將任何發生視為系統本身的錯誤 |
將這些事件中的每一項都記錄到 incidents/log.tsv 中,並附上時間戳記,無論您是否對其採取了行動。目標不是零事件。而是在您發現時已經太晚的事件為零。
每週一次,進行一次堆肥處理:閱讀事件日誌、信任檔案中的降級記錄,以及任何已排入佇列超過 3 天但尚未簽署的事項。從中提取最多三個提案:一個給 CONTRACT.md 的新硬性限制、一個對工作描述的修正,或一個您遺漏的持續檢查。您必須手動簽署這三個提案。系統可以提出自己的下一條規則。但它永遠不能自己寫入一條。
試用期時間表
三個檢查點,不是三十天的監視:

檢查點 1. 連續一週每天手動執行輪班。閱讀每一行。當連續三次輪班的路由方式都與您自己會做的方式完全相同時,即可晉級。
檢查點 2. Cron 接手輪班。您邊喝咖啡邊審查佇列,而不是自己執行。當兩項重複性工作的記錄執行次數超過 20 次時,即可晉級。
檢查點 3. 您表現最好的工作開始無人值守地出貨。當它連續一週運行且您完全無需介入時,即可晉級。
規則摘要
- 合約就是一個數字或一個「絕不」。任何更軟性的東西都會被繞過。
- 調度員決定。工人打字。兩者都不檢查自己的工作。
- Fable 的判斷力值這個價錢。Fable 的打字通常不值。
- 信任是逐項工作的,不是公司層級的,而且降級是自動且響亮的。
- 一項完成但未重新檢查的任務,並不是完成,它只是一個帶有日期的猜測。
- 邊界存在於您十秒鐘就能讀完的檔案中,而不是在您的記憶裡。
- 事件日誌的存在,是為了讓您從報告中發現問題,而不是從餘額中發現。
- 絕不基於您未要求的模型的輸出進行建構。
- 每週一次,系統可以提出一條新規則。但您仍然是簽署它的人。
模型從來都不是最難的部分。在它周圍建立一個即使沒人看著也能保持誠實的系統,那才是真正的工作。這就是對一個機器人艦隊(而非程式碼庫)來說,這樣的系統看起來的樣子。
從 guardrails/signoff.sh 開始。手動執行一次輪班。為您最後部署的機器人撰寫一條持續檢查。當它第一次捕捉到您原本確信沒問題的問題時,其餘的部分就不再是選項了。
關注 @GipArcAI 以獲取更多這類分析,並在 X 上找到我:https://x.com/gippp69。


![成田悠輔的天才 AI 應用技巧 [保存版]](/cdn-cgi/image/width=1920,quality=90,format=auto,metadata=none/https%3A%2F%2Fcms-assets.youmind.com%2Fmedia%2F1784137658627_u4bwry_HNMS89bbsAAUPJI.jpg)


