What changed
Roder 0.1.12 tightens the agent-team runtime that backs Ultra delegation and model-facing teammate tools. Spawned agents now live in a canonical task tree such as /root/reviewer or /root/reviewer/tests, and each teammate keeps a durable identity that can receive later work instead of being treated as a throwaway child run.
The model-facing agent-control tools are now split around the real lifecycle:
spawn_agentcreates a teammate, starts its first turn, and returns the canonical path.send_messagequeues coordination for an existing teammate without starting an idle turn.followup_taskassigns new work and starts or wakes the teammate when it is idle.wait_agentcan wake on terminal completion or on mailbox/user-steer activity.interrupt_agentstops the active turn without deleting the teammate identity.
Context for a new teammate is explicit. A spawn can fork all parent turns, fork no parent turns, or fork only the last N turns. When no override is supplied, the child inherits the parent model, provider, reasoning effort, workspace, policy, tools, runner, and live developer context, including Ultra mode.
Why it matters
- Long-running agent work can be coordinated more like a team. You can start a reviewer, send it extra context, wait for its answer, interrupt a bad turn, and then assign a follow-up without losing the teammate’s identity.
- Parent and child agents get clearer messages.
MESSAGE,NEW_TASK, andFINAL_ANSWERenvelopes carry canonical sender and recipient paths, so copied conversation history is no longer confused with the child’s newest assignment. - Waiting is less brittle. A parent can wake when a worker finishes, when new mailbox activity arrives, or when user steering changes the plan, instead of polling blindly.
- App-server clients get better team state. Team notifications now include started-member details and terminal completion payloads with final text and errors, so desktop and hosted clients can render richer teammate status without scraping transcripts.
- Interruption is safer for day-to-day work. Interrupting a teammate no longer means deleting or cleaning up the whole member; the same canonical path can receive a later
followup_task.
Using it
The easiest path is still to use Codex-backed Ultra mode when a task benefits from bounded proactive delegation:
roder auth login codex
RODER_PROVIDER=codex RODER_MODEL=gpt-5.6-sol RODER_REASONING=ultra roder
For model-facing teammate work, use canonical paths returned by spawn_agent whenever possible. A fresh-context specialist can be started with no copied parent turns:
{
"task_name": "fast_search",
"message": "Locate the relevant implementation and report file paths.",
"fork_turns": "none",
"model_provider": "codex",
"model": "gpt-5.6-sol",
"reasoning_effort": "high"
}
For app-server clients, keep using the team/* methods and subscribe to team notifications. team/read mailbox entries now carry typed delivery intent, and team/member/completed can include both finalMessage and error so clients can distinguish completed, failed, and interrupted teammate turns.