Capabilities
Agents in the AG-UI protocol can declare what they support at runtime through capability discovery. This allows clients to query an agent and adapt their behavior based on what features are available — without guessing or hardcoding assumptions.How It Works
AbstractAgent exposes an optional getCapabilities() method that returns a
typed snapshot of everything the agent currently supports:
Key Principles
- Discovery only — the agent declares what it can do, there is no negotiation
- Dynamic — returns the current state at the time of the call (e.g., if tools are added, the next call reflects them)
- Optional — agents that don’t implement it return
undefined - Absent = unknown — only declare what you support, omitted fields mean the capability is not declared
The AgentCapabilities Interface
Capabilities are organized into typed categories, each representing a different aspect of agent functionality:custom field is an escape hatch for integration-specific capabilities that
don’t fit into the standard categories.
Capability Categories
Identity
Basic metadata about the agent. Useful for discovery UIs, agent marketplaces, and debugging. Set these when you want clients to display agent information or when multiple agents are available and users need to pick one.Transport
Declares which transport mechanisms the agent supports. Clients use this to pick the best connection strategy. Only set flags totrue for transports your agent
actually handles — omit or set false for unsupported ones.
Tools
Tool calling capabilities. Distinguishes between tools the agent itself provides (listed initems) and tools the client passes at runtime via
RunAgentInput.tools. Enable this when your agent can call functions, search the
web, execute code, etc.
Output
Output format support. EnablestructuredOutput when your agent can return
responses conforming to a JSON schema, which is useful for programmatic
consumption.
State
State and memory management capabilities. These tell the client how the agent handles shared state and whether conversation context persists across runs.Multi-Agent
Multi-agent coordination capabilities. Enable these when your agent can orchestrate or hand off work to other agents.Reasoning
Reasoning and thinking capabilities. Enable these when your agent exposes its internal thought process (e.g., chain-of-thought, extended thinking).Multimodal
Multimodal input and output support, organized intoinput and output
sub-objects so clients can independently query what the agent accepts versus what
it produces. Clients use this to show/hide file upload buttons, audio recorders,
image pickers, etc.
Execution
Execution control and limits. Declare these so clients can set expectations about how long or how many steps an agent run might take.Human-in-the-Loop
Human-in-the-loop interaction support. Enable these when your agent can pause execution to request human input, approval, or feedback before continuing.Implementing getCapabilities()
Custom Agents
ImplementgetCapabilities() on your agent subclass, returning only the
capabilities you actually support:
Dynamic Capabilities
SincegetCapabilities() returns a live snapshot, it reflects the agent’s
current state:
Client Usage Patterns
Adaptive UI
Render UI components based on what the agent supports:Feature Gating
Disable features the agent doesn’t support instead of failing at runtime:Custom Capabilities
Access integration-specific capabilities via thecustom field: