{"definitions":[{"name":"SUPABASE_URL","purpose":"Server-side Supabase project URL used by services/integrations.","category":"supabase","required":true,"secret":false,"defaultValueHint":"https://clkifpedvomnpgajdsid.supabase.co","docsHref":"https://supabase.com/docs/guides/api"},{"name":"SUPABASE_ANON_KEY","purpose":"Server-side anon key for RLS-scoped reads against Supabase.","category":"supabase","required":true,"secret":true,"docsHref":"https://supabase.com/docs/guides/api/api-keys"},{"name":"SUPABASE_SERVICE_ROLE_KEY","purpose":"Service-role key for trusted server jobs (provenance writes, migrations). Never exposed to the browser.","category":"supabase","required":false,"secret":true,"docsHref":"https://supabase.com/docs/guides/api/api-keys"},{"name":"NEXT_PUBLIC_SUPABASE_URL","purpose":"Browser-exposed Supabase URL for the Next.js client SDK.","category":"supabase","required":true,"secret":false,"defaultValueHint":"https://clkifpedvomnpgajdsid.supabase.co"},{"name":"NEXT_PUBLIC_SUPABASE_ANON_KEY","purpose":"Browser-exposed Supabase anon key for client-side queries under RLS.","category":"supabase","required":true,"secret":false},{"name":"DATABASE_URL","purpose":"Postgres connection string used by Drizzle ORM for migrations and direct queries.","category":"supabase","required":false,"secret":true,"defaultValueHint":"postgresql://postgres:***@db.clkifpedvomnpgajdsid.supabase.co:5432/postgres"},{"name":"ANTHROPIC_API_KEY","purpose":"API key for the Anthropic Claude provider. Without it agents fall back to StubModelClient.","category":"anthropic","required":true,"secret":true,"docsHref":"https://docs.anthropic.com/en/api/getting-started"},{"name":"ANTHROPIC_MODEL_SONNET","purpose":"Pinned Sonnet model id used as the default for routine agent calls.","category":"anthropic","required":false,"secret":false,"defaultValueHint":"claude-sonnet-4-7"},{"name":"ANTHROPIC_MODEL_OPUS","purpose":"Pinned Opus model id used for high-stakes regulated authoring agents.","category":"anthropic","required":false,"secret":false,"defaultValueHint":"claude-opus-4-7"},{"name":"ANTHROPIC_DAILY_COST_CAP_USD","purpose":"Hard daily spend cap across all Anthropic calls; agents pause when breached.","category":"anthropic","required":false,"secret":false,"defaultValueHint":"50"},{"name":"VERCEL_URL","purpose":"Auto-injected deployment URL (preview or production) for generating absolute links.","category":"vercel","required":false,"secret":false,"defaultValueHint":"new-cro-dev-web.vercel.app"},{"name":"VERCEL_ENV","purpose":"Vercel-provided environment label: production | preview | development.","category":"vercel","required":false,"secret":false,"defaultValueHint":"production"},{"name":"NODE_ENV","purpose":"Standard Node.js environment label; toggles dev assertions and logging verbosity.","category":"vercel","required":true,"secret":false,"defaultValueHint":"production"},{"name":"CRON_SECRET","purpose":"Shared secret Vercel Cron signs against; cron routes 401 without it.","category":"vercel","required":true,"secret":true,"docsHref":"https://vercel.com/docs/cron-jobs/manage-cron-jobs#securing-cron-jobs"},{"name":"ESIGN_SECRET","purpose":"HMAC secret used by services/esign to seal Part 11 signature rows.","category":"auth","required":true,"secret":true},{"name":"INSPECTION_PUBLIC_TOKEN","purpose":"Bearer token gating read-only inspector access to the inspection package routes.","category":"auth","required":false,"secret":true},{"name":"GITHUB_TOKEN","purpose":"PAT used by the GitHub integration for PR review, issue triage, and release notes.","category":"integrations","required":false,"secret":true,"docsHref":"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens"},{"name":"SLACK_WEBHOOK_URL","purpose":"Incoming webhook URL for the notifier service to post operator alerts.","category":"integrations","required":false,"secret":true,"docsHref":"https://api.slack.com/messaging/webhooks"},{"name":"SENTRY_DSN","purpose":"Planned: Sentry DSN for server-side error reporting from the web app and services.","category":"observability","required":false,"secret":true,"docsHref":"https://docs.sentry.io/concepts/key-terms/dsn-explainer/"},{"name":"SENTRY_ENVIRONMENT","purpose":"Planned: Sentry environment tag (production | preview | local) for grouping events.","category":"observability","required":false,"secret":false,"defaultValueHint":"production"},{"name":"CRONS_PAUSED","purpose":"Pause-by-default gate for scheduled cron handlers. When unset or any value other than \"false\", every kick-* cron short-circuits without invoking Anthropic. Manual /admin/agents triggers bypass the pause.","category":"observability","required":false,"secret":false,"defaultValueHint":"true"},{"name":"LOG_LEVEL","purpose":"Minimum log level emitted by the structured logger. Set to \"debug\" while diagnosing.","category":"observability","required":false,"secret":false,"defaultValueHint":"info"},{"name":"DEMO_USER_EMAIL","purpose":"Email of the seeded demo user that backs the read-only demo session.","category":"demo","required":false,"secret":false,"defaultValueHint":"demo@new-cro-dev.local"},{"name":"DEMO_USER_ID","purpose":"UUID of the seeded demo user; referenced by created_by columns in seed data.","category":"demo","required":false,"secret":false},{"name":"DEMO_MODE","purpose":"When \"1\", the app surfaces explanatory demo banners and disables outbound integrations.","category":"demo","required":false,"secret":false,"defaultValueHint":"1"}],"status":[{"name":"SUPABASE_URL","isSet":true,"isRequired":true,"status":"ok"},{"name":"SUPABASE_ANON_KEY","isSet":false,"isRequired":true,"status":"missing-required"},{"name":"SUPABASE_SERVICE_ROLE_KEY","isSet":true,"isRequired":false,"status":"ok"},{"name":"NEXT_PUBLIC_SUPABASE_URL","isSet":false,"isRequired":true,"status":"missing-required"},{"name":"NEXT_PUBLIC_SUPABASE_ANON_KEY","isSet":false,"isRequired":true,"status":"missing-required"},{"name":"DATABASE_URL","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"ANTHROPIC_API_KEY","isSet":true,"isRequired":true,"status":"ok"},{"name":"ANTHROPIC_MODEL_SONNET","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"ANTHROPIC_MODEL_OPUS","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"ANTHROPIC_DAILY_COST_CAP_USD","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"VERCEL_URL","isSet":true,"isRequired":false,"status":"ok"},{"name":"VERCEL_ENV","isSet":true,"isRequired":false,"status":"ok"},{"name":"NODE_ENV","isSet":true,"isRequired":true,"status":"ok"},{"name":"CRON_SECRET","isSet":true,"isRequired":true,"status":"ok"},{"name":"ESIGN_SECRET","isSet":false,"isRequired":true,"status":"missing-required"},{"name":"INSPECTION_PUBLIC_TOKEN","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"GITHUB_TOKEN","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"SLACK_WEBHOOK_URL","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"SENTRY_DSN","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"SENTRY_ENVIRONMENT","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"CRONS_PAUSED","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"LOG_LEVEL","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"DEMO_USER_EMAIL","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"DEMO_USER_ID","isSet":false,"isRequired":false,"status":"missing-optional"},{"name":"DEMO_MODE","isSet":false,"isRequired":false,"status":"missing-optional"}],"summary":{"total":25,"set":7,"missingRequired":4,"missingOptional":14,"byCategory":{"supabase":{"total":6,"set":2},"anthropic":{"total":4,"set":1},"vercel":{"total":4,"set":4},"auth":{"total":2,"set":0},"integrations":{"total":2,"set":0},"observability":{"total":4,"set":0},"demo":{"total":3,"set":0}}}}