Skip to main content
Glama

spawn_agent

Spawn a managed agent or terminal, or resume a captured agent on a fresh surface preserving its ID. Resume: {resume_agent_id:"..."}.

Instructions

Spawn a managed agent or terminal, or resume a captured agent on a fresh surface preserving its ID. Resume: {resume_agent_id:"..."}. Omit new-spawn fields: repo, cli, model, effort, cwd, prompt, boot_prompt_path, worktree, mcp_profile, role, placement, authority, collab_path, parent_agent_id, max_cost_per_agent; these cause INVALID_RESUME_SPEC. Optional resume controls such as force, workspace, focus, report_path and verbose remain supported. Resume restores session context; it does not resend a task. For a new task, check current readiness, then use send_to separately. ok:true/state:started means lifecycle started, not ready or task delivered. At a chooser or permission prompt, inspect the current frame with read_screen before acting; never blindly send Return or assume success. pending_verify leaves delivery unverified; follow wait_for guidance in warning when present; do not resend blindly. Placement is deterministic; boot_prompt_timeout_ms also bounds pane placement. Default successes have at most six fields: ok, agent_id, surface_id, state (spawn outcome), delivered (boot prompt), and optional warning. Use verbose:true for contract_path, report_path, done_marker, transport, worktree, and diagnostics; report_path and done_marker are also in the issued contract file. Failures always keep full detail.

Input Schema

NameRequiredDescriptionDefault
cliNoNew spawn only; omit on resume. CLI tool to launch
cwdNoInitial working directory for type=terminal
repoNoNew spawn only; omit on resume. Repository name (e.g. 'brainlayer', 'golems')
roleNoAgent job function: implementor, reviewer, or gatherer. Lead callers may omit it to spawn an implementor with worker authority on the right by default; explicit roles and axes still apply. Legacy orchestrator/worker aliases remain accepted. Other Claude callers require an explicit role.
typeNoSpawn an AI agent or a plain terminalagent
focusNoLeave focus on the created tab instead of restoring the exact origin after initialization. Resume and bare terminals: false forbids focus and fails closed if background initialization is unavailable; omitted may temporarily focus to initialize, then restore the origin. Fresh managed agents retain legacy initialization focus.
forceNoWith resume_agent_id only: override missing or inconclusive proof that the old session is not running (no recorded pid, an unproven pid, an unreadable topology or process table) after the caller deliberately verifies the old agent is gone. Does not bypass session or terminal-state requirements.
modelNoOPTIONAL — leave UNSET so the launcher pins the top-tier model. For cli:'codex', an explicit model is checked against Codex's runtime model list before any worktree or surface is created, then passed through to the launcher. Never pass 'opus' for claude — the top Claude model is already the default.
titleNoThe caller-supplied agent pane title is applied verbatim (for example `cmuxlayer-WORKER · run1 name-the-tabs`); when omitted or blank, the existing agent-id/surface fallback is retained. Managed identity comes from the agent registry, not this display title (#479/#492).
effortNoRequired for codex new agent spawns: low, medium, high, xhigh, max, ultra. Choose deliberately: medium for well-specified lanes, high for security/open-ended; xhigh and above cost more. Omit on resume (the session keeps its effort) and for other CLIs (effort is invalid).
promptNoMax 2-3 short lines. Longer payloads BREAK the receiving pane — write the payload to a file and send one line: `Read and follow <path>`. New spawn only; omit on resume and send a new task separately with send_to after checking readiness. Inline task prompt to send after the agent is ready. Capped at 500 inline UTF-8 bytes by default; use boot_prompt_path for larger prompts. Mutually exclusive with boot_prompt_path.
verboseNoReturn the full success receipt, including contract_path, report_path, done_marker, transport, worktree, and diagnostics; defaults to at most six fields. Failures always keep full detail.
versionNoSpawnSpec schema version
worktreeNoWhen set, create or reuse a git worktree before launch. Pass a string such as "tool-usage" as the worktree name, true for a generated name, or an object with name, path, branch, base, create, and reuse. When repoGolem registers the repo with an absolute path, that path is the repo root; otherwise the root is resolved from CMUXLAYER_REPO_HOME, the running checkout, or ~/Gits. true uses <registered-root>/.worktrees/<generated-name> (legacy ~/Gits/<repo>.wt read-fallback until ~2026-09). If a later spawn step fails before a recoverable surface exists, a newly created worktree and branch are rolled back.
authorityNoAuthority axis, independent from job function and placement
force_newNoWhen true, suppress same repo/workspace/role duplicate-lane warnings. Default false so collab leads see reusable existing agents before spawning another lane.
placementNoPhysical placement axis: left or right. It must agree with authority (lead=left, worker=right). Legacy orchestrator/worker aliases remain accepted.
workspaceNoTarget workspace ref. Omit to use the caller/current workspace; pass only when intentionally spawning in a different workspace.
collab_pathNoLead coordination file; workers inherit their parent lead collab_path unless explicitly supplied.
mcp_profileNoMCP profile hint for worktree launches. Defaults to inherit. Use sterile/skill_eval or include/exclude lists for narrower evals.
report_pathNoOptional ABSOLUTE override for the engine-issued report path. Omit in almost all cases: the engine issues ~/.cmux/agents/<agent_id>/report.md and verifies closure against it. Pass a distinct FILE path per child (never a directory) to place a report somewhere you already watch. report_path, done_marker, contract_path, coordination_footer_delivered and coordination_footer_note are verbose:true-only fields; the default warning contains any required relay instruction with its exact issued paths or marker. For resume_agent_id calls, coordination_footer_note is folded into warning: the pointer was deliberately not re-delivered, so relay only if the restored session lost its original context. For new spawns, when contract_path is present and folded pointer submission was queued or unverified, warning includes the pointer. Inspect the pane, then relay with send_to({agent_id, text:"Read and follow <contract_path>", press_enter:true}); do not use raw cmux send/send-key. When contract_path is absent, inline mode is active or the contract file could not be written, so warning tells YOU to relay report_path and done_marker.
halt_escalationNoNotify the nearest live ancestor when this agent remains awaiting input, idle without done evidence, or wedged past its dwell threshold. Set false for deliberate debugging lanes.
parent_agent_idNoID of the parent agent for hierarchical spawning. Normally inferred from the managed caller surface; pass explicitly only when no managed caller supplies the hierarchy. Parent must exist.
resume_agent_idNoTHE way to revive an agent: resume this captured session on a fresh surface, keeping its public agent ID and re-issuing its coordination contract. cmuxlayer never revives a pane by itself (#492) -- a pane you close stays closed -- so a lead that wants an agent back asks here, by id. Refused with a reason when the session transcript is not on disk, rather than opening an empty pane. Use {resume_agent_id:"..."}; omit all new-spawn fields listed in the tool description. Optional resume controls remain supported. Check current readiness before sending a new task separately with send_to; no task is automatically resent.
boot_prompt_pathNoNew spawn only; omit on resume. Optional readable prompt-file path. Checked before spawning; multiline or over-cap files are submitted as one `Read and follow <path>` pointer and one final return after readiness. Mutually exclusive with prompt.
allow_long_inlineNoBypass the inline prompt length cap for a deliberate raw boot-prompt send. Prefer boot_prompt_path for large prompts.
max_cost_per_agentNoMaximum cost cap in USD for this agent
auto_archive_on_doneNoDeprecated compatibility flag. TASK_DONE updates agent state only; cmuxlayer does not auto-close panes.
boot_prompt_timeout_msNoOptional timeout override in milliseconds for pane placement, initial shell readiness, agent launch readiness, and the boot prompt. When omitted, each phase keeps its established default (45s placement, 10s shell, 15s launch, 60s boot prompt).

Output Schema

NameRequiredDescriptionDefault
okYes
cwdNo
roleNo
typeNo
stateNo
titleNo
versionNo
warningNo
agent_idNo
deliveredNo
surface_idNo
cwd_receiptNo
done_markerNo
next_actionNo
report_pathNo
retry_countNo
spawn_stateNo
workspace_idNo
contract_pathNo
delivered_charsNo
parent_agent_idNo
boot_prompt_bytesNo
boot_prompt_receiptNo
update_menu_skippedNo
boot_prompt_deliveredNo
update_menu_text_hashNo
coordination_footer_noteNo
coordination_footer_bytesNo
boot_prompt_submit_verifiedNo
coordination_footer_deliveredNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changedv0.4.106
    • changedInput schema / properties / boot_prompt_path / description
      Previous value: -"Optional readable prompt-file path. Checked before spawning; multiline or over-cap files are submitted as one `Read and follow <path>` pointer and one final return after readiness. Mutually exclusive with prompt."New value: +"New spawn only; omit on resume. Optional readable prompt-file path. Checked before spawning; multiline or over-cap files are submitted as one `Read and follow <path>` pointer and one final return after readiness. Mutually exclusive with prompt."
    • changedInput schema / properties / cli / description
      Previous value: -"CLI tool to launch"New value: +"New spawn only; omit on resume. CLI tool to launch"
    • removedInput schema / properties / focus / default
      Removed value: -false
    • changedInput schema / properties / focus / description
      Previous value: -"Leave focus on the created agent tab instead of restoring the exact origin after initialization."New value: +"Leave focus on the created tab instead of restoring the exact origin after initialization. Resume and bare terminals: false forbids focus and fails closed if background initialization is unavailable; omitted may temporarily focus to initialize, then restore the origin. Fresh managed agents retain legacy initialization focus."
    • changedInput schema / properties / prompt / description
      Previous value: -"Max 2-3 short lines. Longer payloads BREAK the receiving pane — write the payload to a file and send one line: `Read and follow <path>`. Inline task prompt to send after the agent is ready. Capped at 500 inline UTF-8 bytes by default; use boot_prompt_path for larger prompts. Mutually exclusive with boot_prompt_path."New value: +"Max 2-3 short lines. Longer payloads BREAK the receiving pane — write the payload to a file and send one line: `Read and follow <path>`. New spawn only; omit on resume and send a new task separately with send_to after checking readiness. Inline task prompt to send after the agent is ready. Capped at 500 inline UTF-8 bytes by default; use boot_prompt_path for larger prompts. Mutually exclusive with boot_prompt_path."
    • changedInput schema / properties / repo / description
      Previous value: -"Repository name (e.g. 'brainlayer', 'golems')"New value: +"New spawn only; omit on resume. Repository name (e.g. 'brainlayer', 'golems')"
    • changedInput schema / properties / report_path / description
      Previous value: -"Optional ABSOLUTE override for the engine-issued report path. Omit in almost all cases: the engine issues ~/.cmux/agents/<agent_id>/report.md, returns it here, and verifies closure against it. Pass a distinct FILE path per child (never a directory) to place a report somewhere you already watch. Check coordination_footer_delivered. For resume_agent_id calls, false means the pointer was deliberately not re-delivered: follow coordination_footer_note and relay only if the restored session lost its original context. For new spawns, if false and contract_path is present, folded pointer submission was queued or unverified. Inspect the pane, then relay with send_to({agent_id, text:\"Read and follow <contract_path>\", press_enter:true}); do not use raw cmux send/send-key. If false and contract_path is absent, inline mode is active or the contract file could not be written, so YOU must relay report_path and done_marker."New value: +"Optional ABSOLUTE override for the engine-issued report path. Omit in almost all cases: the engine issues ~/.cmux/agents/<agent_id>/report.md and verifies closure against it. Pass a distinct FILE path per child (never a directory) to place a report somewhere you already watch. report_path, done_marker, contract_path, coordination_footer_delivered and coordination_footer_note are verbose:true-only fields; the default warning contains any required relay instruction with its exact issued paths or marker. For resume_agent_id calls, coordination_footer_note is folded into warning: the pointer was deliberately not re-delivered, so relay only if the restored session lost its original context. For new spawns, when contract_path is present and folded pointer submission was queued or unverified, warning includes the pointer. Inspect the pane, then relay with send_to({agent_id, text:\"Read and follow <contract_path>\", press_enter:true}); do not use raw cmux send/send-key. When contract_path is absent, inline mode is active or the contract file could not be written, so warning tells YOU to relay report_path and done_marker."
    • changedInput schema / properties / resume_agent_id / description
      Previous value: -"THE way to revive an agent: resume this captured session on a fresh surface, keeping its public agent ID and re-issuing its coordination contract. cmuxlayer never revives a pane by itself (#492) -- a pane you close stays closed -- so a lead that wants an agent back asks here, by id. Refused with a reason when the session transcript is not on disk, rather than opening an empty pane. Mutually exclusive with new-spawn fields."New value: +"THE way to revive an agent: resume this captured session on a fresh surface, keeping its public agent ID and re-issuing its coordination contract. cmuxlayer never revives a pane by itself (#492) -- a pane you close stays closed -- so a lead that wants an agent back asks here, by id. Refused with a reason when the session transcript is not on disk, rather than opening an empty pane. Use {resume_agent_id:\"...\"}; omit all new-spawn fields listed in the tool description. Optional resume controls remain supported. Check current readiness before sending a new task separately with send_to; no task is automatically resent."
    • changedInput schema / properties / role / description
      Previous value: -"Agent job function: implementor, reviewer, or gatherer. Legacy orchestrator/worker aliases remain accepted for compatibility. Claude requires this field explicitly."New value: +"Agent job function: implementor, reviewer, or gatherer. Lead callers may omit it to spawn an implementor with worker authority on the right by default; explicit roles and axes still apply. Legacy orchestrator/worker aliases remain accepted. Other Claude callers require an explicit role."
    • changedInput schema / properties / verbose / description
      Previous value: -"Return the full legacy spawn response instead of the lean default."New value: +"Return the full success receipt, including contract_path, report_path, done_marker, transport, worktree, and diagnostics; defaults to at most six fields. Failures always keep full detail."
    • changedOutput schema / properties / agent_id / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / cwd_receipt / properties / delivery / enum
      Previous value: -[
      -  "submitted",
      -  "typed",
      -  "queued",
      -  "queued_followup",
      -  "rescued",
      -  "failed",
      -  "pending_verify",
      -  "failed_confirmed",
      -  "stalled_queue"
      -]New value: +[
      +  "submitted",
      +  "typed",
      +  "queued",
      +  "steer_pending",
      +  "queued_followup",
      +  "rescued",
      +  "failed",
      +  "pending_verify",
      +  "failed_confirmed",
      +  "stalled_queue"
      +]
    • changedOutput schema / properties / cwd_receipt / properties / delivery_state / enum
      Previous value: -[
      -  "submitted",
      -  "typed",
      -  "queued",
      -  "queued_followup",
      -  "rescued",
      -  "failed",
      -  "pending_verify",
      -  "failed_confirmed",
      -  "stalled_queue"
      -]New value: +[
      +  "submitted",
      +  "typed",
      +  "queued",
      +  "steer_pending",
      +  "queued_followup",
      +  "rescued",
      +  "failed",
      +  "pending_verify",
      +  "failed_confirmed",
      +  "stalled_queue"
      +]
    • addedOutput schema / properties / delivered
      Added value: +{
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / spawn_state / enum
      Previous value: -[
      -  "started",
      -  "boot_unsubmitted"
      -]New value: +[
      +  "started",
      +  "boot_unsubmitted",
      +  "pending_verify"
      +]
    • addedOutput schema / properties / state
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / warning
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "ok",
      -  "retry_count"
      -]New value: +[
      +  "ok"
      +]
  2. Changed4 schema fields changedv0.4.92
    • changedInput schema / properties / effort / description
      Previous value: -"Codex reasoning effort, passed to the repoGolem launcher. CHOOSE THIS DELIBERATELY PER MISSION — it is a cost decision, not a default to inherit. The installed launcher currently accepts: low, medium, high, xhigh, max, ultra. spawn_agent rejects other values before creating a worktree or surface. The live launcher defaults to HIGH when omitted (~/.config/ralphtools/golem-dispatch.zsh). Per /agent-routing, MEDIUM is the settled floor for well-specified implementation lanes — use it unless the task genuinely needs more; xhigh and above burn budget fast and are rarely warranted for a lane with a clear brief."New value: +"Required for codex new agent spawns: low, medium, high, xhigh, max, ultra. Choose deliberately: medium for well-specified lanes, high for security/open-ended; xhigh and above cost more. Omit on resume (the session keeps its effort) and for other CLIs (effort is invalid)."
    • changedInput schema / properties / effort / enum
      Previous value: -[
      -  "low",
      -  "medium",
      -  "high",
      -  "xhigh",
      -  "max",
      -  "ultra"
      -]New value: +[
      +  "low",
      +  "medium",
      +  "high",
      +  "xhigh",
      +  "max",
      +  "ultra",
      +  ""
      +]
    • changedInput schema / properties / force / description
      Previous value: -"With resume_agent_id only: override inconclusive recorded-process liveness after the caller deliberately verifies the old agent is gone. Does not bypass session or terminal-state requirements."New value: +"With resume_agent_id only: override missing or inconclusive proof that the old session is not running (no recorded pid, an unproven pid, an unreadable topology or process table) after the caller deliberately verifies the old agent is gone. Does not bypass session or terminal-state requirements."
    • changedInput schema / properties / report_path / description
      Previous value: -"Optional ABSOLUTE override for the engine-issued report path. Omit in almost all cases: the engine issues ~/.cmux/agents/<agent_id>/report.md, returns it here, and verifies closure against it. Pass a distinct FILE path per child (never a directory) to place a report somewhere you already watch. Check coordination_footer_delivered. For resume_agent_id calls, false means the pointer was deliberately not re-delivered: follow coordination_footer_note and relay only if the restored session lost its original context. For new spawns, if false and contract_path is present, folded pointer submission was queued or unverified, so YOU must relay contract_path, report_path, and done_marker. If false and contract_path is absent, inline mode is active or the contract file could not be written, so YOU must relay report_path and done_marker."New value: +"Optional ABSOLUTE override for the engine-issued report path. Omit in almost all cases: the engine issues ~/.cmux/agents/<agent_id>/report.md, returns it here, and verifies closure against it. Pass a distinct FILE path per child (never a directory) to place a report somewhere you already watch. Check coordination_footer_delivered. For resume_agent_id calls, false means the pointer was deliberately not re-delivered: follow coordination_footer_note and relay only if the restored session lost its original context. For new spawns, if false and contract_path is present, folded pointer submission was queued or unverified. Inspect the pane, then relay with send_to({agent_id, text:\"Read and follow <contract_path>\", press_enter:true}); do not use raw cmux send/send-key. If false and contract_path is absent, inline mode is active or the contract file could not be written, so YOU must relay report_path and done_marker."
  3. Changed29 schema fields changedv0.4.88
    • addedInput schema / properties / allow_long_inline
      Added value: +{
      +  "default": false,
      +  "description": "Bypass the inline prompt length cap for a deliberate raw boot-prompt send. Prefer boot_prompt_path for large prompts.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / authority
      Added value: +{
      +  "description": "Authority axis, independent from job function and placement",
      +  "enum": [
      +    "lead",
      +    "worker"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / auto_archive_on_done
      Added value: +{
      +  "default": false,
      +  "description": "Deprecated compatibility flag. TASK_DONE updates agent state only; cmuxlayer does not auto-close panes.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / boot_prompt_path
      Added value: +{
      +  "description": "Optional readable prompt-file path. Checked before spawning; multiline or over-cap files are submitted as one `Read and follow <path>` pointer and one final return after readiness. Mutually exclusive with prompt.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedInput schema / properties / boot_prompt_timeout_ms
      Added value: +{
      +  "description": "Optional timeout override in milliseconds for pane placement, initial shell readiness, agent launch readiness, and the boot prompt. When omitted, each phase keeps its established default (45s placement, 10s shell, 15s launch, 60s boot prompt).",
      +  "exclusiveMinimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / collab_path
      Added value: +{
      +  "description": "Lead coordination file; workers inherit their parent lead collab_path unless explicitly supplied.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / cwd
      Added value: +{
      +  "description": "Initial working directory for type=terminal",
      +  "type": "string"
      +}
    • addedInput schema / properties / effort
      Added value: +{
      +  "description": "Codex reasoning effort, passed to the repoGolem launcher. CHOOSE THIS DELIBERATELY PER MISSION — it is a cost decision, not a default to inherit. The installed launcher currently accepts: low, medium, high, xhigh, max, ultra. spawn_agent rejects other values before creating a worktree or surface. The live launcher defaults to HIGH when omitted (~/.config/ralphtools/golem-dispatch.zsh). Per /agent-routing, MEDIUM is the settled floor for well-specified implementation lanes — use it unless the task genuinely needs more; xhigh and above burn budget fast and are rarely warranted for a lane with a clear brief.",
      +  "enum": [
      +    "low",
      +    "medium",
      +    "high",
      +    "xhigh",
      +    "max",
      +    "ultra"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / focus
      Added value: +{
      +  "default": false,
      +  "description": "Leave focus on the created agent tab instead of restoring the exact origin after initialization.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / force
      Added value: +{
      +  "default": false,
      +  "description": "With resume_agent_id only: override inconclusive recorded-process liveness after the caller deliberately verifies the old agent is gone. Does not bypass session or terminal-state requirements.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / force_new
      Added value: +{
      +  "default": false,
      +  "description": "When true, suppress same repo/workspace/role duplicate-lane warnings. Default false so collab leads see reusable existing agents before spawning another lane.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / halt_escalation
      Added value: +{
      +  "default": true,
      +  "description": "Notify the nearest live ancestor when this agent remains awaiting input, idle without done evidence, or wedged past its dwell threshold. Set false for deliberate debugging lanes.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / max_cost_per_agent
      Added value: +{
      +  "description": "Maximum cost cap in USD for this agent",
      +  "type": "number"
      +}
    • addedInput schema / properties / mcp_profile
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "inherit",
      +        "sterile",
      +        "skill_eval"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "exclude": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "include": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  ],
      +  "description": "MCP profile hint for worktree launches. Defaults to inherit. Use sterile/skill_eval or include/exclude lists for narrower evals."
      +}
    • changedInput schema / properties / model / description
      Previous value: -"Model name (e.g. 'sonnet', 'codex', 'opus')"New value: +"OPTIONAL — leave UNSET so the launcher pins the top-tier model. For cli:'codex', an explicit model is checked against Codex's runtime model list before any worktree or surface is created, then passed through to the launcher. Never pass 'opus' for claude — the top Claude model is already the default."
    • addedInput schema / properties / parent_agent_id
      Added value: +{
      +  "description": "ID of the parent agent for hierarchical spawning. Normally inferred from the managed caller surface; pass explicitly only when no managed caller supplies the hierarchy. Parent must exist.",
      +  "type": "string"
      +}
    • addedInput schema / properties / placement
      Added value: +{
      +  "description": "Physical placement axis: left or right. It must agree with authority (lead=left, worker=right). Legacy orchestrator/worker aliases remain accepted.",
      +  "enum": [
      +    "left",
      +    "right",
      +    "orchestrator",
      +    "worker"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / prompt / description
      Previous value: -"Task prompt to send after agent is ready"New value: +"Max 2-3 short lines. Longer payloads BREAK the receiving pane — write the payload to a file and send one line: `Read and follow <path>`. Inline task prompt to send after the agent is ready. Capped at 500 inline UTF-8 bytes by default; use boot_prompt_path for larger prompts. Mutually exclusive with boot_prompt_path."
    • addedInput schema / properties / report_path
      Added value: +{
      +  "description": "Optional ABSOLUTE override for the engine-issued report path. Omit in almost all cases: the engine issues ~/.cmux/agents/<agent_id>/report.md, returns it here, and verifies closure against it. Pass a distinct FILE path per child (never a directory) to place a report somewhere you already watch. Check coordination_footer_delivered. For resume_agent_id calls, false means the pointer was deliberately not re-delivered: follow coordination_footer_note and relay only if the restored session lost its original context. For new spawns, if false and contract_path is present, folded pointer submission was queued or unverified, so YOU must relay contract_path, report_path, and done_marker. If false and contract_path is absent, inline mode is active or the contract file could not be written, so YOU must relay report_path and done_marker.",
      +  "type": "string"
      +}
    • addedInput schema / properties / resume_agent_id
      Added value: +{
      +  "description": "THE way to revive an agent: resume this captured session on a fresh surface, keeping its public agent ID and re-issuing its coordination contract. cmuxlayer never revives a pane by itself (#492) -- a pane you close stays closed -- so a lead that wants an agent back asks here, by id. Refused with a reason when the session transcript is not on disk, rather than opening an empty pane. Mutually exclusive with new-spawn fields.",
      +  "type": "string"
      +}
    • addedInput schema / properties / role
      Added value: +{
      +  "description": "Agent job function: implementor, reviewer, or gatherer. Legacy orchestrator/worker aliases remain accepted for compatibility. Claude requires this field explicitly.",
      +  "enum": [
      +    "orchestrator",
      +    "worker",
      +    "implementor",
      +    "reviewer",
      +    "gatherer"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / title
      Added value: +{
      +  "description": "The caller-supplied agent pane title is applied verbatim (for example `cmuxlayer-WORKER · run1 name-the-tabs`); when omitted or blank, the existing agent-id/surface fallback is retained. Managed identity comes from the agent registry, not this display title (#479/#492).",
      +  "type": "string"
      +}
    • addedInput schema / properties / type
      Added value: +{
      +  "default": "agent",
      +  "description": "Spawn an AI agent or a plain terminal",
      +  "enum": [
      +    "agent",
      +    "terminal"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / verbose
      Added value: +{
      +  "default": false,
      +  "description": "Return the full legacy spawn response instead of the lean default.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / version
      Added value: +{
      +  "const": 1,
      +  "default": 1,
      +  "description": "SpawnSpec schema version",
      +  "type": "number"
      +}
    • changedInput schema / properties / workspace / description
      Previous value: -"Target workspace ref"New value: +"Target workspace ref. Omit to use the caller/current workspace; pass only when intentionally spawning in a different workspace."
    • addedInput schema / properties / worktree
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "base": {
      +          "type": "string"
      +        },
      +        "branch": {
      +          "type": "string"
      +        },
      +        "create": {
      +          "type": "boolean"
      +        },
      +        "name": {
      +          "type": "string"
      +        },
      +        "path": {
      +          "type": "string"
      +        },
      +        "reuse": {
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  ],
      +  "description": "When set, create or reuse a git worktree before launch. Pass a string such as \"tool-usage\" as the worktree name, true for a generated name, or an object with name, path, branch, base, create, and reuse. When repoGolem registers the repo with an absolute path, that path is the repo root; otherwise the root is resolved from CMUXLAYER_REPO_HOME, the running checkout, or ~/Gits. true uses <registered-root>/.worktrees/<generated-name> (legacy ~/Gits/<repo>.wt read-fallback until ~2026-09). If a later spawn step fails before a recoverable surface exists, a newly created worktree and branch are rolled back."
      +}
    • removedInput schema / required
      Removed value: -[
      -  "repo",
      -  "model",
      -  "cli",
      -  "prompt"
      -]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "agent_id": {
      +      "type": "string"
      +    },
      +    "boot_prompt_bytes": {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "boot_prompt_delivered": {
      +      "type": "boolean"
      +    },
      +    "boot_prompt_receipt": {
      +      "$ref": "#/properties/cwd_receipt"
      +    },
      +    "boot_prompt_submit_verified": {
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "contract_path": {
      +      "type": "string"
      +    },
      +    "coordination_footer_bytes": {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "coordination_footer_delivered": {
      +      "type": "boolean"
      +    },
      +    "coordination_footer_note": {
      +      "type": "string"
      +    },
      +    "cwd": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "cwd_receipt": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "attention_reason": {
      +          "type": "string"
      +        },
      +        "bytes": {
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "delivered": {
      +          "type": "boolean"
      +        },
      +        "delivery": {
      +          "enum": [
      +            "submitted",
      +            "typed",
      +            "queued",
      +            "queued_followup",
      +            "rescued",
      +            "failed",
      +            "pending_verify",
      +            "failed_confirmed",
      +            "stalled_queue"
      +          ],
      +          "type": "string"
      +        },
      +        "delivery_id": {
      +          "type": "string"
      +        },
      +        "delivery_state": {
      +          "enum": [
      +            "submitted",
      +            "typed",
      +            "queued",
      +            "queued_followup",
      +            "rescued",
      +            "failed",
      +            "pending_verify",
      +            "failed_confirmed",
      +            "stalled_queue"
      +          ],
      +          "type": "string"
      +        },
      +        "duplicate_of": {
      +          "type": "string"
      +        },
      +        "needs_attention": {
      +          "type": "boolean"
      +        },
      +        "prompt_bytes": {
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "prompt_sha256": {
      +          "type": "string"
      +        },
      +        "prompt_warning": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "rpc_methods": {
      +          "items": {
      +            "enum": [
      +              "surface.send_text",
      +              "surface.send_key"
      +            ],
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "submit_attempted": {
      +          "type": "boolean"
      +        },
      +        "submit_dispatched": {
      +          "type": "boolean"
      +        },
      +        "submit_evidence": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "token_delta",
      +                "transcript_echo",
      +                "cleared_composer",
      +                "status_only"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "submit_verified": {
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "terminal": {
      +          "type": "boolean"
      +        },
      +        "typed": {
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "delivered_chars": {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "done_marker": {
      +      "type": "string"
      +    },
      +    "next_action": {
      +      "type": "string"
      +    },
      +    "ok": {
      +      "type": "boolean"
      +    },
      +    "parent_agent_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "report_path": {
      +      "type": "string"
      +    },
      +    "retry_count": {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "role": {
      +      "type": "string"
      +    },
      +    "spawn_state": {
      +      "enum": [
      +        "started",
      +        "boot_unsubmitted"
      +      ],
      +      "type": "string"
      +    },
      +    "surface_id": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "type": {
      +      "enum": [
      +        "agent",
      +        "terminal"
      +      ],
      +      "type": "string"
      +    },
      +    "update_menu_skipped": {
      +      "type": "boolean"
      +    },
      +    "update_menu_text_hash": {
      +      "type": "string"
      +    },
      +    "version": {
      +      "const": 1,
      +      "type": "number"
      +    },
      +    "workspace_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "ok",
      +    "retry_count"
      +  ],
      +  "type": "object"
      +}
  4. First observedv0.1.0

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds substantial behavioral context: ok/state:started is lifecycle-only, pending_verify means unverified delivery, verbose expands the receipt, failures keep full detail. However, much of this repeats or elaborates on schema-provided information (verbose, report_path, force) rather than disclosing unannotated traits such as permissions or rate limits, so it sits slightly above baseline rather than at the top.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical resume instruction is front-loaded, but the body is a dense run-on of overlapping clauses (INVALID_RESUME_SPEC, ok/state semantics, chooser handling, pending_verify, placement, default fields, verbose) with some repetition about omitting new-spawn fields. Given 29 parameters the length is defensible, but structure could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 29-parameter mutation tool with an output schema present, the description covers mode selection, the resume field contract, receipt shape, failure behavior, and readiness gating, leaving nothing an agent needs in order to invoke it correctly unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the required parameters are all extensively documented in the schema itself. The description adds real routing value by enumerating the new-spawn-only fields that must be omitted on resume and confirming which resume controls (force, workspace, focus, report_path, verbose) remain valid, but most per-parameter meaning is already in the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb (spawn/resume) and resource (managed agent or terminal) and explicitly splits the two modes: new spawn vs. resume-preserving-ID. It distinguishes itself from siblings by naming the resume path and contrasting it with sending a task via send_to.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-do-what: omit new-spawn fields on resume or get INVALID_RESUME_SPEC, use send_to separately for a new task, inspect with read_screen at a chooser or permission prompt, and follow wait_for guidance on pending_verify. Alternatives are named rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.