Skip to main content

Configure environment variables

The tables below summarize common setup requirements. The complete per-runtime catalog is maintained in env-manifests/*.json and reviewed on Environment → Applications. Importing that catalog never provisions credentials. Follow the Env Manager Guide to regenerate both copied surfaces and apply reviewed catalog changes after deployment.

Shared runtime overrides​

Trigger tasks import chat, document, and governance helpers also used by the web app. Configure their optional model overrides in the Trigger environment as well as Vercel when equivalent behavior is intended. The Trigger manifest includes the shared model-role settings, legacy model aliases, pro-chat viewer allowlist, and prompt-owner restriction. An unset override uses the code default; matching variable names on another platform do not configure this runtime.

Supabase Edge​

NameRequiredNotes
SUPABASE_URLyesProject URL
SUPABASE_SERVICE_ROLE_KEYyesServer-side DB access
SUPABASE_ANON_KEYyesPublic API key
ANTHROPIC_API_KEYyes for extraction/OCRUsed by fathom-sync, interview synthesis, and Drive OCR
FATHOM_API_KEYyes for FathomREST API
FATHOM_WEBHOOK_SECRETyes for webhookSet in Supabase
FATHOM_WEBHOOK_ORG_SLUGoptionalRequired if multiple orgs exist
SABLE_ORG_SLUGoptionalFallback org slug
ASANA_API_KEYyes for AsanaREST API
ASANA_ACT_WRITES_ENABLEDno by defaultSet true only to arm writes
TOGGL_API_KEYyes for TogglTrack and Reports API
GDRIVE_SA_JSON / GOOGLE_DRIVE_JSONyes for Drive/Calendar/GmailGoogle service account JSON
GOOGLE_CALENDAR_SUBJECToptionalWorkspace subject to impersonate for Calendar domain-wide delegation
GOOGLE_GMAIL_SUBJECTyes for GmailExplicit mailbox impersonated with gmail.readonly domain-wide delegation
GMAIL_INTERNAL_DOMAINoptionalDirection classification
GMAIL_SYNC_QUERYyes for GmailApproved narrow, bounded mailbox search; sync fails closed when unset
CALENDAR_ACT_WRITES_ENABLEDno by defaultSet true only to arm approved Calendar writes
HUBSPOT_SERVICE_KEYyes for HubSpotHubSpot connector
VOYAGE_API_KEYyes for knowledge indexing/searchVoyage voyage-4 embeddings and rerank-2.5
SPINE_MCP_TOKENyesInteractive-agent bearer: reads and approval proposals, never board delivery
SPINE_MCP_STAGE_TOKENyesPrompt-staging bearer; derives the separate, two-tool scheduled-report bearer and rotation-specific vault name
SPINE_MCP_LEARNING_TOKENyesIndependent reads + prompt_update proposal bearer
SPINE_MCP_ORCHESTRATOR_TOKENyesIndependent Trigger-only persistence/delivery bearer
SPINE_ORG_IDmulti-org onlyExplicit organization UUID for service-role MCP calls
REPORT_REQUIRED_CONNECTORSoptionalTrigger refresh + Spine readiness set; values must match. Defaults to Fathom, Granola, Asana, Email, Drive, Calendar, Toggl
REPORT_READINESS_GRACE_SECONDSoptionalCoverage grace; default 900, maximum 3600
SABLE_WEB_URLyes for portal deliveryCanonical SABLE origin used for portal links; set https://sable.indigotrigger.ai in production
RESEND_API_KEYyes for portal activity emailResend provider key; secret value stays in Supabase Edge secrets
RESEND_FROMyes for portal activity emailSender address on a Resend domain enabled for sending
SABLE_PORTAL_EMAIL_DELIVERY_ENABLEDrelease gateKeep false until health and controlled-recipient acceptance pass; set true to allow activity email claims
CRON_SECRETyes for portal workerMust match the Trigger environment value used in x-cron-secret

Trigger.dev Reports​

NameRequiredNotes
SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEYyesEdge invocation and trusted run state
CRON_SECRETyesFixed scheduled-action authentication
SPINE_MCP_ORCHESTRATOR_TOKENyesGoverned readiness, draft, and delivery calls
SABLE_REPORT_DELIVERY_MODEyesMust be exactly shadow or live; unset fails closed
SABLE_ORG_SLUGmulti-org onlyExplicit organization selection
ASANA_WORKSPACE_GIDyesExplicit scheduled-refresh workspace; no first-workspace fallback
SABLE_INBOUND_DOMAINoptionalDomain half of the SABLE inbound address, no local part. Keeps SABLE's own inbox out of email attribution in the shared draft and ingestion code
SABLE_INBOUND_ADDRESSoptionalFull SABLE BCC inbox address. Leave unset in Trigger; SABLE_INBOUND_DOMAIN is enough, and the full address stays scoped to Supabase
GMAIL_INTERNAL_DOMAINoptionalDomain used to classify internal email; defaults to indigotrigger.com
ANTHROPIC_API_KEYrecommendedWeekly-update drafts (sable.weekly-update.draft.project); without it the draft uses the template body and the run logs a warning

Vercel Web​

NameRequiredNotes
SABLE_MODEyes for productionSet production to disable demo fallbacks
PUBLIC_APP_ORIGINyes for productionCanonical shared app URL used by operators and smoke tests
SUPABASE_URLyes for live modeAPI routes
SUPABASE_SERVICE_ROLE_KEYyes for live modeAPI routes
SUPABASE_ANON_KEYyes for Edge executionAlso may use NEXT_PUBLIC_SUPABASE_ANON_KEY
NEXT_PUBLIC_SUPABASE_URLyes for productionReturned by /api/config; no hardcoded project refs
NEXT_PUBLIC_SUPABASE_ANON_KEYyes for productionReturned by /api/config; public anon key only
ANTHROPIC_API_KEYyes for chat/OCRMessages API for /api/chat and upload OCR fallback
APP_TOKENlegacy demoToken gate for non-Supabase fallback
VOYAGE_API_KEYyes for documents/search/chat retrievalVoyage voyage-4 embeddings and rerank-2.5
SABLE_WEB_URLyes for portal accessCanonical base for invitation, recovery, notification, and portal links
SABLE_INBOUND_DOMAINoptionalDomain half of the SABLE inbound address. Drives the Important emails domain match on the project page: when unset, that card falls back to the roster match only

Configure portal Auth delivery​

Portal invitation and recovery email use Supabase Auth rather than the activity-email Resend worker. Configure the production Site URL, allow /auth-callback.html on production and approved preview origins, and verify Supabase Auth Simple Mail Transfer Protocol delivery before inviting a customer.

The production Vercel and Supabase Edge SABLE_WEB_URL values must identify the same SABLE origin. Mismatched values create access or notification links for the wrong deployment.

Local Docs​

Docusaurus does not need app secrets. Hosted docs search is optional and activates only when all three DocSearch values are present:

NameRequiredNotes
DOCSEARCH_APP_IDoptionalAlgolia DocSearch app ID
DOCSEARCH_API_KEYoptionalPublic DocSearch search key, not an admin key
DOCSEARCH_INDEX_NAMEoptionalIndex name for the docs site