Skip to content

Models & keys

There is no API-key field anywhere in the Gray app. Models are configured on the box, and Gray detects them.

RequiredClaude on the box — run claude once and sign in (subscription auth works), or set ANTHROPIC_API_KEY. This is what Gray’s own voice runs on; without it, Talk tells you exactly what’s missing and points here.
RecommendedOPENAI_API_KEY — unlocks premium realtime voice. On-device voice works without it.
OptionalCodex · Grok · Gemini · Aider · OpenCode · Cursor — detected automatically; Gray’s crew can drive these as agents. They don’t power Gray’s own voice.

During onboarding (and any time from Me → Brain → Stack → Rescan) Gray scans the box across three registries and shows only what it finds:

  • Agent CLIs (7): Claude Code · Codex · Grok · Gemini · Aider · OpenCode · Cursor — local sessions from these show up in Activity.
  • Model logins (4): Anthropic/Claude · OpenAI · xAI/Grok · Gemini — a logged-in Claude CLI (subscription auth) is the default, zero-config brain; env keys work too.
  • Runtime (6): python3 · node · docker · tmux · git · rg.

The scan ends in Scan complete showing exactly what Gray found and will use.

Key / loginUsed for
Claude CLI login or ANTHROPIC_API_KEYThe brain — conversation, agents, summaries
OPENAI_API_KEYPremium realtime voice and transcription models
CLAUDE_CODE_OAUTH_TOKENAlternative subscription auth for the brain

Advanced provider routing (Bedrock, Vertex, Anthropic-compatible proxies) is env-based — see Configuration reference.

In the box’s .env (written 0600-tight by the installer) and your own shell config — never in the app, never synced anywhere. Storage details: Key storage.

v1 docs described a connectors list where you pasted service API keys into the app. That model is gone — if a tool lives on your box, Gray finds it there.