跳到主要內容

Kanban Codex Lane(看板 Codex 通道)

當 Hermes Kanban 工作器希望將 Codex CLI 作為獨立的實現通道運行,同時由 Hermes 保持對任務生命週期、協調、測試和交接的所有權時,使用此技能。

技能元數據

來源捆綁(默認安裝)
路徑skills/autonomous-ai-agents/kanban-codex-lane
版本1.0.0
作者Hermes Agent
許可證MIT
標籤kanban, codex, worktrees, autonomous-agents, prediction-market-bot
相關技能kanban-worker, codex, hermes-agent

參考:完整 SKILL.md

信息

以下是觸發此技能時 Hermes 加載的完整技能定義。這是技能激活時代理看到的指令。

Kanban Codex Lane(看板 Codex 通道)

概述

此技能定義了用於 Kanban 工作器的輕量級 Hermes+Codex 雙通道約定。Hermes 始終是任務所有者:它調用 kanban_show,決定 Codex 是否適用,創建或選擇獨立的工作區,啟動並監控 Codex,協調任何差異,運行驗證,並寫入最終的 kanban_completekanban_block 交接。Codex 僅作為輸入通道。Codex 的輸出不是任務完成信號,不是受信任的審查者,也不允許直接寫入持久的 Kanban 狀態。

該約定的存在使得 Hermes 工作器可以使用 Codex 進行有邊界的實現幫助,而無需更改調度器。調度器必須仍然生成 Hermes 工作器。工作器可以選擇在其自己的運行中生成 Codex,然後在獨立審查和測試後接受、部分接受或拒絕該通道。

何時使用

當滿足以下所有條件時,使用 Codex 通道:

  • Kanban 任務是具有明確驗收標準的編碼、重構、文檔編寫、測試或機械遷移任務。
  • Hermes 可以在一次運行中評估有邊界的差異。
  • 倉庫可以複製或檢出到獨立的 git worktree/分支中。
  • Hermes 可以在 Codex 退出後自行運行相關測試。
  • 提示詞可以說明所有安全約束和不得更改的文件。

當滿足以下任一條件時,不要使用 Codex 通道:

  • 任務需要人類判斷,且該判斷尚未包含在 Kanban 正文中。
  • 工作器缺乏倉庫訪問權限、Codex 認證或協調結果的時間。
  • 更改涉及機密、憑證存儲、私人用戶數據或生產訂單錄入系統。
  • 小型直接編輯比生成另一個代理更快且更安全。
  • 任務僅為研究性質,應產生書面交接而非差異。
  • 工作器可能會僅基於 Codex 的自我報告就標記為完成。

所有權規則

  1. Hermes 擁有 Kanban 生命週期。Codex 絕不能調用 kanban_completekanban_blockkanban_create、網關消息傳遞或任何 Hermes 看板 CLI 來替代工作器。
  2. Hermes 擁有最終驗收權。在審查和驗證之前,將 Codex 提交/差異視為不受信任的補丁。
  3. Hermes 擁有測試執行權。Codex 可以運行測試,但這些運行僅供參考;必須使用倉庫的標準包裝器從 Hermes 重複所需的驗證。
  4. Hermes 擁有安全權。如果 Codex 更改了安全邊界、風險門控、實時交易行為或機密處理,即使測試通過,也要拒絕該通道。
  5. Hermes 擁有清理權。終止卡住的 Codex 進程,並在不再需要時移除臨時 worktree。

必需的 Worktree 和分支模式

切勿在共享的髒檢出中直接運行 Codex。使用將通道與 Kanban 任務綁定並保持不受信任的編輯隔離的分支/worktree 名稱。

推薦變量:

TASK_ID="${HERMES_KANBAN_TASK:-t_manual}"
REPO="/path/to/repo"
BASE="$(git -C "$REPO" rev-parse --abbrev-ref HEAD)"
SAFE_TASK="$(printf '%s' "$TASK_ID" | tr -cd '[:alnum:]_-')"
BRANCH="codex/${SAFE_TASK}/$(date -u +%Y%m%d%H%M%S)"
WORKTREE="/tmp/${SAFE_TASK}-codex-lane"

創建獨立通道:

git -C "$REPO" fetch --all --prune
git -C "$REPO" worktree add -b "$BRANCH" "$WORKTREE" "$BASE"
git -C "$WORKTREE" status --short --branch

如果當前 Kanban 工作區已經是為此任務創建的獨立 git worktree,則僅當 git status --short 除了有意進行的 Hermes 編輯外是乾淨的時,才可以在其中創建同級的 Codex 分支。否則,創建一個單獨的臨時 worktree,並在協調後將接受的提交揀選或複製回來。

協調後的清理:

git -C "$REPO" worktree remove "$WORKTREE"
git -C "$REPO" branch -D "$BRANCH" # only after accepted commits were copied/cherry-picked or intentionally rejected

如果需要將 worktree 作為審查工件保留,請將其保留;在 codex_lane.artifacts 中記錄它,並在交接中提及它。

Codex 能力檢查

在生成 Codex 之前運行這些檢查。缺少 Codex 是跳過通道的正常原因,如果 Hermes 可以直接執行任務,則不是任務阻塞因素。

command -v codex
codex --version
codex features list | grep -i goals || true

如果需要 /goal 支持,僅在檢查可用性後啟用或使用功能標誌啟動:

codex features enable goals || true
codex --enable goals --version

認證可以通過 OPENAI_API_KEY 或 Codex CLI OAuth 狀態(通常是 ~/.codex/auth.json)進行。不要打印令牌文件。缺少 OPENAI_API_KEY 並不能證明認證不可用。

模式選擇

對於有界的一次性編輯,且 Codex 應自行退出的情況,請使用 codex exec

terminal(
command="codex exec --full-auto '$(cat /tmp/codex_prompt.md)'",
workdir=WORKTREE,
background=True,
pty=True,
notify_on_complete=True,
)

僅對於受益於持久目標跟蹤的更廣泛的多步驟工作,才使用 Codex /goal。如果該功能默認禁用,請在 PTY/tmux 會話中交互式啟動,或使用 codex --enable goals 啟動。保持目標對象自包含:倉庫路徑、任務 ID、安全約束、允許範圍、驗收標準、測試和提交預期。

示例 /goal 目標文本,可粘貼到 Codex 中:

/goal Work in this repository only: <WORKTREE>. Task: <TASK_ID> <TITLE>.
Hermes owns the Kanban lifecycle; do not call Hermes kanban tools or messaging.
Create small commits on branch <BRANCH>. Follow the PMB safety constraints in the prompt.
Run the requested verification commands and report exact outputs. Stop after producing a diff and summary.

不要在預測市場機器人(prediction-market-bot)或對安全敏感的倉庫中使用 --yolo。在隔離的工作樹(worktree)中優先使用 --full-auto,然後依賴 Hermes 協調。

提示詞構建

對於預測市場機器人工作,請使用位於 templates/pmb-codex-lane-prompt.md 的鏈接模板。對於其他倉庫,保持相同的結構,並將特定於 PMB 的安全塊替換為特定於倉庫的不變量。

每個 Codex 提示詞必須包括:

  • task_id、標題和完整的 Kanban 驗收標準。
  • 倉庫路徑、工作樹路徑、分支名稱和允許的文件範圍。
  • 明確聲明:Hermes 擁有 Kanban 生命週期;Codex 僅是輸入通道。
  • 必需輸出:簡明摘要、更改的文件、提交、運行的測試以及已知風險。
  • 禁止操作:訪問密鑰、外部消息傳遞、看板變更、無關重構,除非必要否則不升級依賴項。
  • Codex 可以運行的驗證命令,以及之後 Hermes 將運行的命令。

對於 PMB,逐字包含以下強制安全約束:

PMB safety constraints:
- live-SIM is paper-only; do not add or enable live REST order entry.
- Never use market orders.
- Do not add execution crossing or bypass price/risk checks.
- Do not fake passive fills, fills, PnL, order states, or reconciliation evidence.
- Do not weaken risk gates, limits, kill switches, or fail-closed behavior.
- Keep research/selection outside the C++ hot path unless explicitly requested.
- Do not read, print, write, or require secrets/tokens/credentials.

監控、超時和終止行為

在後臺使用 PTY 和完成通知啟動長時間的 Codex 通道:

result = terminal(
command="codex exec --full-auto '$(cat /tmp/codex_prompt.md)'",
workdir=WORKTREE,
background=True,
pty=True,
notify_on_complete=True,
)
session_id = result["session_id"]

進行監控而不產生干擾:

process(action="poll", session_id=session_id)
process(action="log", session_id=session_id, limit=200)
process(action="wait", session_id=session_id, timeout=300)

對於超過兩分鐘的通道,每隔幾分鐘發送一次 Kanban 心跳,例如 kanban_heartbeat(note="Codex lane running in <WORKTREE>; waiting for tests/diff")

終止條件:

  • 在任務的剩餘運行時預算內沒有產生有用的輸出。
  • Codex 請求密鑰、生產憑據或外部權限。
  • Codex 嘗試修改工作樹之外的文件。
  • Codex 開始無關的重寫或依賴項變動。
  • Codex 在工作器超時附近仍在運行,且不存在安全的部分產物。

終止命令:

process(action="kill", session_id=session_id)

終止後,檢查 git status --short,僅在安全的情況下保留有用的補丁,並記錄 codex_lane.result: timed_outrejected 以及具體的 rejected_reason

協調檢查清單

Hermes 在接受任何 Codex 通道結果之前必須執行此檢查清單:

  • git -C <WORKTREE> status --short --branch 僅顯示預期的文件。
  • Hermes 已審查 git -C <WORKTREE> diff --statgit diff
  • 不包含密鑰、憑據、生成的緩存、無關數據或本地產物。
  • 保留了 PMB 安全約束:無實時 REST 訂單錄入、無市價單、無執行交叉、無虛假被動成交/PnL、無風險門控削弱、無密鑰。
  • Codex 提交足夠小,可以乾淨地揀選(cherry-pick)或壓縮(squash)。
  • Hermes 自行運行了規範測試,對於 Hermes Agent 使用 scripts/run_tests.sh,對於其他倉庫使用倉庫文檔中記錄的包裝腳本。
  • 任何由 Codex 運行的測試都與由 Hermes 運行的測試分開列出。
  • 接受的提交/差異已應用於 Hermes 擁有的工作區/分支。
  • 被拒絕或部分工作有具體原因,如果有用則提供產物路徑。

接受結果:

  • accepted:Codex 差異/提交已審查、應用並驗證。
  • partial:經過編輯或揀選後接受了部分 Codex 工作;被拒絕的部分已記錄。
  • rejected:未接受任何 Codex 更改;已記錄原因。
  • timed_out:Codex 超出了通道預算;可能存在也可能不存在有用的產物。

kanban_complete 元數據模式

對於考慮過該通道的每個任務,在 metadata.codex_lane 下包含此對象。如果未使用 Codex,請設置 used: false 並在 rejected_reason 或同級 notes 字段中解釋原因。

{
"codex_lane": {
"used": true,
"mode": "exec | goal | skipped",
"worktree": "/absolute/path/to/codex/worktree",
"branch": "codex/t_caa69668/20260508100000",
"command": "codex exec --full-auto ...",
"result": "accepted | rejected | partial | timed_out",
"accepted_commits": ["<sha1>", "<sha2>"],
"rejected_reason": "empty when fully accepted; otherwise concrete reason",
"tests_run": [
{"command": "scripts/run_tests.sh tests/tools/test_x.py", "exit_code": 0, "owner": "hermes"},
{"command": "codex-reported: npm test", "exit_code": 0, "owner": "codex"}
],
"artifacts": ["/absolute/path/to/log-or-patch"]
}
}

對於故意跳過 Codex 的任務:

{
"codex_lane": {
"used": false,
"mode": "skipped",
"worktree": null,
"branch": null,
"command": null,
"result": "rejected",
"accepted_commits": [],
"rejected_reason": "Direct Hermes edit was smaller and safer than spawning Codex.",
"tests_run": [],
"artifacts": []
}
}

常見陷阱

  1. 將 Codex 自我報告視為驗證。始終檢查差異並從 Hermes 重新運行測試。
  2. 在用戶髒亂的主檢出(main checkout)中運行 Codex。始終在工作樹/分支中隔離。
  3. 讓 Codex 擁有 Kanban。Codex 可以總結進度,但 Hermes 寫入看板狀態。
  4. 在提示詞中忘記 PMB 安全不變量。缺少安全文本是通道設置失敗。
  5. 對快速編輯使用 /goal。除非需要持久的多步驟延續,否則優先使用 codex exec
  6. 終止卡住的通道而不記錄原因。rejected_reason 必須解釋決策。
  7. 因為測試通過而接受廣泛的無關清理。僅拒絕或揀選限定範圍的更改。

驗證檢查清單

  • Codex 被跳過,或僅在通過 command -v codexcodex --version 以及可選的目標功能檢查後才啟動。
  • Codex 僅在隔離的工作樹/分支中運行。
  • 提示詞包含任務範圍、所有權規則、適用時的 PMB 安全約束,以及驗證命令。
  • Hermes 審查了 git diff 和安全敏感文件。
  • Hermes 獨立運行了規範測試。
  • kanban_complete.metadata.codex_lane 遵循上述架構。
  • 已清理臨時進程和不必要的工作樹。