Skip to content

obra/external-subagents

Codex subagent CLI and tooling

https://skillcdn.ai/gh/obra/external-subagents

Connect this address to your AI to use this skill. How to connect

  • Unverified
  • Default branchmain
  • Commitdb5573c
  • LicenseNone declared
View on GitHub

codex-subagents

Spawn background subagents for parallel or long-running tasks. Use when you need research threads, context isolation, or detached execution.

Path
SKILL.md
License
None declared

Codex Subagents

Overview

codex-subagent offloads work to background threads so your main context stays lean. Threads run detached by default; use wait/peek to check results.

Critical rules:

  1. You cannot send to a running thread. Always wait before sending follow-ups.
  2. Use --permissions read-only or --permissions workspace-write (not workspace-read)

For detailed workflow documentation, see reference/workflow.md.

When to Use

SituationWhy subagents help
Parallel research tasksMultiple threads run simultaneously
Context would bloatResearch stays in separate thread
Long-running workDetached execution, check later

Don't use for: Quick inline questions, tightly-coupled work needing your current state.

Core Workflow

1. start with --prompt    (inline text or stdin)
2. wait/peek → check result
3. send → resume with follow-up (ONLY after thread stops)
4. archive/clean → lifecycle management

The Running Thread Rule

You CANNOT send to a running thread. This is the #1 mistake.

# WRONG - thread might still be running
echo "followup" | codex-subagent send thread-abc --prompt -

# RIGHT - wait first, then send
codex-subagent wait --threads thread-abc
echo "followup" | codex-subagent send thread-abc --prompt -

Resumable statuses: completed, failed, stopped, waiting

Quick Reference

CommandPurposeKey flags
startLaunch new thread--role, --permissions, --prompt, --label, -w
sendResume stopped thread<thread-id>, --prompt, -w
peekRead newest unseen message<thread-id>, --save-response
logFull history<thread-id>, --tail, --json
statusThread summary<thread-id>
waitBlock until threads stop--threads, --labels, --all, --follow-last
listShow threads--status, --label, --role
archiveMove completed to archive--completed, --yes, --dry-run
cleanDelete old archives--older-than-days, --yes

Prompt input: --prompt "text" for simple prompts, --prompt - reads from stdin (for multi-line), -f/--prompt-file for files

Positional thread IDs: peek abc123 works like peek -t abc123

Common Patterns

Simple inline prompt
codex-subagent start --role researcher --permissions read-only \
  --label "quick-task" --prompt "List all exported functions in src/lib/"
Multi-line prompt (heredoc)
cat <<'EOF' | codex-subagent start --role researcher --permissions read-only --label "auth-research" --prompt -
Research authentication patterns in this codebase:
1. Find all auth-related files
2. Document the auth flow
3. Note any security concerns
EOF
Parallel research
# Launch multiple researchers
cat <<'EOF' | codex-subagent start --role researcher --permissions read-only --label "API: Stripe" --prompt -
Research Stripe API authentication methods and best practices
EOF

cat <<'EOF' | codex-subagent start --role researcher --permissions read-only --label "API: Twilio" --prompt -
Research Twilio API authentication methods and best practices
EOF

# Wait for all, see results
codex-subagent wait --labels "API:" --follow-last
Blocking task
# -w blocks until complete (may take minutes)
cat <<'EOF' | codex-subagent start --role researcher --permissions read-only --prompt - -w --save-response result.txt
Analyze error handling patterns in src/
EOF
cat result.txt

Warning: -w blocks for as long as the agent runs. For long tasks, prefer detached mode with wait --follow-last.

Cleanup old work
# Two-phase: archive completed, then clean old archives
codex-subagent archive --completed --yes
codex-subagent clean --older-than-days 30 --yes

Troubleshooting

ProblemCauseFix
"profile does not exist"Wrong permissionsUse read-only or workspace-write (not workspace-read)
"not resumable" errorThread still runningwait first, then send
"different controller"Wrong sessionUse --controller-id or check list
Thread disappearedWas archivedCheck archive dir or re-run task

Checklist

  • start has --role, --permissions, --prompt, and --label
  • Permissions are read-only or workspace-write
  • wait before send (never send to running thread)
  • Results captured with --save-response or peek

Files of this skill

Only the first files are listed.

Browse all supporting files