Your keys. Your control.

Bring your own AI key. Encrypted in your browser before it ever touches the network. Stored only here, on your device.

🔒 What we promise about your keys

The server never stores your keys. Not encrypted. Not hashed. Not at all.

Your keys live encrypted in this browser's IndexedDB. We use AES-256-GCM with a 256-bit key derived from your passphrase via PBKDF2-SHA256 (310,000 rounds). Only you know the passphrase.

When you chat: this page decrypts your key locally, sends it once to /api/byok/relay, the server holds it in request memory only to forward to OpenAI/Anthropic/etc., then drops it. No log lines, no DB rows, no cache.

There's an invariant test at tests/unit/test_byok_no_storage.py that fails if anyone adds a column matching api_key, byok_key, or similar to the user-data schema. The promise is enforced architecturally, not just by good intentions.

Set your vault passphrase

This passphrase encrypts every key you store here. We don't know it. We can't recover it. If you forget it, you re-enter your API keys. Make it strong; consider a passphrase manager.

Your providers