spec/v0.5.2

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

Upgrading?

Release notes summary

Defines the protocol spec for AHP 0.5.2, establishing resource request handling, terminal content support, and input request persistence.

Key Highlights

  • Resource request handling for both sending and receiving via the host.
  • Input request persistence in `responseParts` on `chat/inputCompleted`.
  • Actions for clients to request MCP server start or stop.

New Features

  • Optional `enabled` flags on child customizations.
  • Optional `_meta` provider metadata on all customization types.
  • Optional `terminalCommandPrefix` on `InitializeResult`.

Full Release Notes

## [0.5.2] — 2026-07-09

Spec version: `0.5.2`

### Added

- `ToolResultTerminalCompleteContent` for terminal-style completion metadata in tool
  results.
- Optional `enabled` flag on the child customizations (`AgentCustomization`,
  `SkillCustomization`, `PromptCustomization`, `RuleCustomization`,
  `HookCustomization`) so an individual child can be turned off independently of
  its container; absent means enabled.
- `disableUserInvocation` on `SkillCustomization`, plus `disableModelInvocation`
  and `disableUserInvocation` on `AgentCustomization`, giving custom agents and
  skills a symmetric user/model invocation matrix.
- Optional `reviewed` field on `ChangesetFile`. Omitting it (or setting it to
  `undefined`) signals that the server does not support the file "review"
  functionality.
- `changeset/filesReviewedChanged` action for servers to update the `reviewed`
  flag of one or more changeset files.
- Hoisted the optional `_meta` provider-metadata slot from `AgentCustomization`
  up to the shared `CustomizationBase`, so every customization type
  (`PluginCustomization`, `ClientPluginCustomization`, `DirectoryCustomization`,
  `SkillCustomization`, `PromptCustomization`, `RuleCustomization`,
  `HookCustomization`, and `McpServerCustomization`) now carries the same
  provider-specific escape hatch. Wire-compatible: `AgentCustomization` still
  exposes `_meta`, now by inheritance.
- Optional `serverInfo` on `InitializeResult` and `clientInfo` on
  `InitializeParams`, each an `Implementation` (`name`, optional `version`,
  optional `title`), so either side of the handshake can identify its
  implementation and build. Informational only — mirrors LSP/MCP and MUST NOT
  be used for feature detection.
- `InputRequestResponsePart` (`kind: 'inputRequest'`) — a new `ResponsePart`
  variant that records a resolved input request in a turn's transcript. On
  `chat/inputCompleted`, the reducer now appends this part (embedding the
  resolved `ChatInputRequest` with its final `answers` and the `response`:
  `accept`, `decline`, or `cancel`) to the active turn's `responseParts`, so an
  elicitation's outcome persists durably, mirroring how a resolved tool-call
  confirmation is retained. Requests abandoned by turn end, cancel, error, or
  truncation still record nothing (#324).
- Optional `terminalCommandPrefix` marker on `InitializeResult` for hosts that
  support interpreting `!`-prefixed user messages as terminal commands.
- Optional `version` field on `PluginCustomization` (inherited by
  `ClientPluginCustomization`), carrying the plugin's semver sourced from the
  Open Plugins manifest's optional `version`. Provenance / display only; absent
  when the manifest declares no version or the source has no version concept.
- `session/mcpServerStartRequested` and `session/mcpServerStopRequested`
  actions for clients to ask the host to start or stop MCP servers; stopping
  moves an `authRequired` server to `stopped` so it no longer waits on
  authentication.

### Changed

- `session/customizationToggled` now targets any top-level customization
  (`plugin`, `directory`, or top-level `mcpServer`) or an individual child by
  `id` and sets that entry's `enabled`; the effective state of a child is
  `container.enabled && (child.enabled ?? true)`.

### Fixed

- The generated JSON Schema artifacts (`schema/*.json`) are now self-contained
  and strict-`oneOf`-safe. The generator no longer emits an empty `{}` branch in
  a union type alias's `oneOf` (which matched any value and defeated strict
  `oneOf` validation), backfills the `enum`, enum-member, and type-alias `$ref`s
  that were previously dangling across all five schema files, and renders `null`
  members as `{ "type": "null" }` (#302).

Related Repositories