Skip to content

Environment variables

Foundry reads environment variables from three locations depending on the service. This page documents every variable, where it is set, and whether it is required for local development.

LocationWhat goes here
.env.localNext.js frontend vars (NEXT_PUBLIC_*), Clerk keys, local dev URLs
Convex DashboardBackend secrets — Anthropic API key, webhook secrets, service URLs
Wrangler SecretsCloudflare Worker secrets — sandbox and agent worker auth
VariableWherePurposeDefaultRequired
NEXT_PUBLIC_CONVEX_URL.env.localConvex deployment URL for client WebSocket connectionYes
CONVEX_DEPLOYMENT.env.localConvex deployment identifier (set by bunx convex dev)Yes
NEXT_PUBLIC_CONVEX_SITE_URL.env.localConvex HTTP actions URL (for webhook endpoints)Yes
VariableWherePurposeDefaultRequired
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY.env.localClerk frontend authentication keyYes
CLERK_SECRET_KEY.env.localClerk backend key for server-side verificationYes
CLERK_JWT_ISSUER_DOMAIN.env.localClerk JWT issuer domain for token validationYes
CLERK_WEBHOOK_SECRETConvex DashboardHMAC secret for Clerk webhook signature verificationYes (for user sync)
VariableWherePurposeDefaultRequired
ANTHROPIC_API_KEYConvex DashboardClaude API key for AI analysis, decomposition, code generationYes
VariableWherePurposeDefaultRequired
AGENT_SERVICE_URL.env.local + Convex DashboardURL of the agent inference servicehttp://localhost:3001Yes
AGENT_SERVICE_SECRETConvex Dashboard + WranglerBearer token for agent worker authentication (production only)No (local dev)

In local development, the agent service runs on port 3001 without bearer auth. In production, set AGENT_SERVICE_URL to your Cloudflare Worker URL and configure AGENT_SERVICE_SECRET as a shared secret.

VariableWherePurposeDefaultRequired
NEXT_PUBLIC_GITHUB_APP_SLUG.env.localGitHub App slug for installation linksNo
GITHUB_APP_ID.env.localGitHub App numeric IDNo
GITHUB_APP_CLIENT_ID.env.localOAuth client ID for GitHub login flowNo
GITHUB_APP_CLIENT_SECRET.env.localOAuth client secretNo
GITHUB_APP_PRIVATE_KEY.env.localRSA private key (PEM format, newlines as \n)No
GITHUB_WEBHOOK_SECRETConvex DashboardHMAC secret for GitHub webhook signature validationNo

Generate the webhook secret with:

Terminal window
openssl rand -hex 32
VariableWherePurposeDefaultRequired
SANDBOX_WORKER_URLConvex DashboardCloudflare sandbox worker URLhttp://127.0.0.1:8788 (local)No
SANDBOX_API_SECRETConvex Dashboard + WranglerShared secret between Convex and sandbox workerNo
VariableWherePurposeDefaultRequired
ATLASSIAN_CLIENT_ID.env.local + WranglerAtlassian OAuth client IDNo
ATLASSIAN_CLIENT_SECRET.env.local + WranglerAtlassian OAuth client secretNo
ATLASSIAN_OAUTH_REDIRECT_URI.env.local + WranglerOAuth callback URLhttp://localhost:3000/api/atlassian/callbackNo
ATLASSIAN_WEBHOOK_SECRETConvex DashboardHMAC secret for Atlassian webhook signature validationNo
ATLASSIAN_TOKEN_ENCRYPTION_KEYConvex DashboardAES-256 key for OAuth token storage (base64, 32 bytes)No

Generate the encryption key with:

Terminal window
openssl rand -base64 32
VariableWherePurposeDefaultRequired
DEEPGRAM_API_KEYConvex DashboardSpeech-to-text transcriptionNo
TWELVELABS_API_KEYConvex DashboardVideo understanding and analysisNo
ELEVENLABS_API_KEYConvex DashboardAudio transcription (Scribe v2)No
VariableWherePurposeDefaultRequired
STRIPE_SECRET_KEYConvex DashboardStripe API key for billing operationsNo
STRIPE_WEBHOOK_SECRETConvex DashboardStripe webhook signature verificationNo
VariableWherePurposeDefaultRequired
GOOGLE_CLIENT_ID.env.localGoogle OAuth client ID for Drive importNo
GOOGLE_CLIENT_SECRET.env.localGoogle OAuth client secretNo
VariableWherePurposeDefaultRequired
FOUNDRY_AUTH_PROVIDER.env.localAuth mode: clerk (multi-tenant) or simple (single-tenant)clerkNo
FOUNDRY_ADMIN_EMAIL.env.localAdmin email (simple auth only)No
FOUNDRY_ADMIN_PASSWORD.env.localAdmin password (simple auth only)No

The smallest set of variables to get Foundry running locally:

.env.local
NEXT_PUBLIC_CONVEX_URL=https://your-deployment.convex.cloud
CONVEX_DEPLOYMENT=dev:your-deployment
NEXT_PUBLIC_CONVEX_SITE_URL=https://your-deployment.convex.site
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
CLERK_JWT_ISSUER_DOMAIN=https://your-domain.clerk.accounts.dev
AGENT_SERVICE_URL=http://localhost:3001

Plus in the Convex Dashboard:

ANTHROPIC_API_KEY=sk-ant-...

Everything else is optional and enables specific integrations as you need them.