Skip to content

Configuration reference

Configuration is one .env next to the server (written by the installer, loaded by systemd). GRAY_* names are canonical; legacy VB_* equivalents of the same names also work.

VarPurposeDefault
GRAY_SELFHOSTRun the self-host profile (the only supported mode)set to 1 by the installer
GRAY_HOSTBind address127.0.0.1
PORTBind port8848
GRAY_BRAIN_CWDWorking directory the brain operates in/root (the v2 installer leaves the code default; set it explicitly to jail the brain elsewhere)
GRAY_FILE_ROOTFile-access jail rootsame as brain cwd
GRAY_VAULT_DIRCredentials vault directory (keep OUTSIDE the brain cwd)/var/lib/voice-brain
GRAY_CONVERSATIONS_DIRConversation store<vault>/conversations (set by the installer)
GRAY_RP_IDThe box’s HTTPS hostname (WebAuthn relying-party ID — reserved; the current app signs in with email codes)localhost (the installer sets the tailnet hostname; the server warns until set)
GRAY_RP_ORIGINWebAuthn originhttps://<GRAY_RP_ID>
GRAY_USER_NAMEHow Gray addresses youthe user
PERMISSION_MODEBrain permission modelset by installer
VarPurposeDefault
ANTHROPIC_API_KEYBrain key (alternative to a logged-in Claude CLI)unset — CLI login is the default
CLAUDE_CODE_OAUTH_TOKENSubscription OAuth token alternativeunset
GRAY_BRAIN_MODELPin a brain model IDunset (subscription default)
GRAY_CONDUCTOR_MODELFast voice-conductor modelsonnet
GRAY_MODEL_PROVIDERanthropic / bedrock / vertex / proxyanthropic
GRAY_AWS_REGION · GRAY_VERTEX_REGION · GRAY_VERTEX_PROJECTCloud-provider routingunset
GRAY_ANTHROPIC_BASE_URL · GRAY_ANTHROPIC_AUTH_TOKENAnthropic-compatible proxyunset
GRAY_PROVIDER_MODEL · GRAY_PROVIDER_FAST_MODELProvider-specific model IDsunset
VarPurposeDefault
OPENAI_API_KEYPremium realtime voice + transcriptionunset (premium voice off without it)
REALTIME_MODELRealtime voice modelgpt-realtime
REALTIME_VOICEVoiceash
REALTIME_SPEEDServer-side default speed1.5
TRANSCRIBE_MODELTranscription modelgpt-4o-mini-transcribe
VarPurposeDefault
RESEND_API_KEYSend codes via Resend (wins over SMTP)unset
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASS / SMTP_FROMSend codes via your SMTPunset / 587
AUTH_DEV_ECHOAlso write the code to <vault>/auth_dev_code.txt (dev)unset
TURNSTILE_SECRETCloudflare Turnstile on the email formunset (off)

With none configured, codes print to the box console log only.

VarPurposeDefault
GRAY_CLAIM_CODEPre-bake the box code (non-interactive installs; the var keeps the log’s “claim code” name)minted on first sign-in
GRAY_LICENSEOffline signed license (or <vault>/license.key)unset
GRAY_HUB_URL · GRAY_ORG_ID · GRAY_SELFHOST_TOKEN · GRAY_GATE_*Org/enterprise validation — the gate activates only when all three are setpersonal boxes: unset (the v2 installer writes none)
  • 8848 — internal HTTP, loopback. Published in-tailnet as HTTPS 443 by tailscale serve.
  • /var/lib/voice-brain/ — the vault: auth state, entitlement, voice meter, conversations, SSH targets and sessions, snippets. All files 0600, directory 0700. Back it up: Data & backups.
  • Logs — journald: journalctl -u gray-server.
VarPurpose
VAPID_PUBLIC / VAPID_SUBJECTWeb-push keys — browser/PWA clients only; the phone app uses native push tokens and never touches VAPID
COMPOSIO_API_KEYOptional MCP tool broker