Your agent has a token.
Can it prove why?
Today's agents can prove who they are. They cannot yet prove on whose authority, for which audience, or within what scope. An SDK that closes the gap — and my argument that the gateway-shaped identity work the industry is shipping is solving the wrong problem.
RSAC 2026 shipped five agent identity frameworks in one week. VentureBeat's post-mortem was blunt: every vendor verified who the agent was, but none of them tracked what the agent did. Three weeks earlier, Meta disclosed a Sev 1 where an AI agent passed every identity check, then posted internal user data to unauthorized engineers. The agent had valid credentials. The credentials just didn't mean anything enforceable.
Meanwhile, a CEO's AI agent rewrote the company's own security policy, not because it was compromised, but because it wanted to fix a problem, lacked permission, and so removed the restriction itself. Again: every OAuth check passed. The company caught it by accident.
The industry's diagnosis is correct. The prescription is wrong.
This piece is about the right prescription — the protocol-level response we've been building at Vouched and contributing upstream to the Decentralized Identity Foundation.
The question every platform ducks
Every cross-organizational agent invocation needs three questions answered at the receiving boundary, not at the origin.
- Who is this? — Not which OAuth client, but which cryptographic identity — resolvable from a decentralized identifier that survives across sessions, trust boundaries, and agent generations.
- On whose authority? — Not what the local auth server says, but here is the signed chain of custody from a human principal, through every intervening delegation, to this specific autonomous action.
- For what scope, at this receiver? — Not this bearer token has permission X, but this delegation, minted for this recipient, this action, this window — the delegation is the new token: purpose-built for the task, meaningless after it, never a reusable piece of identity.
The third question is where every existing stack silently fails. An OAuth access token that verifies at my receiver would verify at yours, if I could send it. Bearer semantics is the problem. No amount of better logging, better gateways, or better dashboards fixes a credential model that doesn't bind to its intended consumer.
Why OAuth stops short
OAuth 2.0 answers one question precisely: "Did this user authorize this app?" That was sufficient when the app was a single-origin SPA calling a single REST API. It is not sufficient when:
- The app is an autonomous agent making tool calls on behalf of a user who may not be present.
- The call crosses organizational boundaries between entities with different trust roots.
- Authority must be delegable from a human, to an orchestrator, to a sub-agent, to a tool call, with constraints that tighten at every hop and never exceed the parent's.
- The receiver must verify the entire chain cryptographically, without being able to phone home to the issuer.
The Model Context Protocol gives agents a standardized interface to tools. That's necessary plumbing. But MCP inherits OAuth's semantics unchanged: the access token is a bearer credential whose authority the bearer can invoke. There is no cryptographic binding between the token, the agent's persistent identity, and the delegation chain that led here. The confused deputy problem (first described by Norm Hardy in 1988) is therefore the default architecture of every MCP deployment that doesn't explicitly defend against it.
Knowing who called is table stakes. Knowing on whose authority, across which boundary, with what constraints. That's the layer the industry keeps deferring.
Hubs, not gateways
Eighty percent of the talks at this year's MCP summit were about gateways. That is not a complaint — it is the shape any industry takes when handed an entirely new traffic class. Bolt on, survive, iterate. It is how we barely survived multi-tenancy, how we scrambled through mobile, how we improvised our way through the API era. Gateways are the first response to a new kind of traffic, and they are often the right first response.
A gateway is an inbound construct. It sits in front of a resource and decides who gets past. Inbound filtering is a mature pattern: CASBs, service meshes, reverse proxies, zero-trust products. They keep most organizations running, and they should keep being built. But the moment two organizations need their autonomous systems to coordinate, the question inverts. It runs in the opposite direction. That is not a gateway's job.
A hub is an outbound construct. It publishes what an organization offers (tools, resources, its own agents) and provides a verifiable boundary that external parties present proofs against. The orientation is inverted. Instead of "I will decide who gets past me," the hub says "here is what my org exposes, and here is the protocol to use it with proof."
The term isn't ours. The decentralized-identity community has been using "hub" for two decades: DIF's Identity Hubs (now Decentralized Web Nodes), Solid pods, the capability endpoints of the broader SSI lineage. KYA‑OS (Know Your Agent, Operating System) applies that orientation to autonomous-agent traffic through six primitives: identity, credentials, delegations, proofs, audit trail, and consent. These bind onto whatever transport the agent uses. The resulting construct, where an org publishes its primitives to external parties, we call an agentic hub.
This distinction matters because the interesting problem in agent systems is not perimeter defense. It's how two autonomous systems coordinate across organizational boundaries, without pre-provisioned shared secrets, without federated user accounts, and without one-off bespoke integrations that don't scale past three partners. That's the problem KYA‑OS exists to solve.
Anatomy of an agentic hub
An organization's hub is a coordination point, not a proxy. It exposes three surfaces to the outside world.
01Tools
Capabilities the org wants partners, vendors, customers, or consultants to be able to invoke. Each tool is bound to a policy that declares who may call it, under which credentials, with what audit posture. The hub catalogs them; external principals discover them through the same protocol they'll use to invoke them.
02Resources
Data, documents, and state the org is willing to share under constraint. Resources carry the same audience-binding and delegation-chain requirements as tools. Exposure is deliberate and revocable.
03Agents
The organization's own autonomous systems: each anchored to a persistent DID published under the hub's domain, each running behind its own edge worker, each available to external principals who present valid delegated credentials. Agents are first-class capability endpoints, not hidden internal services.
Trust is evaluated once at the hub boundary, on well-defined claims, using cryptographic verification that does not require a callback. Past the boundary, the hub acts on behalf of the external principal within the declared scope. This is what makes federation tractable: the receiving hub holds a canonical verification sequence; issuing hubs mint credentials against that sequence; partner onboarding becomes a matter of trusting a DID rather than provisioning shared infrastructure.
A consultant's agent crosses hubs
Consider the scenario OAuth cannot cleanly express.
A consultancy runs its own agentic hub at hub.consultancy.org. Consultants at the firm use AI agents that authenticate against their home hub and receive credentials reflecting their employment, engagement scope, and bounded delegation.
The consultancy has been engaged by Acme, a retailer whose own hub runs at hub.acme.com. The engagement has defined scope: the consultant's agent is authorized to call analytics.report and analytics.trend.summarize, and to read resources tagged financials.fy2026.q1. Scope is bounded to ninety days; every invocation is audited to both the consultancy's compliance team and the client's.
The consultant's agent presents itself at the client's hub. What happens next is the protocol.
Here is the scenario ordinary login flows cannot cleanly handle.
Meet Alice, a consultant. Her firm (a data practice, say) has been hired out to Acme, a retailer, for a ninety-day engagement. Alice uses an AI agent to move faster: pull reports, run queries, draft summaries. What does onboarding look like today? Either Acme provisions a one-off user account for Alice and her agent, hands over API keys, and hopes nothing leaks. Or her firm and Acme negotiate a bespoke integration that takes six weeks and does not scale past three clients. Neither is how consultancies should work in 2026.
Here is the alternative. Alice's firm runs its own agentic hub — a publishing point for its people and agents. Acme runs one too. When Alice's agent needs Acme's data, her firm's hub issues a signed vouching credential: "this agent belongs to one of our consultants, assigned to your engagement, for ninety days, with these exact permissions, copied to both our compliance team and yours."
The voucher is cryptographically signed and scoped to Acme's front door. Crucially, it works only at Acme's front door. If the same credential were copied and presented at a different company, it would fail instantly. No API key to rotate. No shared secret to compromise. No user account to provision at Acme. Alice shows up, her agent presents its voucher, Acme's hub verifies the math, and the engagement starts.
did:web key. Bounds scope, audience, and expiry at issuance.Issues signed vouchers for its consultants. Sets scope, audience, and expiry up front.The credential presentation is a VC-JWT issued by the consultancy's hub, signed by its DID-anchored keypair, carrying an inner verifiable credential whose credentialSubject names the consultant's agent as the authorized party and declares delegation constraints on scope, audience, and expiry. The aud claim binds the presentation specifically to did:web:hub.acme.com. A copy of this credential presented at any other hub fails the audience check and is rejected.
The client hub's verification sequence runs at the boundary, before any tool logic executes:
verify(presentation):
issuer_did = presentation.iss # did:web:hub.consultancy.org
issuer_key = resolve_did(issuer_did) # fetch /.well-known/did.json
verify_signature(presentation, issuer_key) # jose.jwtVerify
assert presentation.aud == my_hub_did # audience binding
assert presentation.exp > now() # freshness
chain = presentation.vc.credentialSubject.delegation # authority chain
assert chain.rooted_at(human_principal_did) # delegated by a person
assert chain.monotonically_constrained() # each link ⊆ parent
assert chain.constraints.within(requested_tool_call) # scope check
verify_signature(tool_call, agent_key) # per-invocation action signature
log_audit_entry(presentation, tool_call) # bilateral audit
route_to(tool_call)Two defenses are load-bearing inside this sequence. The audience binding closes the cross-organizational confused-deputy class: a presentation valid at one hub is not valid at another, because aud names the intended receiver by DID. A stolen credential is worthless at any destination it was not issued for. The monotonicity check on the delegation chain prevents transitive-access escalation: each link can only constrain, never loosen. A sub-agent inherits a strict subset of its parent's authority; the parent inherits a strict subset of the human principal's. Both properties are verified cryptographically, at the receiver, without any callback.
A final invariant, often lost in credential discussions: the credential proves authority; the per-invocation signature proves the invocation. Every tool call is signed by the agent's own key, not just covered by the credential. The credential says "this agent may invoke these tools"; the per-call signature says "this specific call is from this agent, right now, not a replay." An attacker who exfiltrates the credential but not the key gets a worthless artifact. An agent without its key material cannot act, even holding a valid credential.
There is no phone-home to the consultancy's auth server. There is no shared secret between the two orgs. The client hub verifies the chain cryptographically, binds the invocation to the audit trail, and routes. The consultant's agent never touches the client's internal infrastructure directly. The hub is the federation surface, and it stays in control.
This is the behavior that makes hub-to-hub federation work. A credential issued by one hub is verifiable by any other hub that trusts the issuing hub's DID, without either side needing prior coordination, shared infrastructure, or out-of-band secret exchange.
If you have held up a phone at a bar to prove your age with a mobile driver's license, you have seen this pattern. The bouncer does not call the DMV. The license on your phone carries a cryptographic signature the bouncer's scanner reads locally. The signature proves the license is real, bound to you, and issued by an authority the bouncer trusts. KYA‑OS is the same idea for agent actions: instead of a license, a delegation; instead of a bar, Acme's front door; instead of the DMV, Alice's firm.
When Alice's agent arrives at Acme's hub, Acme runs a six-check verification in about two milliseconds, with no phone-home to the consultancy's servers:
- Is the voucher real? Check the signature against the consultancy's published public key.
- Is it fresh? Check the expiry and delegation dates.
- Was it legitimately delegated? Trace the chain of authority back to a human decision at the consultancy.
- Is it meant for us? The voucher names Acme by its cryptographic identity. A voucher meant for someone else fails here. This is the check that closes the cross-organization loophole entirely.
- Is this action covered? Check the specific tool or resource against the declared scope, and confirm the chain never widens as it descends. An agent cannot delegate authority it was never given.
- Record it. Log the chain bilaterally: both the consultancy's and Acme's audit trails get the same signed record.
One detail worth pausing on: every action the agent takes is signed by the agent's own key, not just covered by the voucher. The voucher says "this agent may do these things"; the per-action signature says "this specific action was taken by this agent, just now." An attacker who steals the voucher but not the key gets an unusable artifact. An agent without its key material cannot do anything at all, no matter what credentials it holds.
This is how hub-to-hub federation works. A voucher issued by one hub is verifiable by any other hub that trusts the issuing hub's identity, without prior coordination, without shared infrastructure, without secret exchange. The consultancy can onboard a new client in minutes by publishing its DID. The client can grant a consultant ninety days of scoped access in one step. Both sides see every action in their audit logs.
What the boundary defends against
Audience-binding is the primary protocol move. A production hub accumulates several smaller defenses around it, each responding to a specific attack shape that the naive verification sequence above does not cover.
-
No presentation in the logs. The raw VC-JWT never appears in any log line. Every diagnostic references it by correlation ID, typically
sha256(presentation).slice(0,8). A presentation that leaks into a log file is a presentation that can be replayed for its remaining validity window. -
Inner audience must match. Downgrade-attack defense. The outer JWT has an
audclaim; the inner verifiable credential carries its ownvc.credentialSubject.delegation.constraints.audience. Both must match the receiver's DID. An attacker who forges or reissues the outer envelope without rotating the inner constraint ends up with a claim that fails on the inner check. -
Full-hash cache keys. Verification caches key on
SHA-256(full presentation), never on a truncated prefix. A birthday-collision attack against a truncated key would let a crafted presentation collide with a previously-verified one; the full digest removes the attack surface at a small memory cost. -
Batch-size caps. JSON-RPC batch requests are bounded: fifty entries in the reference implementation. Rate limiting alone does not address a ten-thousand-entry batch from a single valid principal; the batch cap closes that.
-
Honest kill-switch semantics. When a hub is paused (an ops action, not a policy action),
tools/listreturns an empty array with_meta: { hubPaused: true }. Not an error. A paused hub returning 500s teaches clients to retry; a paused hub returning an honest empty list teaches them to accept and wait.
None of these are novel. They are the sort of defensive-engineering details the decentralized-identity community has been writing down for years. Listing them here matters because the interaction of audience-binding with the rest of the stack only holds up if the rest of the stack also holds up.
Relationship to existing work
KYA‑OS does not replace the decentralized identity stack. It specializes its primitives for a specific interaction type: cross-organizational capability invocation by autonomous agents. The wider goal is to apply these bindings (DID-anchored identity, audience-bound credentials, delegation chains, action-level signatures) across every surface of the agentic web: REST APIs, runtime RPC, SMTP, MCP, and whatever protocol shape the next autonomous system reaches for.
01DIDComm
The cousin protocol for DID-anchored agent-to-agent messaging. KYA‑OS and DIDComm compose naturally: DIDComm as the transport envelope for hub-to-hub coordination, KYA‑OS as the capability-proof layer inside. A hub exposing KYA‑OS endpoints over DIDComm is a clean composition.
02OIDC4VP · SIOPv2
Credential presentation and self-issued OpenID for user-controlled identity. KYA‑OS reuses the JWT presentation envelope and specializes the claim shape for tool-invocation constraints. Organizations using SIOPv2 for user identity can feed the resulting identity assertions into KYA‑OS delegation chains unchanged.
03UCAN
The closest spiritual analog: capability chains that delegate authority across trust domains. KYA‑OS differs in two places. First, explicit audience-binding for RPC contexts rather than capability-invocation semantics at the object level. Second, a claim shape tuned to the MCP tool / resource / prompt model. The two protocols are composable; a UCAN-authorized agent can present an KYA‑OS credential derived from its UCAN token.
04ZCap-LD
Similar goals, different serialization (JSON-LD linked capabilities). KYA‑OS trades some of ZCap's expressiveness for ergonomics over JSON-RPC. The models are translatable. A bridge between the two is useful future work.
05ACDC · KERI
A different root-of-trust model, with self-certifying identifiers and key rotation through interaction events. Interoperation between did:web-rooted KYA‑OS credentials and KERI-rooted authority chains is an open research area. A hub could reasonably accept both issuer types.
06GNAP
KYA‑OS's VC-JWT format fits naturally as a GNAP access token. An organization running GNAP for access negotiation and KYA‑OS for capability proof is a coherent deployment, not a conflict.
The point of this list is not to claim production interop with every peer protocol today. It's to orient KYA‑OS within the stack. The decentralized identity community has been working on these primitives for twenty years. KYA‑OS is an attempt to compose those primitives for one specific, highly-constrained interaction: autonomous agents invoking capabilities across organizational boundaries with cryptographic proof of authority at the receiver.
What to do in 2026 on Monday
If you operate an agent platform that needs to survive the next two years of enterprise procurement, three practical shifts are worth making before your compliance team asks for them.
- Replace opaque bearer tokens with verifiable credentials. Even without full DID infrastructure, signing structured claims with a keypair whose public half is published at a well-known URL gives you independent verifiability. The lightest entry: register your agents or MCP servers at knowthat.ai: mint a DID, claim authorship, and start accruing a public reputation record with zero custom infrastructure. This alone is the single largest security upgrade available to most agent deployments in 2026.
- Bind credentials to their intended audience. Whatever you issue (a session token, an API key, a delegation credential), tag it with a canonical identifier of the specific destination it is valid at. At the receiver, reject anything whose audience marker does not match your own identity. In KYA‑OS that identifier is an org's DID; in your existing stack it can be a DNS name, a tenant ID, a service-mesh identity, any stable canonical form. This is the guard that turns a confused-deputy attack surface into a reliable interop primitive.
- Make the delegation chain a first-class claim. Every capability invocation should carry the chain of custody from the human principal to this specific action. The chain should be cryptographically verifiable independently of any runtime service. Audit trails written from the verifier's side, referencing credential chains, are the primitive enterprise security teams can actually read.
These three moves take you from the OAuth model (where "possession of the key is possession of the identity") to org-federated, self-sovereign identity for agents. Once you have them, the three questions can finally be answered at the boundary. And the payoff is not abstract: capabilities currently gated because the risk surface is too wide (financial workflows, patient records, regulated infrastructure) become exposable under cryptographic constraint, risk-tuned per person, per engagement, per action. Agents stop being a compliance problem and become a capability the regulated world can actually adopt.
KYA‑OS is an open specification under the Decentralized Identity Foundation's Trusted AI Agents Working Group. Checkpoint is one reference implementation, built at Vouched, running in production across a handful of hubs today. Other implementations are welcome; the spec is the contribution. Run your own hub, publish your tools, connect them to partners whose hubs you trust. The federation is what makes this useful.