Files
2026-09-20 01:06:13 +08:00

77 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Codex 工具映射
> 🇨🇳 **本节的工具映射表是 superpowers-zh 的增量内容,上游 obra/superpowers 没有。** 其余章节为上游内容的翻译。
Skills 使用 Claude Code 的工具名称。在 Codex 中遇到这些名称时,请使用对应的平台等价工具:
| Skill 中的引用 | Codex 等价工具 |
|---------------|---------------|
| `Task` 工具(派遣子 agent) | `spawn_agent` |
| 多个 `Task` 调用(并行) | 多个 `spawn_agent` 调用 |
| Task 返回结果 | `wait_agent` |
| Task 自动完成 | V2 无需处理(用完自动回收);仅 V1 需要 `close_agent` 释放槽位 |
| `TodoWrite`(任务跟踪) | `update_plan` |
| `Skill` 工具(调用 skill) | Skills 原生加载——直接按说明操作 |
| `Read`、`Write`、`Edit`(文件) | 使用原生文件工具 |
| `Bash`(执行命令) | 使用原生 shell 工具 |
## 子 Agent 派遣需要多 Agent 支持
在 Codex 配置文件(`~/.codex/config.toml`)中添加:
```toml
[features]
multi_agent = true
```
启用后,`dispatching-parallel-agents` 和 `subagent-driven-development` 这类 skill 所用的多智能体工具就可用了。**你拿到哪些工具,取决于你的模型预设选中的多智能体版本**(当前的预设跑 V2,较老的跑 V1)。当你的实际工具列表与任何表格(**包括本文这张**)不一致时,以实际工具列表为准。
- **派生(Spawning):** 用 `spawn_agent {fork_turns: "none"}` 给子代理一个干净的上下文;默认值 `"all"` 会把你的**整份对话记录**复制进子代理。在 Codex 0.145+ 上,`~/.codex/agents/` 下的角色文件通过 `agent_type` 挂到隔离 fork 上。全历史 fork 接受 `model` 与 `reasoning_effort` 覆盖(在那里只有 `agent_type` 会被拒绝)—— 隔离 fork 是 SDD 的默认选择,理由是上下文卫生,**不是**因为覆盖参数需要它。
- **修复轮次(Fix rounds):** 用 `followup_task` 唤回实现者 —— 它会送达你的消息、触发一个回合,并在 harness 已经回收该子代理时透明地把它重新装载回来。绝不要因为「派生出去的 agent 不能再被发消息」这种想当然而重新派一个新的实现者;在 V2 上它**总是**可以。
- **生命周期(Lifecycle):** **V2 没有 `close_agent`。** 完成的子代理会在需要槽位时被自动回收,放着不管不产生任何成本。只有 V1 会话才有 `close_agent` —— 在那里,审查者返回审查结果后就关掉它,每个实现者在其任务的审查通过后关掉。
- **模型名:** 绝不要把 skill、表格或旧会话里的模型名直接抄进 `spawn_agent` 而不先对照你**当前**的 spawn 允许列表 —— V2 只接受具备 V2 能力的预设,其余会直接硬报错。
## 等待子代理
`wait_agent` 是**事件订阅,不是轮询**:一次长等待会在子代理产生信箱活动的那一刻醒来,延迟和短等待完全一样。短超时轮询什么也换不到,却每次都要付一次工具调用 —— 以及一次上下文重新计费。在实测会话里,大约**三分之二**的 wait 调用都是超时的短轮询。
- 只要你手上还有本地工作,就**完全不要等**。已完成子代理的最终回答会被推进你的信箱,随你的下一个回合一起到达。
- 当你确实空闲、且还有子代理在跑时,按**有界的时间段**等待:`wait_agent` 的 `timeout_ms` 设 300000-600000(5-10 分钟)。每一段结束后 —— 无论是被唤醒还是超时 —— 发一行状态、跑一次 `list_agents`,并追查任何「已完成但没汇报」的子代理。绝不要把小于五分钟的轮询叠着用;事件订阅唤醒一个有界时间段的速度和唤醒一次短轮询一样快。
- 完成邮件**无法唤醒一个空闲的控制者**(它送达时不触发回合);覆盖这个空闲窗口正是 `wait_agent` 唯一的职责。一段等待在毫无活动的情况下超时,是让你去做对账的信号,**不是**让你把下一段缩短的理由。
## 派生时的模型路由
你发出的**每一次** `spawn_agent`(包括你自己就是一个正在做扇出的子代理时),都要按你正在执行的那个 skill 的「模型选择」规则,**同时显式设置 `model` 和 `reasoning_effort`**。只设 `model` 是个陷阱:子代理的 effort 会静默重置为那个模型的默认值,而不是你的。
请你的人类伙伴在 `~/.codex/config.toml` 里加一道机器级兜底,这样任何漏设的派生仍然会路由到一个刻意选定的档位,而不是静默继承本次会话最贵的那个模型:
```toml
[agents]
default_subagent_model = "<你的 spawn 允许列表里的一个中档模型>"
default_subagent_reasoning_effort = "medium"
```
## 环境检测
创建 worktree 或收尾分支的 skill,应当在动手之前用**只读**的 git 命令检测环境:
```bash
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
BRANCH=$(git branch --show-current)
```
- `GIT_DIR != GIT_COMMON` → 已经在一个链接的 worktree 里(跳过创建)
- `BRANCH` 为空 → detached HEAD(无法从沙箱里建分支/推送/开 PR)
各 skill 如何使用这些信号,见 `using-git-worktrees` 的第 0 步与 `finishing-a-development-branch` 的第 1 步。
## Codex App 的收尾
当沙箱阻止建分支/推送操作时(在外部托管的 worktree 里处于 detached HEAD),agent 应提交全部工作,并告知用户改用 App 的原生控件:
- **"Create branch"** —— 命名分支,然后通过 App UI 完成 commit/push/PR
- **"Hand off to local"** —— 把工作转交到用户的本地检出
agent 仍然可以跑测试、暂存文件,并输出建议的分支名、commit message 和 PR 描述供用户复制。