Environment Variables

Complete reference for every environment variable used by the oversight server and task runner. Copy .env.example to .env to get started — the runner will do this automatically on first launch if no .env exists.

Supabase

These connect oversight to your Supabase project. The server uses the service role key for backend operations; the web frontend uses the anon key with RLS policies.

VariableRequiredDefaultDescription
SUPABASE_URL Yes Your Supabase project URL, e.g. https://xxxx.supabase.co
SUPABASE_ANON_KEY Yes Supabase anon (public) key. Used by the browser OAuth login flow and user-scoped client.
SUPABASE_SERVICE_ROLE_KEY Yes Supabase service role key. Used by the server and runner for unrestricted database access (bypasses RLS).
VITE_SUPABASE_URL Yes Same as SUPABASE_URL. Vite requires the VITE_ prefix to expose variables to the frontend.
VITE_SUPABASE_ANON_KEY Yes Same as SUPABASE_ANON_KEY. Exposed to the Vite frontend.

GitHub

GitHub credentials for OAuth login and API access. The runner can obtain a token via browser OAuth automatically, but a PAT is useful for headless/CI environments.

VariableRequiredDefaultDescription
GITHUB_OAUTH_CLIENT_ID No OAuth App client ID. Used by Supabase for GitHub authentication and for token refresh. Only needed for multi-user setups.
GITHUB_OAUTH_CLIENT_SECRET No OAuth App client secret. Used server-side for the token refresh endpoint. Only needed for multi-user setups.
GITHUB_PAT No Personal access token. Fallback for the task runner when browser OAuth is not available (e.g. headless servers). Needs repo scope.

Runner

Configuration for the background task runner daemon.

VariableRequiredDefaultDescription
RUNNER_USER_ID No Auto-detected Explicit Supabase user UUID. Tells the runner whose tasks to pick up. If omitted, auto-detects when there is exactly one user, otherwise opens browser for OAuth login.
OVERSIGHT_CLI No Auto-detected Which AI CLI the runner uses: claude or codex. Auto-detects if unset, preferring claude then falling back to codex.
OVERSIGHT_REPO_DIR No $TMPDIR/oversight-repo-cache Directory for cloned repos and worktrees. The default temp path is lost on reboot; set this for persistence.

AI / CopilotKit

VariableRequiredDefaultDescription
COPILOTKIT_MODEL No claude-opus-4-6 Model for the AI copilot endpoint. Uses Anthropic models by default.

Notion

Optional integration for syncing review results to Notion pages.

VariableRequiredDefaultDescription
NOTION_API_KEY No Notion internal integration token. Create one at notion.so/my-integrations.
NOTION_DATABASE_ID No Notion database ID for syncing plans and proposals.

Server

VariableRequiredDefaultDescription
PORT No 3001 HTTP port for the Fastify server.
CORS_ORIGINS No http://localhost:5173,http://localhost:3000 Comma-separated list of allowed CORS origins.

Example .env

.env env
# Supabase
SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...
VITE_SUPABASE_URL=https://xxxx.supabase.co
VITE_SUPABASE_ANON_KEY=eyJ...

# GitHub OAuth (for Supabase auth provider)
GITHUB_OAUTH_CLIENT_ID=Iv1.abc123
GITHUB_OAUTH_CLIENT_SECRET=secret123

# Optional: GitHub PAT for headless runner
# GITHUB_PAT=ghp_...

# Optional: Notion integration
# NOTION_API_KEY=ntn_...

# Server
PORT=3001
Tip: The runner automatically copies .env.example to .env on first launch if no .env file exists. Edit it with your actual credentials before running.