Skip to content

Configuration

All configuration lives in environment variables. The source of truth is src/config.mjs — this page groups the same keys by intent.

Legacy LINEAR_CLAUDE_* keys are honored as aliases for the newer JUNE_* keys where applicable. New deployments should use JUNE_*.

VariableDescription
JUNE_LINEAR_API_KEYPersonal API key with read+write on issues and comments.
JUNE_LINEAR_WEBHOOK_SECRETLinear webhook signing secret. Used to verify every incoming webhook’s HMAC.

Legacy aliases: LINEAR_CLAUDE_LINEAR_API_KEY, LINEAR_CLAUDE_WEBHOOK_SECRET.

VariableDefaultDescription
PORT8787HTTP listen port.
LINEAR_CLAUDE_PUBLIC_WEBHOOK_URLunsetPublic URL the orchestrator advertises when registering the webhook via npm run setup.
LINEAR_CLAUDE_ADMIN_TOKENunsetBearer token gating /admin/* endpoints. Unset = endpoints return 404.
VariableDefaultDescription
JUNE_AGENT_ROOTprocess.cwd()Working directory the runner is spawned in.
LINEAR_CLAUDE_OPENCODE_ROOT<agentRoot>Working directory for the OpenCode runner.
JUNE_DB_PATH<agentRoot>/data/agent.sqliteSQLite session/dedupe DB path.
JUNE_LOG_PATH<agentRoot>/logs/agent.logLog file path. Stdout mirrors this.
VariableDefaultDescription
JUNE_LINEAR_TEAM_KEYunset (required)Linear team key to scope to (e.g. JUN). Issues outside this team are ignored.
LINEAR_CLAUDE_THREAD_REPLIES01 = post agent comments as thread replies under the trigger. 0 = top-level.
VariableDefaultDescription
JUNE_DEFAULT_RUNNERclaudeRunner used when no runner label is set on the issue.
LINEAR_CLAUDE_TIMEOUT_MS0 (off)Hard timeout per primary run. 0 disables.
LINEAR_CLAUDE_TRIAGE_ENABLED10 falls back to the old “exit 143 → Blocked” path with no triage.
LINEAR_CLAUDE_TRIAGE_TIMEOUT_MS300000Hard timeout for the triage pass.
VariableDefaultDescription
LINEAR_CLAUDE_BINclaudePath to the Claude Code binary.
LINEAR_CLAUDE_EFFORTmax--effort value passed to Claude on supported versions.
LINEAR_CLAUDE_MODEL_FASTclaude-opus-4-6Model used when the fast label is present.
VariableDefaultDescription
LINEAR_CLAUDE_CODEX_BINcodexPath to the Codex binary.
LINEAR_CLAUDE_CODEX_REASONINGxhighDefault model_reasoning_effort.
LINEAR_CLAUDE_CODEX_REASONING_FASTmediummodel_reasoning_effort when fast is present.
VariableDefaultDescription
LINEAR_CLAUDE_OPENCODE_BINopencodePath to the OpenCode binary.
LINEAR_CLAUDE_OPENCODE_PERMISSION(deny external dirs + arbitrary bash; allow local read/test commands)OPENCODE_PERMISSION JSON profile.
VariableDefaultDescription
LINEAR_CLAUDE_ANTIGRAVITY_BINagyPath to the agy binary.
VariableDefaultDescription
LINEAR_CLAUDE_HERMES_BINhermesPath to the Hermes binary.
LINEAR_CLAUDE_HERMES_MODELHermes defaultOverride Hermes’ model.
LINEAR_CLAUDE_HERMES_PROVIDERHermes defaultOverride Hermes’ provider.
LINEAR_CLAUDE_HERMES_TOOLSETSterminal,web,skills,session_search,todo,code_executionTool sets passed to Hermes. The default excludes file/search_files to avoid the loop bug.
VariableDefaultDescription
LINEAR_AGENT_COMMENT_DEBOUNCE_MS30000Burst-comment debounce window when no run is active.
LINEAR_AGENT_COMMENT_MAX_AUTO_FLUSHES5Max consecutive steer-flushes before forcing a settled run.
LINEAR_CLAUDE_PROGRESS_COMMENTS_ENABLED1Inject the progress-comments block into the prompt. (LINEAR_CLAUDE_STATUS_COMMENT_ENABLED is a legacy alias.)
VariableDefaultDescription
LINEAR_CLAUDE_WAITING_SWEEP_ENABLED1Toggle the Ready-for-Review → Waiting sweeper.
LINEAR_CLAUDE_WAITING_SWEEP_INTERVAL_MS300000 (5 min)Sweeper tick interval.
LINEAR_CLAUDE_WAITING_AFTER_MS3600000 (1 h)Age threshold for moving a stale review issue into Waiting.
LINEAR_CLAUDE_WAITING_FROM_STATESReady for ReviewComma-separated source states the sweeper considers.
LINEAR_CLAUDE_WAITING_STATESWaitingComma-separated target states (the first is used as the destination).
EndpointMethodDescription
/admin/reconcilePOSTMark stale running DB rows orphaned, post a blocker comment, move issues to Blocked.
/admin/runs/:id/stopPOSTTerminate the runner’s process group and move/comment Blocked.

All admin endpoints require Authorization: Bearer $LINEAR_CLAUDE_ADMIN_TOKEN. Without the token set, the endpoints return 404 to avoid advertising their existence.

EndpointMethodDescription
/healthGET, HEADLiveness check. Returns 200 OK when the orchestrator is up.
/webhook/linearPOSTLinear webhook ingress. HMAC-verified.