Skip to content

Message parts surface

Message rendering MUST preserve typed parts. Agent UI clients should not flatten every runtime event into one Markdown string.

Standard parts

PartSurfaceDefault behavior
user_textConversationShow immediately and preserve author identity.
assistant_textConversationRender as final answer text.
reasoning_summaryProcessCollapse or summarize by default.
reasoning_detailProcessShow only when policy and user setting allow it.
runtime_statusProcess or TaskDisplay as compact status, not as message prose.
tool_callProcessShow compact step with input summary.
tool_resultProcessShow preview, summary, or detail drawer.
action_requiredTaskShow explicit CTA and pending state.
artifact_refArtifactShow summary card and open in Artifact Workspace.
evidence_refEvidenceShow source, verification, or replay entry.
errorProcess or TaskShow recoverable diagnostic and next action.

Final answer boundary

The final answer SHOULD contain what the user needs to read or act on. It SHOULD NOT contain raw tool logs, queue events, unfiltered reasoning, runtime tracing, or evidence payloads.

Allowed in final answer:

  • concise explanation
  • user-facing conclusion
  • links or references to artifacts
  • citations backed by evidence facts
  • next steps that are part of the answer

Not allowed by default:

  • raw JSON tool output
  • repeated streamed final text
  • hidden reasoning markers
  • provider debug logs
  • approval payloads
  • full evidence packs

Reconciliation

Some runtimes stream deltas and later emit final content. The UI MUST reconcile final content instead of blindly appending it.

Recommended rules:

  1. Append only typed assistant_text deltas to answer text.
  2. Store reasoning, tool, status, action, and artifact in their own parts.
  3. On final payload, compare with streamed answer and replace or mark reconciliation if necessary.
  4. Never use final payload to duplicate the already-rendered answer.
  5. Keep reconciliation deterministic and testable.

Branch and retry

If a client supports retry, regenerate, or branch:

  • Branches SHOULD preserve user message, selected context, mode, and artifacts.
  • Each assistant branch SHOULD keep its own process and evidence references.
  • Retrying a failed tool SHOULD create a new process item or attempt record.
  • The UI SHOULD show which branch produced which artifact.

Acceptance scenarios

  1. Reasoning text never appears inside final answer text unless explicitly exported as an answer.
  2. Tool output is inspectable but collapsed outside the final answer by default.
  3. action_required renders as a CTA, not as plain Markdown.
  4. artifact_ref opens a dedicated Artifact Workspace.
  5. Final payload reconciliation does not duplicate streamed text.

Draft runtime-first standard for agent interaction surfaces.