Runners
June is runner-agnostic. The orchestrator owns webhooks, dedupe, session state, comment posting, and state transitions. The runner is whatever CLI you’ve already authenticated. Switch per task with a Linear label.
Available runners
Section titled “Available runners”| Label | Runner | Resume? | Good for |
|---|---|---|---|
| (default) | Claude Code | Yes | The default. Strongest tool use, best at long multi-file edits. |
codex | Codex CLI | Yes | OpenAI’s frontier coder. Persists its own session id. |
opencode | OpenCode CLI | Yes | Open-source CLI agent. Strong sandboxing via OPENCODE_PERMISSION. |
gemini | Antigravity (agy) | No | Google’s agent (replaces deprecated gemini CLI). Auth via Antigravity desktop. |
hermes | Hermes Agent | No | Lightweight, script-friendly. Stateless — each comment is a fresh run. |
Modifier labels (compose with any runner):
| Label | Effect |
|---|---|
xhigh | Force --effort xhigh (Claude) or model_reasoning_effort="xhigh" (Codex). |
fast | Fast mode: Claude → claude-opus-4-6; Codex → model_reasoning_effort="medium". |
goal | Prepend /goal to the first prompt so the agent keeps working across turns until the goal is met. Only fires on a fresh session — resumes inherit the active goal. Ignored on hermes and opencode (oneshot). |
Claude Code (default)
Section titled “Claude Code (default)”The child process starts from the configured agent root, strips ANTHROPIC_API_KEY (so the runner uses your claude login session, not a stray env var), uses --print mode, --permission-mode auto, and --effort max when supported. No --allowedTools allowlist — the runner has the full local toolset (Read/Edit/Write/Bash/Glob/Grep, Web*, MCP) gated by auto-mode rules.
Each issue gets its own session, persisted as claude_session_id. Resumes use --resume. If the stored session was created under a different agent root, June ignores it and starts fresh.
Auth: claude login once per machine.
Codex CLI
Section titled “Codex CLI”Uses codex exec to start and codex exec resume to continue. Codex manages its own session ids; June stores them per issue. The xhigh and fast labels map to model_reasoning_effort.
Auth: codex login once per machine.
OpenCode CLI
Section titled “OpenCode CLI”Runs opencode run --format json --dangerously-skip-permissions from LINEAR_CLAUDE_OPENCODE_ROOT. June stores the session id and resumes with --session <id>.
OpenCode is sandboxed by default — June injects a permission profile that denies external-directory access and arbitrary bash while allowing common local inspection and test commands. Override with LINEAR_CLAUDE_OPENCODE_PERMISSION.
Auth: per the OpenCode docs.
Antigravity (agy)
Section titled “Antigravity (agy)”Runs agy -p --dangerously-skip-permissions --add-dir <agentRoot>. Auth flows through the Antigravity desktop app; the model is whatever that session is set to. Stateless — no session resume, every comment spawns a fresh agy invocation.
Replaces the old gemini CLI, which Google deprecates for non-Enterprise tiers on 2026-06-18. The label name gemini is kept for continuity.
Hermes
Section titled “Hermes”Runs hermes -z <prompt>. Stateless — each comment spawns a fresh Hermes session. Uses normal Hermes model/provider config unless LINEAR_CLAUDE_HERMES_MODEL / LINEAR_CLAUDE_HERMES_PROVIDER are set explicitly.
June passes LINEAR_CLAUDE_HERMES_TOOLSETS (default terminal,web,skills,session_search,todo,code_execution) so Linear runs avoid the Hermes file/search_files loop bug while still being able to inspect and edit via terminal. Empty stdout on exit 0 is treated as a blocked runner failure — Hermes occasionally tool-loops out without an error code, and silent successes are worse than loud failures.
Why -z and not chat -Q -q: the chat-resume path silently produces empty stdout on multi-KB orchestrator prompts even when the agent’s internal session file writes a complete final_answer. -z is the canonical script-friendly entrypoint and works reliably.
Picking a runner per task
Section titled “Picking a runner per task”Use the default (Claude Code) for most issues. Reach for the others when:
- Codex (
codex) — when you want a different model temperament on a tricky issue, or when Claude’s tool-use bill is getting heavy. - OpenCode (
opencode) — when you want a stricter sandbox, or you’re testing the orchestrator’s sandboxing path. - Antigravity (
gemini) — when you want a long-context pass on a sprawling repo (Gemini-class context window). - Hermes (
hermes) — for short, scriptable, stateless tasks. Triage runs use Hermes’ style internally.