establishing trust link
v0.1‑dev secure delegation for multi‑agent systems

Let your AI agents
delegate work — safely.

When one agent needs another to act with its authority, hand off a scoped, expiring, revocable capability — not a secret. The other side verifies it in microseconds, even when the network to the issuer is gone.

atlas delegatescopeexpiresrevokeverify ‑‑offline
scroll
The pain it removes

Stop sharing secrets between your agents.

Today, one agent authorizes another by sharing an API key — now it is you, forever — or by routing every action through an auth server that has to be up. Atlas replaces both with a signed hand‑off: this scope, until this time, revocable anytime.

Works when the network doesn't

The receiving side verifies from local trust material — no call to the issuer. Kill the auth server; verification still answers in microseconds.

Least privilege, enforced

A delegate only ever gets a subset of what the grantor holds — narrower scope, shorter life. Over‑asks are refused at issuance.

Revoke, and mean it

Signed revocation snapshots with verifiable freshness. Past your staleness budget, verification fails closed — never silently open.

Your agents, across your tools

Let an agent ship the landing page — without your tokens.

An agent has to push to GitHub, deploy to Vercel, post to Slack. The unsafe way: hand it all three tokens — now one compromised prompt owns everything. The Atlas way: hand each agent one scoped, expiring, revocable capability. The tools keep their own secrets.

the flowbash examples/ship-a-landing-page.sh
# you issue scoped capabilities — not secrets coder github:push:acme/landing 15m deployer vercel:deploy:landing-prod 10m notifier slack:post:launches 5m # each tool verifies OFFLINE, then acts with ITS OWN token [github] ✓ authorized → git push [vercel] ✓ authorized → deploy [slack] ✓ authorized → post # the coder is compromised and reaches for more: [vercel] ✗ DENIED — not granted vercel:deploy [slack] ✗ DENIED — not granted slack:post # one revoke contains it — offline, everywhere: [github] ✗ DENIED — capability revoked

The agent holds capabilities

The tools hold secrets. An agent's most powerful move is presenting a capability it already has — scoped to one action, for minutes, revocable anytime.

Blast radius = one scope

Prompt-inject the coder all you like; the Vercel and Slack adapters still deny it. Least privilege, enforced at every tool.

Honest boundary

Atlas isn't the agent and isn't the orchestrator — it's the trust fabric that makes letting agents act on your behalf safe. See the full story →

The verification

Watch the signature travel the trust path.

Five checks, in order, against the presented record. No hidden state — the trace below is the whole story.

atlas verify · domain‑b.testdemo · scripted
IDLEAwaiting a presented delegation.
Latency
Snapshot
Trust root
Domain A
Confidence
Deterministic
The hardest case · S4

When the network splits, Atlas doesn't lie.

A revocation performed while a relying party is partitioned from the issuer is not claimed observable. Atlas fails closed — then rejects the moment the partition heals and a fresh snapshot arrives.

INV12 / S4AT13AT14fail‑closedRevokedObservable

Trigger it in the console above — Revoke under partition — and watch the field tear, fail closed, then reject on recovery.

plain english

Revoke access while the network is down and Atlas answers "can't know yet" — never "yes" — then enforces the revocation the moment the link heals.

# revocation-under-partition · R = 2s issue booking-worker → Accept · zero egress partition sever RP ⇄ issuer revoke booking-worker (in domain A) verify Inconclusive # S4: not observable heal snapshot propagates → verify Reject # RevokedObservable
TrustPerf · measured, not asserted

Fast enough to sit in the hot path.

plain english

Quick enough to check on every single action an agent takes — not just once at login.

Substrate‑independent tier, measured against the real implementation. Propagation, partition, cross‑domain and zero‑egress metrics require the two‑domain SPIRE lab and are not shown here — no number is fabricated.

plain english

A public answer key of hostile cases — forged signatures, stripped algorithms, transplanted tokens. Any implementation, in any language, must get all 28 right or it is broken.

# language-neutral vectors · replay in any language verdict 10 vectors accept · reject · inconclusive adversarial 18 vectors alg=none · HS256‑confusion · transplant result 28 / 28 pass # a differential = a broken verifier
Conformance

Built to have other implementations.

Positive and adversarial vectors as static JSON. A Rust, Zig or Go verifier replays them and is caught the moment it diverges. Interop is the point.

Atlas Lab

A real environment, not a simulation.

Two independent SPIRE domains, network fault injection, out‑of‑band packet capture. Benchmarks run anywhere; the substrate experiments run on a real host — and refuse to fabricate a result if it isn't up.

plain english

Each card below is one experiment on a physical test bench where we actually cut the network, actually revoke, and actually capture the packets. The codes (S4, INV7, AT13…) are the spec clauses and acceptance tests that pin it.

The short way

Trust that survives the network.