Skip to content

feat(unstable): add auth/status method and auth/status_update notification - #2732

Merged
benbrandt merged 4 commits into
mainfrom
feat/auth-status
Oct 30, 2026
Merged

benbrandt merged 4 commits into
mainfrom
feat/auth-status

Conversation

@benbrandt

@benbrandt benbrandt commented Oct 30, 2026 •

Copy link
Copy Markdown
Member

Adds schema support for the get-auth-state RFD behind a new unstable_auth_status feature (included in unstable), in both v1 and v2 with the same wire shape. It also revises the RFD.

Shape

// auth/status response and auth/status_update notification
{
  state: "authenticated" | "unauthenticated" | "not_required" | "unknown" | string
  accounts?: AuthAccount[]
  _meta?
}
AuthAccount { label: string, active?: boolean, name?, email?, organization?, _meta? }
  • state is required and strict, and it's the only field clients act on. Clients treat values they don't recognize as unknown. not_required covers local models. Expired or invalid credentials are reported as unauthenticated.
  • accounts is display-only and lenient: malformed values are ignored and malformed entries are skipped, following the same pattern as authMethods. API keys show up as label-only entries. Several accounts can be active, for example one per provider. Clients must not use these fields as stable identifiers and should not log them or send them to telemetry.
  • auth/status_update is a connection-scoped agent→client notification that carries the full snapshot. Agents send it when the status changes, including when the user signs in or out outside the client.
  • Capability: agentCapabilities.auth.status: {}. It's an object rather than the RFD's original boolean, to match logout, fork and providers.

RFD changes

The original RFD had { authenticated: bool, message?: string }. The revised shape comes from a survey of ACP registry agents, the Claude and Codex adapters, Junie, and prior art like VS Code accounts, gh auth status, gcloud and az:

  • About half the agents hold credentials for several providers, which is why accounts is a list.
  • A boolean can't express "no auth needed" or "can't tell", which is why state has four values.
  • Credential kinds, plans and credential sources differ too much between agents to standardize, so they're left to label and _meta.

How this interacts with the providers API is left open while that API is reworked.

I also replaced the outdated setLlmEndpoints references in the RFD.

Docs

  • v2 overview: a row in the unstable features table.
  • Initialization pages: auth.status on the v2 page and status on the v1 page.
  • RFD: agents MUST NOT reject auth/status with auth_required, since auth/status is how a Client finds out that authentication is required.

The authentication pages themselves don't describe the feature yet, so the RFD is the reference for now, as the overview table says.

…ation

Add schema support for the get-auth-state RFD behind the new
`unstable_auth_status` feature, in both v1 and v2:

- `auth/status` request and response, advertised via
  `agentCapabilities.auth.status`
- `auth/status_update` agent-to-client notification carrying the same
  snapshot
- a strict top-level `state` (`authenticated`, `unauthenticated`,
  `not_required`, `unknown`, or an extension value) and a lenient,
  display-only `accounts` list

Update the RFD to match, based on a survey of how ACP agents and other
tools report authentication state.
@benbrandt
benbrandt requested a review from a team as a code owner October 30, 2026 17:28
@benbrandt
benbrandt enabled auto-merge (squash) October 30, 2026 17:30
…ions

Use the current v2 _meta and capability wording, fix builder doc
punctuation, list auth/status in the draft overview and initialization
pages, and state that auth/status is never rejected with auth_required.
# Conflicts:
#	docs/protocol/v2/draft/overview.mdx
@benbrandt
benbrandt merged commit 7058a4f into main Oct 30, 2026
14 checks passed
@benbrandt
benbrandt deleted the feat/auth-status branch October 30, 2026 18:33
@acp-release-bot acp-release-bot Bot mentioned this pull request Oct 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant