---
title: "Universal Schema Support"
description: "Which agent features are exposed through the universal API."
icon: "table"
---

The universal API normalizes different coding agents into a consistent interface. All agents have full native capabilities; this page shows what's exposed via the sandbox-agent API.

## Feature Matrix

| Feature            | Claude | Codex | OpenCode     | Amp          |
|--------------------|:------:|:-----:|:------------:|:------------:|
| Stability          | Stable | Stable| Experimental | Experimental |
| Text Messages      |   ✓    |   ✓   |      ✓       |      ✓       |
| Tool Calls         |   ✓    |   ✓   |      ✓       |      ✓       |
| Tool Results       |   ✓    |   ✓   |      ✓       |      ✓       |
| Questions (HITL)   |   ✓    |       |      ✓       |              |
| Permissions (HITL) |   ✓    |   ✓   |      ✓       |      -       |
| Images             |   -    |   ✓   |      ✓       |      -       |
| File Attachments   |   -    |   ✓   |      ✓       |      -       |
| Session Lifecycle  |   -    |   ✓   |      ✓       |      -       |
| Error Events       |   -    |   ✓   |      ✓       |      ✓       |
| Reasoning/Thinking |   -    |   ✓   |      -       |      -       |
| Command Execution  |   -    |   ✓   |      -       |      -       |
| File Changes       |   -    |   ✓   |      -       |      -       |
| MCP Tools          |   -    |   ✓   |      -       |      -       |
| Streaming Deltas   |   ✓    |   ✓   |      ✓       |      -       |

Agents: [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview) · [Codex](https://github.com/openai/codex) · [OpenCode](https://github.com/opencode-ai/opencode) · [Amp](https://ampcode.com)

- ✓ = Supported in universal schema
- \- = Schema support in progress

## Feature Descriptions

### Text Messages

Basic message exchange between user and assistant.

### Tool Calls & Results

Visibility into tool invocations (file reads, command execution, etc.) and their results. When not natively supported, tool activity is embedded in message content.

### Questions (HITL)

Interactive questions the agent asks the user. Emits `question.requested` and `question.resolved` events.

### Permissions (HITL)

Permission requests for sensitive operations. Emits `permission.requested` and `permission.resolved` events.

### Images

Support for image attachments in messages.

### File Attachments

Support for file attachments in messages.

### Session Lifecycle

Native `session.started` and `session.ended` events. When not supported, the daemon emits synthetic lifecycle events.

### Error Events

Structured error events for runtime failures.

### Reasoning/Thinking

Extended thinking or reasoning content with visibility controls.

### Command Execution

Detailed command execution events with stdout/stderr.

### File Changes

Structured file modification events with diffs.

### MCP Tools

Model Context Protocol tool support.

### Streaming Deltas

Native streaming of content deltas. When not supported, the daemon emits a single synthetic delta before `item.completed`.

## Synthetic Events

For features not natively supported, the daemon generates synthetic events to maintain a consistent event stream. Synthetic events have:

- `source: "daemon"`
- `synthetic: true`

This lets you build UIs that work with any agent without special-casing each provider.

## Request Support

Want support for another agent? [Open an issue](https://github.com/rivet-dev/sandbox-agent/issues/new) to request it.
