Capability matrix
What each shipped provider declares. The session reads these flags to route behavior — a capability a provider doesn't declare fails typed at the call site instead of degrading silently.
Provider capabilities
| Capability | Anthropic | OpenAI | Gemini | Your backend | AgentKit Cloud | Apple on-device |
|---|---|---|---|---|---|---|
| execution model | app-driven | app-driven | app-driven | app-driven | app-driven | provider-driven |
| tool discovery | per request | per request | per request | per request | per request | eager, with automatic staged-discovery fallback past maxTools |
| vision | yes | yes | yes | no (opt-in) | profile-dependent | OS 27+, runtime-reported |
| structured output | no | yes | yes | no (opt-in) | no | yes |
| tool choice | yes | yes | yes | no (opt-in) | yes | OS 27+ |
| parallel tool calls | yes | yes | yes | yes | yes | yes |
| managed conversation | no | no | no | no | no | no |
| requires networking | yes | yes | yes | yes | yes | no (Private Cloud Compute: yes) |
| backend-managed system prompt | no | no | no | yes | yes | no |
| max tools | — | — | — | — | — | 20 |
| context window | 200,000 | 128,000 | 1,000,000 | — | — | measured at construction (4,096 on-device) |
How to read it:
- no (opt-in) — the SDK cannot know what a self-hosted backend implements, so the freeform defaults are conservative; declare what your server honors via its capabilities parameter. See your own backend.
- profile-dependent — image blocks ride the wire unconditionally; the
tier's model decides what it can see, and the cloud advertises the
capabilities it resolved for your agent and tier in its handshake. The
cloud-profile provider starts from a conservative seed and adopts those
advertised values once a turn streams, so
capabilitiesreflects the wire rather than a fixed client-side guess (you can also seed them at construction). See send images. - — means no declared value: backends manage their own token budgets and tool limits server-side.
- OS 27+ rows are platform-conditional: on macOS 26 / iOS 26 /
visionOS 26 the flag is
false; on OS 27 vision reflects what the model itself reports. The on-device context window is measured from the device's model at construction; the Private Cloud Compute configuration reports its own window andrequiresNetworking. See on-device with Apple. - managed conversation: no everywhere — no shipped provider stores the conversation for you; the session sends the history it owns. See conversations.
Run limit defaults
Every turn is bounded by AgentRunLimits. These are the defaults
(AgentRunLimits.default), all overridable per agent:
| Limit | Default |
|---|---|
maxToolCallsPerTurn |
12 |
maxProviderRoundTrips |
8 |
maxContinuationRebuilds |
1 |
confirmationTimeoutSeconds |
45 |
maxWallClockSeconds |
60 |
Behavior and the error each trips: bound the turn.