A1 — Know Your Agent
Cryptographic chain-of-custody for recursive AI agent delegation.
The problem this solves
When an AI agent delegates a task to another agent — and that agent delegates further — the original authorization completely breaks down. There is no way to prove which human approved the action at the end of the chain. This is called the Recursive Delegation Gap, and it is the reason enterprises cannot safely deploy multi-agent AI systems at scale.
A1 closes this gap.
Every action executed by any agent in any delegation tree carries an irrefutable, cryptographically verified chain proving exactly which human authorized it and what boundaries were enforced. This holds offline, without a trust server, without any shared secrets, and without changing your existing agent code.
What you get
| Capability | Description |
|---|---|
| A1 Passport | Issue a long-lived agent identity once. Every sub-agent it creates is cryptographically bound to the same chain of custody. |
| NarrowingMatrix | A 256-bit capability bitmask that enforces strict subset delegation in O(1). No agent can request a capability its parent did not explicitly grant. No escalation is possible. |
| ProvableReceipt | Every authorized action produces a tamper-evident receipt your compliance team can verify independently, without any secrets. |
| One-line middleware | @a1_guard, withA1Passport, a1.WithPassport. Drop into any AI framework in one line. |
| MCP server built-in | Any MCP-compatible agent (Claude Code, Cursor, etc.) can use A1 authorization with zero code changes — just point at the gateway. |
| Works everywhere | LangChain, LangGraph, LlamaIndex, AutoGen, CrewAI, Semantic Kernel, OpenAI Agents, plain Python, TypeScript, Go, and any C FFI target. |
| Air-gap compatible | All verification is local. No network call, no trust server, no cloud dependency at authorization time. |
| Enterprise-ready | AWS KMS, GCP KMS, HashiCorp Vault, Azure Key Vault signing backends. SOC 2 and ISO 27001 compliance mapping included. |
| Post-quantum ready | Wire format supports ML-DSA (CRYSTALS-Dilithium) hybrid signatures alongside Ed25519 — no migration required when you upgrade. |
Install
Rust
# Cargo.toml
[]
= { = "2.8", = ["full"] }
Python
TypeScript / Node.js
Go
CLI
# From crates.io (after publish):
# From source (run from the repo root):
Common mistake:
cargo install --path . --bin a1-cliwill fail — the root package is the Rust library, not the CLI. Always use--path a1-cli(points to the CLI sub-crate).
Quickstart (5 minutes)
1. Start the gateway
This starts three services: gateway (port 8080), Redis (nonce + revocation cache), and Postgres (persistent storage). The gateway is ready when the health check passes:
First run: Docker must compile the Rust gateway from source. This takes 3–10 minutes — subsequent starts are instant because the image is cached.
2. Generate a passport
This creates passport.json — your agent's root identity. Store it in your vault or secrets manager.
3. Add one line to your agent tool
Python (any framework)
=
return await
TypeScript
import { withA1Passport, PassportClient } from "a1/passport";
const client = new PassportClient("http://localhost:8080");
const guardedTrade = withA1Passport(executeTrade, {
client,
capability: "trade.equity",
});
Go
import a1 "github.com/dyologician/a1/sdk/go/a1/kya"
guarded := a1.WithPassport(executeTrade, passport)
Rust (direct / embedded)
use ;
let passport = load?;
let sub_cert = passport.issue_sub?;
let mut chain = passport.new_chain?;
chain.push;
let intent = new?;
let receipt = passport.guard_local?;
println!;
// ProvableReceipt { namespace=my-trading-agent, depth=1, fingerprint=... }
4. Verify an action happened (audit)
# Namespace: my-trading-agent
# Capabilities: trade.equity, portfolio.read
# Expires: 2026-06-05T00:00:00Z
# Mask: 0000000000000003...
# Status: VALID
MCP — Claude Code and Cursor support
A1 ships a built-in Model Context Protocol server. Any MCP-compatible agent or IDE extension can authorize through A1 without any code changes to the agent itself.
Add to your MCP config (.mcp.json or Claude Code settings):
Endpoints:
| Method | Path | Description |
|---|---|---|
GET |
/mcp |
SSE stream — persistent MCP session (server-sent events) |
POST |
/mcp |
JSON-RPC 2.0 — single MCP request/response |
GET |
/mcp/tools |
Tool manifest — list all available A1 tools (non-MCP convenience) |
The MCP server exposes A1's authorize, cert-issue, revoke, and passport-check tools directly to the agent. No decorators. No imports. One config entry.
A1 Studio
A1 ships a built-in web dashboard at http://localhost:8080/studio. Open it in your browser after starting the gateway. No separate install required.
What you can do without writing any code:
- Issue and manage passports — create, inspect, renew, and revoke agent passports from the browser. The Passport Dashboard shows every passport across all namespaces in one sorted, searchable view, with urgent/expiring passports surfaced at the top.
- Connect and test agents — register running agents, fire live capability checks, and view real-time delegation chain inspection.
- Test MCP tools — the built-in MCP tester lets you call
authorize,cert-issue,revoke, andpassport-checkdirectly against the gateway without touching a terminal. - Visualize the trust layer — an interactive delegation chain diagram shows the full path from human principal through every agent hop to the final receipt.
- Connect local AI models — the Local AI tab auto-detects Ollama, LM Studio, and llama.cpp running on your machine. Select a model, pick a language (Python, TypeScript, LangChain, or
.mcp.json), and get ready-to-paste integration code in one click. Fully offline, no cloud key needed. - Explain errors — paste any A1 error code or JSON error body into the Error Explainer and get a plain-English fix suggestion.
- Enterprise config — multi-tenant setup, webhook configuration, SIEM endpoint registration.
Studio is designed for non-technical team members, compliance officers, and anyone who needs visibility into what agents are authorized to do — alongside a full developer toolset for engineers.
Framework integrations
LangChain
=
LangGraph
:
:
await
return
LlamaIndex
=
AutoGen v0.4
=
CrewAI
=
Semantic Kernel
return f
=
OpenAI Agents SDK
return await
Python ASGI / FastAPI middleware
Protect an entire API application with one call:
=
All requests must carry a valid signed_chain and executor_pk_hex. Any request that fails authorization receives a 403 with a machine-readable error_code.
Swarm management (Python)
Coordinate fleets of agents with role-based access:
=
# Create a swarm passport
=
# Add a worker agent with a scoped capability subset
=
# List all active members
=
Roles: SwarmRole.ORCHESTRATOR, SwarmRole.SUPERVISOR, SwarmRole.AUDITOR, SwarmRole.WORKER.
Swarm management (TypeScript)
import { SwarmClient, SwarmRole } from "a1/swarm";
const swarm = new SwarmClient("http://localhost:8080", {
adminSecret: process.env.A1_ADMIN_SECRET,
});
const swarmId = await swarm.createSwarm({
name: "acme-trading-swarm",
capabilities: ["trade.equity", "portfolio.read"],
ttlDays: 30,
signingKeyHex: ROOT_SK_HEX,
});
const member = await swarm.addMember({
swarmId,
agentPkHex: WORKER_PK_HEX,
role: SwarmRole.Worker,
capabilities: ["trade.equity"],
ttlSeconds: 3600,
signingKeyHex: ROOT_SK_HEX,
});
const members = await swarm.listMembers(swarmId);
TypeScript middleware utilities
import { A1Middleware, exchangeJwt, verifyWebhookSignature } from "a1";
// Express middleware — protect all routes
app.use(A1Middleware({ client, capability: "api.write" }));
// Bootstrap a delegation cert from an existing OIDC/SSO JWT
const cert = await exchangeJwt({
token: req.headers.authorization.replace("Bearer ", ""),
capabilities: ["files.read"],
ttlSeconds: 3600,
delegatePkHex: agentPk,
gatewayUrl: "http://localhost:8080",
});
// Verify an incoming webhook payload from the A1 gateway
app.post("/a1-webhook", (req, res) => {
const valid = verifyWebhookSignature(
req.body,
req.headers["x-a1-signature"] as string,
process.env.A1_WEBHOOK_SECRET!,
);
if (!valid) return res.status(401).end();
// process audit event
});
Gateway — REST API reference
All endpoints are served on http://localhost:8080 by default.
Authorization
| Method | Path | Auth required | Description |
|---|---|---|---|
POST |
/v1/authorize |
No | Verify a signed delegation chain against an intent |
POST |
/v1/authorize/batch |
No | Verify multiple intents in a single chain traversal |
POST |
/v1/passport/authorize |
No | Same as /v1/authorize but resolves passport extensions |
POST |
/v1/token/verify |
No | Verify a VerifiedToken (HMAC-signed receipt) |
POST /v1/authorize — request body:
Response:
Certificates (admin-protected)
| Method | Path | Auth required | Description |
|---|---|---|---|
POST |
/v1/cert/issue |
Yes | Issue a single DelegationCert |
POST |
/v1/cert/issue-batch |
Yes | Issue multiple certs in one call |
POST |
/v1/cert/revoke |
No | Revoke a cert by fingerprint |
POST |
/v1/cert/revoke-batch |
No | Revoke multiple certs at once |
GET |
/v1/cert/:fingerprint |
No | Inspect a cert by its Blake3 fingerprint |
Passports
| Method | Path | Auth required | Description |
|---|---|---|---|
POST |
/v1/passports/issue |
No | Issue a new DyoloPassport and save to disk |
GET |
/v1/passports/list |
No | List passport files under ~/.a1/passports/ |
POST |
/v1/passports/renew |
No | Re-issue a passport with a new TTL |
GET |
/v1/passports/read |
No | Read a passport file by namespace |
POST |
/v1/passports/restore |
No | Restore passport files from a backup payload |
POST |
/v1/passports/revoke-by-namespace |
No | Revoke all certs issued under a namespace |
POST /v1/passports/issue — request body:
DID / W3C Verifiable Credentials
| Method | Path | Auth required | Description |
|---|---|---|---|
GET |
/v1/did/gateway |
No | Resolve the gateway's own DID document |
GET |
/v1/did/:pk_hex |
No | Resolve a DID document by public key hex |
POST |
/v1/vc/issue |
Yes | Issue a W3C Verifiable Credential tied to an agent identity |
POST |
/v1/vc/verify |
No | Verify a Verifiable Credential |
On-chain anchoring (ZK)
| Method | Path | Auth required | Description |
|---|---|---|---|
POST |
/v1/anchor |
No | Anchor a ZkChainCommitment on-chain |
Supported networks: ethereum, polygon, base, arbitrum, solana, ethereum-sepolia, or a custom EVM chain via {"custom": {"chain_id": N, "name": "..."}}.
Request body:
Response includes anchored_receipt, anchor_hash_hex, and for EVM chains evm_calldata (submit via eth_sendRawTransaction), and for Solana solana_instruction_data.
Agent-to-agent delegation negotiation
| Method | Path | Auth required | Description |
|---|---|---|---|
POST |
/v1/negotiate |
No | Exchange a CapabilityRequest for a scoped DelegationCert |
An agent sends a signed CapabilityRequest; the gateway issues a cert scoped to the requested capability and returns a DelegationOffer. Configure allowed capabilities with A1_NEGOTIATE_CAPABILITIES or set A1_NEGOTIATE_ALLOW_ALL=1 for dev environments.
JWT bridge (SSO / OIDC)
| Method | Path | Auth required | Description |
|---|---|---|---|
POST |
/v1/jwt/exchange |
Yes | Exchange a JWKS-verified JWT for a scoped DelegationCert |
Enterprises running OIDC or SAML SSO use this to bootstrap delegation chains from their existing IAM infrastructure — no manual key ceremony required.
- Gateway fetches the issuer's JWKS and verifies the JWT signature.
- Cert TTL is capped at
min(requested_ttl, jwt_exp - now). - JWT
subclaim is recorded in the cert'sdyolo.jwt.subjectextension for audit. - Configure with
A1_JWT_JWKS_URLandA1_JWT_ALLOWED_CAPS.
Request body:
Swarm management (admin-protected)
| Method | Path | Auth required | Description |
|---|---|---|---|
POST |
/v1/swarm/create |
Yes | Create a new agent swarm |
POST |
/v1/swarm/member/add |
Yes | Add an agent to a swarm with a role and TTL |
POST |
/v1/swarm/member/remove |
Yes | Remove an agent from a swarm |
GET |
/v1/swarm/:swarm_id/members |
No | List active members of a swarm |
Swarm roles: orchestrator, supervisor, auditor, worker.
Governance
| Method | Path | Auth required | Description |
|---|---|---|---|
GET |
/v1/governance/policy |
No | Return the active delegation policy |
POST |
/v1/governance/approval/verify |
No | Verify a governance approval record |
POST |
/v1/governance/audit-report |
Yes | Generate a structured audit report |
Agent management
| Method | Path | Auth required | Description |
|---|---|---|---|
GET |
/v1/agents/scan |
No | Scan for locally running agents |
POST |
/v1/agents/connect |
No | Register a remote agent connection |
POST |
/v1/agents/restart |
No | Restart a registered agent |
POST |
/v1/agents/probe |
No | Probe an agent's health and capabilities |
POST |
/v1/agents/relay |
No | Relay a message to an agent |
GET |
/v1/agents/integration-check |
No | Verify SDK integration on a running agent |
POST |
/v1/agents/read-file |
No | Read a file from an agent's working directory |
POST |
/v1/agents/write-file |
No | Write a file to an agent's working directory |
GET |
/v1/agents/list-files |
No | List files in an agent's working directory |
Tenant management
| Method | Path | Auth required | Description |
|---|---|---|---|
GET |
/v1/tenant/info |
No | Return the active tenant context for the caller |
GET |
/v1/tenant/config |
No | Return per-tenant capability allowlist |
Send X-A1-Tenant-ID: <tenant> on any request to scope all revocation and nonce operations to that tenant. Enable with A1_MULTI_TENANT=true.
System / utility
| Method | Path | Auth required | Description |
|---|---|---|---|
GET |
/health or /healthz |
No | Liveness check — returns {"status":"ok"} |
GET |
/studio |
No | A1 Studio web dashboard |
GET |
/.well-known/a1-configuration |
No | Discovery document — all endpoint URLs, gateway DID, signing key |
POST |
/v1/webhook/test |
Yes | Send a test webhook event |
GET |
/v1/webhook/status |
No | Check webhook delivery status |
GET |
/v1/ai/status |
No | Check if the AI proxy is configured |
POST |
/v1/ai/chat |
No | Proxy a chat message through the gateway's AI key |
POST |
/v1/system/autostart |
No | Install gateway as a system service (launchd/systemd) |
DELETE |
/v1/system/autostart |
No | Remove the autostart service |
GET |
/v1/system/status |
No | System and gateway status |
POST |
/v1/system/install-docker |
No | Install Docker on the host machine |
POST |
/v1/system/gitignore-add |
No | Add A1 entries to .gitignore |
POST |
/v1/debug/explain-error |
No | Translate a raw A1 error code into plain English |
Enterprise features
KMS / Vault signing backends
A1 never locks you into a key storage format. Your root passport key lives in your KMS:
# AWS KMS
=
# HashiCorp Vault (Transit engine, ed25519 key)
=
# GCP KMS
=
# Azure Key Vault
=
At verification time: zero KMS calls. The verifying key is embedded in the cert. Authorization is fully local.
SIEM / audit log export
Every authorization event feeds your existing SIEM with zero configuration:
=
OpenTelemetry (OTLP) is also supported:
=
OpenTelemetry distributed tracing (Python)
Every authorization event emits a structured OTEL span, compatible with Datadog APM, Jaeger, Honeycomb, and any OTLP backend:
=
# Option 1 — wrap an existing client
=
# Option 2 — decorator
return await
Install the optional dependency: pip install "a1[siem-otel]". All spans use the dyolo.a1.* attribute namespace. If opentelemetry-sdk is absent, the module silently degrades to a no-op so the rest of your code compiles unchanged.
Namespace isolation (multi-tenant)
let ctx = builder
.namespace
.build;
let action = ctx.authorize?;
A cert issued for tenant-acme cannot authorize under tenant-beta. Hard separation, zero config overhead.
For the REST gateway, send X-A1-Tenant-ID: acme on every request and set A1_MULTI_TENANT=true.
PostgreSQL and Redis storage backends
# Cargo.toml
[]
= "2.8" # Postgres nonce + revocation stores
= "2.8" # Redis nonce + revocation stores
Self-hosted gateway
# Gateway: http://localhost:8080
# Health: http://localhost:8080/healthz
# Studio: http://localhost:8080/studio
# Schema: http://localhost:8080/.well-known/a1-configuration
Production setup
Important: The gateway starts safely in development mode with no configuration. Before going to production, set the environment variables below. Without them, keys are ephemeral (lost on restart), tokens are invalidated on every restart, admin endpoints are unprotected, and revocation state is not persisted.
Create a .env file (see .env.example in the repo) or export these in your deployment environment:
# Generate these once and store them in your secrets manager
A1_SIGNING_KEY_HEX= # Ed25519 seed for gateway signing key
A1_MAC_KEY_HEX= # HMAC key for VerifiedToken
# Protect admin endpoints (cert issuance, batch revocation, swarm management, etc.)
A1_ADMIN_SECRET=your-strong-secret-here
# Pick one persistent backend for revocation + nonce state
A1_REDIS_URL=redis://localhost:6379
# OR
A1_PG_URL=postgres://user:password@localhost/a1
Without a persistent backend, revoking a certificate has no effect after a restart — the revoked cert becomes valid again. This is a security issue in production.
Gateway environment variables
| Variable | Default | Description |
|---|---|---|
A1_SIGNING_KEY_HEX |
(generated) | 32-byte hex Ed25519 seed for gateway signing identity. Set in production. |
A1_MAC_KEY_HEX |
(generated) | 32-byte hex key for VerifiedToken HMAC. Set in production. |
A1_ADMIN_SECRET |
(none) | Bearer token for admin endpoints. Required in production. |
A1_REDIS_URL |
(none) | Redis URL, e.g. redis://127.0.0.1/ |
A1_PG_URL |
(none) | Postgres URL, e.g. postgres://user:pass@host/db |
A1_RATE_LIMIT_RPS |
500 |
Per-IP requests per second limit |
A1_CORS_ALLOWED_ORIGIN |
(none) | CORS origin (* for permissive) |
GATEWAY_ADDR |
0.0.0.0:8080 |
Bind address |
A1_PUBLIC_BASE_URL |
http://localhost:8080 |
Used in .well-known discovery document |
A1_TRUSTED_PROXY_MODE |
(none) | x-forwarded-for, fly-client-ip, or cf-connecting-ip |
A1_NEGOTIATE_CAPABILITIES |
(none) | Comma-separated list of capabilities the negotiate endpoint may issue |
A1_NEGOTIATE_ALLOW_ALL |
(none) | Set to 1 to allow any capability (dev/staging only) |
A1_JWT_JWKS_URL |
(none) | JWKS endpoint URL for JWT bridge (/v1/jwt/exchange) |
A1_JWT_ALLOWED_CAPS |
(none) | Comma-separated capability allowlist for JWT-exchanged certs |
A1_MULTI_TENANT |
(none) | Set to true to enable X-A1-Tenant-ID header enforcement |
A1_TENANT_REQUIRED |
(none) | Set to true to reject requests missing the tenant header |
A1_TENANT_ALLOWLIST |
(none) | Comma-separated list of permitted tenant IDs |
A1_AI_KEY |
(none) | Anthropic API key — enables the /v1/ai/chat proxy for Studio |
A1_WEBHOOK_URL |
(none) | URL to receive A1 audit webhook events |
A1_WEBHOOK_SECRET |
(none) | Secret for signing webhook payloads (verified via verifyWebhookSignature) |
RUST_LOG |
a1_gateway=info |
Log filter |
How it works
The delegation model
Human principal
└─ issues DyoloPassport (capabilities: [trade.equity, portfolio.read])
└─ issues DelegationCert → Orchestrator agent (same caps or subset)
└─ issues DelegationCert → Executor agent (trade.equity only)
└─ authorizes Intent("trade.equity")
→ ProvableReceipt (fingerprint, mask commitment, depth=2)
Every arrow in this chain is an Ed25519 signature. Every scope reduction is enforced by NarrowingMatrix. The final receipt is independently verifiable without any secrets.
The NarrowingMatrix (O(1) capability enforcement)
256-bit bitmask. Each capability name maps deterministically to a bit position via Blake3. Narrowing check:
child_mask & parent_mask == child_mask
This is eight 64-bit AND operations. It runs in nanoseconds regardless of how many named capabilities exist. No registry lookup. No network call. No configuration.
Benchmark results
Run cargo bench to reproduce locally. Median wall-clock times across 10,000 iterations (Criterion.rs, Apple M-series / AWS c7g.large). Full methodology and comparison tables: docs/performance-benchmarks.md.
| Operation | Latency |
|---|---|
NarrowingMatrix::is_subset_of |
~150 ns |
NarrowingMatrix::from_capabilities (4 caps) |
~1.1 µs |
NarrowingMatrix::from_capabilities (16 caps) |
~4.2 µs |
NarrowingMatrix::commitment (Blake3 over 32 bytes) |
~280 ns |
| Single-hop chain authorization | ~5 µs |
| Two-hop scoped chain authorization | ~9 µs |
DyoloPassport::guard_local (end-to-end) |
~12 µs |
authorize_batch (256 intents) |
~820 µs |
authorize_batch (1024 intents) |
~3.3 ms |
| Single gateway process, CPU-bound ceiling | ~200,000 req/s |
is_subset_ofis O(1) regardless of capability count — onlyfrom_capabilitiesscales with the number of names, and it runs once at issuance time, not on every authorization call.
Compliance
Security model
- Ed25519 everywhere — 128-bit security, fast, no weak parameter choices.
- Blake3 for all hashing — domain-separated, collision-resistant, hardware-accelerated.
- Zero unsafe Rust —
#![deny(unsafe_code)]enforced at the crate level (isolatedffimodule documents all contracts explicitly). - No global state — all stores are passed explicitly; no process-level singletons.
- Offline-first — authorization never requires a network call.
- Capability names are hashed, not plaintext —
DelegationCertcontains only Blake3 hashes of intent values.
See SECURITY.md for the full threat model and responsible disclosure policy.
Capability listing
| Capability | Description |
|---|---|
DyoloPassport |
Long-lived agent identity. Issue once, delegate per task. Save/load as JSON. |
NarrowingMatrix |
256-bit O(1) capability bitmask. Subset enforcement. Blake3 commitment. |
CapabilityRegistry |
Collision-free explicit name-to-bit assignment for deployments with 100+ distinct capability names. |
ProvableReceipt |
Tamper-evident authorization receipt with verifiable commitment over the enforced scope. |
DyoloChain |
Delegation chain builder and verifier. Supports 1-to-N hops with Merkle scope proofs. |
DelegationCert |
Wire-format signed credential. Ed25519 signature over all fields. |
A1Context |
Builder-pattern entry point. Wires all stores and clock in three lines. |
DyoloIdentity |
Ed25519 key pair generator and signer. In-memory; swap for a VaultSigner in production. |
RevocationStore |
Deny-list for cert fingerprints. Memory, Redis, and Postgres backends included. |
NonceStore |
Replay-attack prevention via intent nonce tracking. |
RateLimitStore |
Per-principal intent execution rate limiting. |
AuditSink |
Composable audit event destination. NDJSON, Datadog, Splunk, OTLP. |
PolicySet |
YAML-driven delegation policy with capability restrictions and TTL limits. |
VaultSigner |
Abstract signing backend. AWS KMS, GCP KMS, HashiCorp Vault, Azure Key Vault, local file. |
ZkChainCommitment |
Zero-knowledge commitment over a delegation chain. Prove authorization without revealing it. |
AnchoredReceipt |
On-chain anchor record for Ethereum, Polygon, Base, Arbitrum, and Solana. |
SwarmPassport |
Multi-agent swarm coordinator. Issue, add/remove members with scoped roles and TTLs. |
| Middleware (Python) | @a1_guard decorator (sync + async). protect, inject_passport, a1_context context helpers. A1Middleware class for ASGI frameworks. |
| OTel Tracing (Python) | A1Tracer — wraps any PassportClient or function to emit structured OTEL spans. Compatible with Datadog APM, Jaeger, Honeycomb, and any OTLP backend. |
| Middleware (TypeScript) | withA1Passport higher-order function. @PassportGuard class decorator. A1Middleware class. exchangeJwt for JWT bootstrap. verifyWebhookSignature for webhook security. |
| Middleware (Go) | WithPassport[T, R] generic guard function. |
| Framework integrations | LangChain, LangGraph, LlamaIndex, AutoGen v0.4, CrewAI, Semantic Kernel, OpenAI Agents. |
| MCP server | Built-in Model Context Protocol server at /mcp. Works with Claude Code, Cursor, and any MCP client. |
CLI (a1) |
passport issue, passport inspect, passport sub, keygen, verify, revoke, decode, migrate, policy, completion. |
| Gateway | Self-hostable REST API. Docker Compose included. Full endpoint reference above. |
| A1 Studio | Web dashboard at /studio. Issue, inspect, and manage from a browser. |
| Namespace isolation | DyoloChain::with_namespace — hard multi-tenant separation. X-A1-Tenant-ID header for REST. |
| Multi-hop batch authorization | authorize_batch verifies N intents in a single chain traversal. |
| JWT bridge | /v1/jwt/exchange — bootstrap delegation chains from existing OIDC/SAML JWT tokens. |
| Agent negotiation | /v1/negotiate — agent-to-agent capability negotiation with freshness enforcement. |
| Wire schema | wire/schema.json — stable, versioned JSON schema for all wire types. |
| Discovery document | /.well-known/a1-configuration — all endpoint URLs, gateway DID, signing public key. |
| C FFI | ffi feature flag exports a C ABI for embedding in Python, Go, Java, Node.js. |
| CBOR serialization | cbor feature flag adds binary wire encoding for constrained environments. |
| DID / W3C VC | did feature flag: issue and verify W3C Verifiable Credentials tied to agent identities. |
| ZK commitments | zk feature flag: ZkChainCommitment proves authorization without revealing the chain. |
| Post-quantum hybrid | ML-DSA-44 and ML-DSA-65 hybrid signatures. Zero migration cost. |
| SOC 2 mapping | Annex-level mapping of all Trust Service Criteria to A1 controls. |
| ISO 27001 mapping | Annex A control mapping for certification preparation. |
| Sample audit report | Structured audit report template populated with A1 evidence fields. |
CLI reference
# Generate an Ed25519 keypair
# Issue a root passport
# Inspect a passport file
# Issue a sub-delegation cert
# Verify a signed chain JSON
# Revoke a cert by fingerprint
# Bulk revoke
# Decode a raw cert for debugging
# Apply a YAML policy file
# Run Postgres schema migration
# Generate shell completions
Feature flags
| Flag | What it unlocks |
|---|---|
serde |
Serialization for all types |
wire |
SignedChain, VerifiedToken, CertExtensions |
async |
Async storage traits, AsyncA1Context, VaultSigner |
did |
AgentDid, DidDocument, VerifiableCredential |
zk |
ZkChainCommitment, ZkProofMode, anchor_hash |
anchor |
On-chain anchoring via anchor_hash |
negotiate |
Algorithm negotiation for hybrid deployments |
swarm |
Swarm coordination primitives |
governance |
On-chain governance vote recording |
tracing |
tracing spans during authorization |
ffi |
C ABI for Python, Go, Java, Node.js |
policy-yaml |
YAML policy file parsing |
post-quantum |
Full ML-DSA signature verification |
schema |
JSON Schema export for SignedChain |
cbor |
CBOR serialization for bandwidth-sensitive deployments |
otel |
OpenTelemetry spans on every authorization event |
full |
All features above (except post-quantum) |
Contributing
See CONTRIBUTING.md. All contributions require a signed Contributor License Agreement.
License
MIT OR Apache-2.0. See LICENSE-MIT and LICENSE-APACHE.
A1 is built and maintained by dyolo (@dyologician).