OptionalactionableOptional actionable commands shown as clickable buttons/links. Typically used after completing work to provide navigation to created/modified resources.
OptionalartifactArtifact tool invocations — explore input artifacts without dumping full content into context. Processed inline on the same turn as other response fields (zero turn cost). Results are injected into the next turn's prompt via _ARTIFACT_TOOL_RESULTS.
OptionalautomaticOptional automatic commands executed immediately when received. Used for refreshing data, showing notifications, and updating UI state.
OptionalconfidenceConfidence level (0.0-1.0)
OptionalconversationConversation-history retrieval tool invocations — page exact pre-summary
messages back into context by their persisted Sequence handles, or search
the full stored history. Processed inline on the same turn as other response
fields (zero turn cost); results are injected as a conversation message on
the next turn. Only honored when the run has a conversationId.
OptionalmemoryDurable memory writes — record facts/preferences that persist across runs. Processed inline on the same turn as other response fields (zero turn cost). Each write lands as a Provisional agent note — immediately injectable into future runs, later hardened or pruned by the Memory Manager. Only honored when the agent has AllowMemoryWrite enabled; the framework enforces type restriction, scope clamping, deduplication, and per-run caps.
OptionalmessagePlain text message (<100 words). Required for 'Chat' type, omit for others
OptionalnextNext action. Required when taskComplete=false
Optionalactions?: { name: string; params: Record<string, unknown> }[]Actions to execute (when type='Actions')
OptionalclientTools?: {Client tools to invoke (when type='ClientTools'). Supports both PascalCase (spec) and camelCase (LLM convenience).
OptionalforEach?: ForEachOperationForEach operation details (when type='ForEach')
OptionalmessageIndex?: numberIndex of a compacted message to expand (when type='Retry'). The message is restored to full content and the prompt re-runs.
Optionalpipeline?: AgentPipelineRequestTool pipeline to run server-side (when type='Pipeline'). Like client tools, it is a
yield/await action: the agent cannot know the result until it executes, so the loop runs
the pipeline inline, injects the final output, and forces one more turn. Only the final
step's output enters the context window. Modeling it as a nextStep.type (rather than a
top-level field) makes it structurally mutually exclusive with Actions/Chat/etc. — the LLM
cannot accidentally request a pipeline AND another step in the same turn.
Optionalplan?: stringThe proposed plan (when type='Plan', Plan Mode only). Presenting a plan pauses the run and asks the human to approve or edit it via a response-form card before you may execute any Actions or Sub-Agents. See the Plan Mode section for when this is required.
Optionalreason?: stringReason for expanding the message (when type='Retry')
Optionalskills?: { name: string; reason?: string }[]Skills to activate (when type='Skill'). Reference by catalog Name only — you only ever see name + description for skills you haven't activated yet (progressive disclosure). Activating a skill appends its full instructions to your context and enables its bundled Actions/sub-agents for the rest of this run. This is NOT a nested agent run.
OptionalsubAgent?: {Sub-agent details (when type='Sub-Agent')
Instructions for the sub-agent, NOT the payload, that is handled elsewhere
OptionaltemplateParameters?: Record<string, any>Extra parameters - NOT the payload, only use these if the sub-agent specifically defines parameters in its metadata, otherwise these will be ignored and waste tokens!
true=end parent, false=continue
OptionalsubAgents?: {Multiple sub-agents to run in parallel (when type='Sub-Agent')
Operation type: 'Actions' | 'ClientTools' | 'Sub-Agent' | 'Chat' | 'Retry' | 'ForEach' | 'While' | 'Pipeline' | 'Skill'
Optionalwhile?: WhileOperationWhile operation details (when type='While')
OptionalpayloadPayload changes. Omit if no changes needed
OptionalreasoningInternal reasoning for debugging
OptionalresponseOptional response form to collect structured user input. When present, UI will render appropriate input controls.
OptionalscratchpadPrivate working memory — not shared with parent or sub-agents. Processed inline on the same turn as other response fields (zero turn cost). Use for internal reasoning notes and structured task tracking.
OptionaltaskTask completion status. true = terminate loop, false = continue
Response structure for Loop Agent Type