# ============================================================================= # Job Ops - Environment Variables # Copy this file to .env and fill in your values # ============================================================================= MODEL=google/gemini-3-flash-preview # LLM provider (optional). Examples: atlascloud, openrouter, orcarouter, requesty, openai, gemini, gemini_cli, claude_cli, codex. # LLM_PROVIDER=gemini_cli # Atlas Cloud uses an OpenAI-compatible chat endpoint. Set LLM_PROVIDER=atlascloud and # provide ATLASCLOUD_API_KEY (or the generic LLM_API_KEY). # ATLASCLOUD_API_KEY= # For Gemini (CLI): install @google/gemini-cli, run `gemini` and sign in (OAuth), or set # GEMINI_API_KEY in the environment. Optional overrides: # GEMINI_CLI_BIN=gemini # Optional: path to bundle/gemini.js (avoids Windows cmd.exe when using JSON-heavy prompts). # GEMINI_CLI_SCRIPT=C:\Users\you\AppData\Roaming\npm\node_modules\@google\gemini-cli\bundle\gemini.js # Windows: if GEMINI_CLI_BIN is …\npm\gemini.cmd, JobOps spawns Node on …\npm\node_modules\@google\gemini-cli\bundle\gemini.js when that file exists (no shell). # GEMINI_CLI_TRUST_WORKSPACE=true # GEMINI_CLI_REQUEST_TIMEOUT_MS=120000 # GEMINI_CLI_VALIDATION_TIMEOUT_MS=60000 # For Claude (CLI): install @anthropic-ai/claude-code, run `claude setup-token` (requires a # Claude Pro/Max/Team/Enterprise subscription) and set the printed token below, or set # ANTHROPIC_API_KEY in the environment instead. No credential file mount is needed. # CLAUDE_CODE_OAUTH_TOKEN= # Optional overrides: # CLAUDE_CLI_BIN=claude # CLAUDE_CLI_REQUEST_TIMEOUT_MS=120000 # CLAUDE_CLI_VALIDATION_TIMEOUT_MS=60000 # LLM import timeouts (resume upload during onboarding). Increase for slow local models. # LLM_IMPORT_OPENAI_TIMEOUT_MS=60000 # LLM_IMPORT_OPENROUTER_TIMEOUT_MS=90000 # LLM_IMPORT_GEMINI_TIMEOUT_MS=90000 # LLM_IMPORT_LOCAL_TIMEOUT_MS=120000 # Ghostwriter capability check timeout. # LLM_GHOSTWRITER_CAPABILITY_TIMEOUT_MS=2500 # Codex login timeouts. # CODEX_APP_SERVER_DEVICE_AUTH_TIMEOUT_MS=15000 # CODEX_APP_SERVER_LOGOUT_TIMEOUT_MS=10000 # Optional: Authentication for protected app and API access # The app is fully unauthenticated if this isn't set, which is the default. BASIC_AUTH_USER= BASIC_AUTH_PASSWORD= # Optional JWT secret for session tokens (at least 32 characters). # If omitted and authentication is enabled, Job Ops generates and stores one in DATA_DIR. # JWT_SECRET= # Optional: JWT token expiry in seconds (default: 86400 = 24 hours). # JWT_EXPIRY_SECONDS=86400 # Optional hosted single-tenant mode. # Leave unset for the default local/self-hosted behavior. # JOBOPS_APP_MODE=hosted # Required when JOBOPS_APP_MODE=hosted. This must refer to the configured hosted tenant. # JOBOPS_HOSTED_TENANT_ID=tenant_hosted # Optional hosted capabilities. Defaults are disabled. # JOBOPS_HOSTED_SIGNUPS_ENABLED=false # JOBOPS_HOSTED_PLATFORM_LLM_ENABLED=false # JOBOPS_HOSTED_QUOTAS_ENABLED=false # Stripe is only used by hosted billing. Configure one recurring £30/month Price. # STRIPE_SECRET_KEY=sk_live_... # STRIPE_WEBHOOK_SECRET=whsec_... # STRIPE_PRO_PRICE_ID=price_... # Public base URL used for Stripe Checkout/Portal returns and to generate # tracer links during background/pipeline runs. # Example: JOBOPS_PUBLIC_BASE_URL=https://jobops.example.com JOBOPS_PUBLIC_BASE_URL= # ============================================================================= # Reactive Resume (RxResume) v5 # ============================================================================= # Required for tailored resume generation. Use v5 API keys. RXRESUME_API_KEY= # Optional override for self-hosted instances (defaults to https://rxresu.me) # RXRESUME_URL=https://rxresu.me # ============================================================================= # Gmail OAuth (Tracking Inbox) - optional # ============================================================================= # Required to connect Gmail from the UI. GMAIL_OAUTH_CLIENT_ID= GMAIL_OAUTH_CLIENT_SECRET= # Optional override for OAuth callback URL. # If unset, defaults to /oauth/gmail/callback # GMAIL_OAUTH_REDIRECT_URI=http://localhost:3005/oauth/gmail/callback # ============================================================================= # UKVisaJobs (UK visa sponsorship jobs) - optional # ============================================================================= # Provide email/password for automatic login and token refresh. # See extractors/ukvisajobs/README.md for detailed instructions. UKVISAJOBS_EMAIL= UKVISAJOBS_PASSWORD= UKVISAJOBS_HEADLESS=true # ============================================================================= # Adzuna (multi-country API source) - optional # ============================================================================= # App credentials from Adzuna developer account. ADZUNA_APP_ID= ADZUNA_APP_KEY= # Optional default per-term cap (can be overridden by UI run budget logic). # ADZUNA_MAX_JOBS_PER_TERM=50 # ============================================================================= # Seek (via Apify) - optional, Australia job board # ============================================================================= # Apify API token for running the unfenced-group/seek-com-au-scraper actor. # Free tier provides $5/month credit (~3,000 results). Get your token at: # https://console.apify.com/account/integrations APIFY_TOKEN= # Optional default per-term cap (can be overridden by UI run budget logic). # SEEK_MAX_JOBS_PER_TERM=50 # Optional: override the Apify actor used for Seek scraping. # SEEK_APIFY_ACTOR_ID=unfenced-group/seek-com-au-scraper # ============================================================================= # JobSpy - Job search configuration # ============================================================================= # Filter for remote-only jobs (default: 0 = disabled) # JOBSPY_IS_REMOTE=0