Pre-launch — Gluecron is in final validation. Public signups and git hosting for non-owner users open after launch review.
CodeIssuesPull RequestsActionsSecurityInsightsSettings
✨ AI
More
Blame · Line-by-line history

.env.example

Each line is annotated with the commit that last touched it. Click any SHA to jump to that commit and see the surrounding change.

.env.exampleBlame150 lines · 5 contributors
fc1817aClaude1DATABASE_URL=postgresql://user:password@host/gluecron
2GIT_REPOS_PATH=./repos
3PORT=3000
60323c5Claude4
5# ─── SSH git server (Block SSH-1) ─────────────────────────────────────────
6# Port for the SSH git daemon. 2222 by default (use 22 in production
7# if you expose it directly, or put it behind an SSH proxy).
8# Set SSH_PORT=0 to disable the SSH server entirely.
9SSH_PORT=2222
10# PEM-encoded Ed25519 (or RSA) private key for the SSH host.
11# If unset, an ephemeral key is generated on startup — fine for dev but
12# clients will see "host key changed" warnings on restart.
13# Generate with: ssh-keygen -t ed25519 -f /etc/gluecron/ssh_host_key -N ''
14# Then paste the contents here (or use \\n for newlines in single-line form).
15SSH_HOST_KEY=
16# ──────────────────────────────────────────────────────────────────────────
a4e1564Claude17GATETEST_URL=https://gatetest.ai/api/events/push
e883329Claude18GATETEST_API_KEY=
ad6d4adClaude19# Inbound GateTest callback auth — set one so GateTest can POST results back.
20# See GATETEST_HOOK.md for payload + endpoint details.
21# Generate a secret with: openssl rand -hex 32
22GATETEST_CALLBACK_SECRET=
23GATETEST_HMAC_SECRET=
0ec4eceTest User24# ─── For the GateTest side, NOT Gluecron ─────────────────────────────────
25# When you point GateTest at gluecron.com to scan the live site, GateTest
26# needs the two values below in ITS environment (set them in the gatetest.ai
27# scanner config, not here). Issue the token from /admin/ops → "GateTest
28# scanner credentials" while signed in as site admin.
29# GLUECRON_BASE_URL=https://gluecron.com
30# GLUECRON_API_TOKEN=<paste from /admin/ops, shown once>
31# ─────────────────────────────────────────────────────────────────────────
9ecf5a4Claude32# Vapron (formerly Crontech) deploy integration. Legacy CRONTECH_* names
33# are still honored as fallbacks for already-configured deployments.
36ec667ccantynz-alt34#
35# To deploy VAPRON ITSELF from Gluecron (push to ccantynz/Vapron → Vapron
36# rebuilds), point this at the deploy-agent's Caddy-proxied webhook. The
37# OLD value below (/api/webhooks/gluecron-push) is a 404 — do NOT use it.
38VAPRON_DEPLOY_URL=https://vapron.ai/__deploy_webhook
39# Only fire the Vapron deploy webhook for pushes to this exact,
40# CASE-SENSITIVE `<owner>/<name>`. Self-hosted Vapron on Gluecron lives at
41# `ccantynz/Vapron` (capital V). Default `ccantynz-alt/vapron` will NOT match.
42VAPRON_REPO=ccantynz/Vapron
43# Shared HMAC secret used to sign the outbound Vapron deploy webhook. Sent
44# as BOTH `X-Gluecron-Signature` and `X-Gluecron-Signature-256` = sha256=<hex>
45# of the JSON body. Must equal the Vapron deploy-agent's `DEPLOY_AGENT_HMAC`.
46# Unset → header omitted and Vapron rejects with 401. (Legacy fallbacks:
47# CRONTECH_HMAC_SECRET, GLUECRON_WEBHOOK_SECRET.) Generate one strong value
48# and set it identically on both boxes; prefer /admin/integrations here.
9ecf5a4Claude49VAPRON_HMAC_SECRET=
50# Inbound bearer token Vapron MUST present on deploy.succeeded /
9e1e93aClaude51# deploy.failed callbacks to POST /api/events/deploy (Signal Bus P1 — E3/E4).
52# Generate with: openssl rand -hex 32. Unset → endpoint refuses every call.
9ecf5a4Claude53# (Legacy fallback: CRONTECH_EVENT_TOKEN.)
54VAPRON_EVENT_TOKEN=
e883329Claude55ANTHROPIC_API_KEY=
24cf2caClaude56# Email (Block A8). Provider=log just writes to stderr (safe default).
57# Switch to "resend" in prod and set RESEND_API_KEY.
58EMAIL_PROVIDER=log
59EMAIL_FROM=gluecron <no-reply@gluecron.local>
60RESEND_API_KEY=
61# Used to build absolute URLs in outbound emails + webhooks.
62APP_BASE_URL=http://localhost:3000
9ecf5a4Claude63# Cross-product platform-status endpoints (Vapron / Gluecron / GateTest).
ccf9eefDictation App64# Used by the /admin/platform widget. Defaults point at production hosts.
9ecf5a4Claude65VAPRON_STATUS_URL=https://vapron.ai/api/platform-status
ccf9eefDictation App66GLUECRON_STATUS_URL=https://gluecron.com/api/platform-status
67GATETEST_STATUS_URL=https://gatetest.io/api/platform-status
80bed05Claude68# Error tracking (optional). If unset, errors are logged to stderr only.
69# ERROR_WEBHOOK_URL — POST JSON {timestamp,message,stack,context,env} on unhandled errors.
70ERROR_WEBHOOK_URL=
71# SENTRY_DSN — if set, errors POST to the Sentry envelope endpoint directly (no SDK).
72SENTRY_DSN=
ea52715copilot-swe-agent[bot]73# CLI: gluecron server host for remote commands (default: localhost).
74GLUECRON_HOST=localhost
75# Preflight script: port the running server listens on (default matches PORT).
76PREFLIGHT_PORT=3000
77# Preflight script: set to 1 to run the backup drill check.
78PREFLIGHT_BACKUP_DRILL=
79# Set to 1 to enable verbose AI review debug output.
80DEBUG_AI_REVIEW=
81# Autopilot: poll interval in milliseconds (default: 60000).
82AUTOPILOT_INTERVAL_MS=60000
83# Set to 1 to disable the autopilot background task entirely.
84AUTOPILOT_DISABLED=
85# WebAuthn / Passkey relying-party settings.
86WEBAUTHN_RP_ID=localhost
87WEBAUTHN_ORIGIN=http://localhost:3000
88WEBAUTHN_RP_NAME=gluecron
89# Set to 1 to enable verbose PR triage debug output.
90DEBUG_PR_TRIAGE=
91# Voyage AI API key for semantic (vector) code search.
92VOYAGE_API_KEY=
93# AES-256-GCM key (hex, 64 chars) for encrypting workflow secrets at rest.
94WORKFLOW_SECRETS_KEY=
783dd46Claude95# AES-256-GCM key (hex, 64 chars) for encrypting server-target SSH private
96# keys and per-target env vars at rest (Block ST — /admin/servers).
97# Generate with: openssl rand -hex 32. If unset, all server-target
98# operations refuse cleanly (no panics, no plaintext fallbacks).
99SERVER_TARGETS_KEY=
90c7531Claude100# Block CW — Claude on the web (/:owner/:repo/claude).
101# Per-session working directories live under this dir on the web server.
102# Default: /var/lib/gluecron/claude-web. Should be on a disk with room
103# for full repo clones and writable by the gluecron service user.
104CLAUDE_WEB_WORKDIR=
105# Path to the Claude Code CLI binary. Default: `claude` (i.e. on PATH).
106# Override if `claude` is installed somewhere non-standard on the box.
107CLAUDE_BIN=
ea52715copilot-swe-agent[bot]108# Set to "production" or "test" to override NODE_ENV for Bun.
109BUN_ENV=
110# Injected at build time; the deployed git commit SHA for the platform-status endpoint.
111APP_VERSION=
112# Injected at build time; the deployed git commit SHA shown on the status page.
113GIT_COMMIT=
74a8784Claude114
115# ── Documented 2026-06-10 (audit pass) — vars used in src/lib/config.ts ──
116# Opt-in: AI scans push diffs and opens issues for problems it finds.
117AI_AUTO_ISSUES=
118# Opt-in: dependency scanner runs on push (advisory cross-reference).
119DEPENDENCY_SCAN_ENABLED=
120# Directory for the OCI container-registry blob store. Default: ./oci-store
121OCI_STORE_PATH=
122# Wildcard domain for PR preview deployments (e.g. previews.example.com).
123# Empty disables branch previews.
124PREVIEW_DOMAIN=
125# Redis/Valkey connection for cross-node SSE fan-out. Empty = in-process
126# broadcaster (single-node only). Either name is accepted.
127REDIS_URL=
128VALKEY_URL=
27d5fd3Claude129
130# ── "Sign in with Google" bootstrap (2026-06-12) ─────────────────────────
131# Setting this pair enables the Google sign-in button without touching the
132# /admin/google-oauth page (a DB config saved there takes precedence).
ad3ddf6Claude133# Create a Web OAuth client at console.cloud.google.com/apis/credentials.
134# The callback auto-resolves from the request (honours X-Forwarded-Proto),
135# so register https://<your-public-host>/login/google/callback in the
136# Console — no APP_BASE_URL required for Google sign-in to work.
27d5fd3Claude137GOOGLE_OAUTH_CLIENT_ID=
138GOOGLE_OAUTH_CLIENT_SECRET=
139# Optional: set to 0 to refuse auto-creating accounts on first Google login.
140GOOGLE_OAUTH_AUTO_CREATE=
141# Optional: comma-separated email domains allowed to sign in with Google.
142GOOGLE_OAUTH_ALLOWED_DOMAINS=
bc519aeClaude143
144# ── 2026-06-12 build block (flywheel + SSRF + model routing) ──────────────
145# Kill-switch: set to 1 to force every AI task onto Sonnet, ignoring the
146# Haiku allowlist in src/lib/ai-client.ts modelForTask(). Read per-call.
147AI_FORCE_SONNET=
148# Escape hatch for self-hosted/dev setups whose webhooks or mirrors
149# legitimately target private addresses. Default: private IPs blocked.
150SSRF_ALLOW_PRIVATE=