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_*.
| Variable | Description |
|---|
JUNE_LINEAR_API_KEY | Personal API key with read+write on issues and comments. |
JUNE_LINEAR_WEBHOOK_SECRET | Linear webhook signing secret. Used to verify every incoming webhook’s HMAC. |
Legacy aliases: LINEAR_CLAUDE_LINEAR_API_KEY, LINEAR_CLAUDE_WEBHOOK_SECRET.
| Variable | Default | Description |
|---|
PORT | 8787 | HTTP listen port. |
LINEAR_CLAUDE_PUBLIC_WEBHOOK_URL | unset | Public URL the orchestrator advertises when registering the webhook via npm run setup. |
LINEAR_CLAUDE_ADMIN_TOKEN | unset | Bearer token gating /admin/* endpoints. Unset = endpoints return 404. |
| Variable | Default | Description |
|---|
JUNE_AGENT_ROOT | process.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.sqlite | SQLite session/dedupe DB path. |
JUNE_LOG_PATH | <agentRoot>/logs/agent.log | Log file path. Stdout mirrors this. |
| Variable | Default | Description |
|---|
JUNE_LINEAR_TEAM_KEY | unset (required) | Linear team key to scope to (e.g. JUN). Issues outside this team are ignored. |
LINEAR_CLAUDE_THREAD_REPLIES | 0 | 1 = post agent comments as thread replies under the trigger. 0 = top-level. |
| Variable | Default | Description |
|---|
JUNE_DEFAULT_RUNNER | claude | Runner used when no runner label is set on the issue. |
LINEAR_CLAUDE_TIMEOUT_MS | 0 (off) | Hard timeout per primary run. 0 disables. |
LINEAR_CLAUDE_TRIAGE_ENABLED | 1 | 0 falls back to the old “exit 143 → Blocked” path with no triage. |
LINEAR_CLAUDE_TRIAGE_TIMEOUT_MS | 300000 | Hard timeout for the triage pass. |
| Variable | Default | Description |
|---|
LINEAR_CLAUDE_BIN | claude | Path to the Claude Code binary. |
LINEAR_CLAUDE_EFFORT | max | --effort value passed to Claude on supported versions. |
LINEAR_CLAUDE_MODEL_FAST | claude-opus-4-6 | Model used when the fast label is present. |
| Variable | Default | Description |
|---|
LINEAR_CLAUDE_CODEX_BIN | codex | Path to the Codex binary. |
LINEAR_CLAUDE_CODEX_REASONING | xhigh | Default model_reasoning_effort. |
LINEAR_CLAUDE_CODEX_REASONING_FAST | medium | model_reasoning_effort when fast is present. |
| Variable | Default | Description |
|---|
LINEAR_CLAUDE_OPENCODE_BIN | opencode | Path to the OpenCode binary. |
LINEAR_CLAUDE_OPENCODE_PERMISSION | (deny external dirs + arbitrary bash; allow local read/test commands) | OPENCODE_PERMISSION JSON profile. |
| Variable | Default | Description |
|---|
LINEAR_CLAUDE_ANTIGRAVITY_BIN | agy | Path to the agy binary. |
| Variable | Default | Description |
|---|
LINEAR_CLAUDE_HERMES_BIN | hermes | Path to the Hermes binary. |
LINEAR_CLAUDE_HERMES_MODEL | Hermes default | Override Hermes’ model. |
LINEAR_CLAUDE_HERMES_PROVIDER | Hermes default | Override Hermes’ provider. |
LINEAR_CLAUDE_HERMES_TOOLSETS | terminal,web,skills,session_search,todo,code_execution | Tool sets passed to Hermes. The default excludes file/search_files to avoid the loop bug. |
| Variable | Default | Description |
|---|
LINEAR_AGENT_COMMENT_DEBOUNCE_MS | 30000 | Burst-comment debounce window when no run is active. |
LINEAR_AGENT_COMMENT_MAX_AUTO_FLUSHES | 5 | Max consecutive steer-flushes before forcing a settled run. |
LINEAR_CLAUDE_PROGRESS_COMMENTS_ENABLED | 1 | Inject the progress-comments block into the prompt. (LINEAR_CLAUDE_STATUS_COMMENT_ENABLED is a legacy alias.) |
| Variable | Default | Description |
|---|
LINEAR_CLAUDE_WAITING_SWEEP_ENABLED | 1 | Toggle the Ready-for-Review → Waiting sweeper. |
LINEAR_CLAUDE_WAITING_SWEEP_INTERVAL_MS | 300000 (5 min) | Sweeper tick interval. |
LINEAR_CLAUDE_WAITING_AFTER_MS | 3600000 (1 h) | Age threshold for moving a stale review issue into Waiting. |
LINEAR_CLAUDE_WAITING_FROM_STATES | Ready for Review | Comma-separated source states the sweeper considers. |
LINEAR_CLAUDE_WAITING_STATES | Waiting | Comma-separated target states (the first is used as the destination). |
| Endpoint | Method | Description |
|---|
/admin/reconcile | POST | Mark stale running DB rows orphaned, post a blocker comment, move issues to Blocked. |
/admin/runs/:id/stop | POST | Terminate 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.
| Endpoint | Method | Description |
|---|
/health | GET, HEAD | Liveness check. Returns 200 OK when the orchestrator is up. |
/webhook/linear | POST | Linear webhook ingress. HMAC-verified. |