Harness Notes

Built-in tools

Updated 2026-10-27

On this page

What each built-in tool in Codex CLI and Claude Code does, what it takes and what it returns. Start from a job, or search a tool name such as write_stdin or TaskStop. A listed tool can still be switched off in your session; each entry says what turns it on.

Machine-readable contracts · Transcript envelopes and protocol items

Tools by job

JobCodex CLIClaude Code
Run a shell command
Keep a command running, send it input or stop it
Read files, PDFs or images

No text-file reader: text files are read with exec_command. view_image covers images.

Create or change files
Search or fetch the web
Start, message and wait for other agents
Plan or track tasks
Ask or notify the user
Ask for more permissions

None listed

Read MCP resources
Load more tools or plugins
Use skills
Keep notes, memories or history

None listed

Schedule work, wait or check the time
Set goals or manage the context window
Run code that calls other tools
Manage threads, worktrees and environments
Post in shared channels

None listed

Deliver files, images or reports

Codex CLI 0.164.0

77 tools.

Built in

Part of the harness. Each entry says what turns it on.

apply_patchApply a file patch.

Model apply_patch_tool_type must be present; multi-environment variant adds an optional Environment ID header. Sandbox and patch approval apply.

InputFreeform grammar

Lark grammar, not JSON. Multi-environment schema inserts environment_id after begin_patch; see constructor.

Full input definition
start: begin_patch hunk+ end_patch
begin_patch: "*** Begin Patch" LF
end_patch: "*** End Patch" LF?

hunk: add_hunk | delete_hunk | update_hunk
add_hunk: "*** Add File: " filename LF add_line+
delete_hunk: "*** Delete File: " filename LF
update_hunk: "*** Update File: " filename LF change_move? change?

filename: /(.+)/
add_line: "+" /(.*)/ LF -> line

change_move: "*** Move to: " filename LF
change: (change_context | change_line)+ eof_line?
change_context: ("@@" | "@@ " /(.+)/) LF
change_line: ("+" | "-" | " ") /(.*)/ LF
eof_line: "*** End of File" LF

%import common.LF

ResultFree-form result

FileChange protocol events are distinct from the function/custom tool result.

Full result definition
Patch application summary or model-facing error text.

Sources

clock.curr_timeReturn the current time in UTC.

CurrentTimeReminder feature or model advertises clock.

InputJSON Schema

Full input definition
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

ResultJSON Schema

Source constructor JSON Schema. Defaults and bounds in descriptions are prose unless a validation keyword also encodes them. This schema describes the code-mode value. Direct model delivery uses image or context-fragment content, not necessarily a JSON string.

FieldTypeRequiredMeaning and defaults
current_timestringYesCurrent UTC time formatted as YYYY-MM-DD HH:MM:SS UTC.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "current_time": {
      "description": "Current UTC time formatted as YYYY-MM-DD HH:MM:SS UTC.",
      "type": "string"
    }
  },
  "required": [
    "current_time"
  ],
  "type": "object"
}

Sources

clock.sleepPause execution for a specified duration.

SleepTool plus sleep_tool_mode: always_on, or model-driven clock/current-time reminder eligibility. Direct-model-only.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
duration_msnumberYesHow long to sleep in milliseconds. Must be between 1 and 43200000.
Full input definition
{
  "type": "object",
  "properties": {
    "duration_ms": {
      "type": "number",
      "description": "How long to sleep in milliseconds. Must be between 1 and 43200000."
    }
  },
  "required": [
    "duration_ms"
  ],
  "additionalProperties": false
}

ResultFree-form result

Source emits a text result and sleep lifecycle item; new user input can end sleep early. No JSON output schema.

Full result definition
elapsed wall-clock time

Sources

execRun JavaScript that composes available tools.

effective ToolMode CodeMode or CodeModeOnly; requires policy to allow exec. Nested third-party tools may be deferred/direct-only/excluded; not a general Node runtime.

InputFreeform grammar

Freeform JavaScript with optional // @exec JSON pragma. yield_time_ms and max_output_tokens are pragma controls; actual visible nested tools come from router exposure.

Full input definition

start: pragma_source | plain_source
pragma_source: PRAGMA_LINE NEWLINE SOURCE
plain_source: SOURCE

PRAGMA_LINE: /[ \t]*\/\/ @exec:[^\r\n]*/
NEWLINE: /\r?\n/
SOURCE: /[\s\S]+/

ResultFree-form result

Code-mode output differs from the raw model-visible output of a nested tool. Source output adapter handles content and completion.

Full result definition
Text/image/audio/tool content; a yielded cell reports a cell_id for wait.

Sources

exec_commandRuns a command in a PTY, returning output or a session ID for ongoing interaction.

ShellTool; model shell type enabled. UnifiedExec enables resumable sessions; otherwise policy may select one-shot exec_command. environment_id is advertised for multiple environments; additional_permissions and its enum value require ExecPermissionApprovals plus tool policy.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
additional_permissionsobjectNoSandboxed filesystem or network access for this command; only with sandbox_permissions: "with_additional_permissions".
.file_systemobjectNoFilesystem access request.
.readstring[]NoAbsolute paths to grant read access; omit when none are needed.
.writestring[]NoAbsolute paths to grant write access; omit when none are needed.
.networkobjectNoNetwork access request.
.enabledbooleanNoTrue requests network access; false or omitted requests none.
cmdstringYesShell command to execute.
environment_idstringNoEnvironment id from <environment_context>. Omit to use the primary environment.
justificationstringNoUser-facing approval question for require_escalated; omit otherwise.
loginbooleanNoTrue runs the shell with -l/-i semantics; false disables them. Defaults to true.
max_output_tokensnumberNoOutput token budget. Defaults to 10000 tokens; larger requests may be capped by policy.
prefix_rulearrayNoReusable approval prefix for cmd, only with sandbox_permissions: "require_escalated"; for example ["git", "pull"].
sandbox_permissions"use_default" | "with_additional_permissions" | "require_escalated"NoPer-command sandbox override. Defaults to use_default; use with_additional_permissions with additional_permissions, or require_escalated for unsandboxed execution.
shellstringNoShell binary to launch. Defaults to the user's default shell.
ttybooleanNoTrue allocates a PTY for the command; false or omitted uses plain pipes.
workdirstringNoWorking directory for the command. Defaults to the turn cwd.
yield_time_msnumberNoWait before yielding output. Defaults to 10000 ms; effective range is 250-30000 ms.
Full input definition
{
  "type": "object",
  "properties": {
    "additional_permissions": {
      "type": "object",
      "description": "Sandboxed filesystem or network access for this command; only with `sandbox_permissions: \"with_additional_permissions\"`.",
      "properties": {
        "file_system": {
          "type": "object",
          "description": "Filesystem access request.",
          "properties": {
            "read": {
              "type": "array",
              "description": "Absolute paths to grant read access; omit when none are needed.",
              "items": {
                "type": "string"
              }
            },
            "write": {
              "type": "array",
              "description": "Absolute paths to grant write access; omit when none are needed.",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        },
        "network": {
          "type": "object",
          "description": "Network access request.",
          "properties": {
            "enabled": {
              "type": "boolean",
              "description": "True requests network access; false or omitted requests none."
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "cmd": {
      "type": "string",
      "description": "Shell command to execute."
    },
    "environment_id": {
      "type": "string",
      "description": "Environment id from <environment_context>. Omit to use the primary environment."
    },
    "justification": {
      "type": "string",
      "description": "User-facing approval question for `require_escalated`; omit otherwise."
    },
    "login": {
      "type": "boolean",
      "description": "True runs the shell with -l/-i semantics; false disables them. Defaults to true."
    },
    "max_output_tokens": {
      "type": "number",
      "description": "Output token budget. Defaults to 10000 tokens; larger requests may be capped by policy."
    },
    "prefix_rule": {
      "type": "array",
      "description": "Reusable approval prefix for `cmd`, only with `sandbox_permissions: \"require_escalated\"`; for example [\"git\", \"pull\"].",
      "items": {
        "type": "string"
      }
    },
    "sandbox_permissions": {
      "type": "string",
      "description": "Per-command sandbox override. Defaults to `use_default`; use `with_additional_permissions` with `additional_permissions`, or `require_escalated` for unsandboxed execution.",
      "enum": [
        "use_default",
        "with_additional_permissions",
        "require_escalated"
      ]
    },
    "shell": {
      "type": "string",
      "description": "Shell binary to launch. Defaults to the user's default shell."
    },
    "tty": {
      "type": "boolean",
      "description": "True allocates a PTY for the command; false or omitted uses plain pipes."
    },
    "workdir": {
      "type": "string",
      "description": "Working directory for the command. Defaults to the turn cwd."
    },
    "yield_time_ms": {
      "type": "number",
      "description": "Wait before yielding output. Defaults to 10000 ms; effective range is 250-30000 ms."
    }
  },
  "required": [
    "cmd"
  ],
  "additionalProperties": false
}

ResultJSON Schema

Source constructor JSON Schema. Defaults and bounds in descriptions are prose unless a validation keyword also encodes them. Direct model output is a formatted text rendering; code_mode_result returns this object. Session lifecycle/protocol events are separate.

FieldTypeRequiredMeaning and defaults
chunk_idstringNoChunk identifier included when the response reports one.
exit_codenumberNoProcess exit code when the command finished during this call.
original_token_countnumberNoApproximate token count before output truncation.
outputstringYesCommand output text, possibly truncated.
session_idnumberNoSession identifier to pass to write_stdin when the process is still running.
wall_time_secondsnumberYesElapsed wall time spent waiting for output in seconds.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "chunk_id": {
      "description": "Chunk identifier included when the response reports one.",
      "type": "string"
    },
    "exit_code": {
      "description": "Process exit code when the command finished during this call.",
      "type": "number"
    },
    "original_token_count": {
      "description": "Approximate token count before output truncation.",
      "type": "number"
    },
    "output": {
      "description": "Command output text, possibly truncated.",
      "type": "string"
    },
    "session_id": {
      "description": "Session identifier to pass to write_stdin when the process is still running.",
      "type": "number"
    },
    "wall_time_seconds": {
      "description": "Elapsed wall time spent waiting for output in seconds.",
      "type": "number"
    }
  },
  "required": [
    "wall_time_seconds",
    "output"
  ],
  "type": "object"
}

Failures and lifecycle

  • Returns session_id while running; exit_code after completion; bounded output may be truncated. tty defaults false. login defaults true. yield_time_ms defaults 10000. Handler also parses timeout_ms, which is not an advertised schema field. Advertised number fields may be narrower unsigned/integer serde fields at execution.
  • One-shot exec_command removes resumable process authority; a familiar tool name does not imply write_stdin availability.

Sources

followup_taskSend a follow-up task to an existing non-root target agent and trigger a turn if it is idle.

MultiAgentVersion V2; disable_native_tools must be false; child model must support V2. Configurable tool namespace. disable_direct_message removes send_message/followup_task; wait_agent_enabled controls wait_agent. Catalog may override parameters; spawn metadata/model fields are configurable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
messagestringYesMessage text to send to the target agent.
targetstringYesAgent id or canonical task name to send a follow-up task to (from spawn_agent).
Full input definition
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "Message text to send to the target agent.",
      "encrypted": true
    },
    "target": {
      "type": "string",
      "description": "Agent id or canonical task name to send a follow-up task to (from spawn_agent)."
    }
  },
  "required": [
    "target",
    "message"
  ],
  "additionalProperties": false
}

ResultFree-form result

Message dispatch returns empty FunctionToolOutput on success; does not prove recipient execution or completion.

Full result definition
Empty text acknowledgment

Sources

get_context_remainingGet the remaining tokens in the current context window.

TokenBudget feature.

InputJSON Schema

Full input definition
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

ResultJSON Schema

Source constructor JSON Schema. Defaults and bounds in descriptions are prose unless a validation keyword also encodes them. This schema describes the code-mode value. Direct model delivery uses image or context-fragment content, not necessarily a JSON string.

FieldTypeRequiredMeaning and defaults
tokens_left{"type":"integer"} | {"type":"null"}YesRemaining tokens in the current context window, or null when unavailable.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "tokens_left": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "description": "Remaining tokens in the current context window, or null when unavailable."
    }
  },
  "required": [
    "tokens_left"
  ],
  "type": "object"
}

Sources

interrupt_agentInterrupt an agent's current turn, if any, and return its previous status.

MultiAgentVersion V2; disable_native_tools must be false; child model must support V2. Configurable tool namespace. disable_direct_message removes send_message/followup_task; wait_agent_enabled controls wait_agent. Catalog may override parameters; spawn metadata/model fields are configurable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
targetstringYesAgent id or canonical task name to interrupt (from spawn_agent).
Full input definition
{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Agent id or canonical task name to interrupt (from spawn_agent)."
    }
  },
  "required": [
    "target"
  ],
  "additionalProperties": false
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
previous_statussee schemaYesThe agent status observed before the interrupt request was handled.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "previous_status": {
      "allOf": [
        {
          "oneOf": [
            {
              "enum": [
                "pending_init",
                "running",
                "interrupted",
                "shutdown",
                "not_found"
              ],
              "type": "string"
            },
            {
              "additionalProperties": false,
              "properties": {
                "completed": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "completed"
              ],
              "type": "object"
            },
            {
              "additionalProperties": false,
              "properties": {
                "errored": {
                  "type": "string"
                }
              },
              "required": [
                "errored"
              ],
              "type": "object"
            }
          ]
        }
      ],
      "description": "The agent status observed before the interrupt request was handled."
    }
  },
  "required": [
    "previous_status"
  ],
  "type": "object"
}

Sources

list_agentsList live agents in the current root thread tree.

MultiAgentVersion V2; disable_native_tools must be false; child model must support V2. Configurable tool namespace. disable_direct_message removes send_message/followup_task; wait_agent_enabled controls wait_agent. Catalog may override parameters; spawn metadata/model fields are configurable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
path_prefixstringNoTask-path prefix filter without a trailing slash. Omit to list all live agents.
Full input definition
{
  "type": "object",
  "properties": {
    "path_prefix": {
      "type": "string",
      "description": "Task-path prefix filter without a trailing slash. Omit to list all live agents."
    }
  },
  "additionalProperties": false
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
agentsarrayYesLive agents visible in the current root thread tree.
[].agent_namestringYesCanonical task name for the agent when available, otherwise the agent id.
[].agent_statusunknownYesLast known status of the agent.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "agents": {
      "description": "Live agents visible in the current root thread tree.",
      "items": {
        "additionalProperties": false,
        "properties": {
          "agent_name": {
            "description": "Canonical task name for the agent when available, otherwise the agent id.",
            "type": "string"
          },
          "agent_status": {
            "allOf": [
              {
                "oneOf": [
                  {
                    "enum": [
                      "pending_init",
                      "running",
                      "interrupted",
                      "shutdown",
                      "not_found"
                    ],
                    "type": "string"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "completed": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "completed"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "errored": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "errored"
                    ],
                    "type": "object"
                  }
                ]
              }
            ],
            "description": "Last known status of the agent."
          }
        },
        "required": [
          "agent_name",
          "agent_status"
        ],
        "type": "object"
      },
      "type": "array"
    }
  },
  "required": [
    "agents"
  ],
  "type": "object"
}

Sources

list_available_plugins_to_installList candidate plugins and connectors.

ToolSuggest + Apps + Plugins and nonempty candidate list; ListTool presentation only.

InputJSON Schema

Full input definition
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}

ResultSource declaration

Implementation result declarations, not a formal output schema. Plugin suggestion completion and user confirmation do not alone prove future tool availability.

Full result definition
#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum DiscoverableToolType {
    Connector,
    Plugin,
}

#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum DiscoverableToolAction {
    Install,
    Enable,
}

#[derive(Clone, Debug, Serialize, PartialEq, Eq)]
pub struct RequestPluginInstallEntry {
    pub id: String,
    pub name: String,
    pub description: Option<String>,
    pub tool_type: DiscoverableToolType,
    pub has_skills: bool,
    pub mcp_server_names: Vec<String>,
    pub app_connector_ids: Vec<String>,
}

#[derive(Clone, Debug, Serialize, PartialEq, Eq)]
pub struct ListAvailablePluginsToInstallResult {
    pub tools: Vec<RequestPluginInstallEntry>,
}

Sources

multi_agent_v1.close_agentClose an agent and any open descendants when they are no longer needed, and return the target agent's previous status before shutdown was requested.

MultiAgentVersion V1; next spawn depth within agent_max_depth. Deferred when model supports search. V1 namespace and contracts differ from V2.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
targetstringYesAgent id to close (from spawn_agent).
Full input definition
{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Agent id to close (from spawn_agent)."
    }
  },
  "required": [
    "target"
  ],
  "additionalProperties": false
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
previous_statussee schemaYesThe agent status observed before shutdown was requested.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "previous_status": {
      "allOf": [
        {
          "oneOf": [
            {
              "enum": [
                "pending_init",
                "running",
                "interrupted",
                "shutdown",
                "not_found"
              ],
              "type": "string"
            },
            {
              "additionalProperties": false,
              "properties": {
                "completed": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "completed"
              ],
              "type": "object"
            },
            {
              "additionalProperties": false,
              "properties": {
                "errored": {
                  "type": "string"
                }
              },
              "required": [
                "errored"
              ],
              "type": "object"
            }
          ]
        }
      ],
      "description": "The agent status observed before shutdown was requested."
    }
  },
  "required": [
    "previous_status"
  ],
  "type": "object"
}

Sources

multi_agent_v1.resume_agentResume a previously closed agent by id so it can receive send_input and wait_agent calls.

MultiAgentVersion V1; next spawn depth within agent_max_depth. Deferred when model supports search. V1 namespace and contracts differ from V2.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
idstringYesAgent id to resume.
Full input definition
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Agent id to resume."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
status{"enum":["pending_init","running","interrupted","shutdown","not_found"],"type":"string"} | {"additionalProperties":false,"properties":{"completed":{"type":["string","null"]}},"required":["completed"],"type":"object"} | {"additionalProperties":false,"properties":{"errored":{"type":"string"}},"required":["errored"],"type":"object"}Yes
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "status": {
      "oneOf": [
        {
          "enum": [
            "pending_init",
            "running",
            "interrupted",
            "shutdown",
            "not_found"
          ],
          "type": "string"
        },
        {
          "additionalProperties": false,
          "properties": {
            "completed": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "completed"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "errored": {
              "type": "string"
            }
          },
          "required": [
            "errored"
          ],
          "type": "object"
        }
      ]
    }
  },
  "required": [
    "status"
  ],
  "type": "object"
}

Sources

multi_agent_v1.send_inputSend a message to an existing agent.

MultiAgentVersion V1; next spawn depth within agent_max_depth. Deferred when model supports search. V1 namespace and contracts differ from V2.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
interruptbooleanNoTrue interrupts the current task and handles this message immediately; false or omitted queues it.
itemsarrayNoStructured input items. Use this to pass explicit mentions (for example app:// connector paths).
[].audio_urlstringNoAudio data URL when type is audio.
[].image_urlstringNoImage URL when type is image.
[].namestringNoDisplay name when type is skill or mention.
[].pathstringNoPath when type is local_image/local_audio/skill, or structured mention target such as app://<connector-id> or plugin://<plugin-name>@<marketplace-name> when type is mention.
[].textstringNoText content when type is text.
[].typestringNoInput item type: text, image, local_image, audio, local_audio, skill, or mention.
messagestringNoLegacy plain-text message to send to the agent. Use either message or items.
targetstringYesAgent id to message (from spawn_agent).
Full input definition
{
  "type": "object",
  "properties": {
    "interrupt": {
      "type": "boolean",
      "description": "True interrupts the current task and handles this message immediately; false or omitted queues it."
    },
    "items": {
      "type": "array",
      "description": "Structured input items. Use this to pass explicit mentions (for example app:// connector paths).",
      "items": {
        "type": "object",
        "properties": {
          "audio_url": {
            "type": "string",
            "description": "Audio data URL when type is audio."
          },
          "image_url": {
            "type": "string",
            "description": "Image URL when type is image."
          },
          "name": {
            "type": "string",
            "description": "Display name when type is skill or mention."
          },
          "path": {
            "type": "string",
            "description": "Path when type is local_image/local_audio/skill, or structured mention target such as app://<connector-id> or plugin://<plugin-name>@<marketplace-name> when type is mention."
          },
          "text": {
            "type": "string",
            "description": "Text content when type is text."
          },
          "type": {
            "type": "string",
            "description": "Input item type: text, image, local_image, audio, local_audio, skill, or mention."
          }
        },
        "additionalProperties": false
      }
    },
    "message": {
      "type": "string",
      "description": "Legacy plain-text message to send to the agent. Use either message or items."
    },
    "target": {
      "type": "string",
      "description": "Agent id to message (from spawn_agent)."
    }
  },
  "required": [
    "target"
  ],
  "additionalProperties": false
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
submission_idstringYesIdentifier for the queued input submission.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "submission_id": {
      "description": "Identifier for the queued input submission.",
      "type": "string"
    }
  },
  "required": [
    "submission_id"
  ],
  "type": "object"
}

Sources

multi_agent_v1.spawn_agentSpawn a sub-agent for a well-scoped task.

MultiAgentVersion V1; next spawn depth within agent_max_depth. Deferred when model supports search. V1 namespace and contracts differ from V2.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
agent_typestringNoAgent type override for the new agent. Omit to inherit the parent agent type with a full-history fork; otherwise, default is used.
fork_contextbooleanNoTrue forks the current thread history into the new agent; false or omitted starts with only the initial prompt.
itemsarrayNoStructured input items. Use this to pass explicit mentions (for example app:// connector paths).
[].audio_urlstringNoAudio data URL when type is audio.
[].image_urlstringNoImage URL when type is image.
[].namestringNoDisplay name when type is skill or mention.
[].pathstringNoPath when type is local_image/local_audio/skill, or structured mention target such as app://<connector-id> or plugin://<plugin-name>@<marketplace-name> when type is mention.
[].textstringNoText content when type is text.
[].typestringNoInput item type: text, image, local_image, audio, local_audio, skill, or mention.
messagestringNoInitial plain-text task for the new agent. Use either message or items.
modelstringNoModel override for the new agent. Omit unless an explicit override is needed.
reasoning_effortstringNoReasoning effort override for the new agent. Omit to inherit the parent effort.
Full input definition
{
  "type": "object",
  "properties": {
    "agent_type": {
      "type": "string",
      "description": "Agent type override for the new agent. Omit to inherit the parent agent type with a full-history fork; otherwise, `default` is used.\n"
    },
    "fork_context": {
      "type": "boolean",
      "description": "True forks the current thread history into the new agent; false or omitted starts with only the initial prompt."
    },
    "items": {
      "type": "array",
      "description": "Structured input items. Use this to pass explicit mentions (for example app:// connector paths).",
      "items": {
        "type": "object",
        "properties": {
          "audio_url": {
            "type": "string",
            "description": "Audio data URL when type is audio."
          },
          "image_url": {
            "type": "string",
            "description": "Image URL when type is image."
          },
          "name": {
            "type": "string",
            "description": "Display name when type is skill or mention."
          },
          "path": {
            "type": "string",
            "description": "Path when type is local_image/local_audio/skill, or structured mention target such as app://<connector-id> or plugin://<plugin-name>@<marketplace-name> when type is mention."
          },
          "text": {
            "type": "string",
            "description": "Text content when type is text."
          },
          "type": {
            "type": "string",
            "description": "Input item type: text, image, local_image, audio, local_audio, skill, or mention."
          }
        },
        "additionalProperties": false
      }
    },
    "message": {
      "type": "string",
      "description": "Initial plain-text task for the new agent. Use either message or items."
    },
    "model": {
      "type": "string",
      "description": "Model override for the new agent. Omit unless an explicit override is needed."
    },
    "reasoning_effort": {
      "type": "string",
      "description": "Reasoning effort override for the new agent. Omit to inherit the parent effort."
    }
  },
  "additionalProperties": false
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
agent_idstringYesThread identifier for the spawned agent.
nickname"string" | "null"YesUser-facing nickname for the spawned agent when available.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "agent_id": {
      "description": "Thread identifier for the spawned agent.",
      "type": "string"
    },
    "nickname": {
      "description": "User-facing nickname for the spawned agent when available.",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "agent_id",
    "nickname"
  ],
  "type": "object"
}

Sources

multi_agent_v1.wait_agentWait for agents to reach a final status.

MultiAgentVersion V1; next spawn depth within agent_max_depth. Deferred when model supports search. V1 namespace and contracts differ from V2.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
targetsarrayYesAgent ids to wait on. Pass multiple ids to wait for whichever finishes first.
timeout_msnumberNoTimeout in milliseconds. Defaults to 30000, min 10000, max 3600000. Prefer longer waits (minutes) to avoid busy polling.
Full input definition
{
  "type": "object",
  "properties": {
    "targets": {
      "type": "array",
      "description": "Agent ids to wait on. Pass multiple ids to wait for whichever finishes first.",
      "items": {
        "type": "string"
      }
    },
    "timeout_ms": {
      "type": "number",
      "description": "Timeout in milliseconds. Defaults to 30000, min 10000, max 3600000. Prefer longer waits (minutes) to avoid busy polling."
    }
  },
  "required": [
    "targets"
  ],
  "additionalProperties": false
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
statusobjectYesFinal statuses keyed by agent id.
timed_outbooleanYesWhether the wait call returned due to timeout before any agent reached a final status.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "status": {
      "additionalProperties": {
        "oneOf": [
          {
            "enum": [
              "pending_init",
              "running",
              "interrupted",
              "shutdown",
              "not_found"
            ],
            "type": "string"
          },
          {
            "additionalProperties": false,
            "properties": {
              "completed": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "completed"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "errored": {
                "type": "string"
              }
            },
            "required": [
              "errored"
            ],
            "type": "object"
          }
        ]
      },
      "description": "Final statuses keyed by agent id.",
      "type": "object"
    },
    "timed_out": {
      "description": "Whether the wait call returned due to timeout before any agent reached a final status.",
      "type": "boolean"
    }
  },
  "required": [
    "status",
    "timed_out"
  ],
  "type": "object"
}

Sources

new_contextStart a new context window.

TokenBudget feature; direct-model-only.

InputJSON Schema

Full input definition
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

ResultFree-form result

Requests a new context window; environment state is preserved. No formal output schema.

Full result definition
Context-window transition acknowledgment

Sources

request_permissionsRequest additional filesystem or network permissions from the user and wait for the client to grant a subset of the requested permission profile.

RequestPermissionsTool feature; selected environment and client grant response. Handler accepts environmentId as an alias of environment_id.

Aliases and version differences: environmentId (handler input alias; schema advertises environment_id)

InputJSON Schema

FieldTypeRequiredMeaning and defaults
environment_idstringNoEnvironment id from <environment_context>. Omit to use the primary environment.
permissionsobjectYesFilesystem or network access request.
.file_systemobjectNoFilesystem access request.
.readstring[]NoAbsolute paths to grant read access; omit when none are needed.
.writestring[]NoAbsolute paths to grant write access; omit when none are needed.
.networkobjectNoNetwork access request.
.enabledbooleanNoTrue requests network access; false or omitted requests none.
reasonstringNoOptional short explanation for why additional permissions are needed.
Full input definition
{
  "type": "object",
  "properties": {
    "environment_id": {
      "type": "string",
      "description": "Environment id from <environment_context>. Omit to use the primary environment."
    },
    "permissions": {
      "type": "object",
      "description": "Filesystem or network access request.",
      "properties": {
        "file_system": {
          "type": "object",
          "description": "Filesystem access request.",
          "properties": {
            "read": {
              "type": "array",
              "description": "Absolute paths to grant read access; omit when none are needed.",
              "items": {
                "type": "string"
              }
            },
            "write": {
              "type": "array",
              "description": "Absolute paths to grant write access; omit when none are needed.",
              "items": {
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        },
        "network": {
          "type": "object",
          "description": "Network access request.",
          "properties": {
            "enabled": {
              "type": "boolean",
              "description": "True requests network access; false or omitted requests none."
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "reason": {
      "type": "string",
      "description": "Optional short explanation for why additional permissions are needed."
    }
  },
  "required": [
    "permissions"
  ],
  "additionalProperties": false
}

ResultSource declaration

Serde response serialized by the handler, not an advertised output schema. Permission profiles can grant a subset or nothing; scope/defaults follow protocol types. Referenced permission enums/models remain linked rather than flattened.

Full result definition
#[derive(Debug, Clone, Default, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
#[serde(deny_unknown_fields)]
pub struct RequestPermissionProfile {
    pub network: Option<NetworkPermissions>,
    pub file_system: Option<FileSystemPermissions>,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
pub struct RequestPermissionsResponse {
    pub permissions: RequestPermissionProfile,
    #[serde(default)]
    pub scope: PermissionGrantScope,
    /// Review subsequent commands in this turn unless a permission hook resolves the request.
    #[serde(default, skip_serializing_if = "std::ops::Not::not")]
    pub strict_auto_review: bool,
}

Sources

request_plugin_installRequest installation of an explicitly selected plugin or connector.

ToolSuggest + Apps + Plugins and nonempty candidate list; either ListTool or RecommendationContext presentation.

InputJSON Schema

Reference union of the two constructor variants. Runtime chooses ListTool or RecommendationContext; it does not advertise this union. tool_type/action_type are strings with prose constraints, not formal enums.

Full input definition
{
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "plugin_id": {
          "type": "string",
          "description": "The parenthesized plugin ID from the `<recommended_plugins>` list."
        },
        "suggest_reason": {
          "type": "string",
          "description": "Concise one-line user-facing reason why this plugin can help with the current request."
        }
      },
      "required": [
        "plugin_id",
        "suggest_reason"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "action_type": {
          "type": "string",
          "description": "Suggested action for the tool. Use \"install\"."
        },
        "suggest_reason": {
          "type": "string",
          "description": "Concise one-line user-facing reason why this plugin or connector can help with the current request."
        },
        "tool_id": {
          "type": "string",
          "description": "Connector or plugin id to suggest."
        },
        "tool_type": {
          "type": "string",
          "description": "Type of discoverable tool to suggest. Use \"connector\" or \"plugin\"."
        }
      },
      "required": [
        "tool_type",
        "action_type",
        "tool_id",
        "suggest_reason"
      ],
      "additionalProperties": false
    }
  ]
}

ResultSource declaration

Implementation result declarations, not a formal output schema. Plugin suggestion completion and user confirmation do not alone prove future tool availability.

Full result definition
#[derive(Debug, Serialize, PartialEq, Eq)]
pub struct RequestPluginInstallResult {
    pub completed: bool,
    pub user_confirmed: bool,
    pub tool_type: DiscoverableToolType,
    pub action_type: DiscoverableToolAction,
    pub tool_id: String,
    pub tool_name: String,
    pub suggest_reason: String,
}

Sources

request_user_inputAsk blocking multiple-choice questions.

experimental_request_user_input_enabled. Direct-model-only; handler checks the configured allowed collaboration modes (Plan by default).

InputJSON Schema

FieldTypeRequiredMeaning and defaults
questionsarrayYesQuestions to show the user. Prefer 1 and do not exceed 3
[].headerstringYesShort header label shown in the UI (12 or fewer chars).
[].idstringYesStable identifier for mapping answers (snake_case).
[].optionsobject[]YesProvide 2-3 mutually exclusive choices. Put the recommended option first and suffix its label with "(Recommended)". Do not include an "Other" option in this list; the client will add a free-form "Other" option automatically.
[].descriptionstringYesOne short sentence explaining impact/tradeoff if selected.
[].labelstringYesUser-facing label (1-5 words).
[].questionstringYesSingle-sentence prompt shown to the user.
Full input definition
{
  "type": "object",
  "properties": {
    "questions": {
      "type": "array",
      "description": "Questions to show the user. Prefer 1 and do not exceed 3",
      "items": {
        "type": "object",
        "properties": {
          "header": {
            "type": "string",
            "description": "Short header label shown in the UI (12 or fewer chars)."
          },
          "id": {
            "type": "string",
            "description": "Stable identifier for mapping answers (snake_case)."
          },
          "options": {
            "type": "array",
            "description": "Provide 2-3 mutually exclusive choices. Put the recommended option first and suffix its label with \"(Recommended)\". Do not include an \"Other\" option in this list; the client will add a free-form \"Other\" option automatically.",
            "items": {
              "type": "object",
              "properties": {
                "description": {
                  "type": "string",
                  "description": "One short sentence explaining impact/tradeoff if selected."
                },
                "label": {
                  "type": "string",
                  "description": "User-facing label (1-5 words)."
                }
              },
              "required": [
                "label",
                "description"
              ],
              "additionalProperties": false
            }
          },
          "question": {
            "type": "string",
            "description": "Single-sentence prompt shown to the user."
          }
        },
        "required": [
          "id",
          "header",
          "question",
          "options"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "questions"
  ],
  "additionalProperties": false
}

ResultSource declaration

Serde response serialized by the handler, not an advertised output schema. Permission profiles can grant a subset or nothing; scope/defaults follow protocol types. Referenced permission enums/models remain linked rather than flattened.

Full result definition
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
pub struct RequestUserInputAnswer {
    pub answers: Vec<String>,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
pub struct RequestUserInputResponse {
    pub answers: HashMap<String, RequestUserInputAnswer>,
}

Sources

request_user_input_asyncPresent questions without waiting for a reply.

experimental_request_user_input_enabled; root agent; model catalog advertises request_user_input_async or historical send_user_message_async. Direct-model-only; catalog can override parameters.

Aliases and version differences: send_user_message_async (catalog eligibility name only; not a second registered callable)

InputJSON Schema

FieldTypeRequiredMeaning and defaults
questionsarrayYesOne or more self-contained questions to present together, in display order.
[].optionsstring[]NoSuggested answers, in display order. Put the recommended answer first; the first option is preselected by default. The user can select one option or enter a free-text answer. Do not include an Other option or a free-text placeholder; the UI provides free-text input automatically. Omit options for a free-text-only question.
[].titlestringYesThe complete question shown to the user, including any context needed to answer it.
Full input definition
{
  "type": "object",
  "properties": {
    "questions": {
      "type": "array",
      "description": "One or more self-contained questions to present together, in display order.",
      "items": {
        "type": "object",
        "properties": {
          "options": {
            "type": "array",
            "description": "Suggested answers, in display order. Put the recommended answer first; the first option is preselected by default. The user can select one option or enter a free-text answer. Do not include an Other option or a free-text placeholder; the UI provides free-text input automatically. Omit options for a free-text-only question.",
            "items": {
              "type": "string"
            },
            "minItems": 1
          },
          "title": {
            "type": "string",
            "description": "The complete question shown to the user, including any context needed to answer it."
          }
        },
        "required": [
          "title"
        ],
        "additionalProperties": false
      },
      "minItems": 1
    }
  },
  "required": [
    "questions"
  ],
  "additionalProperties": false
}

ResultImplementation shape

Handler emits JSON text; accepts delivery asynchronously, does not wait for a user response.

Full result definition
{"accepted": true}

Sources

send_messageSend a message to an existing agent.

MultiAgentVersion V2; disable_native_tools must be false; child model must support V2. Configurable tool namespace. disable_direct_message removes send_message/followup_task; wait_agent_enabled controls wait_agent. Catalog may override parameters; spawn metadata/model fields are configurable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
messagestringYesMessage text to queue on the target agent.
targetstringYesRelative or canonical task name to message (from spawn_agent).
Full input definition
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "Message text to queue on the target agent.",
      "encrypted": true
    },
    "target": {
      "type": "string",
      "description": "Relative or canonical task name to message (from spawn_agent)."
    }
  },
  "required": [
    "target",
    "message"
  ],
  "additionalProperties": false
}

ResultFree-form result

Message dispatch returns empty FunctionToolOutput on success; does not prove recipient execution or completion.

Full result definition
Empty text acknowledgment

Sources

send_message_to_user_asyncSend a concise message that needs the user's attention during ongoing work.

Root agent, SendMessageToUserAsync feature or matching model experimental tool. Direct-model-only.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
messagestringYesThe concise question or update to send to the user.
Full input definition
{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "description": "The concise question or update to send to the user."
    }
  },
  "required": [
    "message"
  ],
  "additionalProperties": false
}

ResultImplementation shape

Handler emits JSON text; accepts delivery asynchronously, does not wait for a user response.

Full result definition
{"accepted": true}

Sources

spawn_agentSpawns an agent to work on the specified task.

MultiAgentVersion V2; disable_native_tools must be false; child model must support V2. Configurable tool namespace. disable_direct_message removes send_message/followup_task; wait_agent_enabled controls wait_agent. Catalog may override parameters; spawn metadata/model fields are configurable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
agent_typestringNoAgent type override for the new agent. Omit unless explicitly asked. The selected role applies regardless of how much parent history is inherited.
fork_turnsstringNoParent history to inherit. Defaults to all; use none to start without parent history. Only all and none are supported.
messagestringYesInitial plain-text task for the new agent.
modelstringNoModel override for the new agent. Omit unless an explicit override is needed.
reasoning_effortstringNoReasoning effort override for the new agent. Omit to inherit the parent effort.
task_namestringYesTask name for the new agent. Use lowercase letters, digits, and underscores.
Full input definition
{
  "type": "object",
  "properties": {
    "agent_type": {
      "type": "string",
      "description": "Agent type override for the new agent. Omit unless explicitly asked. The selected role applies regardless of how much parent history is inherited.\n"
    },
    "fork_turns": {
      "type": "string",
      "description": "Parent history to inherit. Defaults to `all`; use `none` to start without parent history. Only `all` and `none` are supported."
    },
    "message": {
      "type": "string",
      "description": "Initial plain-text task for the new agent.",
      "encrypted": true
    },
    "model": {
      "type": "string",
      "description": "Model override for the new agent. Omit unless an explicit override is needed."
    },
    "reasoning_effort": {
      "type": "string",
      "description": "Reasoning effort override for the new agent. Omit to inherit the parent effort."
    },
    "task_name": {
      "type": "string",
      "description": "Task name for the new agent. Use lowercase letters, digits, and underscores."
    }
  },
  "required": [
    "task_name",
    "message"
  ],
  "additionalProperties": false
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
nickname"string" | "null"YesUser-facing nickname for the spawned agent when available.
task_namestringYesCanonical task name for the spawned agent.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "nickname": {
      "description": "User-facing nickname for the spawned agent when available.",
      "type": [
        "string",
        "null"
      ]
    },
    "task_name": {
      "description": "Canonical task name for the spawned agent.",
      "type": "string"
    }
  },
  "required": [
    "task_name",
    "nickname"
  ],
  "type": "object"
}

Sources

test_sync_toolInternal synchronization helper used by Codex integration tests.

Only model metadata experimental_supported_tools includes test_sync_tool; integration-test helper.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
barrierobjectNo
.idstringYesIdentifier shared by concurrent calls that should rendezvous
.participantsnumberYesNumber of tool calls that must arrive before the barrier opens
.timeout_msnumberNoMaximum barrier wait in milliseconds. Defaults to 1000.
sleep_after_msnumberNoDelay after completing the barrier. Defaults to no delay.
sleep_before_msnumberNoDelay before any other action. Defaults to no delay.
wait_for_git_enrichmentbooleanNoWait for Git enrichment for the current turn to finish, subject to a timeout.
Full input definition
{
  "type": "object",
  "properties": {
    "barrier": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "Identifier shared by concurrent calls that should rendezvous"
        },
        "participants": {
          "type": "number",
          "description": "Number of tool calls that must arrive before the barrier opens"
        },
        "timeout_ms": {
          "type": "number",
          "description": "Maximum barrier wait in milliseconds. Defaults to 1000."
        }
      },
      "required": [
        "id",
        "participants"
      ],
      "additionalProperties": false
    },
    "sleep_after_ms": {
      "type": "number",
      "description": "Delay after completing the barrier. Defaults to no delay."
    },
    "sleep_before_ms": {
      "type": "number",
      "description": "Delay before any other action. Defaults to no delay."
    },
    "wait_for_git_enrichment": {
      "type": "boolean",
      "description": "Wait for Git enrichment for the current turn to finish, subject to a timeout."
    }
  },
  "additionalProperties": false
}

ResultFree-form result

Internal integration-test helper; barrier timeout and Git-enrichment failures may be model-facing errors.

Full result definition
Text synchronization acknowledgment

Sources

update_planUpdates the task plan.

config.update_plan_enabled.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
explanationstringNoOptional explanation for this plan update.
planarrayYesThe list of steps
[].status"pending" | "in_progress" | "completed"YesStep status.
[].stepstringYesTask step text.
Full input definition
{
  "type": "object",
  "properties": {
    "explanation": {
      "type": "string",
      "description": "Optional explanation for this plan update."
    },
    "plan": {
      "type": "array",
      "description": "The list of steps",
      "items": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Step status.",
            "enum": [
              "pending",
              "in_progress",
              "completed"
            ]
          },
          "step": {
            "type": "string",
            "description": "Task step text."
          }
        },
        "required": [
          "step",
          "status"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "plan"
  ],
  "additionalProperties": false
}

ResultFree-form result

Text acknowledgment; handler validates plan arguments. No formal output schema.

Full result definition
Plan updated

Sources

view_imageView a local image file from the filesystem when visual inspection is needed.

ViewImage feature. environment_id only for multiple environments; detail only when original detail is supported and unified image budget is off.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
detail"high" | "original"NoImage detail level. Defaults to high; use original to preserve exact resolution.
environment_idstringNoEnvironment id from <environment_context>. Omit to use the primary environment.
pathstringYesLocal filesystem path to an image file.
Full input definition
{
  "type": "object",
  "properties": {
    "detail": {
      "type": "string",
      "description": "Image detail level. Defaults to `high`; use `original` to preserve exact resolution.",
      "enum": [
        "high",
        "original"
      ]
    },
    "environment_id": {
      "type": "string",
      "description": "Environment id from <environment_context>. Omit to use the primary environment."
    },
    "path": {
      "type": "string",
      "description": "Local filesystem path to an image file."
    }
  },
  "required": [
    "path"
  ],
  "additionalProperties": false
}

ResultJSON Schema

Source constructor JSON Schema. Defaults and bounds in descriptions are prose unless a validation keyword also encodes them. This schema describes the code-mode value. Direct model delivery uses image or context-fragment content, not necessarily a JSON string.

FieldTypeRequiredMeaning and defaults
detail"high" | "original"YesImage detail hint returned by view_image. Returns high for default resized behavior or original when original resolution is preserved.
image_urlstringYesData URL for the loaded image.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "detail": {
      "description": "Image detail hint returned by view_image. Returns `high` for default resized behavior or `original` when original resolution is preserved.",
      "enum": [
        "high",
        "original"
      ],
      "type": "string"
    },
    "image_url": {
      "description": "Data URL for the loaded image.",
      "type": "string"
    }
  },
  "required": [
    "image_url",
    "detail"
  ],
  "type": "object"
}

Sources

waitResume or terminate a yielded JavaScript exec cell.

CodeMode/CodeModeOnly wrapper registration. Catalog can override description/parameters.

InputJSON Schema

Transcribed from source builder; no constructor execution for this snapshot. Catalog overrides may replace it.

FieldTypeRequiredMeaning and defaults
cell_idstringYes
yield_time_msnumberNoDefault 10000 ms.
max_tokensnumberNoDefault 10000.
terminatebooleanNoDefault false.
Full input definition
{
  "type": "object",
  "properties": {
    "cell_id": {
      "type": "string"
    },
    "yield_time_ms": {
      "type": "number",
      "description": "Default 10000 ms."
    },
    "max_tokens": {
      "type": "number",
      "description": "Default 10000."
    },
    "terminate": {
      "type": "boolean",
      "description": "Default false."
    }
  },
  "required": [
    "cell_id"
  ],
  "additionalProperties": false
}

ResultFree-form result

Only valid for a yielded exec cell; not the unified-exec process session used by write_stdin.

Full result definition
New output, cell completion, or termination.

Sources

wait_agentWait for a mailbox update from any live agent, including queued messages and final-status notifications.

MultiAgentVersion V2; disable_native_tools must be false; child model must support V2. Configurable tool namespace. disable_direct_message removes send_message/followup_task; wait_agent_enabled controls wait_agent. Catalog may override parameters; spawn metadata/model fields are configurable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
timeout_msnumberNoTimeout in milliseconds. Defaults to 30000, min 10000, max 3600000.
Full input definition
{
  "type": "object",
  "properties": {
    "timeout_ms": {
      "type": "number",
      "description": "Timeout in milliseconds. Defaults to 30000, min 10000, max 3600000."
    }
  },
  "additionalProperties": false
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
messagestringYesBrief wait summary without the agent's final content, including any timeout adjustment.
timed_outbooleanYesWhether the wait call returned because no mailbox update arrived before the timeout.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "message": {
      "description": "Brief wait summary without the agent's final content, including any timeout adjustment.",
      "type": "string"
    },
    "timed_out": {
      "description": "Whether the wait call returned because no mailbox update arrived before the timeout.",
      "type": "boolean"
    }
  },
  "required": [
    "message",
    "timed_out"
  ],
  "type": "object"
}

Sources

wait_for_environmentWait for an execution environment to become ready.

DeferredExecutor feature; selected environment must be ready, starting or failed.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
environment_idstringYes
Full input definition
{
  "type": "object",
  "properties": {
    "environment_id": {
      "type": "string",
      "description": ""
    }
  },
  "required": [
    "environment_id"
  ],
  "additionalProperties": false
}

ResultImplementation shape

JSON result from handler, not an advertised formal output schema. Failed or unknown environment returns a bounded model-facing error.

Full result definition
{ environment_id: string, status: "ready" }

Sources

write_stdinWrites characters to an existing unified exec session and returns recent output.

ShellTool + UnifiedExec, enabled model shell type and tool policy; operates only on a live unified-exec session in this runtime.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
charsstringNoBytes to write to stdin. Defaults to empty, which polls without writing.
max_output_tokensnumberNoOutput token budget. Defaults to 10000 tokens; larger requests may be capped by policy.
session_idnumberYesIdentifier of the running unified exec session.
yield_time_msnumberNoWait before yielding output. Non-empty writes default to 250 ms and cap at 30000 ms; empty polls wait 5000-300000 ms by default.
Full input definition
{
  "type": "object",
  "properties": {
    "chars": {
      "type": "string",
      "description": "Bytes to write to stdin. Defaults to empty, which polls without writing."
    },
    "max_output_tokens": {
      "type": "number",
      "description": "Output token budget. Defaults to 10000 tokens; larger requests may be capped by policy."
    },
    "session_id": {
      "type": "number",
      "description": "Identifier of the running unified exec session."
    },
    "yield_time_ms": {
      "type": "number",
      "description": "Wait before yielding output. Non-empty writes default to 250 ms and cap at 30000 ms; empty polls wait 5000-300000 ms by default."
    }
  },
  "required": [
    "session_id"
  ],
  "additionalProperties": false
}

ResultJSON Schema

Source constructor JSON Schema. Defaults and bounds in descriptions are prose unless a validation keyword also encodes them. Direct model output is a formatted text rendering; code_mode_result returns this object. Session lifecycle/protocol events are separate.

FieldTypeRequiredMeaning and defaults
chunk_idstringNoChunk identifier included when the response reports one.
exit_codenumberNoProcess exit code when the command finished during this call.
original_token_countnumberNoApproximate token count before output truncation.
outputstringYesCommand output text, possibly truncated.
session_idnumberNoSession identifier to pass to write_stdin when the process is still running.
wall_time_secondsnumberYesElapsed wall time spent waiting for output in seconds.
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "chunk_id": {
      "description": "Chunk identifier included when the response reports one.",
      "type": "string"
    },
    "exit_code": {
      "description": "Process exit code when the command finished during this call.",
      "type": "number"
    },
    "original_token_count": {
      "description": "Approximate token count before output truncation.",
      "type": "number"
    },
    "output": {
      "description": "Command output text, possibly truncated.",
      "type": "string"
    },
    "session_id": {
      "description": "Session identifier to pass to write_stdin when the process is still running.",
      "type": "number"
    },
    "wall_time_seconds": {
      "description": "Elapsed wall time spent waiting for output in seconds.",
      "type": "number"
    }
  },
  "required": [
    "wall_time_seconds",
    "output"
  ],
  "type": "object"
}

Failures and lifecycle

  • session_id must refer to a running process. chars defaults empty (poll). With nonempty chars yield defaults 250 ms and caps at 30000; empty polls use 5000–300000 ms. Completion returns exit_code and ends the live session.

Sources

Extensions

Added by an installed extension or App Server contributor.

collaboration.create_channelCreate a channel where all agents in this collaboration can read and post messages.

Message-board extension installed; AgentMessageBoard + MultiAgentV2 and eligible storage, or explicit host connection. Host chooses namespace (collaboration shown here). Local SQLite, in-memory and remote backends share these contracts.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
channel_namestringYes
descriptionstringNoOptional channel purpose, at most 512 UTF-8 bytes.
subscribebooleanNoSubscribe to new top-level posts. Default true.
Full input definition
{
  "type": "object",
  "properties": {
    "channel_name": {
      "type": "string"
    },
    "description": {
      "type": "string",
      "description": "Optional channel purpose, at most 512 UTF-8 bytes."
    },
    "subscribe": {
      "type": "boolean",
      "description": "Subscribe to new top-level posts. Default true."
    }
  },
  "required": [
    "channel_name"
  ],
  "additionalProperties": false
}

ResultSource declaration

Full result definition
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostMetadata {
    pub message_id: Uuid,
    pub channel_name: String,
    pub author: AgentPath,
    pub thread_id: Uuid,
    pub created_at: DateTime<Utc>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostPreview {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text_preview: String,
    pub n_chars: usize,
    pub truncated: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostContent {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text: String,
    pub n_chars: usize,
    pub next_offset_chars: usize,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadSummary {
    pub thread_id: Uuid,
    pub root_post: PostPreview,
    pub reply_count: usize,
    pub last_activity_at: DateTime<Utc>,
    pub latest_reply: Option<PostPreview>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelSummary {
    /// Absent on boards without ACL metadata; preserve the legacy wire shape.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub permissions: Option<ChannelPermissions>,
    pub channel_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: DateTime<Utc>,
    pub created_by: AgentPath,
    pub message_count: usize,
    pub last_message_id: Option<Uuid>,
}

/// Channel discovery also exposes board actions, including when there are no channels.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPage {
    #[serde(flatten)]
    pub channels: Page<ChannelSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub board_permissions: Option<BoardPermissions>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionState {
    pub channel_name: String,
    pub thread_id: Option<Uuid>,
    pub target_agent: AgentPath,
    pub enabled: bool,
    pub last_message_id: Option<Uuid>,
}

/// A bounded page. Counts and end-of-list markers are derived at serialization.
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub struct Page<T> {
    pub results: Vec<T>,
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadPage {
    pub root_post: PostPreview,
    #[serde(flatten)]
    pub replies: Page<PostPreview>,
}

/// Effective board actions for the authenticated caller, not an ACL definition.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BoardPermissions {
    pub create_channel: bool,
    pub edit_metadata: bool,
    pub manage_permissions: bool,
}

/// Effective channel actions; replying does not imply permission to start a thread.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPermissions {
    pub read: bool,
    pub post: bool,
    pub reply: bool,
    pub edit_metadata: bool,
}

/// A backend denial retained through the board's existing error interface.
#[derive(Clone, Debug, Serialize)]
#[serde(tag = "code", rename = "permission_denied")]
pub struct PermissionDenied {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<String>,
}

Sources

collaboration.get_channelsList channels, most recently active first, or search by a case-insensitive part of the name.

Message-board extension installed; AgentMessageBoard + MultiAgentV2 and eligible storage, or explicit host connection. Host chooses namespace (collaboration shown here). Local SQLite, in-memory and remote backends share these contracts.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
cursorstringNoOpaque next_cursor from the same query. Keep filters and sorting unchanged. Concurrent posts may shift pages; omit the cursor to refresh.
limitintegerNoMaximum results, default 20; output budgets may return fewer. Continue with next_cursor.
querystringNo
recent_firstbooleanNoNewest first by default.
Full input definition
{
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "description": "Opaque next_cursor from the same query. Keep filters and sorting unchanged. Concurrent posts may shift pages; omit the cursor to refresh."
    },
    "limit": {
      "type": "integer",
      "description": "Maximum results, default 20; output budgets may return fewer. Continue with next_cursor."
    },
    "query": {
      "type": "string"
    },
    "recent_first": {
      "type": "boolean",
      "description": "Newest first by default."
    }
  },
  "required": [],
  "additionalProperties": false
}

ResultSource declaration

Full result definition
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostMetadata {
    pub message_id: Uuid,
    pub channel_name: String,
    pub author: AgentPath,
    pub thread_id: Uuid,
    pub created_at: DateTime<Utc>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostPreview {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text_preview: String,
    pub n_chars: usize,
    pub truncated: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostContent {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text: String,
    pub n_chars: usize,
    pub next_offset_chars: usize,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadSummary {
    pub thread_id: Uuid,
    pub root_post: PostPreview,
    pub reply_count: usize,
    pub last_activity_at: DateTime<Utc>,
    pub latest_reply: Option<PostPreview>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelSummary {
    /// Absent on boards without ACL metadata; preserve the legacy wire shape.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub permissions: Option<ChannelPermissions>,
    pub channel_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: DateTime<Utc>,
    pub created_by: AgentPath,
    pub message_count: usize,
    pub last_message_id: Option<Uuid>,
}

/// Channel discovery also exposes board actions, including when there are no channels.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPage {
    #[serde(flatten)]
    pub channels: Page<ChannelSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub board_permissions: Option<BoardPermissions>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionState {
    pub channel_name: String,
    pub thread_id: Option<Uuid>,
    pub target_agent: AgentPath,
    pub enabled: bool,
    pub last_message_id: Option<Uuid>,
}

/// A bounded page. Counts and end-of-list markers are derived at serialization.
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub struct Page<T> {
    pub results: Vec<T>,
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadPage {
    pub root_post: PostPreview,
    #[serde(flatten)]
    pub replies: Page<PostPreview>,
}

/// Effective board actions for the authenticated caller, not an ACL definition.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BoardPermissions {
    pub create_channel: bool,
    pub edit_metadata: bool,
    pub manage_permissions: bool,
}

/// Effective channel actions; replying does not imply permission to start a thread.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPermissions {
    pub read: bool,
    pub post: bool,
    pub reply: bool,
    pub edit_metadata: bool,
}

/// A backend denial retained through the board's existing error interface.
#[derive(Clone, Debug, Serialize)]
#[serde(tag = "code", rename = "permission_denied")]
pub struct PermissionDenied {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<String>,
}

Sources

collaboration.list_threadsList a channel's threads with previews of the first post and latest reply.

Message-board extension installed; AgentMessageBoard + MultiAgentV2 and eligible storage, or explicit host connection. Host chooses namespace (collaboration shown here). Local SQLite, in-memory and remote backends share these contracts.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
channel_namestringYes
cursorstringNoOpaque next_cursor from the same query. Keep filters and sorting unchanged. Concurrent posts may shift pages; omit the cursor to refresh.
limitintegerNoMaximum results, default 20; output budgets may return fewer. Continue with next_cursor.
max_chars_per_postintegerNoMaximum characters; further capped by output budget. Defaults: limit_chars 20000, max_chars_per_post 1000.
recent_firstbooleanNoNewest first by default.
sort"created" | "activity"No
Full input definition
{
  "type": "object",
  "properties": {
    "channel_name": {
      "type": "string"
    },
    "cursor": {
      "type": "string",
      "description": "Opaque next_cursor from the same query. Keep filters and sorting unchanged. Concurrent posts may shift pages; omit the cursor to refresh."
    },
    "limit": {
      "type": "integer",
      "description": "Maximum results, default 20; output budgets may return fewer. Continue with next_cursor."
    },
    "max_chars_per_post": {
      "type": "integer",
      "description": "Maximum characters; further capped by output budget. Defaults: limit_chars 20000, max_chars_per_post 1000."
    },
    "recent_first": {
      "type": "boolean",
      "description": "Newest first by default."
    },
    "sort": {
      "type": "string",
      "enum": [
        "created",
        "activity"
      ]
    }
  },
  "required": [
    "channel_name"
  ],
  "additionalProperties": false
}

ResultSource declaration

Full result definition
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostMetadata {
    pub message_id: Uuid,
    pub channel_name: String,
    pub author: AgentPath,
    pub thread_id: Uuid,
    pub created_at: DateTime<Utc>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostPreview {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text_preview: String,
    pub n_chars: usize,
    pub truncated: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostContent {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text: String,
    pub n_chars: usize,
    pub next_offset_chars: usize,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadSummary {
    pub thread_id: Uuid,
    pub root_post: PostPreview,
    pub reply_count: usize,
    pub last_activity_at: DateTime<Utc>,
    pub latest_reply: Option<PostPreview>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelSummary {
    /// Absent on boards without ACL metadata; preserve the legacy wire shape.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub permissions: Option<ChannelPermissions>,
    pub channel_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: DateTime<Utc>,
    pub created_by: AgentPath,
    pub message_count: usize,
    pub last_message_id: Option<Uuid>,
}

/// Channel discovery also exposes board actions, including when there are no channels.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPage {
    #[serde(flatten)]
    pub channels: Page<ChannelSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub board_permissions: Option<BoardPermissions>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionState {
    pub channel_name: String,
    pub thread_id: Option<Uuid>,
    pub target_agent: AgentPath,
    pub enabled: bool,
    pub last_message_id: Option<Uuid>,
}

/// A bounded page. Counts and end-of-list markers are derived at serialization.
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub struct Page<T> {
    pub results: Vec<T>,
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadPage {
    pub root_post: PostPreview,
    #[serde(flatten)]
    pub replies: Page<PostPreview>,
}

/// Effective board actions for the authenticated caller, not an ACL definition.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BoardPermissions {
    pub create_channel: bool,
    pub edit_metadata: bool,
    pub manage_permissions: bool,
}

/// Effective channel actions; replying does not imply permission to start a thread.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPermissions {
    pub read: bool,
    pub post: bool,
    pub reply: bool,
    pub edit_metadata: bool,
}

/// A backend denial retained through the board's existing error interface.
#[derive(Clone, Debug, Serialize)]
#[serde(tag = "code", rename = "permission_denied")]
pub struct PermissionDenied {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<String>,
}

Sources

collaboration.postStart a thread in an existing or new channel, or reply using the first post's message ID as thread_id.

Message-board extension installed; AgentMessageBoard + MultiAgentV2 and eligible storage, or explicit host connection. Host chooses namespace (collaboration shown here). Local SQLite, in-memory and remote backends share these contracts.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
agents_to_notifyarrayNoAbsolute agent paths or references relative to you; maximum 256.
channel_namestringNo
new_channel_namestringNoCreate and subscribe to this channel.
textstringYes
thread_idstringNo
Full input definition
{
  "type": "object",
  "properties": {
    "agents_to_notify": {
      "type": "array",
      "description": "Absolute agent paths or references relative to you; maximum 256.",
      "items": {
        "type": "string"
      }
    },
    "channel_name": {
      "type": "string"
    },
    "new_channel_name": {
      "type": "string",
      "description": "Create and subscribe to this channel."
    },
    "text": {
      "type": "string"
    },
    "thread_id": {
      "type": "string"
    }
  },
  "required": [
    "text"
  ],
  "additionalProperties": false
}

ResultSource declaration

Full result definition
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostMetadata {
    pub message_id: Uuid,
    pub channel_name: String,
    pub author: AgentPath,
    pub thread_id: Uuid,
    pub created_at: DateTime<Utc>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostPreview {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text_preview: String,
    pub n_chars: usize,
    pub truncated: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostContent {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text: String,
    pub n_chars: usize,
    pub next_offset_chars: usize,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadSummary {
    pub thread_id: Uuid,
    pub root_post: PostPreview,
    pub reply_count: usize,
    pub last_activity_at: DateTime<Utc>,
    pub latest_reply: Option<PostPreview>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelSummary {
    /// Absent on boards without ACL metadata; preserve the legacy wire shape.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub permissions: Option<ChannelPermissions>,
    pub channel_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: DateTime<Utc>,
    pub created_by: AgentPath,
    pub message_count: usize,
    pub last_message_id: Option<Uuid>,
}

/// Channel discovery also exposes board actions, including when there are no channels.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPage {
    #[serde(flatten)]
    pub channels: Page<ChannelSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub board_permissions: Option<BoardPermissions>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionState {
    pub channel_name: String,
    pub thread_id: Option<Uuid>,
    pub target_agent: AgentPath,
    pub enabled: bool,
    pub last_message_id: Option<Uuid>,
}

/// A bounded page. Counts and end-of-list markers are derived at serialization.
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub struct Page<T> {
    pub results: Vec<T>,
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadPage {
    pub root_post: PostPreview,
    #[serde(flatten)]
    pub replies: Page<PostPreview>,
}

/// Effective board actions for the authenticated caller, not an ACL definition.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BoardPermissions {
    pub create_channel: bool,
    pub edit_metadata: bool,
    pub manage_permissions: bool,
}

/// Effective channel actions; replying does not imply permission to start a thread.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPermissions {
    pub read: bool,
    pub post: bool,
    pub reply: bool,
    pub edit_metadata: bool,
}

/// A backend denial retained through the board's existing error interface.
#[derive(Clone, Debug, Serialize)]
#[serde(tag = "code", rename = "permission_denied")]
pub struct PermissionDenied {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<String>,
}

Sources

collaboration.read_postRead a post or reply by message ID, without needing its channel.

Message-board extension installed; AgentMessageBoard + MultiAgentV2 and eligible storage, or explicit host connection. Host chooses namespace (collaboration shown here). Local SQLite, in-memory and remote backends share these contracts.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
limit_charsintegerNoMaximum characters; further capped by output budget. Defaults: limit_chars 20000, max_chars_per_post 1000.
message_idstringYes
offset_charsintegerNoDefault 0.
Full input definition
{
  "type": "object",
  "properties": {
    "limit_chars": {
      "type": "integer",
      "description": "Maximum characters; further capped by output budget. Defaults: limit_chars 20000, max_chars_per_post 1000."
    },
    "message_id": {
      "type": "string"
    },
    "offset_chars": {
      "type": "integer",
      "description": "Default 0."
    }
  },
  "required": [
    "message_id"
  ],
  "additionalProperties": false
}

ResultSource declaration

Full result definition
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostMetadata {
    pub message_id: Uuid,
    pub channel_name: String,
    pub author: AgentPath,
    pub thread_id: Uuid,
    pub created_at: DateTime<Utc>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostPreview {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text_preview: String,
    pub n_chars: usize,
    pub truncated: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostContent {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text: String,
    pub n_chars: usize,
    pub next_offset_chars: usize,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadSummary {
    pub thread_id: Uuid,
    pub root_post: PostPreview,
    pub reply_count: usize,
    pub last_activity_at: DateTime<Utc>,
    pub latest_reply: Option<PostPreview>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelSummary {
    /// Absent on boards without ACL metadata; preserve the legacy wire shape.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub permissions: Option<ChannelPermissions>,
    pub channel_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: DateTime<Utc>,
    pub created_by: AgentPath,
    pub message_count: usize,
    pub last_message_id: Option<Uuid>,
}

/// Channel discovery also exposes board actions, including when there are no channels.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPage {
    #[serde(flatten)]
    pub channels: Page<ChannelSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub board_permissions: Option<BoardPermissions>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionState {
    pub channel_name: String,
    pub thread_id: Option<Uuid>,
    pub target_agent: AgentPath,
    pub enabled: bool,
    pub last_message_id: Option<Uuid>,
}

/// A bounded page. Counts and end-of-list markers are derived at serialization.
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub struct Page<T> {
    pub results: Vec<T>,
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadPage {
    pub root_post: PostPreview,
    #[serde(flatten)]
    pub replies: Page<PostPreview>,
}

/// Effective board actions for the authenticated caller, not an ACL definition.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BoardPermissions {
    pub create_channel: bool,
    pub edit_metadata: bool,
    pub manage_permissions: bool,
}

/// Effective channel actions; replying does not imply permission to start a thread.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPermissions {
    pub read: bool,
    pub post: bool,
    pub reply: bool,
    pub edit_metadata: bool,
}

/// A backend denial retained through the board's existing error interface.
#[derive(Clone, Debug, Serialize)]
#[serde(tag = "code", rename = "permission_denied")]
pub struct PermissionDenied {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<String>,
}

Sources

collaboration.read_threadRead a thread using its first post's message ID.

Message-board extension installed; AgentMessageBoard + MultiAgentV2 and eligible storage, or explicit host connection. Host chooses namespace (collaboration shown here). Local SQLite, in-memory and remote backends share these contracts.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
cursorstringNoOpaque next_cursor from the same query. Keep filters and sorting unchanged. Concurrent posts may shift pages; omit the cursor to refresh.
limitintegerNoMaximum results, default 20; output budgets may return fewer. Continue with next_cursor.
max_chars_per_postintegerNoMaximum characters; further capped by output budget. Defaults: limit_chars 20000, max_chars_per_post 1000.
thread_idstringYes
Full input definition
{
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "description": "Opaque next_cursor from the same query. Keep filters and sorting unchanged. Concurrent posts may shift pages; omit the cursor to refresh."
    },
    "limit": {
      "type": "integer",
      "description": "Maximum results, default 20; output budgets may return fewer. Continue with next_cursor."
    },
    "max_chars_per_post": {
      "type": "integer",
      "description": "Maximum characters; further capped by output budget. Defaults: limit_chars 20000, max_chars_per_post 1000."
    },
    "thread_id": {
      "type": "string"
    }
  },
  "required": [
    "thread_id"
  ],
  "additionalProperties": false
}

ResultSource declaration

Full result definition
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostMetadata {
    pub message_id: Uuid,
    pub channel_name: String,
    pub author: AgentPath,
    pub thread_id: Uuid,
    pub created_at: DateTime<Utc>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostPreview {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text_preview: String,
    pub n_chars: usize,
    pub truncated: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostContent {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text: String,
    pub n_chars: usize,
    pub next_offset_chars: usize,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadSummary {
    pub thread_id: Uuid,
    pub root_post: PostPreview,
    pub reply_count: usize,
    pub last_activity_at: DateTime<Utc>,
    pub latest_reply: Option<PostPreview>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelSummary {
    /// Absent on boards without ACL metadata; preserve the legacy wire shape.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub permissions: Option<ChannelPermissions>,
    pub channel_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: DateTime<Utc>,
    pub created_by: AgentPath,
    pub message_count: usize,
    pub last_message_id: Option<Uuid>,
}

/// Channel discovery also exposes board actions, including when there are no channels.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPage {
    #[serde(flatten)]
    pub channels: Page<ChannelSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub board_permissions: Option<BoardPermissions>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionState {
    pub channel_name: String,
    pub thread_id: Option<Uuid>,
    pub target_agent: AgentPath,
    pub enabled: bool,
    pub last_message_id: Option<Uuid>,
}

/// A bounded page. Counts and end-of-list markers are derived at serialization.
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub struct Page<T> {
    pub results: Vec<T>,
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadPage {
    pub root_post: PostPreview,
    #[serde(flatten)]
    pub replies: Page<PostPreview>,
}

/// Effective board actions for the authenticated caller, not an ACL definition.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BoardPermissions {
    pub create_channel: bool,
    pub edit_metadata: bool,
    pub manage_permissions: bool,
}

/// Effective channel actions; replying does not imply permission to start a thread.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPermissions {
    pub read: bool,
    pub post: bool,
    pub reply: bool,
    pub edit_metadata: bool,
}

/// A backend denial retained through the board's existing error interface.
#[derive(Clone, Debug, Serialize)]
#[serde(tag = "code", rename = "permission_denied")]
pub struct PermissionDenied {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<String>,
}

Sources

collaboration.search_postsSearch top-level posts and replies, newest first.

Message-board extension installed; AgentMessageBoard + MultiAgentV2 and eligible storage, or explicit host connection. Host chooses namespace (collaboration shown here). Local SQLite, in-memory and remote backends share these contracts.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
after_message_idstringNo
authorstringNoAn absolute agent path or a reference relative to you.
channel_namestringNo
cursorstringNoOpaque next_cursor from the same query. Keep filters and sorting unchanged. Concurrent posts may shift pages; omit the cursor to refresh.
limitintegerNoMaximum results, default 20; output budgets may return fewer. Continue with next_cursor.
max_chars_per_postintegerNoMaximum characters; further capped by output budget. Defaults: limit_chars 20000, max_chars_per_post 1000.
querystringNo
Full input definition
{
  "type": "object",
  "properties": {
    "after_message_id": {
      "type": "string"
    },
    "author": {
      "type": "string",
      "description": "An absolute agent path or a reference relative to you."
    },
    "channel_name": {
      "type": "string"
    },
    "cursor": {
      "type": "string",
      "description": "Opaque next_cursor from the same query. Keep filters and sorting unchanged. Concurrent posts may shift pages; omit the cursor to refresh."
    },
    "limit": {
      "type": "integer",
      "description": "Maximum results, default 20; output budgets may return fewer. Continue with next_cursor."
    },
    "max_chars_per_post": {
      "type": "integer",
      "description": "Maximum characters; further capped by output budget. Defaults: limit_chars 20000, max_chars_per_post 1000."
    },
    "query": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

ResultSource declaration

Full result definition
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostMetadata {
    pub message_id: Uuid,
    pub channel_name: String,
    pub author: AgentPath,
    pub thread_id: Uuid,
    pub created_at: DateTime<Utc>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostPreview {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text_preview: String,
    pub n_chars: usize,
    pub truncated: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostContent {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text: String,
    pub n_chars: usize,
    pub next_offset_chars: usize,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadSummary {
    pub thread_id: Uuid,
    pub root_post: PostPreview,
    pub reply_count: usize,
    pub last_activity_at: DateTime<Utc>,
    pub latest_reply: Option<PostPreview>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelSummary {
    /// Absent on boards without ACL metadata; preserve the legacy wire shape.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub permissions: Option<ChannelPermissions>,
    pub channel_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: DateTime<Utc>,
    pub created_by: AgentPath,
    pub message_count: usize,
    pub last_message_id: Option<Uuid>,
}

/// Channel discovery also exposes board actions, including when there are no channels.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPage {
    #[serde(flatten)]
    pub channels: Page<ChannelSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub board_permissions: Option<BoardPermissions>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionState {
    pub channel_name: String,
    pub thread_id: Option<Uuid>,
    pub target_agent: AgentPath,
    pub enabled: bool,
    pub last_message_id: Option<Uuid>,
}

/// A bounded page. Counts and end-of-list markers are derived at serialization.
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub struct Page<T> {
    pub results: Vec<T>,
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadPage {
    pub root_post: PostPreview,
    #[serde(flatten)]
    pub replies: Page<PostPreview>,
}

/// Effective board actions for the authenticated caller, not an ACL definition.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BoardPermissions {
    pub create_channel: bool,
    pub edit_metadata: bool,
    pub manage_permissions: bool,
}

/// Effective channel actions; replying does not imply permission to start a thread.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPermissions {
    pub read: bool,
    pub post: bool,
    pub reply: bool,
    pub edit_metadata: bool,
}

/// A backend denial retained through the board's existing error interface.
#[derive(Clone, Debug, Serialize)]
#[serde(tag = "code", rename = "permission_denied")]
pub struct PermissionDenied {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<String>,
}

Sources

collaboration.subscribeSubscribe yourself or another agent to a channel for new top-level posts, or to a thread for replies.

Message-board extension installed; AgentMessageBoard + MultiAgentV2 and eligible storage, or explicit host connection. Host chooses namespace (collaboration shown here). Local SQLite, in-memory and remote backends share these contracts.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
channel_namestringNo
target_agentstringNoAn absolute agent path or a reference relative to you.
thread_idstringNo
Full input definition
{
  "type": "object",
  "properties": {
    "channel_name": {
      "type": "string"
    },
    "target_agent": {
      "type": "string",
      "description": "An absolute agent path or a reference relative to you."
    },
    "thread_id": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

ResultSource declaration

Full result definition
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostMetadata {
    pub message_id: Uuid,
    pub channel_name: String,
    pub author: AgentPath,
    pub thread_id: Uuid,
    pub created_at: DateTime<Utc>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostPreview {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text_preview: String,
    pub n_chars: usize,
    pub truncated: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostContent {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text: String,
    pub n_chars: usize,
    pub next_offset_chars: usize,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadSummary {
    pub thread_id: Uuid,
    pub root_post: PostPreview,
    pub reply_count: usize,
    pub last_activity_at: DateTime<Utc>,
    pub latest_reply: Option<PostPreview>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelSummary {
    /// Absent on boards without ACL metadata; preserve the legacy wire shape.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub permissions: Option<ChannelPermissions>,
    pub channel_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: DateTime<Utc>,
    pub created_by: AgentPath,
    pub message_count: usize,
    pub last_message_id: Option<Uuid>,
}

/// Channel discovery also exposes board actions, including when there are no channels.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPage {
    #[serde(flatten)]
    pub channels: Page<ChannelSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub board_permissions: Option<BoardPermissions>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionState {
    pub channel_name: String,
    pub thread_id: Option<Uuid>,
    pub target_agent: AgentPath,
    pub enabled: bool,
    pub last_message_id: Option<Uuid>,
}

/// A bounded page. Counts and end-of-list markers are derived at serialization.
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub struct Page<T> {
    pub results: Vec<T>,
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadPage {
    pub root_post: PostPreview,
    #[serde(flatten)]
    pub replies: Page<PostPreview>,
}

/// Effective board actions for the authenticated caller, not an ACL definition.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BoardPermissions {
    pub create_channel: bool,
    pub edit_metadata: bool,
    pub manage_permissions: bool,
}

/// Effective channel actions; replying does not imply permission to start a thread.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPermissions {
    pub read: bool,
    pub post: bool,
    pub reply: bool,
    pub edit_metadata: bool,
}

/// A backend denial retained through the board's existing error interface.
#[derive(Clone, Debug, Serialize)]
#[serde(tag = "code", rename = "permission_denied")]
pub struct PermissionDenied {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<String>,
}

Sources

collaboration.unsubscribeUnsubscribe yourself or another agent from a channel or thread.

Message-board extension installed; AgentMessageBoard + MultiAgentV2 and eligible storage, or explicit host connection. Host chooses namespace (collaboration shown here). Local SQLite, in-memory and remote backends share these contracts.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
channel_namestringNo
target_agentstringNoAn absolute agent path or a reference relative to you.
thread_idstringNo
Full input definition
{
  "type": "object",
  "properties": {
    "channel_name": {
      "type": "string"
    },
    "target_agent": {
      "type": "string",
      "description": "An absolute agent path or a reference relative to you."
    },
    "thread_id": {
      "type": "string"
    }
  },
  "required": [],
  "additionalProperties": false
}

ResultSource declaration

Full result definition
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostMetadata {
    pub message_id: Uuid,
    pub channel_name: String,
    pub author: AgentPath,
    pub thread_id: Uuid,
    pub created_at: DateTime<Utc>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostPreview {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text_preview: String,
    pub n_chars: usize,
    pub truncated: bool,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PostContent {
    #[serde(flatten)]
    pub metadata: PostMetadata,
    pub text: String,
    pub n_chars: usize,
    pub next_offset_chars: usize,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadSummary {
    pub thread_id: Uuid,
    pub root_post: PostPreview,
    pub reply_count: usize,
    pub last_activity_at: DateTime<Utc>,
    pub latest_reply: Option<PostPreview>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelSummary {
    /// Absent on boards without ACL metadata; preserve the legacy wire shape.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub permissions: Option<ChannelPermissions>,
    pub channel_name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: DateTime<Utc>,
    pub created_by: AgentPath,
    pub message_count: usize,
    pub last_message_id: Option<Uuid>,
}

/// Channel discovery also exposes board actions, including when there are no channels.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPage {
    #[serde(flatten)]
    pub channels: Page<ChannelSummary>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub board_permissions: Option<BoardPermissions>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscriptionState {
    pub channel_name: String,
    pub thread_id: Option<Uuid>,
    pub target_agent: AgentPath,
    pub enabled: bool,
    pub last_message_id: Option<Uuid>,
}

/// A bounded page. Counts and end-of-list markers are derived at serialization.
#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
pub struct Page<T> {
    pub results: Vec<T>,
    pub next_cursor: Option<String>,
}

#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ThreadPage {
    pub root_post: PostPreview,
    #[serde(flatten)]
    pub replies: Page<PostPreview>,
}

/// Effective board actions for the authenticated caller, not an ACL definition.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct BoardPermissions {
    pub create_channel: bool,
    pub edit_metadata: bool,
    pub manage_permissions: bool,
}

/// Effective channel actions; replying does not imply permission to start a thread.
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChannelPermissions {
    pub read: bool,
    pub post: bool,
    pub reply: bool,
    pub edit_metadata: bool,
}

/// A backend denial retained through the board's existing error interface.
#[derive(Clone, Debug, Serialize)]
#[serde(tag = "code", rename = "permission_denied")]
pub struct PermissionDenied {
    pub message: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub resource: Option<String>,
}

Sources

create_goalCreate a persisted thread goal.

App Server goal extension installed with state DB; Goals feature enabled. Mutations validate current goal state and token budget.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
objectivestringYesRequired. The concrete objective to start pursuing. This starts a new active goal when no goal exists or replaces the current goal when it is complete.
token_budgetintegerNoPositive token budget for the new goal. Omit unless explicitly requested.
Full input definition
{
  "type": "object",
  "properties": {
    "objective": {
      "type": "string",
      "description": "Required. The concrete objective to start pursuing. This starts a new active goal when no goal exists or replaces the current goal when it is complete."
    },
    "token_budget": {
      "type": "integer",
      "description": "Positive token budget for the new goal. Omit unless explicitly requested."
    }
  },
  "required": [
    "objective"
  ],
  "additionalProperties": false
}

ResultSource declaration

Serialized implementation response, not an advertised output schema. goal can be null; optional budget report depends on operation.

Full result definition
#[derive(Debug, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
struct GoalToolResponse {
    goal: Option<ThreadGoal>,
    remaining_tokens: Option<i64>,
    completion_budget_report: Option<String>,
}

#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "protocol/")]
pub enum ThreadGoalStatus {
    Active,
    Paused,
    Blocked,
    UsageLimited,
    BudgetLimited,
    Complete,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "protocol/")]
pub struct ThreadGoal {
    pub thread_id: ThreadId,
    pub objective: String,
    pub status: ThreadGoalStatus,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    #[ts(optional)]
    pub token_budget: Option<i64>,
    pub tokens_used: i64,
    pub time_used_seconds: i64,
    pub created_at: i64,
    pub updated_at: i64,
}

Sources

get_goalGet the current goal for this thread, including status, budgets, token and elapsed-time usage, and remaining token budget.

App Server goal extension installed with state DB; Goals feature enabled. Mutations validate current goal state and token budget.

InputJSON Schema

Full input definition
{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}

ResultSource declaration

Serialized implementation response, not an advertised output schema. goal can be null; optional budget report depends on operation.

Full result definition
#[derive(Debug, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
struct GoalToolResponse {
    goal: Option<ThreadGoal>,
    remaining_tokens: Option<i64>,
    completion_budget_report: Option<String>,
}

#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "protocol/")]
pub enum ThreadGoalStatus {
    Active,
    Paused,
    Blocked,
    UsageLimited,
    BudgetLimited,
    Complete,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "protocol/")]
pub struct ThreadGoal {
    pub thread_id: ThreadId,
    pub objective: String,
    pub status: ThreadGoalStatus,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    #[ts(optional)]
    pub token_budget: Option<i64>,
    pub tokens_used: i64,
    pub time_used_seconds: i64,
    pub created_at: i64,
    pub updated_at: i64,
}

Sources

history.list_itemsList history items with optional window, role, and tool filters.

App Server installs history-notes; token_budget.use_history_notes_extension + OpenAI provider + Codex-backend authentication. Hosted storage internals unavailable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
agent_name{"type":"string"} | {"type":"null"}NoAgent whose history to inspect. Omit to use the current agent; otherwise pass an absolute agent name or a name relative to the current agent.
limitintegerNoMaximum number of items to return.
max_chars_per_itemintegerNoMaximum characters returned in each item's truncated_content.
recent_firstbooleanNoWhether to return the most recently created items first.
role{"type":"string","enum":["user","assistant","tool","system","developer"]} | {"type":"null"}NoMessage role to include. Null or omission includes all roles.
tool_name{"type":"string"} | {"type":"null"}NoCallable tool name to include. When set, non-tool messages are excluded.
tool_namespace{"type":"string"} | {"type":"null"}NoCallable namespace to include. When set, non-tool messages are excluded.
window_id{"type":"string"} | {"type":"null"}NoFull window ID. Null or omission includes all windows.
Full input definition
{
  "type": "object",
  "properties": {
    "agent_name": {
      "description": "Agent whose history to inspect. Omit to use the current agent; otherwise pass an absolute agent name or a name relative to the current agent.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "limit": {
      "type": "integer",
      "description": "Maximum number of items to return."
    },
    "max_chars_per_item": {
      "type": "integer",
      "description": "Maximum characters returned in each item's truncated_content."
    },
    "recent_first": {
      "type": "boolean",
      "description": "Whether to return the most recently created items first."
    },
    "role": {
      "description": "Message role to include. Null or omission includes all roles.",
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "user",
            "assistant",
            "tool",
            "system",
            "developer"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "tool_name": {
      "description": "Callable tool name to include. When set, non-tool messages are excluded.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "tool_namespace": {
      "description": "Callable namespace to include. When set, non-tool messages are excluded.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "window_id": {
      "description": "Full window ID. Null or omission includes all windows.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    }
  }
}

ResultPartial contract

Full result definition
Backend JSON Value; optionally encrypted_output: string and images: [{data, mime_type, detail}]

Sources

history.list_windowsList an agent's context windows as window ID and item-count pairs.

App Server installs history-notes; token_budget.use_history_notes_extension + OpenAI provider + Codex-backend authentication. Hosted storage internals unavailable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
agent_name{"type":"string"} | {"type":"null"}NoAgent whose history to inspect. Omit to use the current agent; otherwise pass an absolute agent name or a name relative to the current agent.
limitintegerNoMaximum number of windows to return.
recent_firstbooleanNoWhether to return the most recently created windows first.
Full input definition
{
  "type": "object",
  "properties": {
    "agent_name": {
      "description": "Agent whose history to inspect. Omit to use the current agent; otherwise pass an absolute agent name or a name relative to the current agent.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "limit": {
      "type": "integer",
      "description": "Maximum number of windows to return."
    },
    "recent_first": {
      "type": "boolean",
      "description": "Whether to return the most recently created windows first."
    }
  }
}

ResultPartial contract

Full result definition
Backend JSON Value; optionally encrypted_output: string and images: [{data, mime_type, detail}]

Sources

history.read_itemRead a bounded range from private model-only history.

App Server installs history-notes; token_budget.use_history_notes_extension + OpenAI provider + Codex-backend authentication. Hosted storage internals unavailable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
agent_name{"type":"string"} | {"type":"null"}NoAgent whose history to inspect. Omit to use the current agent; otherwise pass an absolute agent name or a name relative to the current agent.
item_idstringYesThe short item ID is the suffix shown in the target item's trailing [id: ...] marker, printed after that item's content.
limit_charsintegerNoMaximum number of characters to return.
offset_charsintegerNoZero-based character offset at which reading starts.
window_idstringYesFull window ID containing the item.
Full input definition
{
  "type": "object",
  "properties": {
    "agent_name": {
      "description": "Agent whose history to inspect. Omit to use the current agent; otherwise pass an absolute agent name or a name relative to the current agent.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "item_id": {
      "type": "string",
      "description": "The short item ID is the suffix shown in the target item's trailing `[id: ...]` marker, printed after that item's content."
    },
    "limit_chars": {
      "type": "integer",
      "description": "Maximum number of characters to return."
    },
    "offset_chars": {
      "type": "integer",
      "description": "Zero-based character offset at which reading starts."
    },
    "window_id": {
      "type": "string",
      "description": "Full window ID containing the item."
    }
  },
  "required": [
    "item_id",
    "window_id"
  ]
}

ResultPartial contract

Full result definition
Backend JSON Value; optionally encrypted_output: string and images: [{data, mime_type, detail}]

Sources

history.search_contentsSearch private model-only history by literal substring.

App Server installs history-notes; token_budget.use_history_notes_extension + OpenAI provider + Codex-backend authentication. Hosted storage internals unavailable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
agent_name{"type":"string"} | {"type":"null"}NoAgent whose history to inspect. Omit to use the current agent; otherwise pass an absolute agent name or a name relative to the current agent.
limitintegerNoMaximum number of matching items to return.
querystringYesCase-sensitive literal substring to find in item content.
recent_firstbooleanNoWhether to return the most recently created matches first.
role{"type":"string","enum":["user","assistant","tool","system","developer"]} | {"type":"null"}NoMessage role to include. Null or omission includes all roles.
tool_name{"type":"string"} | {"type":"null"}NoCallable tool name to include. When set, non-tool messages are excluded.
tool_namespace{"type":"string"} | {"type":"null"}NoCallable namespace to include. When set, non-tool messages are excluded.
window_id{"type":"string"} | {"type":"null"}NoFull window ID. Null or omission includes all windows.
Full input definition
{
  "type": "object",
  "properties": {
    "agent_name": {
      "description": "Agent whose history to inspect. Omit to use the current agent; otherwise pass an absolute agent name or a name relative to the current agent.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "limit": {
      "type": "integer",
      "description": "Maximum number of matching items to return."
    },
    "query": {
      "type": "string",
      "description": "Case-sensitive literal substring to find in item content.",
      "encrypted": true
    },
    "recent_first": {
      "type": "boolean",
      "description": "Whether to return the most recently created matches first."
    },
    "role": {
      "description": "Message role to include. Null or omission includes all roles.",
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "user",
            "assistant",
            "tool",
            "system",
            "developer"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "tool_name": {
      "description": "Callable tool name to include. When set, non-tool messages are excluded.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "tool_namespace": {
      "description": "Callable namespace to include. When set, non-tool messages are excluded.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "window_id": {
      "description": "Full window ID. Null or omission includes all windows.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "query"
  ]
}

ResultPartial contract

Full result definition
Backend JSON Value; optionally encrypted_output: string and images: [{data, mime_type, detail}]

Sources

image_gen.imagegenGenerate or edit an image using the configured image backend.

Installed image-generation contributor with eligible provider; core requires ImageGeneration, non-Free account, provider image_generation capability, image input modality, and either OpenAI actor authorization or requires_openai_auth with Codex-backend authentication.

InputSource declaration

Full source input declaration. AbsolutePathBuf serializes as an absolute path string. transparent_background defaults false; paths and num_last_images_to_include are alternative edit-reference mechanisms.

Full input definition
#[derive(Debug, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
struct ImagegenArgs {
    prompt: String,
    /// Whether the output should have a transparent background. Defaults to false.
    #[serde(default)]
    transparent_background: bool,
    #[schemars(length(max = 5))]
    referenced_image_paths: Option<Vec<AbsolutePathBuf>>,
    #[schemars(range(min = 1, max = 5))]
    num_last_images_to_include: Option<usize>,
}

ResultImplementation shape

Direct model output is image content; code-mode result exposes image_url and optional output_hint. No advertised output schema. Image bytes are omitted from logs.

Full result definition
struct GeneratedImageOutput {
    result: String,
    output_hint: Option<String>,
}

Sources

memories.add_ad_hoc_noteCreate a timestamped ad-hoc memory note.

Memories extension installed; MemoryTool + memories.use_memories + dedicated_tools. Concrete contributor uses LocalMemoriesBackend; backend trait separately supports custom implementations.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
filenamestringYesName of the note file to create, in YYYY-MM-DDTHH-MM-SS-<slug>.md format. The slug must use only lowercase ASCII letters, digits, and hyphens.
notestringYesVerbatim Markdown note to append to the ad-hoc memory notes.
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "filename": {
      "description": "Name of the note file to create, in YYYY-MM-DDTHH-MM-SS-<slug>.md format. The slug must use only lowercase ASCII letters, digits, and hyphens.",
      "maxLength": 128,
      "minLength": 24,
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d{2}-[a-z0-9][a-z0-9-]{0,79}\\.md$",
      "type": "string"
    },
    "note": {
      "description": "Verbatim Markdown note to append to the ad-hoc memory notes.",
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "filename",
    "note"
  ],
  "type": "object"
}

ResultJSON Schema

Full result definition
{
  "additionalProperties": false,
  "type": "object"
}

Failures and lifecycle

  • List max_results defaults/caps at 2000; search at 200; read max estimated tokens 20000. Backend rejects invalid paths/cursors/queries; IO failures are fatal. Ad-hoc note creation rejects invalid filenames, empty notes and collisions. No runtime probe.

Sources

memories.listPage memory-store entries.

Memories extension installed; MemoryTool + memories.use_memories + dedicated_tools. Concrete contributor uses LocalMemoriesBackend; backend trait separately supports custom implementations.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
cursorstringNo
max_resultsintegerNo
pathstringNo
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "type": "string"
    },
    "max_results": {
      "format": "uint",
      "minimum": 1.0,
      "type": "integer"
    },
    "path": {
      "type": "string"
    }
  },
  "type": "object"
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
entriesarrayYes
[].entry_type"file" | "directory"Yes
[].pathstringYes
next_cursor"string" | "null"No
path"string" | "null"No
truncatedbooleanYes
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "entries": {
      "items": {
        "additionalProperties": false,
        "properties": {
          "entry_type": {
            "enum": [
              "file",
              "directory"
            ],
            "type": "string"
          },
          "path": {
            "type": "string"
          }
        },
        "required": [
          "entry_type",
          "path"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ]
    },
    "path": {
      "type": [
        "string",
        "null"
      ]
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "required": [
    "entries",
    "truncated"
  ],
  "type": "object"
}

Failures and lifecycle

  • List max_results defaults/caps at 2000; search at 200; read max estimated tokens 20000. Backend rejects invalid paths/cursors/queries; IO failures are fatal. Ad-hoc note creation rejects invalid filenames, empty notes and collisions. No runtime probe.

Sources

memories.readRead bounded memory file lines.

Memories extension installed; MemoryTool + memories.use_memories + dedicated_tools. Concrete contributor uses LocalMemoriesBackend; backend trait separately supports custom implementations.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
line_offsetintegerNo
max_linesintegerNo
pathstringYes
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "line_offset": {
      "format": "uint",
      "minimum": 1.0,
      "type": "integer"
    },
    "max_lines": {
      "format": "uint",
      "minimum": 1.0,
      "type": "integer"
    },
    "path": {
      "type": "string"
    }
  },
  "required": [
    "path"
  ],
  "type": "object"
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
contentstringYes
pathstringYes
start_line_numberintegerYes
truncatedbooleanYes
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "content": {
      "type": "string"
    },
    "path": {
      "type": "string"
    },
    "start_line_number": {
      "format": "uint",
      "minimum": 0.0,
      "type": "integer"
    },
    "truncated": {
      "type": "boolean"
    }
  },
  "required": [
    "content",
    "path",
    "start_line_number",
    "truncated"
  ],
  "type": "object"
}

Failures and lifecycle

  • List max_results defaults/caps at 2000; search at 200; read max estimated tokens 20000. Backend rejects invalid paths/cursors/queries; IO failures are fatal. Ad-hoc note creation rejects invalid filenames, empty notes and collisions. No runtime probe.

Sources

multi_env_copy_fileCopy a file between two execution environments.

App Server installs contributor only with MultiEnvCopyFile feature. Source/target must be different ready environments with captured permissions.

InputSource declaration

All four strings required; paths absolute. Source builder advertises additionalProperties=false.

Full input definition
#[derive(Deserialize)]
#[serde(deny_unknown_fields)]
struct CopyFileArgs {
    source_environment_id: String,
    source_path: String,
    target_environment_id: String,
    target_path: String,
}

ResultImplementation shape

Handler JSON acknowledgment; no formal output schema. Failed/interrupted copies may leave a partial target.

Full result definition
{ bytes_copied: number }

Sources

notes.append_to_fileAppend text to private model-only notes.

App Server installs history-notes; token_budget.use_history_notes_extension + OpenAI provider + Codex-backend authentication. Hosted storage internals unavailable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
pathstringYesNote file path to append to.
textstringYesText appended exactly as provided.
Full input definition
{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "Note file path to append to."
    },
    "text": {
      "type": "string",
      "description": "Text appended exactly as provided.",
      "encrypted": true
    }
  },
  "required": [
    "text",
    "path"
  ]
}

ResultPartial contract

Full result definition
Backend JSON Value; optionally encrypted_output: string and images: [{data, mime_type, detail}]

Sources

notes.list_files_by_prefixList private model-only notes by path prefix.

App Server installs history-notes; token_budget.use_history_notes_extension + OpenAI provider + Codex-backend authentication. Hosted storage internals unavailable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
file_order"ascending" | "descending"NoDirection used to order files.
file_order_by"name" | "created_at" | "updated_at"NoField used to order files.
max_resultsintegerNoMaximum number of files to return.
prefix{"type":"string"} | {"type":"null"}NoNote path prefix to list.
Full input definition
{
  "type": "object",
  "properties": {
    "file_order": {
      "type": "string",
      "description": "Direction used to order files.",
      "enum": [
        "ascending",
        "descending"
      ]
    },
    "file_order_by": {
      "type": "string",
      "description": "Field used to order files.",
      "enum": [
        "name",
        "created_at",
        "updated_at"
      ]
    },
    "max_results": {
      "type": "integer",
      "description": "Maximum number of files to return."
    },
    "prefix": {
      "description": "Note path prefix to list.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    }
  }
}

ResultPartial contract

Full result definition
Backend JSON Value; optionally encrypted_output: string and images: [{data, mime_type, detail}]

Sources

notes.read_fileRead all or a line range from private model-only notes.

App Server installs history-notes; token_budget.use_history_notes_extension + OpenAI provider + Codex-backend authentication. Hosted storage internals unavailable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
pathstringYesNote file path to read.
start_line{"type":"integer"} | {"type":"null"}NoFirst line to return, inclusive and 1-based. Negative values count backward from the final line.
stop_line{"type":"integer"} | {"type":"null"}NoLast line to return, inclusive and 1-based. Negative values count backward from the final line.
Full input definition
{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "Note file path to read."
    },
    "start_line": {
      "description": "First line to return, inclusive and 1-based. Negative values count backward from the final line.",
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ]
    },
    "stop_line": {
      "description": "Last line to return, inclusive and 1-based. Negative values count backward from the final line.",
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "path"
  ]
}

ResultPartial contract

Full result definition
Backend JSON Value; optionally encrypted_output: string and images: [{data, mime_type, detail}]

Sources

notes.search_contentsSearch private model-only note lines by literal substring.

App Server installs history-notes; token_budget.use_history_notes_extension + OpenAI provider + Codex-backend authentication. Hosted storage internals unavailable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
max_filesintegerNoMaximum number of matching files returned.
max_matches_per_fileintegerNoMaximum number of matching lines returned per file.
path_prefix{"type":"string"} | {"type":"null"}NoNote path prefix to search.
querystringYesCase-sensitive literal substring to find in note lines.
recent_file_firstbooleanNoWhether to order matching files by creation time, newest first.
Full input definition
{
  "type": "object",
  "properties": {
    "max_files": {
      "type": "integer",
      "description": "Maximum number of matching files returned."
    },
    "max_matches_per_file": {
      "type": "integer",
      "description": "Maximum number of matching lines returned per file."
    },
    "path_prefix": {
      "description": "Note path prefix to search.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "query": {
      "type": "string",
      "description": "Case-sensitive literal substring to find in note lines.",
      "encrypted": true
    },
    "recent_file_first": {
      "type": "boolean",
      "description": "Whether to order matching files by creation time, newest first."
    }
  },
  "required": [
    "query"
  ]
}

ResultPartial contract

Full result definition
Backend JSON Value; optionally encrypted_output: string and images: [{data, mime_type, detail}]

Sources

notes.write_fileCreate or replace private model-only notes.

App Server installs history-notes; token_budget.use_history_notes_extension + OpenAI provider + Codex-backend authentication. Hosted storage internals unavailable.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
pathstringYesNote file path to create or replace.
textstringYesComplete replacement text for the file.
Full input definition
{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "Note file path to create or replace."
    },
    "text": {
      "type": "string",
      "description": "Complete replacement text for the file.",
      "encrypted": true
    }
  },
  "required": [
    "text",
    "path"
  ]
}

ResultPartial contract

Full result definition
Backend JSON Value; optionally encrypted_output: string and images: [{data, mime_type, detail}]

Sources

skills.installationsPage installations for a skill package.

Installed skills extension with SkillsStepState.tools_enabled; installations and source-aware read require discovery_v2. Executor, host, cloud and custom providers are framework kinds; concrete App Server registers executor/host and optional cloud. Model tools select supported cloud/executor authorities.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
cursorstringNo
packagestringYes
source{"additionalProperties":false,"properties":{"kind":{"enum":["cloud"],"type":"string"}},"required":["kind"],"type":"object"} | {"additionalProperties":false,"properties":{"environment_id":{"type":"string"},"kind":{"enum":["executor"],"type":"string"}},"required":["environment_id","kind"],"type":"object"}No
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "type": "string"
    },
    "package": {
      "type": "string"
    },
    "source": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "kind": {
              "enum": [
                "cloud"
              ],
              "type": "string"
            }
          },
          "required": [
            "kind"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "environment_id": {
              "type": "string"
            },
            "kind": {
              "enum": [
                "executor"
              ],
              "type": "string"
            }
          },
          "required": [
            "environment_id",
            "kind"
          ],
          "type": "object"
        }
      ]
    }
  },
  "required": [
    "package"
  ],
  "type": "object"
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
installationsarrayYes
next_cursor"string" | "null"No
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "installations": {
      "items": {
        "anyOf": [
          {
            "additionalProperties": false,
            "properties": {
              "package": {
                "type": "string"
              },
              "resource": {
                "type": "string"
              }
            },
            "required": [
              "package",
              "resource"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "environment_id": {
                "type": "string"
              },
              "skill_root": {
                "type": "string"
              }
            },
            "required": [
              "environment_id",
              "skill_root"
            ],
            "type": "object"
          }
        ]
      },
      "type": "array"
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "installations"
  ],
  "type": "object"
}

Failures and lifecycle

  • Pagination uses opaque cursors; bounded responses may contain warnings/next_cursor. Handle/cursor/source validation can fail independently of provider IO; provider registration does not establish hosted availability.

Sources

skills.listPage a selected skill authority catalog.

Installed skills extension with SkillsStepState.tools_enabled; installations and source-aware read require discovery_v2. Executor, host, cloud and custom providers are framework kinds; concrete App Server registers executor/host and optional cloud. Model tools select supported cloud/executor authorities.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
authority{"additionalProperties":false,"properties":{"kind":{"enum":["cloud"],"type":"string"}},"required":["kind"],"type":"object"} | {"additionalProperties":false,"properties":{"kind":{"enum":["executor"],"type":"string"}},"required":["kind"],"type":"object"}Yes
cursorstringNo
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "authority": {
      "oneOf": [
        {
          "additionalProperties": false,
          "properties": {
            "kind": {
              "enum": [
                "cloud"
              ],
              "type": "string"
            }
          },
          "required": [
            "kind"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "kind": {
              "enum": [
                "executor"
              ],
              "type": "string"
            }
          },
          "required": [
            "kind"
          ],
          "type": "object"
        }
      ]
    },
    "cursor": {
      "type": "string"
    }
  },
  "required": [
    "authority"
  ],
  "type": "object"
}

ResultJSON Schema

FieldTypeRequiredMeaning and defaults
next_cursor"string" | "null"No
skillsarrayYes
[].authorityobject | objectYes
[].descriptionstringYes
[].main_resourcestringYes
[].namestringYes
[].packagestringYes
warningsarrayYes
Full result definition
{
  "additionalProperties": false,
  "properties": {
    "next_cursor": {
      "type": [
        "string",
        "null"
      ]
    },
    "skills": {
      "items": {
        "additionalProperties": false,
        "properties": {
          "authority": {
            "oneOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "kind": {
                    "enum": [
                      "cloud"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "kind"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "kind": {
                    "enum": [
                      "executor"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "kind"
                ],
                "type": "object"
              }
            ]
          },
          "description": {
            "type": "string"
          },
          "main_resource": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "package": {
            "type": "string"
          }
        },
        "required": [
          "authority",
          "description",
          "main_resource",
          "name",
          "package"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "warnings": {
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "skills",
    "warnings"
  ],
  "type": "object"
}

Failures and lifecycle

  • Pagination uses opaque cursors; bounded responses may contain warnings/next_cursor. Handle/cursor/source validation can fail independently of provider IO; provider registration does not establish hosted availability.

Sources

skills.readRead a skill resource.

Installed skills extension with SkillsStepState.tools_enabled; installations and source-aware read require discovery_v2. Executor, host, cloud and custom providers are framework kinds; concrete App Server registers executor/host and optional cloud. Model tools select supported cloud/executor authorities.

InputJSON Schema

Reference union of legacy and discovery_v2 constructor schemas. Runtime advertises one variant; discovery_v2 adds source/installation metadata. SkillLocator is exposed as String via schemars(with="String").

Full input definition
{
  "anyOf": [
    {
      "properties": {
        "cursor": {
          "type": "string"
        },
        "package": {
          "type": "string"
        },
        "resource": {
          "type": "string"
        }
      },
      "required": [
        "package"
      ],
      "type": "object"
    },
    {
      "properties": {
        "cursor": {
          "type": "string"
        },
        "package": {
          "type": "string"
        },
        "resource": {
          "type": "string"
        },
        "source": {
          "oneOf": [
            {
              "additionalProperties": false,
              "properties": {
                "kind": {
                  "enum": [
                    "cloud"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "kind"
              ],
              "type": "object"
            },
            {
              "additionalProperties": false,
              "properties": {
                "environment_id": {
                  "type": "string"
                },
                "kind": {
                  "enum": [
                    "executor"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "environment_id",
                "kind"
              ],
              "type": "object"
            }
          ]
        }
      },
      "required": [
        "package"
      ],
      "type": "object"
    }
  ]
}

ResultJSON Schema

Reference union of legacy and discovery_v2 constructor schemas. Runtime advertises one variant; discovery_v2 adds source/installation metadata. SkillLocator is exposed as String via schemars(with="String").

Full result definition
{
  "anyOf": [
    {
      "properties": {
        "contents": {
          "type": "string"
        },
        "next_cursor": {
          "type": [
            "string",
            "null"
          ]
        },
        "resource": {
          "type": "string"
        },
        "skill_root": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "contents",
        "resource"
      ],
      "type": "object"
    },
    {
      "properties": {
        "contents": {
          "type": "string"
        },
        "installations": {
          "items": {
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "package": {
                    "type": "string"
                  },
                  "resource": {
                    "type": "string"
                  }
                },
                "required": [
                  "package",
                  "resource"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "environment_id": {
                    "type": "string"
                  },
                  "skill_root": {
                    "type": "string"
                  }
                },
                "required": [
                  "environment_id",
                  "skill_root"
                ],
                "type": "object"
              }
            ]
          },
          "type": "array"
        },
        "installations_truncated": {
          "type": "boolean"
        },
        "next_cursor": {
          "type": [
            "string",
            "null"
          ]
        },
        "resource": {
          "type": "string"
        }
      },
      "required": [
        "contents",
        "installations",
        "installations_truncated",
        "resource"
      ],
      "type": "object"
    }
  ]
}

Failures and lifecycle

  • Pagination uses opaque cursors; bounded responses may contain warnings/next_cursor. Handle/cursor/source validation can fail independently of provider IO; provider registration does not establish hosted availability.

Sources

update_goalUpdate the current goal status.

App Server goal extension installed with state DB; Goals feature enabled. Mutations validate current goal state and token budget.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
status"complete" | "blocked" | "paused"YesRequired. paused requires an explicit user request. Set to complete only when the objective is achieved and no required work remains. Set to blocked only after the same blocking condition has recurred for at least three consecutive goal turns and the agent is at an impasse. After a previously blocked goal is resumed, the resumed run starts a fresh blocked audit.
Full input definition
{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "description": "Required. `paused` requires an explicit user request. Set to `complete` only when the objective is achieved and no required work remains. Set to `blocked` only after the same blocking condition has recurred for at least three consecutive goal turns and the agent is at an impasse. After a previously blocked goal is resumed, the resumed run starts a fresh blocked audit.",
      "enum": [
        "complete",
        "blocked",
        "paused"
      ]
    }
  },
  "required": [
    "status"
  ],
  "additionalProperties": false
}

ResultSource declaration

Serialized implementation response, not an advertised output schema. goal can be null; optional budget report depends on operation.

Full result definition
#[derive(Debug, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
struct GoalToolResponse {
    goal: Option<ThreadGoal>,
    remaining_tokens: Option<i64>,
    completion_budget_report: Option<String>,
}

#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "protocol/")]
pub enum ThreadGoalStatus {
    Active,
    Paused,
    Blocked,
    UsageLimited,
    BudgetLimited,
    Complete,
}

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq, JsonSchema, TS)]
#[serde(rename_all = "camelCase")]
#[ts(export_to = "protocol/")]
pub struct ThreadGoal {
    pub thread_id: ThreadId,
    pub objective: String,
    pub status: ThreadGoalStatus,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    #[ts(optional)]
    pub token_budget: Option<i64>,
    pub tokens_used: i64,
    pub time_used_seconds: i64,
    pub created_at: i64,
    pub updated_at: i64,
}

Sources

web.runExecute standalone search, page, image, PDF, finance, weather, sports or time commands.

Registered web-search contributor; eligible OpenAI/actor/custom supports_standalone_web_search provider and web search not disabled. Core chooses StandaloneWebSearch or compatible model metadata; hosted web_search is a separate alternative.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
clickarrayNoOpen links from previously opened pages.
[].idintegerYesNumbered link id to open.
[].ref_idstringYesReference id containing the numbered link.
financearrayNoLook up prices for the given stock symbols.
[].marketstringNoISO 3166-1 alpha-3 country code, "OTC", or "" for cryptocurrency.
[].tickerstringYesTicker symbol to look up.
[].type"equity" | "fund" | "crypto" | "index"YesAsset type to look up.
findarrayNoFind text patterns in pages.
[].patternstringYesText pattern to find.
[].ref_idstringYesReference id or URL to search within.
image_queryarrayNoQuery the image search engine for a given list of queries.
[].domainsstring[]NoWhether to filter by a specific list of domains.
[].qstringYesSearch query.
[].recencyintegerNoWhether to filter by recency, as a number of recent days.
openarrayNoOpen pages by reference id or URL.
[].linenointegerNoLine number to position the page at.
[].ref_idstringYesReference id or URL to open.
response_length"short" | "medium" | "long"NoSet the length of the response to be returned.
screenshotarrayNoTake screenshots of PDF pages.
[].pagenointegerYesZero-indexed PDF page number.
[].ref_idstringYesReference id or URL to screenshot.
search_queryarrayNoQuery the internet search engine for a given list of queries.
[].domainsstring[]NoWhether to filter by a specific list of domains.
[].qstringYesSearch query.
[].recencyintegerNoWhether to filter by recency, as a number of recent days.
sportsarrayNoLook up sports schedules and standings.
[].date_fromstringNoStart date in YYYY-MM-DD format.
[].date_tostringNoEnd date in YYYY-MM-DD format.
[].fn"schedule" | "standings"YesSports function to call.
[].league"nba" | "wnba" | "nfl" | "nhl" | "mlb" | "epl" | "ncaamb" | "ncaawb" | "ipl"YesLeague to look up.
[].localestringNoLocale for the lookup.
[].num_gamesintegerNoNumber of games to return.
[].opponentstringNoOpponent to use with team when narrowing the lookup.
[].teamstringNoTeam to look up, using the common 3 or 4 letter alias used in broadcasts.
[].tool"sports"NoTool name for sports requests.
timearrayNoGet time for the given UTC offsets.
[].utc_offsetstringYesUTC offset formatted like "+03:00".
weatherarrayNoLook up weather forecasts.
[].durationintegerNoNumber of days to return. Defaults to 7.
[].locationstringYesLocation in "Country, Area, City" format.
[].startstringNoStart date in YYYY-MM-DD format. Defaults to today.
Full input definition
{
  "properties": {
    "click": {
      "description": "Open links from previously opened pages.",
      "items": {
        "properties": {
          "id": {
            "description": "Numbered link id to open.",
            "format": "uint64",
            "minimum": 0.0,
            "type": "integer"
          },
          "ref_id": {
            "description": "Reference id containing the numbered link.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "ref_id"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "finance": {
      "description": "Look up prices for the given stock symbols.",
      "items": {
        "properties": {
          "market": {
            "description": "ISO 3166-1 alpha-3 country code, \"OTC\", or \"\" for cryptocurrency.",
            "type": "string"
          },
          "ticker": {
            "description": "Ticker symbol to look up.",
            "type": "string"
          },
          "type": {
            "description": "Asset type to look up.",
            "enum": [
              "equity",
              "fund",
              "crypto",
              "index"
            ],
            "type": "string"
          }
        },
        "required": [
          "ticker",
          "type"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "find": {
      "description": "Find text patterns in pages.",
      "items": {
        "properties": {
          "pattern": {
            "description": "Text pattern to find.",
            "type": "string"
          },
          "ref_id": {
            "description": "Reference id or URL to search within.",
            "type": "string"
          }
        },
        "required": [
          "pattern",
          "ref_id"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "image_query": {
      "description": "Query the image search engine for a given list of queries.",
      "items": {
        "properties": {
          "domains": {
            "description": "Whether to filter by a specific list of domains.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "q": {
            "description": "Search query.",
            "type": "string"
          },
          "recency": {
            "description": "Whether to filter by recency, as a number of recent days.",
            "format": "uint64",
            "minimum": 0.0,
            "type": "integer"
          }
        },
        "required": [
          "q"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "open": {
      "description": "Open pages by reference id or URL.",
      "items": {
        "properties": {
          "lineno": {
            "description": "Line number to position the page at.",
            "format": "uint64",
            "minimum": 0.0,
            "type": "integer"
          },
          "ref_id": {
            "description": "Reference id or URL to open.",
            "type": "string"
          }
        },
        "required": [
          "ref_id"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "response_length": {
      "description": "Set the length of the response to be returned.",
      "enum": [
        "short",
        "medium",
        "long"
      ],
      "type": "string"
    },
    "screenshot": {
      "description": "Take screenshots of PDF pages.",
      "items": {
        "properties": {
          "pageno": {
            "description": "Zero-indexed PDF page number.",
            "format": "uint64",
            "minimum": 0.0,
            "type": "integer"
          },
          "ref_id": {
            "description": "Reference id or URL to screenshot.",
            "type": "string"
          }
        },
        "required": [
          "pageno",
          "ref_id"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "search_query": {
      "description": "Query the internet search engine for a given list of queries.",
      "items": {
        "properties": {
          "domains": {
            "description": "Whether to filter by a specific list of domains.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "q": {
            "description": "Search query.",
            "type": "string"
          },
          "recency": {
            "description": "Whether to filter by recency, as a number of recent days.",
            "format": "uint64",
            "minimum": 0.0,
            "type": "integer"
          }
        },
        "required": [
          "q"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "sports": {
      "description": "Look up sports schedules and standings.",
      "items": {
        "properties": {
          "date_from": {
            "description": "Start date in YYYY-MM-DD format.",
            "type": "string"
          },
          "date_to": {
            "description": "End date in YYYY-MM-DD format.",
            "type": "string"
          },
          "fn": {
            "description": "Sports function to call.",
            "enum": [
              "schedule",
              "standings"
            ],
            "type": "string"
          },
          "league": {
            "description": "League to look up.",
            "enum": [
              "nba",
              "wnba",
              "nfl",
              "nhl",
              "mlb",
              "epl",
              "ncaamb",
              "ncaawb",
              "ipl"
            ],
            "type": "string"
          },
          "locale": {
            "description": "Locale for the lookup.",
            "type": "string"
          },
          "num_games": {
            "description": "Number of games to return.",
            "format": "uint64",
            "minimum": 0.0,
            "type": "integer"
          },
          "opponent": {
            "description": "Opponent to use with `team` when narrowing the lookup.",
            "type": "string"
          },
          "team": {
            "description": "Team to look up, using the common 3 or 4 letter alias used in broadcasts.",
            "type": "string"
          },
          "tool": {
            "description": "Tool name for sports requests.",
            "enum": [
              "sports"
            ],
            "type": "string"
          }
        },
        "required": [
          "fn",
          "league"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "time": {
      "description": "Get time for the given UTC offsets.",
      "items": {
        "properties": {
          "utc_offset": {
            "description": "UTC offset formatted like \"+03:00\".",
            "type": "string"
          }
        },
        "required": [
          "utc_offset"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "weather": {
      "description": "Look up weather forecasts.",
      "items": {
        "properties": {
          "duration": {
            "description": "Number of days to return. Defaults to 7.",
            "format": "uint64",
            "minimum": 0.0,
            "type": "integer"
          },
          "location": {
            "description": "Location in \"Country, Area, City\" format.",
            "type": "string"
          },
          "start": {
            "description": "Start date in YYYY-MM-DD format. Defaults to today.",
            "type": "string"
          }
        },
        "required": [
          "location"
        ],
        "type": "object"
      },
      "type": "array"
    }
  },
  "type": "object"
}

ResultFree-form result

Plaintext FunctionCallOutput content. Citations and domain-specific text are service outputs, not a stable result object schema.

Full result definition
SearchOutput { output: String }

Sources

Host app

Injected by the Codex TUI into the threads it runs.

codex_tui.create_threadCreate and start a task.

TUI tool_specs() injects a DynamicToolSpec namespace into its App Server thread. Delegation tools can be filtered by non_delegation_tool_specs(); not a core or universal desktop tool.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
modelstringNo
promptstringYesMaximum 1,000 UTF-8 bytes.
titlestringNo
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "model": {
      "minLength": 1,
      "type": "string"
    },
    "prompt": {
      "description": "Maximum 1,000 UTF-8 bytes.",
      "maxLength": 1000,
      "minLength": 1,
      "type": "string"
    },
    "title": {
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "prompt"
  ],
  "type": "object"
}

ResultSchema unavailable

Sources

codex_tui.fork_threadFork a task.

TUI tool_specs() injects a DynamicToolSpec namespace into its App Server thread. Delegation tools can be filtered by non_delegation_tool_specs(); not a core or universal desktop tool.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
threadIdstringNo
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "threadId": {
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [],
  "type": "object"
}

ResultSchema unavailable

Sources

codex_tui.list_archived_threadsList archived tasks.

TUI tool_specs() injects a DynamicToolSpec namespace into its App Server thread. Delegation tools can be filtered by non_delegation_tool_specs(); not a core or universal desktop tool.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
cursorstringNo
limitintegerNo
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "type": "string"
    },
    "limit": {
      "maximum": 50,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [],
  "type": "object"
}

ResultSchema unavailable

Sources

codex_tui.list_threadsList active tasks.

TUI tool_specs() injects a DynamicToolSpec namespace into its App Server thread. Delegation tools can be filtered by non_delegation_tool_specs(); not a core or universal desktop tool.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
limitintegerNo
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "limit": {
      "maximum": 50,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [],
  "type": "object"
}

ResultSchema unavailable

Sources

codex_tui.read_threadRead a task page.

TUI tool_specs() injects a DynamicToolSpec namespace into its App Server thread. Delegation tools can be filtered by non_delegation_tool_specs(); not a core or universal desktop tool.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
cursorstringNo
includeOutputsbooleanNo
maxOutputCharsPerItemintegerNo
threadIdstringYes
turnLimitintegerNo
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "cursor": {
      "type": "string"
    },
    "includeOutputs": {
      "type": "boolean"
    },
    "maxOutputCharsPerItem": {
      "maximum": 20000,
      "minimum": 0,
      "type": "integer"
    },
    "threadId": {
      "minLength": 1,
      "type": "string"
    },
    "turnLimit": {
      "maximum": 10,
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "threadId"
  ],
  "type": "object"
}

ResultSchema unavailable

Sources

codex_tui.send_message_to_threadSend a prompt to a task.

TUI tool_specs() injects a DynamicToolSpec namespace into its App Server thread. Delegation tools can be filtered by non_delegation_tool_specs(); not a core or universal desktop tool.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
modelstringNo
promptstringYesMaximum 1,000 UTF-8 bytes.
threadIdstringYes
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "model": {
      "minLength": 1,
      "type": "string"
    },
    "prompt": {
      "description": "Maximum 1,000 UTF-8 bytes.",
      "maxLength": 1000,
      "minLength": 1,
      "type": "string"
    },
    "threadId": {
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "threadId",
    "prompt"
  ],
  "type": "object"
}

ResultSchema unavailable

Sources

codex_tui.set_thread_archivedArchive or restore a task.

TUI tool_specs() injects a DynamicToolSpec namespace into its App Server thread. Delegation tools can be filtered by non_delegation_tool_specs(); not a core or universal desktop tool.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
archivedbooleanYes
threadIdstringNo
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "archived": {
      "type": "boolean"
    },
    "threadId": {
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "archived"
  ],
  "type": "object"
}

ResultSchema unavailable

Sources

codex_tui.set_thread_titleRename a task.

TUI tool_specs() injects a DynamicToolSpec namespace into its App Server thread. Delegation tools can be filtered by non_delegation_tool_specs(); not a core or universal desktop tool.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
threadIdstringNo
titlestringYes
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "threadId": {
      "minLength": 1,
      "type": "string"
    },
    "title": {
      "minLength": 1,
      "type": "string"
    }
  },
  "required": [
    "title"
  ],
  "type": "object"
}

ResultSchema unavailable

Sources

codex_tui.wait_threadsWait for task progress.

TUI tool_specs() injects a DynamicToolSpec namespace into its App Server thread. Delegation tools can be filtered by non_delegation_tool_specs(); not a core or universal desktop tool.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
targetsarrayYes
[].afterCursorstringNo
[].threadIdstringYes
timeoutMsintegerNo
Full input definition
{
  "additionalProperties": false,
  "properties": {
    "targets": {
      "items": {
        "additionalProperties": false,
        "properties": {
          "afterCursor": {
            "type": "string"
          },
          "threadId": {
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "threadId"
        ],
        "type": "object"
      },
      "maxItems": 8,
      "minItems": 1,
      "type": "array"
    },
    "timeoutMs": {
      "maximum": 120000,
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "targets"
  ],
  "type": "object"
}

ResultSchema unavailable

Sources

MCP client

Work with resources on connected MCP servers.

list_mcp_resource_templatesLists resource templates provided by MCP servers.

Configured MCP servers or CodeModeOnly mode. These are native MCP resource client helpers, not server tools/list results. Model catalog may override parameters.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
cursorstringNoOpaque cursor from a previous list_mcp_resource_templates call; omit for the first page.
serverstringNoMCP server name. Omit to list resource templates from every configured server.
Full input definition
{
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "description": "Opaque cursor from a previous list_mcp_resource_templates call; omit for the first page."
    },
    "server": {
      "type": "string",
      "description": "MCP server name. Omit to list resource templates from every configured server."
    }
  },
  "additionalProperties": false
}

ResultSource declaration

Implementation serde envelope: camelCase list keys (nextCursor/resourceTemplates), server tagging and flattened resource records. Referenced Resource/ResourceTemplate/ReadResourceResult come from rmcp protocol types; server content remains dynamic, not exhaustively reproduced here.

Full result definition
#[derive(Debug, Serialize)]
struct ResourceWithServer<T> {
    server: String,
    #[serde(flatten)]
    resource: T,
}

#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
struct ListResourceTemplatesPayload {
    #[serde(skip_serializing_if = "Option::is_none")]
    server: Option<String>,
    resource_templates: Vec<ResourceWithServer<ResourceTemplate>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    next_cursor: Option<String>,
}

Sources

list_mcp_resourcesLists resources provided by MCP servers.

Configured MCP servers or CodeModeOnly mode. These are native MCP resource client helpers, not server tools/list results. Model catalog may override parameters.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
cursorstringNoOpaque cursor from a previous list_mcp_resources call; omit for the first page.
serverstringNoMCP server name. Omit to list resources from every configured server.
Full input definition
{
  "type": "object",
  "properties": {
    "cursor": {
      "type": "string",
      "description": "Opaque cursor from a previous list_mcp_resources call; omit for the first page."
    },
    "server": {
      "type": "string",
      "description": "MCP server name. Omit to list resources from every configured server."
    }
  },
  "additionalProperties": false
}

ResultSource declaration

Implementation serde envelope: camelCase list keys (nextCursor/resourceTemplates), server tagging and flattened resource records. Referenced Resource/ResourceTemplate/ReadResourceResult come from rmcp protocol types; server content remains dynamic, not exhaustively reproduced here.

Full result definition
#[derive(Debug, Serialize)]
struct ResourceWithServer<T> {
    server: String,
    #[serde(flatten)]
    resource: T,
}

#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
struct ListResourcesPayload {
    #[serde(skip_serializing_if = "Option::is_none")]
    server: Option<String>,
    resources: Vec<ResourceWithServer<Resource>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    next_cursor: Option<String>,
}

Sources

read_mcp_resourceRead a specific resource from an MCP server given the server name and resource URI.

Configured MCP servers or CodeModeOnly mode. These are native MCP resource client helpers, not server tools/list results. Model catalog may override parameters.

InputJSON Schema

FieldTypeRequiredMeaning and defaults
serverstringYesMCP server name exactly as configured. Must match the 'server' field returned by list_mcp_resources.
uristringYesResource URI to read. Must be one of the URIs returned by list_mcp_resources.
Full input definition
{
  "type": "object",
  "properties": {
    "server": {
      "type": "string",
      "description": "MCP server name exactly as configured. Must match the 'server' field returned by list_mcp_resources."
    },
    "uri": {
      "type": "string",
      "description": "Resource URI to read. Must be one of the URIs returned by list_mcp_resources."
    }
  },
  "required": [
    "server",
    "uri"
  ],
  "additionalProperties": false
}

ResultSource declaration

Implementation serde envelope: camelCase list keys (nextCursor/resourceTemplates), server tagging and flattened resource records. Referenced Resource/ResourceTemplate/ReadResourceResult come from rmcp protocol types; server content remains dynamic, not exhaustively reproduced here.

Full result definition
#[derive(Debug, Serialize)]
struct ResourceWithServer<T> {
    server: String,
    #[serde(flatten)]
    resource: T,
}

#[derive(Debug, Serialize)]
struct ReadResourcePayload {
    server: String,
    uri: String,
    #[serde(flatten)]
    result: ReadResourceResult,
}

Sources

user_message.read_messagesGuardian conversation-history adapter over a host-owned Apps MCP tool.

Guardian review session; parent Apps + GuardianConversationHistoryTools; live parent binding contains user_message.read_messages. Not a standalone fixed-schema native implementation.

InputSchema unavailable

Input schema copied from the live parent MCP catalog; not available in the public static source.

ResultSchema unavailable

Live MCP result bounded by guardian_conversation_history_max_output_tokens (default 4000); server result schema unavailable.

Sources

user_message.search_messagesGuardian conversation-history adapter over a host-owned Apps MCP tool.

Guardian review session; parent Apps + GuardianConversationHistoryTools; live parent binding contains user_message.search_messages. Not a standalone fixed-schema native implementation.

InputSchema unavailable

Input schema copied from the live parent MCP catalog; not available in the public static source.

ResultSchema unavailable

Live MCP result bounded by guardian_conversation_history_max_output_tokens (default 4000); server result schema unavailable.

Sources

Provider-hosted

Run by the model provider rather than the harness.

How the Codex CLI contracts were sourced

Checked 2026-10-27 against source revision 6aaac694803004a63c6f393d153c96d22521a6b9. Inputs: 70 JSON Schema; 2 Source declaration; 2 Freeform grammar; 3 Schema unavailable. Results: 21 JSON Schema; 19 Source declaration; 6 Implementation shape; 10 Free-form result; 9 Partial contract; 12 Schema unavailable.

  • No model-driven runtime probe was run.
  • Arbitrary host extensions, dynamic tools, MCP servers and future/closed-source tools are open-ended; universal inventory completeness is not claimed.
  • Hosted service internals and runtime catalog overrides are not established by source/type inspection.
  • FunctionCallError::RespondToModel produces a model-facing error; fatal infrastructure failures abort execution. Tool approval, hook, sandbox and cancellation outcomes are separate from a successful result; no error union is implied by an output schema.
  • Source constructor JSON Schema. Defaults and bounds in descriptions are prose unless a validation keyword also encodes them.
  • Exact TUI tool_specs builder properties/required/bounds, evaluated in isolation. Host handler uses camelCase keys. ListArguments accepts cursor internally, but list_threads advertises limit only.
  • Host returns per-operation JSON/content and success flags. Formal exhaustive result schema unavailable; see dynamic tool handler.
  • Implementation serde types. create_channel -> ChannelSummary; get_channels -> ChannelPage; list_threads -> Page<ThreadSummary>; search_posts -> Page<PostPreview>; read_thread -> ThreadPage; read_post -> PostContent; post -> PostMetadata; subscribe/unsubscribe -> SubscriptionState. Page serializes results,n_returned,has_more,next_cursor. AgentPath/UUID are string identities and DateTime UTC is serialized timestamp.
  • Arguments over 128 KiB rejected; responses bounded to 8000 bytes or caller budget. PermissionDenied produces {error:{code:"permission_denied",message,action?,resource?,truncated?}} with success=false, preserving backend denial. Notifications do not start idle agents.
  • Client handles encrypted output and separates image attachments. Hosted service result fields, complete error union and server enforcement are unavailable; do not invent domain result schemas.
  • Generated from unchanged serde/schemars source declarations with schemars 0.8.22 and the source schema_for transform (option_add_null_type=false). This is isolated contract generation, not a runtime tool probe.
  • Generated from source output types and output_schema_for(option_add_null_type=true); not an error/denial union.

Claude Code 2.1.310

56 tools.

Built in

Part of the harness. Each entry says what turns it on.

AgentDelegate work to a subagent.

CLI/SDK tool; own context and subagent allow/deny limits. Named calls can address teammates; forks and remote isolation have separate gates.

Aliases and version differences: Task (accepted compatibility alias; SDKSystemMessage init may still report Task, per publisher SDK docs)

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
descriptionstringYesA short (3-5 word) description of the task
promptstringYesThe task for the agent to perform
subagent_typestringNoThe type of specialized agent to use for this task
model"sonnet" | "opus" | "haiku" | "fable"NoOptional model override for this agent. Takes precedence over the agent definition's model frontmatter and the configured default subagent model. If omitted, uses the agent definition's model, else the default (inherits from the parent unless a default subagent model is configured). Ignored for subagent_type: "fork" — forks always inherit the parent model.
effort"low" | "medium" | "high" | "xhigh" | "max"NoReasoning effort for this agent. Set this ONLY when the user, or instructions such as CLAUDE.md or a skill, explicitly ask that this agent or delegated work run at a specific effort level, never on your own judgment; otherwise omit it and the agent runs at its usual effort. Ignored for subagent_type: "fork": a fork runs at your own effort.
run_in_backgroundbooleanNoAgents run in the background by default; you will be notified when one completes. Set to false only when your very next action depends on this agent's result and nothing else could usefully happen while it runs — otherwise leave it in the background so the user can hand you other work.
namestringNoName for the spawned agent. Makes it addressable via SendMessage({to: name}) while running.
team_namestringNoDeprecated; ignored. The session has a single implicit team.
mode"acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan"NoDeprecated; ignored. Subagents inherit the parent session's permission mode; agent-definition frontmatter may override it.
isolation"worktree" | "remote"NoIsolation mode. "worktree" creates a temporary git worktree so the agent works on an isolated copy of the repo. "remote" launches the agent in a remote cloud environment (always runs in background; availability is gated).
Full input definition
export interface AgentInput {
    description: string;
    prompt: string;
    subagent_type?: string;
    model?: "sonnet" | "opus" | "haiku" | "fable";
    effort?: "low" | "medium" | "high" | "xhigh" | "max";
    run_in_background?: boolean;
    name?: string;
    team_name?: string;
    mode?: "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan";
    isolation?: "worktree" | "remote";
}

ResultPublished TypeScript

Full result definition
export type AgentOutput = {
    agentId: string;
    agentType?: string;
    content: {
        type: "text";
        text: string;
        citations?: unknown[] | null;
    }[];
    resolvedModel?: string;
    modelsUsed?: string[];
    totalToolUseCount: number;
    totalDurationMs: number;
    totalTokens: number;
    usage: {
        input_tokens: number;
        output_tokens: number;
        cache_creation_input_tokens: number | null;
        cache_read_input_tokens: number | null;
        server_tool_use: {
            web_search_requests: number;
            web_fetch_requests: number;
        } | null;
        service_tier: string | null;
        cache_creation: {
            ephemeral_1h_input_tokens: number;
            ephemeral_5m_input_tokens: number;
        } | null;
        inference_geo?: string | null;
        speed?: string | null;
        iterations?: unknown;
        output_tokens_details?: {
            thinking_tokens?: number | null;
        } | null;
        fallback_credit?: unknown;
    };
    toolStats?: {
        readCount: number;
        searchCount: number;
        bashCount: number;
        editFileCount: number;
        linesAdded: number;
        linesRemoved: number;
        otherToolCount: number;
        frameCount?: number;
    };
    status: "completed";
    prompt: string;
    worktreePath?: string;
    worktreeBranch?: string;
} | {
    status: "async_launched";
    isAsync?: true;
    agentId: string;
    description: string;
    resolvedModel?: string;
    modelsUsed?: string[];
    prompt: string;
    outputFile: string;
    canReadOutputFile?: boolean;
} | {
    status: "remote_launched";
    taskId: string;
    sessionUrl: string;
    description: string;
    prompt: string;
    outputFile: string;
};

Sources

ArtifactPublish a file as an artifact.

Subscriber plan and /login; publication prompts for permission. Hosted implementation unavailable.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
action"publish" | "list" | "read" | "list_types" | "watch" | "unwatch" | "status" | "upload_asset" | "list_assets" | "read_asset" | "delete_asset" | "pin" | "unpin"NoOmit (or 'publish') to publish file_path. 'list' enumerates artifacts — the user's own by default, see scope; only limit and scope may accompany it. 'read' returns the content of the published artifact at url (raw HTML for the user's own; an isolated summary, steered by the optional prompt, for one someone else owns, though a page published in this session's own Slack channel can come back in full as untrusted content) — see **Calls**. 'watch', 'unwatch', and 'status' manage live-update subscriptions through which a session keeps track of new versions of an artifact published elsewhere, and those aren't available in this session: 'watch' only reports that — this session does not keep track of new versions — and 'status' lists this session's artifact watches (pass url to check one). 'upload_asset' adds one local media, PDF, font, or text file to an existing artifact — pass url and file_path (or file_paths for several in one call). 'list_assets' lists the files in an artifact's asset store (pass url; after continues a listing), 'read_asset' saves one of them to a local file named by its id (pass url and asset_id, optionally out_dir), and 'delete_asset' permanently removes one (pass url and asset_id). See **Artifact assets** above. 'pin' adds the artifact at url to the user's pinned list in their claude.ai sidebar and 'unpin' removes it (nothing else may accompany either) — private to the user, reversible, and no change to who can see the artifact.
file_pathstringNoPath to the .html file to render. Required to publish (the default action). Use a short, distinctive basename — it is the last-resort title when the HTML has no <title> and no title parameter is given. For 'upload_asset', the local image, video, PDF, font, stylesheet (CSS), script (JS), or text (CSV, Markdown, JSON, plain text) file to upload.
faviconstringNoDeprecated; omit it. Use icon.
iconstringNoOne short generic word for the artifact's browser-tab icon, such as chart, calendar, recipe, code or map — a plain signifier, not a product or brand name. Include it on every page's first publish; omit when republishing to keep the current icon, and pass a new one only when the user asks.
limitnumberNolist only: maximum artifacts to return (default 25).
scope"mine" | "shared" | "all"Nolist only: 'mine' (default) lists artifacts the user owns; 'shared' lists artifacts other people shared with the user; 'all' lists both. Rows are labeled (mine)/(shared) whenever scope is not 'mine'.
titlestringNoTitle for the artifact — the name shown in the browser tab and gallery. A short, distinctive noun-phrase name — not a generic label, a summary, or a name with an appended explainer. Prefer a <title> tag at the top of the HTML itself; this parameter fills in only when the file lacks one in the first 8KB of the file, and never overrides the tag. HTML publishes only — Markdown pages keep their filename identity. Content always comes from file_path — there is no inline content parameter.
descriptionstringNoOne-sentence subtitle shown on the gallery card. Say what the page is or does.
labelstringNoA short name for this publish, max 60 chars (e.g. "Draft to legal"). Optional — a few words, not a description.
urlstringNoAn existing artifact's claude.ai link (claude.ai/artifact/{id} or claude.ai/code/artifact/{uuid}; a chat, project or session link is not one) to update in place. Pass whenever the user wants to update an artifact this conversation did not publish — "update my artifact", "keep the same link", a pasted artifact URL — and find the URL with action: "list" or ask the user for the link if you don't have it; without this, the publish creates a separate artifact instead of updating the existing one. Omit for new artifacts and same-conversation redeploys. Must be an artifact the user owns or was given edit access to (a read of it says "writer"). Before publishing to an artifact this conversation has neither read nor published, read it (action: "read") and build on what comes back; a publish sent without that read is refused. A refusal that hands you the live version counts as that read: merge your edits into that version and publish that; never resend the refused content unchanged. For 'read' and the other url-addressed actions: the artifact to act on.
promptstringNoread only: what to extract from an artifact shared with the user — its content reaches you as an isolated summary answering this. Ignored for artifacts the user owns and for a page published in this session's own Slack channel (raw content is returned); optional.
forcebooleanNoLast-resort overwrite that DISCARDS the newer published version's page — another session's publish, or someone's save from a page that can publish new versions of itself. On a conflict the fix is to merge your changes onto the newer content (handed to you in the rejection, or re-read) and publish again — not force. Pass force:true only when the user has explicitly said to discard that specific version; never to get past a conflict on your own judgment. The tracked baseVersion is still sent; with force:true the server treats it as informational and overwrites, unless it refuses force over a version saved from inside the page. Omit (or false) so a concurrent write conflicts instead of being silently clobbered.
pinbooleanNopublish only: true also pins the published artifact to the user's claude.ai sidebar once it is published — pass it only when the user asked for that; a pin that fails never fails the publish (the result says so).
out_dirstringNoread_asset: directory to save into — default: this artifact’s folder in your scratchpad directory, where saving needs no approval and which you can Read from. read_asset names the file by the asset id plus the extension for its type; saving to any directory other than the default is an ordinary file save the user may be asked to approve.
file_paths[ string, ...string[] ]Noupload_asset: several local image, video, PDF, font, stylesheet or script files in place of file_path, up to 25 in one call, all into the artifact that url names; one approval covers the call, and the result lists each file's id and url, or why it was not uploaded. A CSV, Markdown, JSON or plain-text file, a symbolic or hard link, and a file outside the working directory each go in a call of their own with file_path.
asset_idstringNoread_asset and delete_asset: the asset's id (32 hex characters), from a list_assets or upload_asset result.
afterstringNolist_assets only: the next value from a previous list_assets result, to continue that listing.
capabilities{ [k: string]: unknown; }NoRuntime capabilities this page declares, as {name: config}. The control plane is the authority on valid names and config shapes. An empty object clears any previously stored declaration; omit the field on a redeploy to carry the stored declaration forward unchanged. Before declaring any capability, load the artifact-capabilities skill for the current contract and per-capability guidance.
contract"latest" | stringNoThe artifact's runtime version. Omit to keep its current version (the default); 'latest' to upgrade; a specific version to pin or roll back. Changing it changes how the published page behaves — pass only when the author explicitly intends the change, never as a side effect of editing.
Full input definition
export interface ArtifactInput {
    action?: "publish" | "list" | "read" | "list_types" | "watch" | "unwatch" | "status" | "upload_asset" | "list_assets" | "read_asset" | "delete_asset" | "pin" | "unpin";
    file_path?: string;
    favicon?: string;
    icon?: string;
    limit?: number;
    scope?: "mine" | "shared" | "all";
    title?: string;
    description?: string;
    label?: string;
    url?: string;
    prompt?: string;
    force?: boolean;
    pin?: boolean;
    out_dir?: string;
    file_paths?: [
        string,
        ...string[]
    ];
    asset_id?: string;
    after?: string;
    capabilities?: {
        [k: string]: unknown;
    };
    contract?: "latest" | string;
}

ResultPublished TypeScript

Full result definition
export type ArtifactOutput = {
    url: string;
    path: string;
    artifact_id?: string;
    title?: string;
    version?: string;
    capabilities?: unknown;
    stored?: {
        contract: string;
        preferredContract?: string;
        capabilities?: {
            [k: string]: unknown;
        };
        carried?: boolean;
        read?: string;
    };
    warnings?: string[];
    publishesRemaining?: number;
    publishesResetAt?: number;
    contract?: string;
    updated?: boolean;
    owned?: boolean;
    icon?: string;
    faviconSent?: true;
    iconDropped?: true;
    audience?: string;
    seq?: number;
    unchanged?: true;
    liveSubscription?: string;
    pinned?: boolean;
} | {
    artifacts: {
        title: string;
        url: string;
        favicon?: string;
        updatedAt?: string;
        rel?: "mine" | "shared";
        external?: true;
        role?: "editor" | "commenter" | "reader" | "viewer";
        pinned?: boolean;
    }[];
    truncated?: boolean;
    total?: number;
    total_at_least?: true;
    pins_enabled?: boolean;
    scope?: "shared" | "all";
    external_listed?: true;
} | {
    read: {
        url: string;
        bytes: number;
        code: number;
        codeText: string;
        result: string;
        durationMs: number;
        title?: string;
    };
    owned?: boolean;
    artifactRead?: {
        slug: string;
        ver?: string;
        seeded?: false;
    };
} | {
    watch: {
        url: string;
        watching: boolean;
        outcome: string;
        reason?: string;
        durable_skip_reason?: string;
        task_id?: string;
        since?: number;
        token_expires_at?: number;
        rail?: string;
        trigger_id?: string;
        durable_since?: string;
        status?: number;
        detail?: string;
        note?: string;
        events?: string[];
    };
} | {
    unwatch: {
        url: string;
        was_watching: boolean;
    };
} | {
    watches: ({
        url: string;
        task_id: string;
        since: number;
        explicit: boolean;
        connected: boolean;
        connecting?: boolean;
        token_expires_at: number;
        armed_via?: string;
    } | {
        url: string;
        rail: "durable_wake";
        trigger_id: string;
        since: string;
        events?: string[];
        restored?: boolean;
    } | {
        url: string;
        rail: "live_stopped";
        since?: number;
        explicit?: boolean;
        armed_via?: string;
        stop_kind: string;
    })[];
    filter_url?: string;
    arms?: {
        url: string;
        rail?: string;
        state: string;
        reconnect?: boolean;
        failures?: number;
        max_failures?: number;
        next_in_s?: number;
        last_failure?: string;
        reason?: string;
        detail?: string;
        server_message?: string;
        at?: number;
    }[];
} | {
    written?: {
        url: string;
    };
    owned?: boolean;
    asset_upload: {
        id: string;
        url: string;
        size_bytes: number;
        content_type: string;
        sha256?: string;
        file_name: string;
    };
} | {
    written?: {
        url: string;
    };
    owned?: boolean;
    asset_uploads: {
        url: string;
        results: [
            ({
                file_path: string;
                status: "uploaded";
                id: string;
                url: string;
                size_bytes: number;
                content_type: string;
                sha256?: string;
                file_name: string;
            } | {
                file_path: string;
                status: "failed" | "not_attempted";
                reason: string;
                message: string;
                may_be_stored?: true;
            }),
            ...({
                file_path: string;
                status: "uploaded";
                id: string;
                url: string;
                size_bytes: number;
                content_type: string;
                sha256?: string;
                file_name: string;
            } | {
                file_path: string;
                status: "failed" | "not_attempted";
                reason: string;
                message: string;
                may_be_stored?: true;
            })[]
        ];
    };
} | {
    asset_list: {
        url: string;
        assets: {
            id: string;
            url: string;
            content_type: string;
            size_bytes: number;
            sha256?: string;
            created_at: string;
        }[];
        usage: {
            files: number;
            bytes: number;
            max_files: number;
            max_bytes: number;
        };
        next?: string;
        cowritten?: true;
        outside_writer?: true;
    };
} | {
    asset_read: {
        id: string;
        path: string;
        size_bytes: number;
        content_type: string;
        sha256: string;
        cowritten?: true;
        outside_writer?: true;
        public_read?: true;
        foreign?: true;
    };
} | {
    written?: {
        url: string;
    };
    owned?: boolean;
    asset_delete: {
        id: string;
        deleted: boolean;
    };
} | {
    pin: {
        action: "pin" | "unpin";
        url: string;
        pinned: boolean;
        title?: string;
    };
};

Sources

AskUserQuestionCollect user choices.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
questions[ { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; } ] | [ { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; }, { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; } ] | [ { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; }, { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; }, { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; } ] | [ { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; }, { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; }, { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; }, { question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; } ]YesQuestions to ask the user (1-4 questions)
answers{ [k: string]: string; }NoUser answers collected by the permission component
annotations{ [k: string]: { preview?: string; notes?: string; }; }NoOptional per-question annotations from the user (e.g., notes on preview selections). Keyed by question text.
metadata{ source?: string; }NoOptional metadata for tracking and analytics purposes. Not displayed to user.
Full input definition
export interface AskUserQuestionInput {
    questions: [
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        }
    ] | [
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        },
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        }
    ] | [
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        },
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        },
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        }
    ] | [
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        },
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        },
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        },
        {
            question: string;
            header: string;
            options: [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ] | [
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                },
                {
                    label: string;
                    description: string;
                    preview?: string;
                }
            ];
            multiSelect: boolean;
        }
    ];
    answers?: {
        [k: string]: string;
    };
    annotations?: {
        [k: string]: {
            preview?: string;
            notes?: string;
        };
    };
    metadata?: {
        source?: string;
    };
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
questions{ question: string; header: string; options: [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ] | [ { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; }, { label: string; description: string; preview?: string; } ]; multiSelect: boolean; }[]YesThe questions that were asked
answers{ [k: string]: string; }YesThe answers provided by the user (question text -> answer string; multi-select answers are comma-separated)
responsestringNoFreeform text the user typed instead of selecting a structured option
annotations{ [k: string]: { preview?: string; notes?: string; }; }NoOptional per-question annotations from the user (e.g., notes on preview selections). Keyed by question text.
afkTimeoutMsnumberNoSet when the dialog auto-resolved after this many milliseconds of idle (user away from keyboard). Absent on every human-resolved path.
Full result definition
export interface AskUserQuestionOutput {
    questions: {
        question: string;
        header: string;
        options: [
            {
                label: string;
                description: string;
                preview?: string;
            },
            {
                label: string;
                description: string;
                preview?: string;
            }
        ] | [
            {
                label: string;
                description: string;
                preview?: string;
            },
            {
                label: string;
                description: string;
                preview?: string;
            },
            {
                label: string;
                description: string;
                preview?: string;
            }
        ] | [
            {
                label: string;
                description: string;
                preview?: string;
            },
            {
                label: string;
                description: string;
                preview?: string;
            },
            {
                label: string;
                description: string;
                preview?: string;
            },
            {
                label: string;
                description: string;
                preview?: string;
            }
        ];
        multiSelect: boolean;
    }[];
    answers: {
        [k: string]: string;
    };
    response?: string;
    annotations?: {
        [k: string]: {
            preview?: string;
            notes?: string;
        };
    };
    afkTimeoutMs?: number;
}

Sources

BashRun a shell command.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
commandstringYesThe command to execute
timeoutnumberNoOptional timeout in milliseconds (max 600000 for a foreground command)
descriptionstringNoClear, concise description of what this command does in active voice. Never use words like "complex" or "risk" in the description - just describe what it does. Say what the command does in plain words: do not echo the command's text, its flags, or file paths - the user reads this description, often without seeing the command. For simple commands (git, npm, standard CLI tools), keep it brief (5-10 words): - ls → "List files in current directory" - git status → "Show working tree status" - npm install → "Install package dependencies" For commands that are harder to parse at a glance (piped commands, obscure flags, etc.), add enough context to clarify what it does: - find . -name "*.tmp" -exec rm {} \; → "Find and delete all .tmp files recursively" - git reset --hard origin/main → "Discard all local changes and match remote main" - curl -s url | jq '.data[]' → "Fetch JSON from URL and extract data array elements"
run_in_backgroundbooleanNoSet to true to run this command in the background. With it, timeout limits how long the command may run in the background before it is stopped (default 1800000 ms, max 7200000 ms).
dangerouslyDisableSandboxbooleanNoSet this to true to dangerously override sandbox mode and run commands without sandboxing.
Full input definition
export interface BashInput {
    command: string;
    timeout?: number;
    description?: string;
    run_in_background?: boolean;
    dangerouslyDisableSandbox?: boolean;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
stdoutstringYesThe standard output of the command
stderrstringYesThe standard error output of the command
rawOutputPathstringNoPath to raw output file for large MCP tool outputs
interruptedbooleanYesWhether the command was interrupted
isImagebooleanNoFlag to indicate if stdout contains image data
backgroundTaskIdstringNoID of the background task if command is running in background
backgroundedByUserbooleanNoTrue if the user manually backgrounded the command with Ctrl+B
timedOutAfterMsnumberNoSet when the command hit its timeout and was auto-backgrounded; the timeout value in ms
backgroundCwdHintstringNoModel-facing note that the session cwd was not changed by a backgrounded command containing a directory-change builtin (cd/pushd/popd/chdir)
backgroundEndsWithFinalResponsetrueNoTrue when this backgrounded command is terminated at its caller's final response, so no completion notification can follow (a synchronous subagent's command, or a headless session that takes no further input and is not waiting for background commands); absent when the command survives
dangerouslyDisableSandboxbooleanNoFlag to indicate if sandbox mode was overridden
returnCodeInterpretationstringNoSemantic interpretation for non-error exit codes with special meaning
noOutputExpectedbooleanNoWhether the command is expected to produce no output on success
structuredContentunknown[]NoStructured content blocks
persistedOutputPathstringNoPath to the persisted full output in tool-results dir (set when output is too large for inline)
persistedOutputSizenumberNoTotal size of the output in bytes (set when output is too large for inline)
staleReadFileStateHintstringNoModel-facing note listing readFileState entries whose mtime bumped during this command (set when WRITE_COMMAND_MARKERS matches)
ghRateLimitHintstringNoModel-facing system-reminder appended when a gh command reports a GitHub API rate-limit error
gitOperation{ commit?: { sha: string; kind: "committed" | "amended" | "cherry-picked"; branch?: string; }; push?: { branch: string; }; branch?: { ref: string; action: "merged" | "rebased"; }; pr?: { number: number; url?: string; action: "created" | "edited" | "merged" | "commented" | "closed" | "reopened" | "ready" | "draft" | "auto-merge-enabled" | "auto-merge-disabled"; }; }NoStructured classification of git/gh operations detected in this command (commit/push/merge/rebase/PR). Client-facing — lets clients render git activity without re-parsing stdout; not surfaced to the model.
Full result definition
export interface BashOutput {
    stdout: string;
    stderr: string;
    rawOutputPath?: string;
    interrupted: boolean;
    isImage?: boolean;
    backgroundTaskId?: string;
    backgroundedByUser?: boolean;
    timedOutAfterMs?: number;
    backgroundCwdHint?: string;
    backgroundEndsWithFinalResponse?: true;
    dangerouslyDisableSandbox?: boolean;
    returnCodeInterpretation?: string;
    noOutputExpected?: boolean;
    structuredContent?: unknown[];
    persistedOutputPath?: string;
    persistedOutputSize?: number;
    staleReadFileStateHint?: string;
    ghRateLimitHint?: string;
    gitOperation?: {
        commit?: {
            sha: string;
            kind: "committed" | "amended" | "cherry-picked";
            branch?: string;
        };
        push?: {
            branch: string;
        };
        branch?: {
            ref: string;
            action: "merged" | "rebased";
        };
        pr?: {
            number: number;
            url?: string;
            action: "created" | "edited" | "merged" | "commented" | "closed" | "reopened" | "ready" | "draft" | "auto-merge-enabled" | "auto-merge-disabled";
        };
    };
}

Failures and lifecycle

  • SDK success output includes stdout, stderr and interrupted plus optional backgroundTaskId/outputFile and other declared fields. Backgrounding/completion, timeout and cancellation are lifecycle states, not a single exit-code result. SDK foreground timeout comment is 600000 ms; current docs also describe configurable ceilings and unattended background limits, so preserve this version/source boundary.

Sources

CronCreateCreate a session schedule.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
cronstringYesStandard 5-field cron expression in local time: "M H DoM Mon DoW" (e.g. "* /5 * * * *" = every 5 minutes, "30 14 28 2 *" = Feb 28 at 2:30pm local once).
promptstringYesThe prompt to enqueue at each fire time.
recurringbooleanNotrue (default) = fire on every cron match until deleted or auto-expired after 7 days. false = fire once at the next match, then auto-delete. Use false for "remind me at X" one-shot requests with pinned minute/hour/dom/month.
durablebooleanNotrue = persist to .claude/scheduled_tasks.json and survive restarts. false (default) = in-memory only, dies when this Claude session ends. Use true only when the user asks the task to survive across sessions.
Full input definition
export interface CronCreateInput {
    cron: string;
    prompt: string;
    recurring?: boolean;
    durable?: boolean;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
idstringYes
humanSchedulestringYes
recurringbooleanYes
durablebooleanNo
nextFireAtnumberNoEpoch ms of the job's next run, the scheduler's per-job offset included
Full result definition
export interface CronCreateOutput {
    id: string;
    humanSchedule: string;
    recurring: boolean;
    durable?: boolean;
    nextFireAt?: number;
}

Sources

CronDeleteDelete a session schedule.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
idstringYesJob ID returned by CronCreate.
Full input definition
export interface CronDeleteInput {
    id: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
idstringYes
Full result definition
export interface CronDeleteOutput {
    id: string;
}

Sources

CronListList session schedules.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

Full input definition
export interface CronListInput {
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
jobs{ id: string; cron: string; humanSchedule: string; prompt: string; recurring?: boolean; durable?: boolean; nextFireAt?: number; }[]Yes
Full result definition
export interface CronListOutput {
    jobs: {
        id: string;
        cron: string;
        humanSchedule: string;
        prompt: string;
        recurring?: boolean;
        durable?: boolean;
        nextFireAt?: number;
    }[];
}

Sources

EditReplace matching file text.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

Aliases and version differences: FileEdit (SDK type prefix, not a callable alias)

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
file_pathstringYesThe absolute path to the file to modify
old_stringstringYesThe text to replace
new_stringstringYesThe text to replace it with (must be different from old_string)
replace_allbooleanNoReplace all occurrences of old_string (default false)
Full input definition
export interface FileEditInput {
    file_path: string;
    old_string: string;
    new_string: string;
    replace_all?: boolean;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
filePathstringYesThe file path that was edited
oldStringstringYesThe original string that was replaced
newStringstringYesThe new string that replaced it
originalFilestring | nullYesThe original file contents before editing
structuredPatch{ oldStart: number; oldLines: number; newStart: number; newLines: number; lines: string[]; }[]YesDiff patch showing the changes
userModifiedbooleanYesWhether the user modified the proposed changes
replaceAllbooleanYesWhether all occurrences were replaced
gitDiff{ filename: string; status: "modified" | "added"; additions: number; deletions: number; changes: number; patch: string; repository?: string | null; }No
stagedbooleanNoTrue when the edit was held for the machine owner to review instead of written; the file is unchanged
Full result definition
export interface FileEditOutput {
    filePath: string;
    oldString: string;
    newString: string;
    originalFile: string | null;
    structuredPatch: {
        oldStart: number;
        oldLines: number;
        newStart: number;
        newLines: number;
        lines: string[];
    }[];
    userModified: boolean;
    replaceAll: boolean;
    gitDiff?: {
        filename: string;
        status: "modified" | "added";
        additions: number;
        deletions: number;
        changes: number;
        patch: string;
        repository?: string | null;
    };
    staged?: boolean;
}

Sources

EndConversationEnd the conversation.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputSchema unavailable

ResultSchema unavailable

Sources

EnterPlanModeEnter planning mode.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

Full input definition
export interface EnterPlanModeInput {
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
messagestringYesConfirmation that plan mode was entered
Full result definition
export interface EnterPlanModeOutput {
    message: string;
}

Sources

EnterWorktreeEnter a Git worktree.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
namestringNoOptional name for a new worktree. Each "/"-separated segment may contain only letters, digits, dots, underscores, and dashes; max 64 chars total. A random name is generated if not provided. Mutually exclusive with path.
pathstringNoPath to an existing worktree to switch into instead of creating a new one. Must appear in git worktree list for the current repo — or, on first entry from the launch directory, for a repo nested inside it (multi-repo workspace). Mutually exclusive with name.
Full input definition
export interface EnterWorktreeInput {
    name?: string;
    path?: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
worktreePathstringYes
worktreeBranchstringNo
messagestringYes
Full result definition
export interface EnterWorktreeOutput {
    worktreePath: string;
    worktreeBranch?: string;
    message: string;
}

Sources

ExitPlanModeSubmit a plan and leave planning mode.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
allowedPrompts{ tool: "Bash"; prompt: string; }[]NoDeprecated: no longer used.
Full input definition
export interface ExitPlanModeInput {
    allowedPrompts?: {
        tool: "Bash";
        prompt: string;
    }[];
    [k: string]: unknown;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
planstring | nullYesThe plan that was presented to the user
isAgentbooleanYes
filePathstringNoThe file path where the plan was saved
hasTaskToolbooleanNoWhether the Agent tool is available in the current context
planWasEditedbooleanNoTrue when the user edited the plan (CCR web UI or Ctrl+G); determines whether the plan is echoed back in tool_result
awaitingLeaderApprovalbooleanNoWhen true, the teammate has sent a plan approval request to the team leader
requestIdstringNoUnique identifier for the plan approval request
Full result definition
export interface ExitPlanModeOutput {
    plan: string | null;
    isAgent: boolean;
    filePath?: string;
    hasTaskTool?: boolean;
    planWasEdited?: boolean;
    awaitingLeaderApproval?: boolean;
    requestId?: string;
}

Failures and lifecycle

  • Plan approval is a permission interaction; a normal tool result does not itself prove approval or subsequent execution.

Sources

ExitWorktreeLeave the session worktree.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
action"keep" | "remove"Yes"keep" leaves the worktree and branch on disk; "remove" deletes both.
discard_changesbooleanNoRequired true when action is "remove" and the worktree has uncommitted files or unmerged commits. The tool will refuse and list them otherwise.
Full input definition
export interface ExitWorktreeInput {
    action: "keep" | "remove";
    discard_changes?: boolean;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
action"keep" | "remove"Yes
originalCwdstringYes
worktreePathstringYes
worktreeBranchstringNo
tmuxSessionNamestringNo
discardedFilesnumberNo
discardedCommitsnumberNo
messagestringYes
Full result definition
export interface ExitWorktreeOutput {
    action: "keep" | "remove";
    originalCwd: string;
    worktreePath: string;
    worktreeBranch?: string;
    tmuxSessionName?: string;
    discardedFiles?: number;
    discardedCommits?: number;
    message: string;
}

Sources

GlobFind paths by glob.

Absent by default on macOS/Linux/WSL in current docs; may be restored with tool configuration. SDK types do not imply default exposure.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
patternstringYesThe glob pattern to match files against
pathstringNoThe directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.
Full input definition
export interface GlobInput {
    pattern: string;
    path?: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
durationMsnumberYesTime taken to execute the search in milliseconds
numFilesnumberYesNumber of file paths returned (after any truncation)
filenamesstring[]YesArray of file paths that match the pattern
truncatedbooleanYesWhether results were truncated (limited to 100 files)
totalMatchesnumberNoTotal number of matching files before truncation. A lower bound when countIsComplete is false. Absent on results persisted by CLI versions predating this field.
countIsCompletebooleanNoWhether totalMatches is the exact total (true) or a floor because the underlying search truncated its own output (false). Absent on results persisted by CLI versions predating this field.
Full result definition
export interface GlobOutput {
    durationMs: number;
    numFiles: number;
    filenames: string[];
    truncated: boolean;
    totalMatches?: number;
    countIsComplete?: boolean;
}

Sources

GrepSearch file contents.

Absent by default on macOS/Linux/WSL in current docs; may be restored with tool configuration. SDK types do not imply default exposure.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
patternstringYesThe regular expression pattern to search for in file contents
pathstringNoFile or directory to search in (rg PATH). Defaults to current working directory.
globstringNoGlob pattern to filter files (e.g. "*.js", "*.{ts,tsx}") - maps to rg --glob
output_mode"content" | "files_with_matches" | "count"NoOutput mode: "content" shows matching lines (supports -A/-B/-C context, -n line numbers, head_limit), "files_with_matches" shows file paths (supports head_limit), "count" shows match counts (supports head_limit). Defaults to "files_with_matches".
-BnumberNoNumber of lines to show before each match (rg -B). Requires output_mode: "content", ignored otherwise.
-AnumberNoNumber of lines to show after each match (rg -A). Requires output_mode: "content", ignored otherwise.
-CnumberNoAlias for context.
contextnumberNoNumber of lines to show before and after each match (rg -C). Requires output_mode: "content", ignored otherwise.
-nbooleanNoShow line numbers in output (rg -n). Requires output_mode: "content", ignored otherwise. Defaults to true.
-ibooleanNoCase insensitive search (rg -i)
-obooleanNoPrint only the matched (non-empty) parts of each matching line, one match per output line (rg -o / --only-matching). Requires output_mode: "content", ignored otherwise. Defaults to false.
typestringNoFile type to search (rg --type). Common types: js, py, rust, go, java, etc. More efficient than include for standard file types.
head_limitnumberNoLimit output to first N lines/entries, equivalent to "| head -N". Works across all output modes: content (limits output lines), files_with_matches (limits file paths), count (limits count entries). Defaults to 250 when unspecified. Pass 0 for unlimited (use sparingly — large result sets waste context).
offsetnumberNoSkip first N lines/entries before applying head_limit, equivalent to "| tail -n +N | head -N". Works across all output modes. Defaults to 0.
multilinebooleanNoEnable multiline mode where . matches newlines and patterns can span lines (rg -U --multiline-dotall). Default: false.
Full input definition
export interface GrepInput {
    pattern: string;
    path?: string;
    glob?: string;
    output_mode?: "content" | "files_with_matches" | "count";
    "-B"?: number;
    "-A"?: number;
    "-C"?: number;
    context?: number;
    "-n"?: boolean;
    "-i"?: boolean;
    "-o"?: boolean;
    type?: string;
    head_limit?: number;
    offset?: number;
    multiline?: boolean;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
mode"content" | "files_with_matches" | "count"No
numFilesnumberYes
filenamesstring[]Yes
contentstringNo
numLinesnumberNo
numMatchesnumberNo
totalFilesnumberNo
totalLinesnumberNo
appliedLimitnumberNo
appliedOffsetnumberNo
Full result definition
export interface GrepOutput {
    mode?: "content" | "files_with_matches" | "count";
    numFiles: number;
    filenames: string[];
    content?: string;
    numLines?: number;
    numMatches?: number;
    totalFiles?: number;
    totalLines?: number;
    appliedLimit?: number;
    appliedOffset?: number;
}

Sources

LSPQuery language-server intelligence.

Requires configured language-server support; editor/plugin/provider dependent.

InputSchema unavailable

ResultSchema unavailable

Sources

ListAgentsList reachable agents.

Cross-session messaging enabled; CLI >=2.1.224; teammate/self rows >=2.1.239.

InputSchema unavailable

ResultSchema unavailable

Sources

MonitorWatch command or WebSocket events.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
descriptionstringYesShort human-readable description of what you are monitoring (shown in notifications).
timeout_msnumberYesKill the monitor after this deadline. Default 300000ms. Deadlines above 1800000ms are capped to 1800000ms. You are notified at expiry and can re-arm.
commandstringNoShell command or script. Each stdout line is an event; exit ends the watch.
ws{ url: string; protocols?: string[]; }NoWebSocket to open. Each text frame is an event; binary frames are reported as a placeholder line. Socket close ends the watch. Cannot be combined with command.
Full input definition
export interface MonitorInput {
    description: string;
    timeout_ms: number;
    command?: string;
    ws?: {
        url: string;
        protocols?: string[];
    };
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
taskIdstringYesID of the background monitor task.
timeoutMsnumberYesTimeout deadline in milliseconds (0 when persistent).
persistentbooleanNoNo timeout — runs until TaskStop or session end.
Full result definition
export interface MonitorOutput {
    taskId: string;
    timeoutMs: number;
    persistent?: boolean;
}

Sources

NotebookEditModify a notebook cell.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
notebook_pathstringYesThe absolute path to the Jupyter notebook file to edit (must be absolute, not relative)
cell_idstringNoThe ID of the cell to edit. When inserting a new cell, the new cell will be inserted after the cell with this ID, or at the beginning if not specified.
new_sourcestringYesThe new source for the cell
cell_type"code" | "markdown"NoThe type of the cell (code or markdown). If not specified, it defaults to the current cell type. If using edit_mode=insert, this is required.
edit_mode"replace" | "insert" | "delete"NoThe type of edit to make (replace, insert, delete). Defaults to replace.
Full input definition
export interface NotebookEditInput {
    notebook_path: string;
    cell_id?: string;
    new_source: string;
    cell_type?: "code" | "markdown";
    edit_mode?: "replace" | "insert" | "delete";
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
new_sourcestringYesThe new source code that was written to the cell
old_sourcestringNoThe previous cell source (replace/delete only). Enables cell-relative diff rendering without re-reading the notebook.
cell_idstringNoThe ID of the cell that was edited
cell_type"code" | "markdown"YesThe type of the cell
languagestringYesThe programming language of the notebook
edit_modestringYesThe edit mode that was used
errorstringNoError message if the operation failed
notebook_pathstringYesThe path to the notebook file
original_filestringYesThe original notebook content before modification
updated_filestringYesThe updated notebook content after modification
Full result definition
export interface NotebookEditOutput {
    new_source: string;
    old_source?: string;
    cell_id?: string;
    cell_type: "code" | "markdown";
    language: string;
    edit_mode: string;
    error?: string;
    notebook_path: string;
    original_file: string;
    updated_file: string;
}

Sources

PowerShellRun a PowerShell command.

Native tool preview and platform/setting gates; documented behavior does not establish full SDK schema.

InputSchema unavailable

ResultSchema unavailable

Sources

PushNotificationNotify the user.

Desktop and optional Remote Control push; hosted delivery restrictions.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
messagestringYesThe notification body. Keep it under 200 characters; mobile OSes truncate.
statusproactiveYes
Full input definition
export interface PushNotificationInput {
    message: string;
    status: "proactive";
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
messagestringYes
pushSentbooleanNo
localSentbooleanNo
disabledReason"config_off" | "user_present" | "no_transport"No
sentAtstringNoISO timestamp captured at tool execution on the emitting process. Optional — resumed sessions replay pre-sentAt outputs verbatim.
Full result definition
export interface PushNotificationOutput {
    message: string;
    pushSent?: boolean;
    localSent?: boolean;
    disabledReason?: "config_off" | "user_present" | "no_transport";
    sentAt?: string;
}

Sources

ReadRead a file.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

Aliases and version differences: FileRead (SDK type prefix, not a callable alias)

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
file_pathstringYesThe absolute path to the file to read
offsetnumberNoThe line number to start reading from. Only provide if the file is too large to read at once
limitnumberNoThe number of lines to read. Only provide if the file is too large to read at once.
pagesstringNoPage range for PDF files (e.g., "1-5", "3", "10-20"). Only applicable to PDF files. Maximum 20 pages per request.
allow_largebooleanNoSet to true to read a text file, or a line range of one, that is over the usual size limits, up to what still fits in your context. Only use this when you genuinely need all of it or the user asked for the whole file; otherwise read it in parts with offset and limit, or search it.
Full input definition
export interface FileReadInput {
    file_path: string;
    offset?: number;
    limit?: number;
    pages?: string;
    allow_large?: boolean;
}

ResultPublished TypeScript

Full result definition
export type FileReadOutput = {
    type: "text";
    file: {
        filePath: string;
        content: string;
        numLines: number;
        startLine: number;
        totalLines: number;
        truncatedByTokenCap?: boolean;
    };
    artifactRead?: {
        slug: string;
        ver: string;
    };
} | {
    type: "image";
    file: {
        base64: string;
        type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
        originalSize: number;
        dimensions?: {
            originalWidth?: number;
            originalHeight?: number;
            displayWidth?: number;
            displayHeight?: number;
        };
    };
} | {
    type: "notebook";
    file: {
        filePath: string;
        cells: unknown[];
    };
} | {
    type: "pdf";
    file: {
        filePath: string;
        base64: string;
        originalSize: number;
    };
} | {
    type: "parts";
    file: {
        filePath: string;
        originalSize: number;
        count: number;
        outputDir: string;
    };
    firstPage?: number;
    pages?: {
        base64: string;
        mediaType: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
        error?: string;
    }[];
} | {
    type: "file_unchanged";
    file: {
        filePath: string;
    };
    source?: "seeded";
};

Sources

RemoteTriggerManage cloud schedules.

Subscriber cloud schedules and organization policy; hosted-provider restrictions.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
action"list" | "get" | "create" | "update" | "run" | "create_webhook_trigger" | "list_runs" | "get_run_log"Yes
trigger_idstringNoRequired for get, update, run, and list_runs
session_idstringNoRequired for get_run_log: a run session id (cse_… or session_…, from list_runs)
cursorstringNonext_cursor from a previous list_runs or get_run_log page
body{ [k: string]: unknown; }NoRequired for create and update; optional for run
Full input definition
export interface RemoteTriggerInput {
    action: "list" | "get" | "create" | "update" | "run" | "create_webhook_trigger" | "list_runs" | "get_run_log";
    trigger_id?: string;
    session_id?: string;
    cursor?: string;
    body?: {
        [k: string]: unknown;
    };
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
statusnumberYes
jsonstringYes
summarystringNo
Full result definition
export interface RemoteTriggerOutput {
    status: number;
    json: string;
    summary?: string;
}

Sources

ReportFindingsPresent structured code-review findings.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
level"low" | "medium" | "high" | "xhigh" | "max"NoEffort level the review ran at
findings{ file: string; line?: number; summary: string; short_summary?: string; failure_scenario: string; category?: string; verdict?: "CONFIRMED" | "PLAUSIBLE"; outcome?: "fixed" | "skipped" | "no_change_needed"; }[]YesVerified findings, most-severe first; empty if none survived
Full input definition
export interface ReportFindingsInput {
    level?: "low" | "medium" | "high" | "xhigh" | "max";
    findings: {
        file: string;
        line?: number;
        summary: string;
        short_summary?: string;
        failure_scenario: string;
        category?: string;
        verdict?: "CONFIRMED" | "PLAUSIBLE";
        outcome?: "fixed" | "skipped" | "no_change_needed";
    }[];
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
countnumberYesNumber of findings reported
level"low" | "medium" | "high" | "xhigh" | "max"NoEffort level the review ran at
findings{ file: string; line?: number; summary: string; short_summary?: string; failure_scenario: string; category?: string; verdict?: "CONFIRMED" | "PLAUSIBLE"; outcome?: "fixed" | "skipped" | "no_change_needed"; }[]YesEchoed for the result body
Full result definition
export interface ReportFindingsOutput {
    count: number;
    level?: "low" | "medium" | "high" | "xhigh" | "max";
    findings: {
        file: string;
        line?: number;
        summary: string;
        short_summary?: string;
        failure_scenario: string;
        category?: string;
        verdict?: "CONFIRMED" | "PLAUSIBLE";
        outcome?: "fixed" | "skipped" | "no_change_needed";
    }[];
}

Sources

ScheduleWakeupChoose the next loop iteration.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
delaySecondsnumberNoSeconds from now to wake up. Clamped to [60, 3600] by the runtime. Required unless stop is true.
reasonstringNoOne short sentence explaining the chosen delay. Goes to telemetry and is shown to the user. Be specific. Required unless stop is true.
promptstringNoThe /loop input to fire on wake-up. Pass the same /loop input verbatim each turn so the next firing re-enters the skill and continues the loop. For autonomous /loop (no user prompt), pass the literal sentinel <<autonomous-loop-dynamic>> instead (the dynamic-pacing variant, not the CronCreate-mode <<autonomous-loop>>). Required unless stop is true.
stopbooleanNoSet to true to end the dynamic loop immediately instead of scheduling another wakeup. When true, all other fields are ignored and no further wakeups fire.
noopbooleanNotrue = nothing changed (you checked and there is nothing to report). false = something happened worth keeping (edited a file, posted a message, advanced state, surfaced a finding). Consecutive noop:true ticks are collapsed in the user's terminal view and tracked as a streak. Required unless stop is true.
Full input definition
export interface ScheduleWakeupInput {
    delaySeconds?: number;
    reason?: string;
    prompt?: string;
    stop?: boolean;
    noop?: boolean;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
scheduledFornumberYesEpoch ms timestamp when the next wakeup will fire
clampedDelaySecondsnumberYesActual delay used after clamping to runtime bounds
wasClampedbooleanYesTrue if the requested delaySeconds was outside [60, 3600]
stoppedbooleanNoTrue when the model ended the loop via stop: true
cancelledWakeupsnumberNoHow many pending dynamic-loop wakeups stop:true cancelled. 0 means nothing was pending — a recurring /loop cron is not cancelled by stop:true.
Full result definition
export interface ScheduleWakeupOutput {
    scheduledFor: number;
    clampedDelaySeconds: number;
    wasClamped: boolean;
    stopped?: boolean;
    cancelledWakeups?: number;
}

Sources

SendFeedbackPrepare a feedback draft for review.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
type"bug" | "idea" | "missing_capability"YesWhat kind of feedback this is.
titlestringYesShort, specific one-line summary of the issue.
detailsstringYesLabeled bullets, in order: **What happened:** (observed vs. expected, exact error text if short); **What the user said:** (quoted, or "User didn't comment; observed by the model."); **Repro:** (minimal steps); **Evidence:** (request IDs, timestamps, paths, versions; omit if none); optionally a final **Cause:** only if verified in-session. One to three lines per bullet. No narrative paragraphs, no speculation, no secrets.
areastringNoOptional short tag naming the part of Claude Code this is about (e.g. "hooks config", "/help", "file editing"). Leave blank if unclear.
failure_mode"instruction_following" | "destructive_actions" | "code_quality" | "repetition_and_looping" | "model_regression" | "overconfidence_and_hallucination" | "context_and_memory" | "overeager" | "over_correction" | "stopping_short" | "dispute_or_decline" | "subagent_overspawn" | "tone_or_preachiness" | "excessive_questions" | "unwanted_scope" | "other"NoWhen the report is about MODEL BEHAVIOR (not a product bug), the closest failure mode, or other when it is a model-behavior issue that fits no listed value. Omit only when the report is a product/tool bug with no model-behavior component.
task_category"code_edit" | "debug" | "explain" | "plan" | "shell" | "search" | "review" | "other"NoWhat kind of task the session was doing when the issue occurred, or other when it is a clear task that fits no listed value. Omit only if genuinely unclear.
Full input definition
export interface SendFeedbackInput {
    type: "bug" | "idea" | "missing_capability";
    title: string;
    details: string;
    area?: string;
    failure_mode?: "instruction_following" | "destructive_actions" | "code_quality" | "repetition_and_looping" | "model_regression" | "overconfidence_and_hallucination" | "context_and_memory" | "overeager" | "over_correction" | "stopping_short" | "dispute_or_decline" | "subagent_overspawn" | "tone_or_preachiness" | "excessive_questions" | "unwanted_scope" | "other";
    task_category?: "code_edit" | "debug" | "explain" | "plan" | "shell" | "search" | "review" | "other";
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
successbooleanYes
messagestringYes
Full result definition
export interface SendFeedbackOutput {
    success: boolean;
    message: string;
}

Failures and lifecycle

  • Creates a local draft; user review/send is a later action. Tool success does not prove feedback transmission.

Sources

SendMessageMessage another agent.

Reachability depends on local agents, team membership, remote connection and cross-session messaging enablement (>=2.1.224 for sessions).

InputSchema unavailable

ResultSchema unavailable

Sources

SendUserFileDeliver a generated file.

Remote Control client connected or cloud session; hosted delivery provider restrictions.

InputSchema unavailable

ResultSchema unavailable

Sources

ShareOnboardingGuideShare the onboarding guide.

Team/Enterprise subscription and onboarding workflow.

InputSchema unavailable

ResultSchema unavailable

Sources

SkillInvoke a skill in the conversation.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputSchema unavailable

ResultSchema unavailable

Sources

SubagentHandbackSubmit the final subagent report for review.

Auto-mode local non-fork Agent subagents only; CLI >=2.1.271. Classifier reviews the report.

InputSchema unavailable

ResultSchema unavailable

Sources

TaskCreateCreate a tracked task.

Model-dependent task-tracking exposure; opt-in for other models. Shared task list behavior differs in subagents/teams.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
subjectstringYesA brief title for the task
descriptionstringYesWhat needs to be done
activeFormstringNoPresent continuous form shown in spinner when in_progress (e.g., "Running tests")
metadata{ [k: string]: unknown; }NoArbitrary metadata to attach to the task
Full input definition
export interface TaskCreateInput {
    subject: string;
    description: string;
    activeForm?: string;
    metadata?: {
        [k: string]: unknown;
    };
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
task{ id: string; subject: string; }Yes
Full result definition
export interface TaskCreateOutput {
    task: {
        id: string;
        subject: string;
    };
}

Sources

TaskGetRead one tracked task.

Model-dependent task-tracking exposure; opt-in for other models. Shared task list behavior differs in subagents/teams.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
taskIdstringYesThe ID of the task to retrieve
Full input definition
export interface TaskGetInput {
    taskId: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
task{ id: string; subject: string; description: string; status: "pending" | "in_progress" | "completed"; blocks: string[]; blockedBy: string[]; } | nullYes
Full result definition
export interface TaskGetOutput {
    task: {
        id: string;
        subject: string;
        description: string;
        status: "pending" | "in_progress" | "completed";
        blocks: string[];
        blockedBy: string[];
    } | null;
}

Sources

TaskListList tracked tasks.

Model-dependent task-tracking exposure; opt-in for other models. Shared task list behavior differs in subagents/teams.

InputPublished TypeScript

Full input definition
export interface TaskListInput {
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
tasks{ id: string; subject: string; status: "pending" | "in_progress" | "completed"; owner?: string; blockedBy: string[]; }[]Yes
Full result definition
export interface TaskListOutput {
    tasks: {
        id: string;
        subject: string;
        status: "pending" | "in_progress" | "completed";
        owner?: string;
        blockedBy: string[];
    }[];
}

Sources

TaskStopStop a background task or agent.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

Aliases and version differences: shell_id (deprecated input alias; use task_id)

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
task_idstringNoThe ID of the background task to stop. Agent-team teammates and named background agents are also accepted by agent ID or name.
shell_idstringNoDeprecated: use task_id instead
Full input definition
export interface TaskStopInput {
    task_id?: string;
    shell_id?: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
messagestringYesStatus message about the operation
task_idstringYesThe ID of the task that was stopped
task_typestringYesThe type of the task that was stopped
commandstringNoThe command or description of the stopped task
Full result definition
export interface TaskStopOutput {
    message: string;
    task_id: string;
    task_type: string;
    command?: string;
}

Failures and lifecycle

  • SDK marks both task_id and deprecated shell_id optional. Do not strengthen this into a schema-level required task_id; runtime resolves the identifier and can report no matching task. Successful output requires message, task_id, task_type; command is optional.

Sources

TaskUpdateUpdate a tracked task.

Model-dependent task-tracking exposure; opt-in for other models. Shared task list behavior differs in subagents/teams.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
taskIdstringYesThe ID of the task to update
subjectstringNoNew subject for the task
descriptionstringNoNew description for the task
activeFormstringNoPresent continuous form shown in spinner when in_progress (e.g., "Running tests")
status("pending" | "in_progress" | "completed") | "deleted"NoNew status for the task
addBlocksstring[]NoTask IDs that this task blocks
addBlockedBystring[]NoTask IDs that block this task
ownerstringNoNew owner for the task
metadata{ [k: string]: unknown; }NoMetadata keys to merge into the task. Set a key to null to delete it.
Full input definition
export interface TaskUpdateInput {
    taskId: string;
    subject?: string;
    description?: string;
    activeForm?: string;
    status?: ("pending" | "in_progress" | "completed") | "deleted";
    addBlocks?: string[];
    addBlockedBy?: string[];
    owner?: string;
    metadata?: {
        [k: string]: unknown;
    };
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
successbooleanYes
taskIdstringYes
updatedFieldsstring[]Yes
errorstringNo
statusChange{ from: string; to: string; }No
Full result definition
export interface TaskUpdateOutput {
    success: boolean;
    taskId: string;
    updatedFields: string[];
    error?: string;
    statusChange?: {
        from: string;
        to: string;
    };
}

Sources

TodoWriteReplace the session checklist.

Disabled by default; CLAUDE_CODE_ENABLE_TASKS=0 can restore it where task tracking is available.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
todos{ content: string; status: "pending" | "in_progress" | "completed"; activeForm: string; }[]YesThe updated todo list
Full input definition
export interface TodoWriteInput {
    todos: {
        content: string;
        status: "pending" | "in_progress" | "completed";
        activeForm: string;
    }[];
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
oldTodos{ content: string; status: "pending" | "in_progress" | "completed"; activeForm: string; }[]YesThe todo list before the update
newTodos{ content: string; status: "pending" | "in_progress" | "completed"; activeForm: string; }[]YesThe todo list after the update
Full result definition
export interface TodoWriteOutput {
    oldTodos: {
        content: string;
        status: "pending" | "in_progress" | "completed";
        activeForm: string;
    }[];
    newTodos: {
        content: string;
        status: "pending" | "in_progress" | "completed";
        activeForm: string;
    }[];
}

Sources

ToolSearchLoad deferred tools.

Deferred tool search enabled; actual discovered MCP tools remain server-defined.

InputSchema unavailable

ResultSchema unavailable

Sources

WebFetchFetch and process a web page.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
urlstringYesThe URL to fetch content from
promptstringYesThe prompt to run on the fetched content
offsetnumberNoCharacter position in the page text to start reading from. Use it to read on through a page too long for one call, with the value the previous result gave.
Full input definition
export interface WebFetchInput {
    url: string;
    prompt: string;
    offset?: number;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
bytesnumberYesSize of the fetched content in bytes
codenumberYesHTTP response code
codeTextstringYesHTTP response code text
resultstringYesProcessed result from applying the prompt to the content
durationMsnumberYesTime taken to fetch and process the content
urlstringYesThe URL that was fetched
artifactRead{ slug: string; ver?: string; seeded?: false; }No
Full result definition
export interface WebFetchOutput {
    bytes: number;
    code: number;
    codeText: string;
    result: string;
    durationMs: number;
    url: string;
    artifactRead?: {
        slug: string;
        ver?: string;
        seeded?: false;
    };
}

Sources

WebSearchSearch the web.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
querystringYesThe search query to use
allowed_domainsstring[]NoOnly include search results from these domains
blocked_domainsstring[]NoNever include search results from these domains
Full input definition
export interface WebSearchInput {
    query: string;
    allowed_domains?: string[];
    blocked_domains?: string[];
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
querystringYesThe search query that was executed
results({ tool_use_id: string; content: { title: string; url: string; snippet?: string; }[]; } | string)[]YesSearch results and/or text commentary from the model
durationSecondsnumberYesTime taken to complete the search operation
searchCountnumberNoNumber of web searches performed
Full result definition
export interface WebSearchOutput {
    query: string;
    results: ({
        tool_use_id: string;
        content: {
            title: string;
            url: string;
            snippet?: string;
        }[];
    } | string)[];
    durationSeconds: number;
    searchCount?: number;
}

Sources

WorkflowRun an orchestrated workflow.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
scriptstringNoSelf-contained workflow script. Must begin with export const meta = { name, description, phases } (pure literal, no computed values) followed by the script body using agent()/parallel()/pipeline()/phase().
namestringNoName of a predefined workflow (built-in or from .claude/workflows/). Resolves to a self-contained script.
descriptionstringNoIgnored — set the workflow description in the script's meta block.
titlestringNoIgnored — set the workflow title in the script's meta block.
args{ [k: string]: unknown; }NoOptional input value exposed to the script as the global args, verbatim. Pass arrays/objects as actual JSON values, NOT as a JSON-encoded string — a stringified list breaks args.filter/args.map in the script. Use for parameterized named workflows (e.g. a research question).
scriptPathstringNoPath to a workflow script file on disk. Every Workflow invocation persists its script under the session directory and returns the path in the tool result. To iterate, edit that file with Write/Edit and re-invoke Workflow with the same scriptPath instead of re-sending the full script. Takes precedence over script and name.
resumeFromRunIdstringNoRun ID of a prior Workflow invocation to resume from. Completed agent() calls with unchanged (prompt, opts) return their cached results instantly; only edited or new calls re-run. Same-session only. Stop the prior run first (TaskStop) before resuming.
Full input definition
export interface WorkflowInput {
    script?: string;
    name?: string;
    description?: string;
    title?: string;
    args?: {
        [k: string]: unknown;
    };
    scriptPath?: string;
    resumeFromRunId?: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
status"async_launched" | "remote_launched"Yes
taskIdstringYes
taskType"local_workflow" | "remote_agent"NoTaskType of the registered background task — 'local_workflow' for in-process runs, 'remote_agent' when remote:true dispatches to CCR. Set on all new writes; absent only on transcripts written before this field existed.
workflowNamestringNometa.name from the workflow script — same value as task_started.workflow_name. Set on all new writes; absent only on transcripts written before this field existed.
runIdstringNoLocal workflow run identifier for resumeFromRunId. Absent for remote_launched (the CCR session URL is the resume handle there) and on transcripts written before this field existed.
summarystringNo
transcriptDirstringNoDirectory where subagent transcripts are written during execution
scriptPathstringNoPath to the persisted workflow script for this invocation. Editable via Write/Edit; pass back as scriptPath to re-run without resending the script.
sessionUrlstringNoCCR session URL when status is remote_launched
warningstringNoNon-blocking heads-up (e.g. local git state diverges from the pushed branch the cloud session will clone)
errorstringNoSet if syntax check failed
Full result definition
export interface WorkflowOutput {
    status: "async_launched" | "remote_launched";
    taskId: string;
    taskType?: "local_workflow" | "remote_agent";
    workflowName?: string;
    runId?: string;
    summary?: string;
    transcriptDir?: string;
    scriptPath?: string;
    sessionUrl?: string;
    warning?: string;
    error?: string;
}

Sources

WriteWrite a file.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

Aliases and version differences: FileWrite (SDK type prefix, not a callable alias)

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
file_pathstringYesThe absolute path to the file to write (must be absolute, not relative)
contentstringYesThe content to write to the file
Full input definition
export interface FileWriteInput {
    file_path: string;
    content: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
type"create" | "update"YesWhether a new file was created or an existing file was updated
filePathstringYesThe path to the file that was written
contentstringYesThe content that was written to the file
structuredPatch{ oldStart: number; oldLines: number; newStart: number; newLines: number; lines: string[]; }[]YesDiff patch showing the changes (empty when nothing changed, the diff timed out, or — with originalFile null on an update — the previous content was too large to diff)
originalFilestring | nullYesThe original file content before the write (null for new files, or when the previous content was too large to include)
gitDiff{ filename: string; status: "modified" | "added"; additions: number; deletions: number; changes: number; patch: string; repository?: string | null; }No
userModifiedbooleanNoTrue when the user edited the proposed content in the permission dialog before accepting
stagedbooleanNoTrue when the write was held for the machine owner to review instead of written; the file is unchanged
Full result definition
export interface FileWriteOutput {
    type: "create" | "update";
    filePath: string;
    content: string;
    structuredPatch: {
        oldStart: number;
        oldLines: number;
        newStart: number;
        newLines: number;
        lines: string[];
    }[];
    originalFile: string | null;
    gitDiff?: {
        filename: string;
        status: "modified" | "added";
        additions: number;
        deletions: number;
        changes: number;
        patch: string;
        repository?: string | null;
    };
    userModified?: boolean;
    staged?: boolean;
}

Sources

MCP client

Work with resources on connected MCP servers.

ListMcpResourcesToolList connected MCP resources.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
serverstringNoOptional server name to filter resources by
Full input definition
export interface ListMcpResourcesInput {
    server?: string;
}

ResultPublished TypeScript

Full result definition
export type ListMcpResourcesOutput = {
    uri: string;
    name: string;
    mimeType?: string;
    description?: string;
    server: string;
}[];

Sources

ReadMcpResourceToolRead a resource URI.

Built in. The model, platform, mode, tool settings and permission rules can still remove it.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
serverstringYesThe MCP server name
uristringYesThe resource URI to read
Full input definition
export interface ReadMcpResourceInput {
    server: string;
    uri: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
contents{ uri: string; mimeType?: string; text?: string; blobSavedTo?: string; }[]Yes
errorstringNoHuman-readable error when the server could not read the resource
Full result definition
export interface ReadMcpResourceOutput {
    contents: {
        uri: string;
        mimeType?: string;
        text?: string;
        blobSavedTo?: string;
    }[];
    error?: string;
}

Sources

WaitForMcpServersWait for pending MCP connections.

Only when tool search is disabled; otherwise ToolSearch handles wait.

InputSchema unavailable

ResultSchema unavailable

Sources

SDK types only

Published in the Agent SDK types; when the CLI offers them is not public.

ClaudeDesignPublisher SDK contract for ClaudeDesign.

Publisher SDK type only; concrete CLI/host registration and gates not established.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
operationstringYesClaude Design action to perform. Call with "list" first to discover the available operations and their argument schemas.
arguments{ [k: string]: unknown; }YesAction input object (server-validated). Pass {} for operations that take no input.
Full input definition
export interface ClaudeDesignInput {
    operation: string;
    arguments: {
        [k: string]: unknown;
    };
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
operationstringYes
content{ [k: string]: unknown; }[]Yes
isErrorbooleanNo
Full result definition
export interface ClaudeDesignOutput {
    operation: string;
    content: {
        [k: string]: unknown;
    }[];
    isError?: boolean;
}

Sources

OfferChromeSetupPublisher SDK contract for OfferChromeSetup.

Publisher SDK type only; concrete CLI/host registration and gates not established.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
reasonstringNoA short phrase naming what the task needs the user's own browser for.
Full input definition
export interface OfferChromeSetupInput {
    reason?: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
outcome"connected" | "not_now" | "no_attempt_yet"Yes
Full result definition
export interface OfferChromeSetupOutput {
    outcome: "connected" | "not_now" | "no_attempt_yet";
}

Sources

ProjectsPublisher SDK contract for Projects.

Publisher SDK type only; concrete CLI/host registration and gates not established.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
method"project_info" | "project_read" | "project_search" | "project_write" | "project_delete" | "project_memory_list" | "project_memory_read"Yes
pathstringNoproject_read/project_write/project_delete: doc path. project_write: an existing path is replaced in place; a new bare filename (no "/") is namespaced to "claude/<name>". project_memory_read: memory file path as listed by project_memory_list.
contentstringNoproject_write: inline doc text. Mutually exclusive with local_path. Use local_path for anything you have on disk.
local_pathstringNoproject_write: a file inside the working directory to upload. The tool reads, encodes, and uploads directly — contents never enter your context. Mutually exclusive with content.
present_to_userbooleanNoproject_write: true marks this doc as the file the user needs to see — the deliverable they asked for or must act on. Defaults to false; leave it unset for routine saves, notes, and bulk writes.
querystringNoproject_search: knowledge-base query
nnumberNoproject_search: number of hits (default 5)
Full input definition
export interface ProjectsInput {
    method: "project_info" | "project_read" | "project_search" | "project_write" | "project_delete" | "project_memory_list" | "project_memory_read";
    path?: string;
    content?: string;
    local_path?: string;
    present_to_user?: boolean;
    query?: string;
    n?: number;
}

ResultPublished TypeScript

Full result definition
export type ProjectsOutput = {
    method: "project_info";
    notice?: string;
    name: string;
    description: string;
    instructions: string;
    docs: {
        path: string;
        created_at: string | null;
    }[];
    files?: {
        path: string;
        file_kind: string;
        created_at: string | null;
    }[];
    sync_sources?: {
        type: string | null;
        config: {
            [k: string]: unknown;
        };
    }[];
    knowledge: {
        knowledge_size: number;
        max_knowledge_size: number;
    };
} | {
    method: "project_read";
    notice?: string;
    path: string;
    file_kind?: string;
    content?: string;
    local_file?: string;
    created_at: string | null;
} | {
    method: "project_search";
    notice?: string;
    rag: boolean;
    hits?: {
        name?: string;
        doc_uuid?: string;
        text?: string;
    }[];
    docs?: string[];
} | {
    method: "project_write";
    notice?: string;
    path: string;
    doc_uuid: string;
    replaced: boolean;
    present_to_user?: boolean;
    local_path?: string;
} | {
    method: "project_delete";
    notice?: string;
    path: string;
    deleted: boolean;
} | {
    method: "project_memory_list";
    notice?: string;
    files: {
        path: string;
        size_bytes: number;
        updated_at: string | null;
        truncated: boolean;
    }[];
    truncated: boolean;
} | {
    method: "project_memory_read";
    notice?: string;
    path: string;
    content?: string;
    local_file?: string;
    size_bytes: number;
    updated_at: string | null;
    truncated: boolean;
};

Sources

ProposeGoalPublisher SDK contract for ProposeGoal.

Publisher SDK type only; concrete CLI/host registration and gates not established.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
conditionstringYesThe completion condition to propose, written so a separate evaluator can verify it from the conversation (e.g. "all tests in test/auth pass (bun test exits 0)"). At most 500 characters — the user must be able to read the whole condition in the approval dialog.
ask_userbooleanNoWhether to ask the user for approval before the goal is set. Defaults to true — an approval dialog is shown. Set false ONLY when the user's own words in this conversation stated this outcome as what they want; the goal is then set directly, with a visible notice in the transcript, and the user can clear it with /goal clear.
Full input definition
export interface ProposeGoalInput {
    condition: string;
    ask_user?: boolean;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
conditionstringYesThe condition shown to the user for approval, or set directly when ask_user was false
askUserbooleanYesWhether the user was asked for approval (true) or the goal was set directly (false)
Full result definition
export interface ProposeGoalOutput {
    condition: string;
    askUser: boolean;
}

Sources

ProposeSkillsPublisher SDK contract for ProposeSkills.

Publisher SDK type only; concrete CLI/host registration and gates not established.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
proposals[ { name: string; kind: "new" | "improvement"; target?: string; description: string; evidence?: string[]; skillMd: string; } ] | [ { name: string; kind: "new" | "improvement"; target?: string; description: string; evidence?: string[]; skillMd: string; }, { name: string; kind: "new" | "improvement"; target?: string; description: string; evidence?: string[]; skillMd: string; } ] | [ { name: string; kind: "new" | "improvement"; target?: string; description: string; evidence?: string[]; skillMd: string; }, { name: string; kind: "new" | "improvement"; target?: string; description: string; evidence?: string[]; skillMd: string; }, { name: string; kind: "new" | "improvement"; target?: string; description: string; evidence?: string[]; skillMd: string; } ]Yes
Full input definition
export interface ProposeSkillsInput {
    proposals: [
        {
            name: string;
            kind: "new" | "improvement";
            target?: string;
            description: string;
            evidence?: string[];
            skillMd: string;
        }
    ] | [
        {
            name: string;
            kind: "new" | "improvement";
            target?: string;
            description: string;
            evidence?: string[];
            skillMd: string;
        },
        {
            name: string;
            kind: "new" | "improvement";
            target?: string;
            description: string;
            evidence?: string[];
            skillMd: string;
        }
    ] | [
        {
            name: string;
            kind: "new" | "improvement";
            target?: string;
            description: string;
            evidence?: string[];
            skillMd: string;
        },
        {
            name: string;
            kind: "new" | "improvement";
            target?: string;
            description: string;
            evidence?: string[];
            skillMd: string;
        },
        {
            name: string;
            kind: "new" | "improvement";
            target?: string;
            description: string;
            evidence?: string[];
            skillMd: string;
        }
    ];
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
proposalCountnumberYesNumber of proposals shown on the review card
Full result definition
export interface ProposeSkillsOutput {
    proposalCount: number;
}

Sources

ReadMcpResourceDirToolPublisher SDK contract for ReadMcpResourceDirTool.

Publisher SDK type only; concrete CLI/host registration and gates not established.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
serverstringYesThe MCP server name
uristringYesThe directory resource URI to list
Full input definition
export interface ReadMcpResourceDirInput {
    server: string;
    uri: string;
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
resources{ uri: string; name: string; mimeType?: string; }[]YesDirect children of the directory resource. Subdirectories appear with mimeType "inode/directory".
errorstringNoHuman-readable error when the server could not list the directory
Full result definition
export interface ReadMcpResourceDirOutput {
    resources: {
        uri: string;
        name: string;
        mimeType?: string;
    }[];
    error?: string;
}

Sources

ReadNotificationsPublisher SDK contract for ReadNotifications.

Publisher SDK type only; concrete CLI/host registration and gates not established.

InputPublished TypeScript

Full input definition
export interface ReadNotificationsInput {
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
notifications{ notification_id: string; origin: string; queued_at: string; content: string; arrived_at?: string; }[]Yes
remainingnumberYesNotifications still queued after this drain (drains are size-budgeted); call the tool again to read them.
read_atstringNoRFC3339 timestamp, by this machine's clock, of when this call read the queue. Missing from results saved before this field existed.
Full result definition
export interface ReadNotificationsOutput {
    notifications: {
        notification_id: string;
        origin: string;
        queued_at: string;
        content: string;
        arrived_at?: string;
    }[];
    remaining: number;
    read_at?: string;
}

Sources

RefreshMcpToolsPublisher SDK contract for RefreshMcpTools.

Publisher SDK type only; concrete CLI/host registration and gates not established.

InputPublished TypeScript

FieldTypeRequiredMeaning and defaults
serverstringNoOptional server name: refresh only this server. Omit to refresh all connected servers.
Full input definition
export interface RefreshMcpToolsInput {
    server?: string;
}

ResultPublished TypeScript

Full result definition
export type RefreshMcpToolsOutput = {
    server: string;
    status: "refreshed" | "error" | "not_connected";
    toolCount?: number;
    added?: string[];
    removed?: string[];
    error?: string;
}[];

Sources

ShowOnboardingRolePickerPublisher SDK contract for ShowOnboardingRolePicker.

Publisher SDK type only; concrete CLI/host registration and gates not established.

InputPublished TypeScript

Full input definition
export interface ShowOnboardingRolePickerInput {
}

ResultPublished TypeScript

FieldTypeRequiredMeaning and defaults
rolestringNo
dismissedbooleanNo
Full result definition
export interface ShowOnboardingRolePickerOutput {
    role?: string;
    dismissed?: boolean;
}

Sources

Removed

Kept for old transcripts and SDK code.

REPLExecute in the historical experimental REPL.

Removed in CLI 2.1.275. Experimental through 2.1.274 with CLAUDE_CODE_REPL=1. Historical contract unavailable.

InputSchema unavailable

ResultSchema unavailable

Sources

TaskOutputRead background task output (historical).

Removed in CLI 2.1.277; retained only as a historical name. Use Read on the background output file.

InputSchema unavailable

ResultSchema unavailable

Sources

How the Claude Code contracts were sourced

Checked 2026-10-27 against source revision @anthropic-ai/claude-agent-sdk@0.3.310. Inputs: 43 Published TypeScript; 13 Schema unavailable. Results: 43 Published TypeScript; 13 Schema unavailable.

  • No model-driven runtime probe was run.
  • Arbitrary host extensions, dynamic tools, MCP servers and future/closed-source tools are open-ended; universal inventory completeness is not claimed.
  • Hosted service internals and runtime catalog overrides are not established by source/type inspection.
  • Publisher-generated TypeScript; preserves required keys, unions, literals and tuples. Defaults, runtime bounds and extra-key rejection are not inferred from types.
  • CLI tool_use input and tool_result content are separate from SDK structured results. Permission/hook denial may prevent execution; is_error/content does not imply the success type.
  • No model execution or destructive tool probe was run. Closed-source CLI internals and hosted implementation are unavailable.
  • The pinned SDK does not publish this tool input type. Documentation confirms tool identity/behavior only; examples do not establish a complete schema.
  • No complete result type in the pinned publisher SDK. Text/examples are not an exhaustive result schema.