Chio/Docs
LOGIN · JOIN

PlatformFederation

Federation & Compliance

Federation Overview

Learn how two Chio operators exchange identity, delegated authority, revocation information, and signed receipts.

Related Economy documentation

This page covers identity, delegation, revocation, and enterprise identity federation. The cross-org economic mechanics, the bilateral federation handshake, bilateral receipts, portable/attenuated reputation, and cross-org swarms live in the Economy area's Counterparties section: see Bilateral Federation, Bilateral Receipts, Portable Reputation, and Cross-Org Swarms. For the concept-level framing of why cross-org agents need both an internal swarm and a cross-org one, see Federation & Swarms.

Why federation

A local Chio deployment governs calls with a capability, kernel policy, and signed receipt. Federation extends those controls when an agent calls a partner's tools or a partner verifies Chio evidence without treating the issuing organization as a universal trust root.

  • Portable identity: an agent keypair should be the same name from Org A's perspective and Org B's perspective, without either side operating a shared directory.
  • Portable delegation: a capability issued in Org A should be presentable at Org B and evaluated against Org B's local policy without a prior account provisioning step.
  • Portable revocation: when Org A revokes a capability, Org B should stop honoring it on the next enforcement decision, with bounded staleness and no silent carry-over.
  • Portable reputation: evidence of good behavior in Org A should be visible to Org B as an attenuated signal, not a shared score.

Federation is narrower than trust transfer

Federation here means two operators have agreed, through explicit policy, to recognize each other's signed records under stated boundaries. It does not mean Org A's capabilities silently inherit Org B's authority, or that discovering a public identity document widens local trust.

Self-Certifying Identifiers

A Chio identity uses an Ed25519 keypair. The did:chio method encodes the public key directly into the identifier, so basic resolution never requires a registry lookup.

text
did:chio:{64-hex-character-ed25519-public-key}

Example:
did:chio:bff663535a5cf58658cc38595d20dc4501f6dfc076ddf07e20571d413a3ceb5a

The method-specific identifier is the public key. A party that knows the DID can verify signatures with that key without contacting another service. Federation therefore does not require a shared identity provider for identity verification.

The resolved DID Document is deterministic:

  • @context points at the W3C DID v1 context.
  • A single verificationMethod entry named #key-1, shape Ed25519VerificationKey2020, with publicKeyMultibase base58btc encoding.
  • authentication and assertionMethod both reference #key-1.
  • Optional ChioReceiptLogService entries point at the operator's receipt query endpoint, so a counterparty can pull downstream evidence.
federation · did-resolvetranscript
$ chio did resolve \
    --public-key 3cdb65ef41fc1f109bcedbd8cfbd792e0851c6f2acbe5008576400bf91d04d09 \
    --receipt-log-url https://trust.org-a.example/v1/receipts
{
  "@context": "https://www.w3.org/ns/did/v1",
  "id": "did:chio:3cdb65ef41fc1f109bcedbd8cfbd792e0851c6f2acbe5008576400bf91d04d09",
  "verificationMethod": [
    {
      "id": "did:chio:3cdb65ef41fc1f109bcedbd8cfbd792e0851c6f2acbe5008576400bf91d04d09#key-1",
      "type": "Ed25519VerificationKey2020",
      "controller": "did:chio:3cdb65ef41fc1f109bcedbd8cfbd792e0851c6f2acbe5008576400bf91d04d09",
      "publicKeyMultibase": "z6MkiYpYWyUNXHzHZsgmMPy4xypRKqdJjgnmAmNMtN2DDTBW"
    }
  ],
  "authentication": [
    "did:chio:3cdb65ef41fc1f109bcedbd8cfbd792e0851c6f2acbe5008576400bf91d04d09#key-1"
  ],
  "assertionMethod": [
    "did:chio:3cdb65ef41fc1f109bcedbd8cfbd792e0851c6f2acbe5008576400bf91d04d09#key-1"
  ],
  "service": [
    {
      "id": "did:chio:3cdb65ef41fc1f109bcedbd8cfbd792e0851c6f2acbe5008576400bf91d04d09#receipt-log",
      "type": "ChioReceiptLogService",
      "serviceEndpoint": "https://trust.org-a.example/v1/receipts"
    }
  ]
}
exit 0

The method identifier is the hex public key itself, so resolution is a local derivation with no registry lookup and no network call. Passing --did instead of --public-key takes the fully-qualified form and produces the same document. Dropping --receipt-log-url drops the service array; the rest is unchanged.

Verification is not admission. Self-certification settles whether a signature checks out; it says nothing about whether the key behind it should be let in. Chio keeps those questions apart. Trust establishment is bilateral, key pinning is per-peer, and revocation propagates by gossip. There is no master key, no validator election, and no quorum threshold on the routine path.

That leaves each operator one question the protocol deliberately does not answer: which kernel public keys do I accept a first handshake from? KernelTrustExchange resolves an incoming envelope against either a pre-configured trusted peer or one it has already pinned, and fails closed with MissingTrustAnchor when neither matches. Seeding that first entry is an operational procedure, not a wire format: operators bind it to an industry consortium roster, an out-of-band PKI, operator-mediated key exchange that stops scaling somewhere in the dozens of peers, or a sector regulator publishing the canonical roster. Chio enforces the anchor you configure. It does not issue one, and it does not reconcile two operators who chose differently, so a handshake completes only once each side already holds the other's kernel public key, pre-configured or previously pinned. A declared key that does not match the one held fails with UnexpectedPeerKey rather than being negotiated. This anchor is the key you admit at first contact, not chio-anchor, which publishes checkpoint roots to external chains.


Agent Passports as Verifiable Credentials

A Chio Agent Passport is a signed bundle of receipts, reputation projections, and enterprise identity provenance. Its native delivery format is compact CHIO passport data. For partners that require a standards-based envelope, Chio projects the same passport data into either application/dc+sd-jwt (SD-JWT VC) or jwt_vc_json (JWT VC JSON).

Claim families inside a passport projection:

  • Always disclosed: iss, sub, vct, cnf, chio_passport_id, chio_subject_did, chio_credential_count.
  • Selectively disclosable (SD-JWT lane only): chio_issuer_dids, chio_merkle_roots, chio_enterprise_identity_provenance.
  • Optional: chio_passport_status sidecar pointing at the issuer's lifecycle endpoint.

did:chio stays the anchor

Even when the projected credential binds to did:web, did:key, or did:jwk for portability, did:chio remains the provenance anchor carried through chio_subject_did and chio_issuer_dids.

Two Federation Paths

Chio provides two cross-operator paths. The cross-kernel federation profile moves signed trust, quorum, admission, reputation, and qualification contracts between two kernels and gates the receipts they co-sign. Bilateral evidence sharing shares a scoped, signed slice of one operator's receipt log to a named partner. Both are fail-closed: federation data lets an operator see further, but it becomes runtime trust only after explicit local activation and review.


Cross-Kernel Federation

The federation profile covers listing, trust activation, governance, open-market, and portable-reputation features. It defines five root contracts, each with a fixed schema ID and a validator that rejects invalid input.

ContractSchema idWhat it carries
activationchio.federation-activation-exchange.v1Cross-operator trust-activation handoff for one listing, carrying attenuation and local import controls.
quorumchio.federation-quorum-report.v1Multi-publisher freshness quorum with conflict and anti-eclipse evidence.
open_admissionchio.federation-open-admission-policy.v1Per-admission-class stake and bond requirements for permissionless-but-bonded participation.
reputationchio.federation-reputation-clearing.v1Sybil-resistant reputation-input clearing that preserves local weighting and independent-issuer corroboration.
qualificationchio.federation-qualification-matrix.v1Qualification matrix that must cover the fixed requirement ids TRUSTMAX-01 through TRUSTMAX-05.

On top of the contracts, two kernels co-sign the receipts that cross the boundary and pin each other's keys:

  • DSSE bilateral co-signed receipts: a ChioReceipt carries a detached dual signature and a DSSE in-toto envelope, verified against pinned peer keys, a receipt store, a revocation oracle, and a bound treaty.
  • Signed peer-pinning handshake: a challenge/response exchange negotiates protocol capabilities and a conformance tier and sets an explicit key-rotation deadline before either side pins the other's signing key.
  • Governance-ladder treaty intersection: two or more kernels compute the action-class intersection they share under a treaty scope, then admit a specific cross-boundary action against it with verified evidence.
  • Revocation-epoch and pheromone gossip: signed revocation roots and reputation deposits move between bilateral peers over per-peer push queues with a bounded catch-up protocol.
bash
# Compute the governance-ladder intersection two kernels share.
$ chio federation treaty intersect \
    --treaty-scope ./treaty-scope.json \
    --manifest ./org-a-ladder.json \
    --manifest ./org-b-ladder.json \
    --now-unix-ms 1767225600000 \
    --report ./ladder-intersection.json

# Admit one cross-boundary action against that intersection.
$ chio federation treaty admit \
    --treaty-scope ./treaty-scope.json \
    --ladder-intersection ./ladder-intersection.json \
    --expected-ladder-intersection-sha256 <hex> \
    --action-class-id billing.charge \
    --evidence receipt=<artifact-sha256> \
    --now-unix-ms 1767225600000 \
    --report ./admission-report.json

# Publish a signed revocation checkpoint from local authority state.
$ chio federation authority checkpoint \
    --profile ./authority-profile.json \
    --revocations ./revocations.json \
    --signing-keys ./authority-signing-keys.json \
    --out ./revocation-checkpoint.json

Federation is not ambient trust

The profile does not claim permissionless or auto-trusting federation, mirror or indexer visibility as runtime trust, open admission that bypasses local review, or a universal reputation oracle. Every import passes a local activation and manual-review gate before it changes an enforcement decision.

Bilateral Evidence Sharing

The narrower lane shares a scoped slice of one operator's receipt log with a named partner. A signed bilateral federation policy states the issuer, the partner, and the export scope (capability, agent subject, and time window) plus an expiry and whether full checkpoint coverage is required. The policy is a signed document, produced with chio evidence federation-policy create and attached to an export through --federation-policy.

The policy carries the read boundary, so --tenant or --admin-all is required when the policy is signed rather than when it is used. --since, --until, and --expires-at are Unix seconds, and an --expires-at already in the past is refused at signing time.

federation · policy-createtranscript
$ chio evidence federation-policy create \
    --output ./org-a-to-org-b.json \
    --signing-seed-file ./federation-signing.seed \
    --issuer org-a \
    --partner org-b \
    --capability cap-billing-q2 \
    --admin-all \
    --since 1767225600 \
    --until 1775001599 \
    --expires-at 4102444800 \
    --require-proofs \
    --purpose "quarterly billing evidence for org-b review"
federation policy created
output:              ./org-a-to-org-b.json
issuer:              org-a
partner:             org-b
signer_public_key:   4cb5abf6ad79fbf5abbccafcc269d85cd2651ed4b885b5869f241aedf0a5ba29
require_proofs:      true
exit 0
bash
# Export under that policy; it carries the scope and the read boundary,
# so the export needs no --tenant or --admin-all of its own.
$ chio evidence export \
    --federation-policy ./org-a-to-org-b.json \
    --receipt-db ./receipts.sqlite3 \
    --output ./org-b-share

# On the partner side, import the verified package for later delegation.
# Import also needs a destination: --receipt-db, or --control-url.
$ chio evidence import \
    --receipt-db ./org-b-receipts.sqlite3 \
    --input ./org-b-share

Import prints a six-line summary of what it took in: share_id, issuer, partner, signer_public_key, tool_receipts, and capability_lineage (crates/platform/chio-control-plane/src/evidence_export.rs). The counts are the receiving side's record of the share, not a grant of anything.

The package those commands write and read, the offline verifier that checks it without a store or a network, and what an import does to the receiving node are Evidence Export.

The trust control plane also includes the open-admission registry, and it keeps two things apart that are easy to run together. The signed, exportable half is FederatedOpenAdmissionPolicyArtifact, which carries governingOperatorId, allowedAdmissionClasses, stakeRequirements, a charter and fee-schedule reference, and the two local-review booleans (crates/trust/chio-federation/src/open_admission.rs). The anti-sybil knobs are not in it. A rate limit, a proof-of-work bit count, and a bond-backed-only flag live on FederationAdmissionAntiSybilControls, and a minimum reputation score on the enclosing FederationAdmissionPolicyRecord (crates/platform/chio-control-plane/src/federation_policy.rs).

The signed half is the half a counterparty can check

The split is load-bearing. A partner verifies the signature over FederatedOpenAdmissionPolicyArtifact and nothing else. The anti-sybil controls and the reputation floor are unsigned local operator settings, so a claim that a peer was admitted under a given rate limit or difficulty is not something the artifact carries.

Operators manage those records and dry-run a peer's admission through chio trust federation-policy. upsert, list, get, and delete take a local registry file through --federation-policies-file when --control-url is not set, and refuse when neither is given. evaluate has no local path at all: it requires --control-url and a --control-token, because anti-sybil state is enforced centrally (crates/products/chio-cli/src/admin.rs). Its --input is a FederationAdmissionEvaluationRequest.


Cross-Org Delegation

A cross-boundary action is admitted when its action class lies in the treaty intersection the two operators share and the inbound capability chain verifies. The chain part is straightforward because capability chains are already content-signed and monotonically attenuated; the admission part is the treaty check.

  1. An agent in Org A already holds a capability issued by Org A's authority. The capability carries an ed25519 signature from an issuer key Org B trusts through the activated federation relationship and the peer-pinning handshake.
  2. The agent signs a delegated child capability for a downstream worker whose subject key lives in Org B. The child strictly attenuates scope, expiry, and budget relative to the parent.
  3. The Org B kernel receives a tool call carrying the delegated chain. It verifies the parent signature against its pinned copy of Org A's authority keys, verifies the child signature against the parent subject, and then evaluates the action against the treaty.
  4. The action is admitted only if its action class is inside the shared ladder intersection and its evidence verifies. The kernel emits a receipt and either dispatches or denies.

Foreign chains are fail-closed by default

If the inbound chain references an issuer key Org B has not pinned, or an action class outside the treaty intersection, the kernel denies the call with a signed deny receipt. There is no silent fallback to "treat as unauthenticated", and no federation import becomes runtime trust without prior local activation.
rendering
An agent in Org A signs a child capability rooted in Org A's authority. A worker in Org B presents the chain to Org B's kernel, which verifies both signatures against its pinned key set and admits the action against the shared treaty intersection before dispatching.

Federated Revocation

When Org A revokes a capability, Org B stops honoring it at its next enforcement decision. Chio uses signed, append-only revocation feeds that a counterparty's trust control plane subscribes to and merges idempotently, backed by a bounded catch-up protocol and a staleness ceiling for an unreachable peer. The feed mechanics, publishing, subscription, and enforcement are documented in Bilateral Receipts.


Imported Reputation Is Attenuated

Chio treats imported reputation as an operator-visible signal. When Org B imports an evidence package from Org A, the local comparison view reports native reputation and imported trust side by side, with explicit provenance, a policy echo of the import-time bilateral controls, and conservative defaults (proofless shares rejected, stale signals expired, an attenuated composite score). The mechanics, provenance fields, policy echo, and scoring are documented in Portable Reputation.


Agent Passport as Portable Reputation

The Agent Passport is the container that makes reputation portable. It bundles the subject's receipt roots, the operator's attestation of reputation signals, and optional enterprise identity provenance from the issuing organization. The counterparty verifies the passport signature, verifies each referenced Merkle root against the local copy of the issuer's receipt log, and then applies its local verifier policy to decide whether to treat the passport as input to an authorization decision.

  • A presented passport is not a bearer token. It does not itself authorize a tool call; it feeds the policy evaluation that decides whether a capability issued under the passport's subject key is honored.
  • Multi-issuer composition is supported through the bounded CrossIssuerPortfolio profile. A portfolio is an evidence container, not a synthetic new trust root.
  • Lifecycle state is pulled from the issuer's signed status sidecar. PassportLifecycleState has five members and only active is healthy; stale, superseded, revoked, and not-found fail closed at the verifier.

Enterprise Identity Federation

"Identity federation" has a second, unrelated meaning in Chio: letting an enterprise's existing OIDC, SAML, or SCIM identity resolve to a stable Chio subject at a bearer-authenticated MCP HTTP edge. The same enterprise principal converges on the same Chio subject across sessions, so receipt attribution follows the human or workload behind the token rather than a random per-session key.

  • chio mcp serve-http admits OAuth bearer tokens by JWT verification (--auth-jwt-public-key, or discovery via --auth-jwt-discovery-url) or by opaque-token introspection (--auth-introspection-url).
  • Authenticated principals are canonicalized as oidc:<issuer>#sub:<sub>, or oidc:<issuer>#oid:<oid> under the Azure AD profile (--auth-jwt-provider-profile azure-ad).
  • --identity-federation-seed-file derives a stable Chio subject key from that principal and issues session capabilities against it. The mapping is exposed through authContext.method.enterpriseIdentity and authContext.method.federatedClaims.
bash
# Serve an MCP edge that maps Azure AD principals to stable Chio subjects.
$ chio mcp serve-http \
    --policy ./policy.yaml \
    --server-id wrapped-http \
    --listen 127.0.0.1:8931 \
    --auth-jwt-discovery-url https://login.example.com/tenant/v2.0/.well-known/openid-configuration \
    --auth-jwt-provider-profile azure-ad \
    --auth-jwt-audience chio-mcp \
    --identity-federation-seed-file ./identity-federation.seed \
    --admin-token <admin-token> \
    -- python3 ./mock_server.py

Trust Control Plane Federation

The open-admission registry and enterprise-provider registry are part of the trust control plane. Each operator runs its own Chio trust service. The record-management subcommands take either a local registry file or a remote service through the global --control-url; evaluate is the one that takes only the remote service.

SubcommandPurpose
chio trust federation-policy upsertPublish or update an open-admission policy record from a JSON FederationAdmissionPolicyRecord.
chio trust federation-policy listEnumerate published open-admission policies.
chio trust federation-policy getRead one published policy by id.
chio trust federation-policy evaluateDry-run one peer's admission against a published policy.
chio trust federation-policy deleteRemove a published open-admission policy record.
chio trust provider upsertRegister or update an enterprise identity provider record (OIDC, OAuth introspection, SCIM, SAML) from a JSON EnterpriseProviderRecord.

Topology

A minimal bilateral federation has two trust control planes and a shared public-key registry that each side pins locally. The registry is not a central authority; it is a mirror each operator maintains of the other's trusted keys, fed by signed snapshots.

Bilateral federation topologybilateral · no central rootOrg AOrg BAgent A holds a did:chio:org-a key and signs delegations it hands off downstreamAgent Adid:chio:org-aTrust Control A: operator-run authority; curates trusted keys for Org B and publishes revocations for its own keysTrust Control Atrusted_keys[B]Edge Kernel A enforces Org A's local policy and emits signed receipts against Org A's kernel signerEdge Kernel Alocal policy + A's receiptsWorker B accepts Agent A's signed capability chain, verified against Trust Control B's pinned copy of trusted_keys[A]Worker Baccepts A's chainTrust Control B: operator-run authority; pins trusted_keys[A] and publishes revocations for its own keysTrust Control Btrusted_keys[A]Edge Kernel B enforces Org B's local policy, resolving Org A's signatures via the trusted_keys[A] pinned in Trust Control BEdge Kernel Blocal policy + A's trusted_keyssigned capability chainlocal enforcementsigned capability chainlocal enforcementtrusted_keys[A]trusted_keys[B]revocation feedrevocation feedoperator-run · curates its own keysoperator-run · curates its own keysbilateral channel · Trust Control ↔ Trust Controleach operator curates its own trust history · federation is a bilateral contractsolid = pinned trust · dashed = revocation feed
Each operator runs its own trust-control service. They pin each other's trusted keys locally and exchange revocation feeds; no central trust root is required.

Operators stay in charge of their own trust

Chio does not operate a shared root. Each operator curates its trusted key history, revocation feed, and evidence-sharing policy. Bilateral agreements let those independent trust stores interoperate.

Non-Goals

  • A permissionless global identity network. Every relationship is bilateral and operator-declared.
  • A universal reputation score. Imported reputation is attenuated, provenance-tagged, and never merged into native local truth.
  • Automatic widening of authority on the strength of a discovered public identity document. Discovery supports interoperability, not admission.
  • DIDComm or generic wallet messaging. The supported transport is the documented Chio projected-passport family plus the narrow OID4VP verifier profile.

For the specific compliance frameworks that benefit from this federation posture, continue with NIST AI RMF, EU AI Act, and ISO/IEC 42001.