API key management for the age of AI agents.
AIris Keeper manages API keys for LLM-powered development workflows. Instead of hiding secrets, it minimizes the blast radius when keys leak — because in the age of AI agents, they will.
- Damage control over secrecy — Budget caps, short-lived keys, and automatic rotation mean a leaked key is worth nothing
- Key granularity — Automatically isolate keys by project, environment, and scope. One leak affects nothing else
- Agent-native — Built for Claude Code, Codex, Cursor, and other AI coding agents to use directly via CLI
- Doppler-simple, not Infisical-complex — Minimal surface area, maximum utility
- Vault — AES-256-GCM encrypted secret storage with environment scoping (dev/stg/prd)
- Provisioners — Automatic API key creation via provider Admin APIs (OpenAI, more coming)
- Budget — Per-customer monthly spending limits with alerts
- Rotation — Atomic key rotation: revoke old, create new, update environment in one command
- Injection — Run commands with secrets injected as environment variables
- Audit — Full audit log of all key operations
npx airis-keeper --help# Initialize from your .env.example
keeper init --from .env.example
# Connect a provider
keeper provider add openai
# Provision a key with budget cap and TTL
keeper provision --project myapp --env staging \
--provider openai --scope "chat:gpt-4o" \
--budget 10 --ttl 24h# Inject secrets and run your app
keeper run --project myapp --env staging -- node server.js
# Check status across all projects
keeper status
# Rotate keys atomically
keeper rotate --project myapp --env prod# Store encrypted secrets
keeper secret set API_KEY sk-xxx --env prod
keeper secret get API_KEY --env prod
keeper secret list --env prod
# Delete a secret
keeper secret delete OLD_KEY --env staging# Set a monthly budget cap
keeper budget set --customer acme --limit 10
# Check current usage
keeper budget get --customer acme.env.example → keeper init → keeper provision → keeper inject
↓
Provider Admin API
(OpenAI, Anthropic, ...)
↓
Key with $10 cap + 24h TTL
↓
Encrypted in vault (AES-256-GCM)
Each key is:
- Budget-capped — $10/month max? Even if leaked, damage stops at $10
- Time-limited — 24h TTL? Key is dead tomorrow regardless
- Scope-restricted — Only
chat:gpt-4o? Can't touch embeddings or other models - Isolated — One project, one environment. Leak one, the rest are safe
keeper CLI
├── vault/ — AES-256-GCM encryption, tenant key derivation
├── provisioners/ — Provider adapters (OpenAI, more planned)
├── budget/ — Per-customer spending limits + usage tracking
├── commands/ — CLI command handlers
└── index.ts — Library exports for programmatic use
| Variable | Required | Description |
|---|---|---|
VAULT_ROOT_KEY |
Yes | 256-bit root encryption key |
SUPABASE_URL |
Yes | Supabase project URL |
SUPABASE_SERVICE_ROLE_KEY |
Yes | Supabase service role key |
OPENAI_ADMIN_API_KEY |
No | OpenAI Admin API key (for provisioning) |
OPENAI_PROJECT_ID |
No | OpenAI project ID |
KEEPER_ORGANIZATION_ID |
No | Default organization ID |
Elastic License 2.0 (ELv2) — Free for individual and internal use. Cannot be offered as a competing managed service.