--prod.
--prod is always explicit, per command. The one command that inherently targets production, kelviq promote, says so in its name, shows you the full diff of what production would change, and requires confirmation before writing (plus a typed production confirmation before any --prune archive). Promote needs both keys configured: sandbox to read, production to write.
Each environment has its own API host and its own keys — the CLI selects both together:
Always pair the key with its own environment’s host — a key from one environment doesn’t belong on the other’s host, and the CLI never mixes them.
Getting keys
The CLI authenticates with Server API Keys from the dashboard:- Sign in at app.kelviq.com.
- Go to Settings → API keys.
- Copy the Server API Key for the environment you want (sandbox and production have separate keys).
Key storage
kelviq login stores keys in a per-user config file:
- The file is created with owner-only permissions (
0600), inside a0700directory. XDG_CONFIG_HOMEis respected if set (the file lives at$XDG_CONFIG_HOME/kelviq/config.json).- Sandbox and production keys are stored as separate entries;
kelviq logoutremoves them individually (--prod) or together (--all).
Environment variables
Environment variables override the stored config file — useful for CI, containers, and one-off overrides without touching your stored keys. They can come from the shell or from the project’s env file: before every command, the CLI readsKELVIQ_* variables from .env.local and then .env in the working directory, never overriding a variable the shell already sets. Pass --env-file <path> to read a specific file instead, or --no-env-file to read none. kelviq env lists the files it read. KELVIQ_SERVER_API_KEY and KELVIQ_ENV work the same way as in the MCP server; the environment-named keys are CLI-only.
- A variable named for an environment wins over
KELVIQ_SERVER_API_KEY. UseKELVIQ_SANDBOX_SERVER_API_KEYandKELVIQ_PRODUCTION_SERVER_API_KEYwhen one shell needs both keys, for example forkelviq promote. KELVIQ_ENVonly decides which environmentKELVIQ_SERVER_API_KEYbelongs to. It never makes a command target production — only--proddoes.- Any value other than
sandboxorproductionmakes commands fail rather than guess.
kelviq login entirely:
kelviq promote in CI, set both KELVIQ_SANDBOX_SERVER_API_KEY and KELVIQ_PRODUCTION_SERVER_API_KEY instead.
If a command needs a key and finds none — neither in the environment nor stored — it fails with a message naming the variables to set and where to get a key. If KELVIQ_SERVER_API_KEY is set for the other environment, the message says so.
Checking your setup
kelviq env prints the full picture without calling the API, and kelviq env --check adds one authenticated read per configured key:
set means a key is configured (stored, from an env file, or from the shell) — not that it’s valid. kelviq env --check verifies each key with one read against its own environment and exits non-zero if any configured key is rejected. Kelviq has no key-introspection endpoint yet, so the CLI can’t display your organization name.