08 - 實戰:被 Claude 指揮的雙手

07-MCP與擴充 | 00-Index | 下一篇 → 09-疑難排解與速查表


這一章的定位

Herdr 08編排者(Claude)的角度講這件事。 這一章從 Codex 的角度講:要讓 Codex 當一個好用的 worker,它那邊該怎麼設定。


Worker 的三層準備

① 全域 ~/.codex/AGENTS.md      ← 每個 session 都適用的護欄
② repo 的 AGENTS.md            ← 這個專案的慣例
③ 任務檔                        ← 這一批工作的規格

三層都要有,因為 Codex 讀不到你的 Claude skill 和 CLAUDE.md。


① 全域護欄

~/.codex/AGENTS.md

# 全域指示
 
## 語言
繁體中文回覆,技術與醫學名詞保留英文。
 
## 硬規則(違反 = 任務失敗)
1. **不要 git commit、不要 git push。** 我會統一處理。
2. **需要事實查證的內容不要編造**——醫學事實、PMID、DOI、trial 數據、
   財務數字、dosing。不確定就在該處標 `[需查證]` 並繼續,
   由審核者用 PubMed / 權威來源補。**你沒有查證工具,這不是你的責任。**
3. 你自己推論而非直接來自來源的內容,標 `(inferred)`
4. 範圍之外的東西不要順手改。
 
## 回報格式
做完只回覆:`DONE <產出檔案路徑>` 加三行以內的摘要。
**不要貼出產出的全文**(會被讀輸出的工具截斷)。

每一條都有理由

規則為什麼
不要 commit兩個 repo 都規定 orchestrator 做唯一一次 commit
[需查證] 機制vault CLAUDE.md §4:無 PubMed 環境不得猜 PMID。把「不知道」變成可交接的訊號,而不是編一個
(inferred)vault CLAUDE.md §0.1 的原文要求
不貼全文Herdr 讀 alternate screen 有限制

② config.toml 的 worker profile

[profiles.worker]
approval_policy = "never"          # 無人值守,不能停下來等
sandbox_mode = "workspace-write"   # 能改 repo,寫不出去
model_reasoning_effort = "medium"  # 量產不需要最高力度
 
[profiles.audit]
approval_policy = "never"
sandbox_mode = "read-only"         # 盤點類:物理上改不到

🔴 盤點 / 稽核類任務一律用 audit profile。 read-only 是作業系統層級的保證,比 prompt 裡寫「不要改檔」可靠得多。你的筆記是查過 PubMed 才寫出來的,不可重建。


③ 任務檔範本

# 任務:114 年心臟血管科 第 001–012 題 詳解草稿
 
## 你的角色
內科專科考試詳解的**起草者**。你不是最終審核者。
 
## 輸入
- 題目:`tmp_drafts/input/114-心臟-001-012.json`
- 撰寫規範:`docs/詳解撰寫規範.md`**必讀,逐條遵守**
- 品質標竿:`src/data/explanations.113.json` 裡的 `113-037`
 
## 輸出(唯一)
`tmp_drafts/out/114-心臟-001-012.json`
格式:`{ "114-001": { "text": "...", "status": "draft" }, ... }`
 
## 硬規則
1. 固定五段式:`### 本題觀念 / ### 選項分析 / ### 答案解析 / ### 核心知識點 / ### 參考資料`
2. **每一個選項都要分析**,指出錯誤選項是哪個概念的陷阱
3. `status` **一律 `draft`**,禁止寫成 `reviewed`
4. 正解依「該考試年度當時的標準」判定
5. ⚠️ **PMID / DOI / trial 數據不確定就標 `[需查證]`,不要編。**
   你沒有 PubMed 存取權——查證是審核者的工作,標記出來就是完成你的部分。
6. 禁止罐頭字句:「此選項常是相近疾病」「供後續醫師逐題校閱」「以下為 AI 起草」
7. **不要 git commit、不要 git push**
 
## 完成條件
- 輸出檔存在、是合法 JSON、含全部 12 題
- 每題五段齊全,每個選項都有分析
 
## 回報
只回覆 `DONE tmp_drafts/out/114-心臟-001-012.json` + 三行摘要。
如果有標 `[需查證]` 的地方,列出題號。

💡 最後那句「列出標了 [需查證] 的題號」很值錢——Claude 收尾時直接知道要查哪幾題,不用自己 grep 全部。


完整的一次編排

從 Claude 那邊看(在 Herdr pane 裡):

# 1. 開背景 pane
split=$(herdr pane split --current --direction right --cwd "$PWD" --no-focus)
p=$(printf '%s\n' "$split" | jq -r '.result.pane.pane_id')
 
# 2. 啟動 codex worker
#    ⚠️ 不要在這裡寫死模型名——讓 config.toml 的 profile 決定
herdr agent start w-心臟a --kind codex --pane "$p"
 
# 3. 丟任務(不等,讓多個 worker 平行跑)
herdr agent prompt w-心臟a "$(cat tmp_drafts/tasks/114-心臟-001-012.task.md)"

從 Codex 那邊看:它在一個真實終端裡跑,用 worker profile(never + workspace-write),讀任務檔的規格,寫出 JSON,回一句 DONE

驗收(Claude 做):

herdr agent wait w-心臟a --until idle --until done --timeout 1800000
 
# 看檔案,不看狀態
out=tmp_drafts/out/114-心臟-001-012.json
test -f "$out" && jq empty "$out" && [ "$(jq 'length' "$out")" = "12" ] \
  && echo "✅" || echo "❌ 需重派"
 
# 找出待查證的地方
grep -o '\[需查證\]' "$out" | wc -l

兩個常見的失敗模式

1. 任務範圍太大

Taiwan_IM_board/CLAUDE.md §5 的實測是 一個 agent 10–12 題最穩。用 Codex 之後 stream timeout 不再是限制(本機 process),但批次小仍然有價值

  • 出錯時重做的成本低
  • 每個 pane 的 transcript 短,你巡場好讀
  • Codex 額度是 5 小時滾動視窗,小批次比較好控制消耗速度

2. 規格沒帶夠

Codex 讀不到 CLAUDE.md、讀不到你的 skill、不記得上次的對話。

症狀:產出格式對但內容品質不對、或違反某條你以為它知道的規則。

解法:把規則搬進三層護欄裡。判斷標準是——

規則的性質放哪
每個 session 都適用全域 ~/.codex/AGENTS.md
這個 repo 適用repo 的 AGENTS.md
這批任務適用任務檔

額度管理

Codex 的額度不是無限的:ChatGPT Plus 是每 5 小時的滾動視窗,本機與 cloud task 共用,另有週上限。

實務建議:

  • 2–3 個平行 worker 比較穩,不要一次開 5 個全速跑
  • 量產用 model_reasoning_effort = "medium",不要一律最高
  • ⚠️ Codex 沒有 --max-budget-usd 這種內建煞車(Claude Code 有),所以控制範圍和批次大小是你唯一的手段

一句話總結

Codex 是很好的執行者,但它什麼都不記得。 你給它的護欄有多完整,它的產出就有多可靠。


🔗 相關筆記


最後更新:2026-08-04