跳到主要内容

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 遵循上述架构。
  • 已清理临时进程和不必要的工作树。