Files
superpowers/skills/using-superpowers/references/codex-tools.md
leonsong09 831f6f977c docs(codex-tools): fix subagent wait mapping to wait_agent
Update the Codex tool mapping so Claude Code 'Task returns result' maps to the current Codex spawned-agent result tool, wait_agent. Also clarify that older Codex builds exposed spawned-agent waiting as wait, while current bare wait is the code-mode exec/wait surface for yielded exec cells.

Verified with Drill:
- codex-tool-mapping-comprehension fails against dev with task_returns_result=wait
- codex-tool-mapping-comprehension passes against this PR with task_returns_result=wait_agent and exec/wait scoped correctly
- codex-subagent-wait-mapping passes against this PR with spawn_agent -> wait_agent -> close_agent and PR963_OK returned
2026-04-28 11:11:21 -07:00

4.3 KiB

Codex Tool Mapping

Skills use Claude Code tool names. When you encounter these in a skill, use your platform equivalent:

Skill references Codex equivalent
Task tool (dispatch subagent) spawn_agent (see Named agent dispatch)
Multiple Task calls (parallel) Multiple spawn_agent calls
Task returns result wait_agent
Task completes automatically close_agent to free slot
TodoWrite (task tracking) update_plan
Skill tool (invoke a skill) Skills load natively — just follow the instructions
Read, Write, Edit (files) Use your native file tools
Bash (run commands) Use your native shell tools

Subagent dispatch requires multi-agent support

Add to your Codex config (~/.codex/config.toml):

[features]
multi_agent = true

This enables spawn_agent, wait_agent, and close_agent for skills like dispatching-parallel-agents and subagent-driven-development.

Legacy note: Codex builds before rust-v0.115.0 exposed spawned-agent waiting as wait. Current Codex uses wait_agent for spawned agents. The wait name now belongs to code-mode exec/wait, which resumes a yielded exec cell by cell_id; it is not the spawned-agent result tool.

Named agent dispatch

Claude Code skills reference named agent types like superpowers:code-reviewer. Codex does not have a named agent registry — spawn_agent creates generic agents from built-in roles (default, explorer, worker).

When a skill says to dispatch a named agent type:

  1. Find the agent's prompt file (e.g., agents/code-reviewer.md or the skill's local prompt template like code-quality-reviewer-prompt.md)
  2. Read the prompt content
  3. Fill any template placeholders ({BASE_SHA}, {WHAT_WAS_IMPLEMENTED}, etc.)
  4. Spawn a worker agent with the filled content as the message
Skill instruction Codex equivalent
Task tool (superpowers:code-reviewer) spawn_agent(agent_type="worker", message=...) with code-reviewer.md content
Task tool (general-purpose) with inline prompt spawn_agent(message=...) with the same prompt

Message framing

The message parameter is user-level input, not a system prompt. Structure it for maximum instruction adherence:

Your task is to perform the following. Follow the instructions below exactly.

<agent-instructions>
[filled prompt content from the agent's .md file]
</agent-instructions>

Execute this now. Output ONLY the structured response following the format
specified in the instructions above.
  • Use task-delegation framing ("Your task is...") rather than persona framing ("You are...")
  • Wrap instructions in XML tags — the model treats tagged blocks as authoritative
  • End with an explicit execution directive to prevent summarization of the instructions

When this workaround can be removed

This approach compensates for Codex's plugin system not yet supporting an agents field in plugin.json. When RawPluginManifest gains an agents field, the plugin can symlink to agents/ (mirroring the existing skills/ symlink) and skills can dispatch named agent types directly.

Environment Detection

Skills that create worktrees or finish branches should detect their environment with read-only git commands before proceeding:

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 → already in a linked worktree (skip creation)
  • BRANCH empty → detached HEAD (cannot branch/push/PR from sandbox)

See using-git-worktrees Step 0 and finishing-a-development-branch Step 1 for how each skill uses these signals.

Codex App Finishing

When the sandbox blocks branch/push operations (detached HEAD in an externally managed worktree), the agent commits all work and informs the user to use the App's native controls:

  • "Create branch" — names the branch, then commit/push/PR via App UI
  • "Hand off to local" — transfers work to the user's local checkout

The agent can still run tests, stage files, and output suggested branch names, commit messages, and PR descriptions for the user to copy.