Skip to main content
An agent body yields two kinds of value. Strings render as markdown. Dicts render as components. Both stream as they are produced, so the interface fills in while the model is still working.

Component reference

Raw HTML strings pass through, which is the escape hatch for anything the components do not cover.

Thinking

Consecutive thinking yields append to the same bubble until a different type arrives. Provider reasoning deltas map here automatically, so extended thinking from Anthropic and delta.reasoning from OpenAI-compatible endpoints both show up without any work on your side.

Tables

Send the header row once, then one row per record. Rows render as they arrive, so a slow query shows partial results instead of nothing.

Client actions

A ui event triggers something in the client. Nothing is rendered in the conversation and nothing is kept in history.
The Canvas, Suggest and Ask built-in tools fire these for you. Yield them directly only from a custom loop. One difference worth knowing: when the Ask tool fires, the turn ends, because the next user message carries the answers.

Errors

An unhandled exception inside the body becomes a callout with a short reference id, and the full traceback goes to structured logs.
Look it up with the reference:
Errors the loop handles itself, such as a rate limit retry or a tool timeout, are shown as callouts and are not logged as failures.

Next

Context

What the body receives on every turn.