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" # 盤點類:物理上改不到🔴 盤點 / 稽核類任務一律用
auditprofile。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 是很好的執行者,但它什麼都不記得。 你給它的護欄有多完整,它的產出就有多可靠。
🔗 相關筆記
- 07-MCP與擴充 — 上一步
- 09-疑難排解與速查表 — 下一步
- 05-AGENTS-md與config-toml — 三層護欄的前兩層
- Herdr 08 — 從編排者角度看同一件事
- Herdr 09 — 詳解量產的完整流程
- Herdr 10 — 職責分界表
最後更新:2026-08-04
