with one click
team
N coordinated agents on shared task list using tmux-based orchestration
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
N coordinated agents on shared task list using tmux-based orchestration
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Run an anti-slop cleanup/refactor/deslop workflow
Strategic planning with optional interview workflow
Self-referential loop until task completion with architect verification
Alias for $plan --consensus
| name | team |
| description | N coordinated agents on shared task list using tmux-based orchestration |
$team is the tmux-based parallel execution mode for OMX. It starts real worker Codex and/or Claude CLI sessions in split panes and coordinates them through .omx/state/team/... files plus CLI team interop (omx team api ...) and state files.
This skill is operationally sensitive. Treat it as an operator workflow, not a generic prompt pattern.
When user triggers $team, the agent must:
omx team ...spawn_agent fanoutIf omx team is unavailable, stop with a hard error.
omx team [ralph] [N:agent-type] "<task description>"
Examples:
omx team 3:executor "analyze feature X and report flaws"
omx team "debug flaky integration tests"
omx team ralph "ship end-to-end fix with verification"
Important: N:agent-type (for example 2:executor) selects the worker role prompt, not the worker CLI (codex vs claude).
To launch Claude teammates, use the team worker CLI env vars:
# Force all teammates to Claude CLI
OMX_TEAM_WORKER_CLI=claude omx team 2:executor "update docs and report"
# Mixed team (worker 1 = Codex, worker 2 = Claude)
OMX_TEAM_WORKER_CLI_MAP=codex,claude omx team 2:executor "split doc/code tasks"
# Auto mode: Claude is selected when worker launch args/model contains 'claude'
OMX_TEAM_WORKER_CLI=auto OMX_TEAM_WORKER_LAUNCH_ARGS="--model claude-..." omx team 2:executor "run mixed validation"
Before running $team, confirm:
tmux installed (tmux -V)$TMUX is set)omx command resolves to the intended install/buildnode bin/omx.js ..., run npm run build after src changeshud --watch panes before splitSuggested preflight:
tmux list-panes -F '#{pane_id}\t#{pane_start_command}' | rg 'hud --watch' || true
If duplicates exist, remove extras before omx team to prevent HUD ending up in worker stack.
Before launching omx team, require a grounded context snapshot:
.omx/context/{slug}-*.md when available..omx/context/{slug}-{timestamp}.md (UTC YYYYMMDDTHHMMSSZ) with:
explore first for brownfield facts, then run $deep-interview --quick <task> before team launch.Do not start worker panes until this gate is satisfied; if forced to proceed quickly, state explicit scope/risk limitations in the launch report.
omx team currently performs:
ralph, N, agent-type, task).omx/state/team/<team>/config.json.omx/state/team/<team>/manifest.v2.json.omx/state/team/<team>/tasks/task-<id>.json.omx/state/team/<team>/worker-agents.mdAGENTS.md content (if present) + worker overlay, without mutating project AGENTS.md<leader-cwd>/.omx/state)OMX_TEAM_WORKER=<team>/worker-<n>OMX_TEAM_STATE_ROOT=<leader-cwd>/.omx/stateOMX_TEAM_LEADER_CWD=<leader-cwd>OMX_TEAM_WORKER_CLI / OMX_TEAM_WORKER_CLI_MAP (codex or claude)--worktree is usedcapture-pane polling)inbox.md and trigger via tmux send-keysstatus / resume / shutdownImportant:
omx team --worktree[=<name>]) while sharing one team state rootmailbox/leader-fixed.jsonOMX_TEAM_WORKER_CLI_MAP entry for that worker index,OMX_TEAM_WORKER_CLI / auto detection.Tab on busy panes (strategy-dependent).C-m) rounds (never queue-first Tab).Team mode resolves worker model flags from one shared launch-arg set (not per-worker model selection).
Model precedence (highest to lowest):
OMX_TEAM_WORKER_LAUNCH_ARGS--model flaggpt-5.3-codex-spark (only when 1+2 are absent and team agentType is low-complexity)Thinking-level rule (critical):
model_reasoning_effort from model-name substrings (e.g., spark, high-capability, mini).low, medium, high).OMX_TEAM_WORKER_LAUNCH_ARGS already includes -c model_reasoning_effort=..., that explicit value overrides dynamic allocation for every worker.Normalization requirements:
--model <value> and --model=<value>--model <value>-c model_reasoning_effort="<level>"; otherwise inject the worker role's default reasoning levelFollow this exact lifecycle when running $team:
omx team status <team>, omx team resume <team>, mailbox/state files)pending=0in_progress=0failed=0 (or explicitly acknowledged failure path)omx team shutdown <team>Do not run shutdown while workers are actively writing updates unless user explicitly requested abort/cancel.
Do not treat ad-hoc pane typing as primary control flow when runtime/state evidence is available.
To avoid brittle behavior, message/task delivery must not be driven by ad-hoc tmux typing.
Required default path:
omx team ... runtime lifecycle commands for orchestration.omx team api ... --json for mailbox/task mutations.mailbox/*.json, task status, omx team status).Strict rules:
tmux send-keys as the primary mechanism to deliver instructions/messages.dispatch/requests.json, mailbox, inbox).worker_notify_failed:<worker>) or explicit user request (for example “press enter”).omx team status <team-name>
omx team resume <team-name>
omx team shutdown <team-name>
Semantics:
status: reads team snapshot (task counts, dead/non-reporting workers)resume: reconnects to live team session if presentshutdown: graceful shutdown request, then cleanup (deletes .omx/state/team/<team>)OMX_TEAM_WORKER per worker)tmux display-message.omx/state/team/<team>/... files.omx/state/team/<team>/mailbox/leader-fixed.json.omx/state/team/<team>/mailbox/worker-<n>.json.omx/state/team/<team>/dispatch/requests.json (durable dispatch queue; hook-preferred, fallback-aware).omx/state/team/<team>/config.json.omx/state/team/<team>/manifest.v2.json.omx/state/team/<team>/tasks/task-<id>.json.omx/state/team/<team>/workers/worker-<n>/identity.json.omx/state/team/<team>/workers/worker-<n>/inbox.md.omx/state/team/<team>/workers/worker-<n>/heartbeat.json.omx/state/team/<team>/workers/worker-<n>/status.json.omx/state/team-leader-nudge.jsonUse omx team api for machine-readable mutation/reads instead of legacy team_* MCP tools.
omx team api <operation> --input '{"team_name":"my-team",...}' --json
Examples:
omx team api send-message --input '{"team_name":"my-team","from_worker":"worker-1","to_worker":"leader-fixed","body":"ACK"}' --json
omx team api claim-task --input '{"team_name":"my-team","task_id":"1","worker":"worker-1"}' --json
omx team api transition-task-status --input '{"team_name":"my-team","task_id":"1","from":"in_progress","to":"completed","claim_token":"<token>"}' --json
--json responses include stable metadata for automation:
schema_versiontimestampcommandokoperationdata or errorLeader-to-worker:
inbox.mdtmux send-keysWorker-to-leader:
leader-fixed mailbox via omx team api send-message --jsonomx team api <operation> --jsonTask ID rule (critical):
task-<id>.json (example task-1.json)task_id uses bare id (example "1", not "task-1")tasks/{id}.jsonUseful runtime env vars:
OMX_TEAM_READY_TIMEOUT_MS
OMX_TEAM_SKIP_READY_WAIT=1
OMX_TEAM_AUTO_TRUST=0
OMX_TEAM_WORKER_LAUNCH_ARGS
OMX_TEAM_WORKER_CLI
auto|codex|claude (default: auto)auto chooses claude when worker --model contains claude, otherwise codexclaude mode, workers launch with exactly one --dangerously-skip-permissions
and ignore explicit model/config/effort launch overrides (uses default settings.json)OMX_TEAM_WORKER_CLI_MAP
auto|codex|claude)1 (broadcast) or exactly the team worker countOMX_TEAM_WORKER_CLI_MAP=codex,codex,claude,claudeOMX_TEAM_WORKER_CLIOMX_TEAM_AUTO_INTERRUPT_RETRY
0 disables adaptive queue->resend escalationOMX_TEAM_LEADER_NUDGE_MS
OMX_TEAM_STRICT_SUBMIT=1
Operator note (important for Claude panes):
tmux send-keys ... C-m) can appear to "do nothing" when a worker is actively processing; Enter may be queued by the pane/task flow.Use only after checking omx team status <team> and mailbox/state evidence:
tmux capture-pane -t %<worker-pane> -p -S -120C-c or escape flow (CLI-specific) once, then re-check pane capturetmux send-keys -t %<worker-pane> "ack + continue current task; report status" C-mcapture-panemailbox/leader-fixed.json or worker mailbox)omx team status <team>worker_notify_failed:<worker>Meaning:
Checks:
tmux list-panes -F '#{pane_id}\t#{pane_start_command}'tmux capture-pane -t %<worker-pane> -p -S -120npm run build)Checks:
.omx/state/team/<team>/mailbox/leader-fixed.json existsomx team api send-message --json calledomx team api ... ENOENT (or legacy team_send_message ENOENT / team_update_task ENOENT)Meaning:
omx team shutdown <team> (or removed .omx/state/team/<team>) before worker finished.Checks:
omx team status <team> and confirm whether tasks were still in_progress when shutdown occurred.omx/state/team/<team>/ existsrm -rf .omx/state/team/<team>) happened during executionPrevention:
shutdown only for terminal completion or explicit abortCause:
Fix:
Run from leader pane:
# 1) Inspect panes
tmux list-panes -F '#{pane_id}\t#{pane_current_command}\t#{pane_start_command}'
# 2) Kill stale worker panes only (examples)
tmux kill-pane -t %450
tmux kill-pane -t %451
# 3) Remove stale team state (example)
rm -rf .omx/state/team/<team-name>
# 4) Retry
omx team 1:executor "fresh retry"
Guidelines:
omx hud --watch) unless intentionally restarting HUDWhen operating this skill, provide concrete progress evidence:
Team started: <name>)Do not claim success without file/pane evidence.
Do not claim clean completion if shutdown occurred with in_progress>0.
For programmatic or agent-driven team spawning (as opposed to interactive CLI use), OMX exposes four MCP tools via the team-server:
| Tool | Description |
|---|---|
omx_run_team_start | Spawn tmux CLI workers in the background; returns a jobId immediately |
omx_run_team_status | Non-blocking status check for a running job |
omx_run_team_wait | Block until the job completes, with automatic idle-pane nudging |
omx_run_team_cleanup | Kill worker tmux panes for a job (early stop only) |
omx team ... CLI — Primary method for interactive team orchestration. Use this when you are operating inside a live tmux session and want direct pane visibility.omx_run_team_* MCP tools — For programmatic or agent-driven team spawning (analogous to OMC's omc_run_team_* tools). Use these when an agent needs to launch workers, poll status, and collect results without manual intervention.Two cleanup tools exist and must not be confused:
team_cleanup (state-server): Deletes team state files on disk (.omx/state/team/<team>/). Use after a team run is fully complete.omx_run_team_cleanup (team-server): Kills tmux worker panes for a job. Use only when stopping workers early; otherwise omx_run_team_wait handles natural termination.1. omx_run_team_start({
teamName: "fix-bugs",
agentTypes: ["codex"],
tasks: [{ subject: "Fix bug", description: "..." }],
cwd: "/path/to/project"
})
→ Returns { jobId: "omx-abc123" }
2. omx_run_team_wait({ job_id: "omx-abc123", timeout_ms: 300000 })
→ Blocks until done, auto-nudges idle panes
3. omx_run_team_cleanup({ job_id: "omx-abc123" })
→ Only needed if stopping workers early
omx_run_team_status can be called between steps 1 and 2 for a non-blocking poll if you need to interleave other work while workers run.
Good: The user says continue after the workflow already has a clear next step. Continue the current branch of work instead of restarting or re-asking the same question.
Good: The user changes only the output shape or downstream delivery step (for example make a PR). Preserve earlier non-conflicting workflow constraints and apply the update locally.
Bad: The user says continue, and the workflow restarts discovery or stops before the missing verification/evidence is gathered.