v1.0.0
First major release. The @aauth/bootstrap and @aauth/fetch CLIs are reworked into a stable, agent-first surface, alongside breaking library changes in @aauth/local-keys and @aauth/mcp-agent. Closes #1.
Breaking changes
CLI surface (bootstrap + fetch)
- Renamed:
--access-token→--opaque-token; envAAUTH_ACCESS_TOKEN→AAUTH_OPAQUE_TOKEN; JSON fieldaccess_token→opaque_token(per spec's "opaque" terminology, distinct from OAuth'saccess_token). --with-token/authorizeoutput shape flattened:responseis now the resource body directly (was{ status, body }).signingKeyis emitted only when anauth_tokenis present — two-party--opaque-tokenreuse binds per-request to the agent identity and needs no signing key.--authorizeflag →authorizesubcommand.--agent-url→--agent-provider(consistent across both CLIs).- Dropped
--log/--jsonl— use-vinstead. - Positional
<url>→<resource>(cosmetic). help [command]subcommand added (alongside--help).- Spec-aligned JSON snake_case for protocol fields:
auth_token,expires_in,login_hint,domain_hint. Our own artifacts stay camelCase:signingKey,signatureKey,agentProvider. - Two-party
AAuth-Accessfix to spec: opaque token sent under theAAuthscheme (wasBearer) withauthorizationin the signature's covered components — bound to the signature, not a bearer. - Single fetch skill (no name argument); bootstrap dropped the
protocolskill — the spec URL is appended to every skill output instead.
Libraries
@aauth/local-keys: removedPersonServerMetadatatype andAgentConfig.personServerMetadatafield. Added newmetadata-cachemodule:readCachedMetadata,writeCachedMetadata,evictCachedMetadata,parseMaxAge,PS_METADATA_FILE.@aauth/mcp-agentcreateAAuthFetch: renamed optionsaccessToken→opaqueToken,onAccessToken→onOpaqueToken. AddedonAuthTokencallback. Two-partyAAuth-Accesssend path fixed (scheme + signature binding).
New features
- PS metadata caching at
~/.aauth/cache/<host>/aauth-person.json, with~/.aauth/cache/index.jsonholdingexpires_atper entry. TTL from server'sCache-Control: max-age, else a ~1-day default. Refetched on expiry; self-heal: a stale cached endpoint (404/410 or connection failure) evicts the entry and refetches once (bounded, no loop). --with-tokenreturns the response + reusable credential in one call — skip a separateauthorizeround-trip.--opaque-token/AAUTH_OPAQUE_TOKENfor two-party reuse.--no-browserprints the approval URL with a scannable QR.-vverbose output shows the real on-the-wire RFC 9421 signed headers at each protocol step.
Notes on the lockstep version bump
The four unchanged packages — @aauth/hardware-keys, @aauth/mcp-server, @aauth/mcp-stdio, @aauth/mcp-openclaw — also publish at 1.0.0 due to the project's lockstep versioning policy (enforced by the release workflow). No API changes in those.