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 capabilities reflects 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 and requiresNetworking. 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.