Bring your own model (BYOK)
What BYOK means in Cordy, why it matters, and where your keys are stored in each product.
"Bring your own key" (BYOK) means you supply the model-provider credentials, and Cordy uses them to talk directly to that provider. Cordy does not resell tokens, does not proxy your requests through its own servers, and does not require a Cordy account.
Why BYOK
- No markup, no middleman. You pay the provider directly, at their rates.
- No lock-in. Switch providers or models whenever you like; your history stays put.
- Privacy. Your prompts go only to the provider you chose. See the privacy model.
- Access to everything. Any model your provider offers — including brand-new ones — is usable the moment it ships.
What "OpenAI-compatible" means
Most providers expose an OpenAI-compatible HTTP API: the same /v1/chat/completions request shape the OpenAI SDK uses. Because of this, a single "custom endpoint" field lets Cordy talk to almost anything — official clouds, aggregators like OpenRouter, or a model server you run yourself (vLLM, Ollama, LM Studio, LocalAI). You provide a base URL and an API key, and Cordy speaks the standard protocol.
Where your keys are stored
Cordy never writes your keys to a shared server. Storage is on-device and product-specific:
| Product | Key storage |
|---|---|
| Cordy for Chrome | Encrypted IndexedDB inside the extension (never synced) |
| Cordy Desktop | Not stored by Cordy — each CLI agent holds its own provider config |
| Cordy for Mobile | Android Keystore (AES-256-GCM) / iOS Keychain, device-bound |
| Cordy Gateway | Upstream keys are Fernet-encrypted per channel in your own database |
The gateway option
If you run several Cordy clients — or several apps of your own — you can point them all at your own Cordy Gateway instead of configuring provider keys in each app. The gateway holds the upstream keys once, and each client authenticates with a Cordy gateway key (wnx_…). You get one metered, cost-controlled endpoint, and the upstream credentials never leave your server. This is optional — every client also works standalone.