spec/v0.5.1

microsoft/agent-host-protocolspec/v0.5.1Jul 2, 2026by github-actions[bot]

Upgrading?

Release notes summary

Defines the protocol spec for AHP 0.5.1, defining session-level input tracking, pagination, and capability checks for multi-chat scenarios.

Key Highlights

  • Session-level `inputNeeded` aggregate and associated actions.
  • Cursor-based pagination for listing sessions.
  • Capability-based gating for multi-chat and fork features.

Breaking Changes

  • Removed `filter` field from `ListSessionsParams`.
  • `fetchTurns` contract changed to be incompatible with 0.5.0.

New Features

  • Optional `model` and `tools` fields on `AgentCustomization`.
  • Optional `nonce` field on `ContentRef`.
  • Optional `intention` field on tool calls.

Full Release Notes

## [0.5.1] — 2026-07-02

Spec version: `0.5.1`

### Added

- `SubscribeParams.delivery.maxLatencyMs` for clients to request a maximum
  subscription delivery latency, including `0` for no intentional coalescing.
- `SessionState.inputNeeded` — a session-level aggregate of outstanding input
  requests across all chats, so a client can discover and answer elicitations,
  tool confirmations, and client-tool execution requests from the session
  channel without subscribing to individual chats. Each entry
  (`SessionChatInputRequest`, `SessionToolConfirmationRequest`,
  `SessionToolClientExecutionRequest`, unioned as `SessionInputRequest`) carries
  the owning chat URI plus the identifiers needed to respond.
- `session/inputNeededSet` and `session/inputNeededRemoved` actions for the host
  to upsert and remove `SessionState.inputNeeded` entries. The session reducer
  sets `SessionStatus.InputNeeded` while the queue is non-empty and clears it
  (falling back to `InProgress`) once it empties, preserving orthogonal flags.
- `ToolCallConfirmationState` union (`ToolCallPendingConfirmationState |
  ToolCallPendingResultConfirmationState`) for the tool call carried by
  `SessionToolConfirmationRequest`.
- Optional `nonce` field on `ContentRef`.
- Optional `intention` field on `chat/toolCallStart` and every `ToolCallState`
  variant, providing a human-readable description of what the invocation intends
  to do.
- Optional `model` and `tools` fields on `AgentCustomization`, giving a custom
  agent's pinned model and tool allowlist a first-class home instead of `_meta`.
- Optional `capabilities` field on `AgentInfo` (`AgentCapabilities` with a
  nested `multipleChats` capability carrying `fork`) so clients gate multi-chat
  and fork via advertised capabilities instead of provider-id switches.
- Cursor-based pagination for `listSessions`, via new shared `PaginatedParams`
  (`limit` + `cursor`) and `PaginatedResult` (`nextCursor`) types:
  `ListSessionsParams` now extends `PaginatedParams` and `ListSessionsResult`
  extends `PaginatedResult`, letting clients fetch a large session catalogue
  incrementally. Fully additive — omitting the fields preserves today's
  behaviour.
- `SubscribeParams.view.turns`, `ChatState.turnsNextCursor`, and the
  `chat/turnsLoaded` action so clients can subscribe to a bounded tail of chat
  history and page older turns into the reduced chat state on demand.

### Changed

- `fetchTurns` now accepts `cursor` from `ChatState.turnsNextCursor` and returns
  an empty result after the host has loaded older turns into chat state, instead
  of returning a detached `{ turns, hasMore }` page.
- Generated clients now advertise only protocol `0.5.1`, since the `fetchTurns`
  contract is not wire-compatible with `0.5.0`.

### Removed

- `filter` field from `ListSessionsParams`. It was an untyped `object`
  placeholder with no defined semantics; it will be reintroduced with a concrete
  shape once session filtering/sorting is specified.

Related Repositories