Workload identity & Kubernetes auth
Agent pods log in with their service-account token, verified by a Kubernetes TokenReview. No API key is ever written into the pod, the image or the prompt.
VYLTZERO gives autonomous AI agents delegated authority without static credentials. Agents prove who they are with workload identity, hold a short-lived session token, and reach APIs and MCP servers through a broker that injects the real key in flight — every call policy-checked and signed into the audit log. Underneath is a full self-hosted secrets platform: envelope encryption, transit, PKI, leases and multi-region replication.
A leaked transcript, a prompt-injected env | curl or a compromised container exposes only a session token — one that expires within the hour, works only through the broker, and only for the routes its policy allows.
Agent pods log in with their service-account token, verified by a Kubernetes TokenReview. No API key is ever written into the pod, the image or the prompt.
Each agent gets a one-hour session token bound to its tenant, policies and principal. It expires on its own and revoking it stops it working immediately.
Real API keys live in the vault under brokered/, readable only by the broker. The agent's own policy explicitly denies reading them, so it cannot exfiltrate what it never holds.
Point an SDK's base URL at the agent-proxy and put the session token where the key would go. The real credential is injected in flight; streamed responses and MCP servers just work.
Every route checks tenant, policy, principal, method and path. Upstreams must be HTTPS, redirects are never followed, and CONNECT tunnels are refused.
Allowed or denied, every brokered call lands in the signed, hash-chained audit log with the agent's identity, the route and the outcome.
Agent pod presents its Kubernetes service-account token.
/v1/auth/kubernetes/loginShort-lived, tenant- and policy-bound. Never a real key.
1 h · revocableSDK base URL points at the agent-proxy route.
/r/anthropicChecked against route rules, then the real key is attached.
allowed_policiesPrincipal, route and outcome — allowed or denied.
agent_proxy.request$ # the session token came from /v1/auth/kubernetes/login $ export ANTHROPIC_BASE_URL=http://vyltzero-agent-proxy:8094/r/anthropic $ export ANTHROPIC_API_KEY="$(cat /session/token)" # expires in 1h $ claude -p "fix the flaky test" ✓ brokered route=anthropic principal=agents:claude-coder audit=signed $ vyltzero secret get brokered/anthropic # as the agent 403 policy agent-claude denies brokered/**
One vault in front of the AI harnesses, identity providers, cloud secret stores and languages you already run. Items marked coming soon exist in the codebase and are not switched on yet.
Static and dynamic secrets, encryption-as-a-service, a private CA, and the identity and policy layer to govern them — each engine sealed by the same per-tenant key hierarchy.
A Vault-compatible KV v2 engine: versioned reads and writes, check-and-set, soft-delete and destroy, per-path metadata — every value sealed before it touches disk.
AES-256-GCM with a per-tenant key hierarchy. Data keys are wrapped under a tenant KEK, which is wrapped under a root key held only by the crypto service.
Encryption as a service: encrypt, decrypt, sign and verify without the plaintext key ever leaving the vault. Keys rotate while old ciphertext stays readable.
Issue and manage a private CA, roles and short-lived certificates. CA private keys are envelope-encrypted under their own root, never stored in the clear.
Every credential is a lease: issued, listed, renewed and revoked for real. Revoking a token stops it working immediately, not just flips a row.
Self-service TOTP two-factor with recovery codes, over fine-grained policies on API keys and JWTs — plus Kubernetes, OIDC device-flow and LDAP sign-in and SCIM provisioning. Identity comes from a signed, per-tenant token, never a header.
Each region is a complete, independent stack — its own database, its own services, its own public hostname. They share nothing at runtime but key material, and each region’s agent pulls the other’s changes over the public edge.
$ vyltzero init ✓ wrote ~/.vyltzero/config.toml tenant=acme region=manchester $ vyltzero secret put prod/db/creds -d password=s3cr3t ✓ sealed with dek 01a0…93a7 version=1 $ vyltzero secret get prod/db/creds --profile london # same secret, decrypted in the peer region password = s3cr3t replication_lag=14ms
The vault fails closed. Keys are wrapped, custody can be split, and every action is signed into a chain you can verify.
Every operation joins a per-tenant hash chain signed with a dedicated key — a record cannot be altered or removed without breaking the chain.
The root key can be split into Shamir shares so no single operator can unseal the vault alone. It starts sealed and stays sealed until a quorum agrees.
A data key belongs to exactly one tenant; a cross-tenant request returns “not found” rather than another tenant’s data. Isolation holds even at the crypto service.
Secrets, transit keys and CA material are all encrypted before storage. A database dump yields ciphertext wrapped under keys the database never sees.
Clone the repo, install the Helm chart and unseal. The getting-started guide takes you from an empty cluster to your first sealed secret; the agent-proxy guide gets your first agent brokered.