Skip to content

Latest commit

 

History

History
496 lines (331 loc) · 64.5 KB

coding-agents.md

File metadata and controls

496 lines (331 loc) · 64.5 KB

Coding agents

For developers configuring which coding-agent CLIs AgentsCommander launches and how. Covers Claude Code, Codex, Antigravity, Pi Coding Agent, the Agents Agency role-template picker, and adding your own custom agent.

AgentsCommander is not a coding agent. It spawns coding-agent processes and routes between them. You bring the CLIs; AC commands them.

Supported coding agents

Coding agent Binary Resume tokens AC injects Notes
Claude Code claude (or wrappers like claude-mb) --continue Anthropic's official CLI.
Codex codex resume --last OpenAI's coding agent CLI.
Antigravity agy --continue Google's agent-first coding CLI.
Pi Coding Agent pi, pi.exe, or pi.cmd in a supported command position --continue Earendil Works' coding agent CLI.
Cursor agent (catalog entry) — Shipped in the default catalog (id cursor, instructions AGENTS.md). No tuned CodingAgentKind: it uses the generic path and the exact-stem logical-clear rule below.

OpenCode runs today through the custom coding-agent path (see Adding a custom coding agent). Configure it with any provider or model OpenCode supports; AgentsCommander launches and coordinates the CLI without restricting that choice. OpenCode does not yet have a first-class tuned integration (resume tokens, idle tuning); that work is tracked as #315.

How AC identifies a tuned integration

AC applies an exact Pi command-position pass before its legacy provider detector. That pass has three outcomes:

  1. Supported Pi command: The direct executable leaf is exactly pi, pi.exe, or pi.cmd, compared case-insensitively, or Pi is the first command under cmd/cmd.exe with /C or /K as the first argument. Full, UNC, and Windows verbatim paths work. AC supports tokenized cmd arguments and one embedded command string. Pi may be the first segment of a supported compound command; AC inspects and mutates only that segment.
  2. Genuinely non-Pi command: AC runs the legacy detector. It scans the shell and whitespace-separated argument tokens by executable basename prefix, with precedence Claude > Codex > Antigravity. This preserves wrappers such as claude-foo and codex-bar. Antigravity matches the exact executable stems agy / agy.exe / agy.cmd / antigravity (prefix wrappers are not inferred); Gemini no longer has tuned identity.
  3. Malformed or unsupported Pi-shaped command: AC fails closed with no coding-agent kind and does not run the legacy detector. Examples include pi.md, pi.bat, npx pi, call pi, start pi, /S /C pi, grouped Pi, Pi after a compound separator, pi>out, an unclosed cmd quote, a dangling outside-quote caret, or NUL/CR/LF in parsed cmd text. A later --model claude-* or similar value cannot reclassify that command.

AC treats the runtime shell as an already-decoded executable value. It does not trim it or remove literal quotes; configuration parsing removes syntactic outer quotes once before detection. For a supported embedded cmd string, AC splices after the raw executable range and preserves the remaining quotes, carets, whitespace, metacharacters, redirection, and later command bytes. Tokenized cmd arguments support standalone separator elements, but an attached unescaped & or | in a tokenized Pi segment is unsupported.

Pi aliases and arbitrary wrappers such as my-pi are not inferred. Prefix lookalikes such as pip, pipx, ping, and pixel, plus ordinary values such as echo pi, are genuine non-Pi shapes. PowerShell command text and environment-expanded executable names are also outside the supported Pi command shapes. Use an exact Pi executable, directly or as the first command in the supported cmd forms.

The full enum is in session/profile.rs::CodingAgentKind.

Logical clear capability is separate from tuned integration

Remote logical clear and canonical text submission use an operation-specific direct-shell capability table, independent of CodingAgentKind. Direct Claude/Codex/Antigravity-family shells and Cursor exact stem agent map logical clear to /clear. An exact-stem direct Pi shell maps it to /new and uses the same delayed double-Enter submission timing. An exact-stem direct Pi shell is also a supported self-handoff-and-switch source. Pi compact remains unsupported.

Pi is a tuned CodingAgentKind for the auto-resume, profile, and wire behavior described below, but that identity does not authorize logical PTY actions. The logical-clear rule is lexical trusted configuration: a direct shell whose final file stem is exactly pi matches, including pi, pi.exe, and the stock pi.cmd shim; file-stem extraction discards any final extension. An outer cmd/pwsh wrapper does not match this operation-specific rule, even when tuned Pi detection supports its command shape. This is not binary attestation. AgentsCommander does not version-probe or semantically acknowledge production clears; stock Pi 0.80.10 is the validated control, and a successful action records PTY write receipt.

Installing the CLIs

Welcome can run installation commands from your persisted catalog after you opt in. Installation actions are off by default: close AC, set codingAgentInstallEnabled to true in the active configuration directory's settings.30.instance.no-git.json, then restart. See the setting reference. The setting controls UI visibility and click dispatch; it is not backend authorization or proof that an installer works. You can also install manually using the official links below.

The shipped routes cover eight enabled catalog agents. Muse remains disabled. Native installation is unverified on Windows, macOS and Linux; the user owns future testing after opt-in. Installer acceptance lists the missing evidence. Route availability does not establish runtime compatibility.

This table names the exact command blocks below; macOS and Linux currently share each Unix command. Scripts need network access, a writable user installation directory, and the upstream archive/checksum tools and platform requirements. Check the linked vendor guide before installing.

Agent / binary / official guide Windows native macOS native Linux native Prerequisites for the selected route
Claude Code / claude claude-windows (PowerShell: https://claude.ai/install.ps1) claude-unix claude-unix PowerShell 5.1 on Windows; curl + Bash on Unix; vendor-supported OS/architecture.
Codex / codex codex-windows (PowerShell: https://chatgpt.com/codex/install.ps1) codex-unix codex-unix PowerShell 5.1 and 64-bit Windows; curl + sh + tar on Unix.
Hermes / hermes hermes-windows (PowerShell: https://hermes-agent.nousresearch.com/install.ps1) hermes-unix hermes-unix PowerShell 5.1 on Windows; curl + Bash, Git, tar and SHA-256 utilities on Unix; source builds may need a compiler/system libraries.
Cursor CLI / agent cursor-windows (PowerShell: https://cursor.com/install?win32=true) cursor-unix cursor-unix PowerShell 5.1 on Windows; curl + Bash on Unix.
Pi / pi pi-windows pi-unix pi-unix Node >=22.19.0 and npm on every OS; optional packages included, lifecycle scripts disabled.
OpenCode / opencode opencode-windows opencode-unix opencode-unix Windows: npm 11.20.0 with --allow-scripts support and compatible Node; Unix: curl + Bash.
Antigravity / agy antigravity-windows (PowerShell: https://antigravity.google/cli/install.ps1) antigravity-unix antigravity-unix PowerShell 5.1 on Windows; curl + Bash on Unix; check CLI requirements, not desktop minima.
Grok Build / grok grok-windows (PowerShell: https://x.ai/cli/install.ps1) grok-unix grok-unix PowerShell 5.1 on Windows; curl + Bash on Unix.

Claude's current system requirements list macOS 13+, Windows 10 1809+/Server 2019+, and supported Linux distributions, with x64/ARM64 and 4 GB RAM. Hermes' platform matrix lists native Windows 10/11 and Linux x64/ARM64; Apple Silicon has Tier 1 priority. Intel Macs have native x64 bundle/CLI methods; the DMG bootstrap is ARM64-only. This does not qualify AC's Intel installer at runtime. Hermes' source route manages its pinned tools and skips interactive setup with the flags below; it can also install browser/computer-use components and require distribution libraries.

OpenCode's Windows route requires npm's global-install --allow-scripts support (npm 11.20.0) and includes optional platform binaries. It permits the opencode-ai lifecycle only; it does not change npm configuration or write project approvals. See npm install-script permissions. Node must satisfy the resolved packages and npm's engine. As checked on 2026-10-03, npm 11.20.0 requires ^20.17.0 || >=22.9.0; opencode-ai@1.18.34 declares no Node engine. Recheck resolved versions before testing. Pi's npm route requires existing Node/npm; it cannot bootstrap missing prerequisites under AC's null stdin.

AC executes a selected command through cmd.exe /C on Windows or sh -c elsewhere, with null stdin and a 300-second deadline. Unix script commands guard the initial fetch (20-second connection timeout, 120-second total) and reject an empty response before invoking the named interpreter. Upstream downloads and profile/tool-store changes remain upstream behavior. Cursor's Windows script replaces an existing %LOCALAPPDATA%\cursor-agent directory, so rerun qualification uses a disposable profile.

Exact shipped commands. These blocks come from agents.default.json; your effective persisted commands can differ through overrides or a preserved old base. They are documentation, not a runtime test result. Each *-unix block is byte-identical for macOS and Linux. Windows script commands explicitly invoke Windows PowerShell 5.1; do not replace their encoded payload with a quoted -Command or a fixed install.cmd in the project directory.

claude-windows: exact catalog command
powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -EncodedCommand JABhAGMAXwBwAGEAdABoAD0AJABuAHUAbABsADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAGYAYQBsAHMAZQA7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQA7ACAAdAByAHkAIAB7ACAAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAPQBJAG4AdgBvAGsAZQAtAFIAZQBzAHQATQBlAHQAaABvAGQAIAAtAFUAcgBpACAAJwBoAHQAdABwAHMAOgAvAC8AYwBsAGEAdQBkAGUALgBhAGkALwBpAG4AcwB0AGEAbABsAC4AcABzADEAJwAgAC0AVABpAG0AZQBvAHUAdABTAGUAYwAgADEAMgAwACAALQBFAHIAcgBvAHIAQQBjAHQAaQBvAG4AIABTAHQAbwBwADsAIABpAGYAIAAoAFsAcwB0AHIAaQBuAGcAXQA6ADoASQBzAE4AdQBsAGwATwByAFcAaABpAHQAZQBTAHAAYQBjAGUAKAAkAGEAYwBfAGkAbgBzAHQAYQBsAGwAXwBzAGMAcgBpAHAAdAApACkAIAB7ACAAdABoAHIAbwB3ACAAJwBFAG0AcAB0AHkAIABpAG4AcwB0AGEAbABsAGUAcgAgAHIAZQBzAHAAbwBuAHMAZQAnACAAfQA7ACAAJABhAGMAXwBwAGEAdABoAD0ASgBvAGkAbgAtAFAAYQB0AGgAIAAoAFsASQBPAC4AUABhAHQAaABdADoAOgBHAGUAdABUAGUAbQBwAFAAYQB0AGgAKAApACkAIAAoACcAYQBjAC0AaQBuAHMAdABhAGwAbAAtADIANwA4ADcALQAnACsAWwBHAHUAaQBkAF0AOgA6AE4AZQB3AEcAdQBpAGQAKAApAC4AVABvAFMAdAByAGkAbgBnACgAJwBOACcAKQArACcALgBwAHMAMQAnACkAOwAgACQAYQBjAF8AZgBpAGwAZQA9AFsASQBPAC4ARgBpAGwAZQBdADoAOgBPAHAAZQBuACgAJABhAGMAXwBwAGEAdABoACwAWwBJAE8ALgBGAGkAbABlAE0AbwBkAGUAXQA6ADoAQwByAGUAYQB0AGUATgBlAHcALABbAEkATwAuAEYAaQBsAGUAQQBjAGMAZQBzAHMAXQA6ADoAVwByAGkAdABlACwAWwBJAE8ALgBGAGkAbABlAFMAaABhAHIAZQBdADoAOgBOAG8AbgBlACkAOwAgACQAYQBjAF8AYwByAGUAYQB0AGUAZAA9ACQAdAByAHUAZQA7ACAAdAByAHkAIAB7ACAAWwBiAHkAdABlAFsAXQBdACQAYQBjAF8AYgB5AHQAZQBzAD0AWwBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABQAHIAZQBhAG0AYgBsAGUAKAApACsAWwBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AFUAVABGADgALgBHAGUAdABCAHkAdABlAHMAKAAkAGEAYwBfAGkAbgBzAHQAYQBsAGwAXwBzAGMAcgBpAHAAdAApADsAIAAkAGEAYwBfAGYAaQBsAGUALgBXAHIAaQB0AGUAKAAkAGEAYwBfAGIAeQB0AGUAcwAsADAALAAkAGEAYwBfAGIAeQB0AGUAcwAuAEwAZQBuAGcAdABoACkAIAB9ACAAZgBpAG4AYQBsAGwAeQAgAHsAIAAkAGEAYwBfAGYAaQBsAGUALgBEAGkAcwBwAG8AcwBlACgAKQAgAH0AOwAgACQAZwBsAG8AYgBhAGwAOgBMAEEAUwBUAEUAWABJAFQAQwBPAEQARQA9ACQAbgB1AGwAbAA7ACAAJgAgACgASgBvAGkAbgAtAFAAYQB0AGgAIAAkAFAAUwBIAE8ATQBFACAAJwBwAG8AdwBlAHIAcwBoAGUAbABsAC4AZQB4AGUAJwApACAALQBOAG8AUAByAG8AZgBpAGwAZQAgAC0ATgBvAG4ASQBuAHQAZQByAGEAYwB0AGkAdgBlACAALQBFAHgAZQBjAHUAdABpAG8AbgBQAG8AbABpAGMAeQAgAEIAeQBwAGEAcwBzACAALQBGAGkAbABlACAAJABhAGMAXwBwAGEAdABoADsAIAAkAGEAYwBfAGUAeABpAHQAPQAkAEwAQQBTAFQARQBYAEkAVABDAE8ARABFADsAIABpAGYAIAAoACQAbgB1AGwAbAAgAC0AZQBxACAAJABhAGMAXwBlAHgAaQB0ACkAIAB7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQAgAH0AIAB9ACAAYwBhAHQAYwBoACAAewAgAFsAQwBvAG4AcwBvAGwAZQBdADoAOgBFAHIAcgBvAHIALgBXAHIAaQB0AGUATABpAG4AZQAoACQAXwApADsAIAAkAGEAYwBfAGUAeABpAHQAPQAxACAAfQAgAGYAaQBuAGEAbABsAHkAIAB7ACAAaQBmACAAKAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAKQAgAHsAIAB0AHIAeQAgAHsAIABSAGUAbQBvAHYAZQAtAEkAdABlAG0AIAAtAEwAaQB0AGUAcgBhAGwAUABhAHQAaAAgACQAYQBjAF8AcABhAHQAaAAgAC0ARgBvAHIAYwBlACAALQBFAHIAcgBvAHIAQQBjAHQAaQBvAG4AIABTAHQAbwBwACAAfQAgAGMAYQB0AGMAaAAgAHsAIABbAEMAbwBuAHMAbwBsAGUAXQA6ADoARQByAHIAbwByAC4AVwByAGkAdABlAEwAaQBuAGUAKAAkAF8AKQA7ACAAaQBmACAAKAAkAGEAYwBfAGUAeABpAHQAIAAtAGUAcQAgADAAKQAgAHsAIAAkAGEAYwBfAGUAeABpAHQAPQAxACAAfQAgAH0AIAB9ACAAfQA7ACAAZQB4AGkAdAAgACQAYQBjAF8AZQB4AGkAdAA=

claude-unix:

ac_install_script=$(curl -fsSL --connect-timeout 20 --max-time 120 'https://claude.ai/install.sh') && [ -n "$ac_install_script" ] && printf '%s\n' "$ac_install_script" | bash
codex-windows: exact catalog command
powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -EncodedCommand JABhAGMAXwBwAGEAdABoAD0AJABuAHUAbABsADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAGYAYQBsAHMAZQA7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQA7ACAAdAByAHkAIAB7ACAAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAPQBJAG4AdgBvAGsAZQAtAFIAZQBzAHQATQBlAHQAaABvAGQAIAAtAFUAcgBpACAAJwBoAHQAdABwAHMAOgAvAC8AYwBoAGEAdABnAHAAdAAuAGMAbwBtAC8AYwBvAGQAZQB4AC8AaQBuAHMAdABhAGwAbAAuAHAAcwAxACcAIAAtAFQAaQBtAGUAbwB1AHQAUwBlAGMAIAAxADIAMAAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwB0AG8AcAA7ACAAaQBmACAAKABbAHMAdAByAGkAbgBnAF0AOgA6AEkAcwBOAHUAbABsAE8AcgBXAGgAaQB0AGUAUwBwAGEAYwBlACgAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAKQApACAAewAgAHQAaAByAG8AdwAgACcARQBtAHAAdAB5ACAAaQBuAHMAdABhAGwAbABlAHIAIAByAGUAcwBwAG8AbgBzAGUAJwAgAH0AOwAgACQAYQBjAF8AcABhAHQAaAA9AEoAbwBpAG4ALQBQAGEAdABoACAAKABbAEkATwAuAFAAYQB0AGgAXQA6ADoARwBlAHQAVABlAG0AcABQAGEAdABoACgAKQApACAAKAAnAGEAYwAtAGkAbgBzAHQAYQBsAGwALQAyADcAOAA3AC0AJwArAFsARwB1AGkAZABdADoAOgBOAGUAdwBHAHUAaQBkACgAKQAuAFQAbwBTAHQAcgBpAG4AZwAoACcATgAnACkAKwAnAC4AcABzADEAJwApADsAIAAkAGEAYwBfAGYAaQBsAGUAPQBbAEkATwAuAEYAaQBsAGUAXQA6ADoATwBwAGUAbgAoACQAYQBjAF8AcABhAHQAaAAsAFsASQBPAC4ARgBpAGwAZQBNAG8AZABlAF0AOgA6AEMAcgBlAGEAdABlAE4AZQB3ACwAWwBJAE8ALgBGAGkAbABlAEEAYwBjAGUAcwBzAF0AOgA6AFcAcgBpAHQAZQAsAFsASQBPAC4ARgBpAGwAZQBTAGgAYQByAGUAXQA6ADoATgBvAG4AZQApADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAHQAcgB1AGUAOwAgAHQAcgB5ACAAewAgAFsAYgB5AHQAZQBbAF0AXQAkAGEAYwBfAGIAeQB0AGUAcwA9AFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAUAByAGUAYQBtAGIAbABlACgAKQArAFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAQgB5AHQAZQBzACgAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAKQA7ACAAJABhAGMAXwBmAGkAbABlAC4AVwByAGkAdABlACgAJABhAGMAXwBiAHkAdABlAHMALAAwACwAJABhAGMAXwBiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACAAfQAgAGYAaQBuAGEAbABsAHkAIAB7ACAAJABhAGMAXwBmAGkAbABlAC4ARABpAHMAcABvAHMAZQAoACkAIAB9ADsAIAAkAGcAbABvAGIAYQBsADoATABBAFMAVABFAFgASQBUAEMATwBEAEUAPQAkAG4AdQBsAGwAOwAgACYAIAAoAEoAbwBpAG4ALQBQAGEAdABoACAAJABQAFMASABPAE0ARQAgACcAcABvAHcAZQByAHMAaABlAGwAbAAuAGUAeABlACcAKQAgAC0ATgBvAFAAcgBvAGYAaQBsAGUAIAAtAE4AbwBuAEkAbgB0AGUAcgBhAGMAdABpAHYAZQAgAC0ARQB4AGUAYwB1AHQAaQBvAG4AUABvAGwAaQBjAHkAIABCAHkAcABhAHMAcwAgAC0ARgBpAGwAZQAgACQAYQBjAF8AcABhAHQAaAA7ACAAJABhAGMAXwBlAHgAaQB0AD0AJABMAEEAUwBUAEUAWABJAFQAQwBPAEQARQA7ACAAaQBmACAAKAAkAG4AdQBsAGwAIAAtAGUAcQAgACQAYQBjAF8AZQB4AGkAdAApACAAewAgACQAYQBjAF8AZQB4AGkAdAA9ADEAIAB9ACAAfQAgAGMAYQB0AGMAaAAgAHsAIABbAEMAbwBuAHMAbwBsAGUAXQA6ADoARQByAHIAbwByAC4AVwByAGkAdABlAEwAaQBuAGUAKAAkAF8AKQA7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQAgAH0AIABmAGkAbgBhAGwAbAB5ACAAewAgAGkAZgAgACgAJABhAGMAXwBjAHIAZQBhAHQAZQBkACkAIAB7ACAAdAByAHkAIAB7ACAAUgBlAG0AbwB2AGUALQBJAHQAZQBtACAALQBMAGkAdABlAHIAYQBsAFAAYQB0AGgAIAAkAGEAYwBfAHAAYQB0AGgAIAAtAEYAbwByAGMAZQAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwB0AG8AcAAgAH0AIABjAGEAdABjAGgAIAB7ACAAWwBDAG8AbgBzAG8AbABlAF0AOgA6AEUAcgByAG8AcgAuAFcAcgBpAHQAZQBMAGkAbgBlACgAJABfACkAOwAgAGkAZgAgACgAJABhAGMAXwBlAHgAaQB0ACAALQBlAHEAIAAwACkAIAB7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQAgAH0AIAB9ACAAfQAgAH0AOwAgAGUAeABpAHQAIAAkAGEAYwBfAGUAeABpAHQA

codex-unix:

ac_install_script=$(curl -fsSL --connect-timeout 20 --max-time 120 'https://chatgpt.com/codex/install.sh') && [ -n "$ac_install_script" ] && printf '%s\n' "$ac_install_script" | sh
hermes-windows: exact catalog command
powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -EncodedCommand JABhAGMAXwBwAGEAdABoAD0AJABuAHUAbABsADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAGYAYQBsAHMAZQA7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQA7ACAAdAByAHkAIAB7ACAAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAPQBJAG4AdgBvAGsAZQAtAFIAZQBzAHQATQBlAHQAaABvAGQAIAAtAFUAcgBpACAAJwBoAHQAdABwAHMAOgAvAC8AaABlAHIAbQBlAHMALQBhAGcAZQBuAHQALgBuAG8AdQBzAHIAZQBzAGUAYQByAGMAaAAuAGMAbwBtAC8AaQBuAHMAdABhAGwAbAAuAHAAcwAxACcAIAAtAFQAaQBtAGUAbwB1AHQAUwBlAGMAIAAxADIAMAAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwB0AG8AcAA7ACAAaQBmACAAKABbAHMAdAByAGkAbgBnAF0AOgA6AEkAcwBOAHUAbABsAE8AcgBXAGgAaQB0AGUAUwBwAGEAYwBlACgAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAKQApACAAewAgAHQAaAByAG8AdwAgACcARQBtAHAAdAB5ACAAaQBuAHMAdABhAGwAbABlAHIAIAByAGUAcwBwAG8AbgBzAGUAJwAgAH0AOwAgACQAYQBjAF8AcABhAHQAaAA9AEoAbwBpAG4ALQBQAGEAdABoACAAKABbAEkATwAuAFAAYQB0AGgAXQA6ADoARwBlAHQAVABlAG0AcABQAGEAdABoACgAKQApACAAKAAnAGEAYwAtAGkAbgBzAHQAYQBsAGwALQAyADcAOAA3AC0AJwArAFsARwB1AGkAZABdADoAOgBOAGUAdwBHAHUAaQBkACgAKQAuAFQAbwBTAHQAcgBpAG4AZwAoACcATgAnACkAKwAnAC4AcABzADEAJwApADsAIAAkAGEAYwBfAGYAaQBsAGUAPQBbAEkATwAuAEYAaQBsAGUAXQA6ADoATwBwAGUAbgAoACQAYQBjAF8AcABhAHQAaAAsAFsASQBPAC4ARgBpAGwAZQBNAG8AZABlAF0AOgA6AEMAcgBlAGEAdABlAE4AZQB3ACwAWwBJAE8ALgBGAGkAbABlAEEAYwBjAGUAcwBzAF0AOgA6AFcAcgBpAHQAZQAsAFsASQBPAC4ARgBpAGwAZQBTAGgAYQByAGUAXQA6ADoATgBvAG4AZQApADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAHQAcgB1AGUAOwAgAHQAcgB5ACAAewAgAFsAYgB5AHQAZQBbAF0AXQAkAGEAYwBfAGIAeQB0AGUAcwA9AFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAUAByAGUAYQBtAGIAbABlACgAKQArAFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAQgB5AHQAZQBzACgAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAKQA7ACAAJABhAGMAXwBmAGkAbABlAC4AVwByAGkAdABlACgAJABhAGMAXwBiAHkAdABlAHMALAAwACwAJABhAGMAXwBiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACAAfQAgAGYAaQBuAGEAbABsAHkAIAB7ACAAJABhAGMAXwBmAGkAbABlAC4ARABpAHMAcABvAHMAZQAoACkAIAB9ADsAIAAkAGcAbABvAGIAYQBsADoATABBAFMAVABFAFgASQBUAEMATwBEAEUAPQAkAG4AdQBsAGwAOwAgACYAIAAoAEoAbwBpAG4ALQBQAGEAdABoACAAJABQAFMASABPAE0ARQAgACcAcABvAHcAZQByAHMAaABlAGwAbAAuAGUAeABlACcAKQAgAC0ATgBvAFAAcgBvAGYAaQBsAGUAIAAtAE4AbwBuAEkAbgB0AGUAcgBhAGMAdABpAHYAZQAgAC0ARQB4AGUAYwB1AHQAaQBvAG4AUABvAGwAaQBjAHkAIABCAHkAcABhAHMAcwAgAC0ARgBpAGwAZQAgACQAYQBjAF8AcABhAHQAaAAgAC0ATgBvAG4ASQBuAHQAZQByAGEAYwB0AGkAdgBlADsAIAAkAGEAYwBfAGUAeABpAHQAPQAkAEwAQQBTAFQARQBYAEkAVABDAE8ARABFADsAIABpAGYAIAAoACQAbgB1AGwAbAAgAC0AZQBxACAAJABhAGMAXwBlAHgAaQB0ACkAIAB7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQAgAH0AIAB9ACAAYwBhAHQAYwBoACAAewAgAFsAQwBvAG4AcwBvAGwAZQBdADoAOgBFAHIAcgBvAHIALgBXAHIAaQB0AGUATABpAG4AZQAoACQAXwApADsAIAAkAGEAYwBfAGUAeABpAHQAPQAxACAAfQAgAGYAaQBuAGEAbABsAHkAIAB7ACAAaQBmACAAKAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAKQAgAHsAIAB0AHIAeQAgAHsAIABSAGUAbQBvAHYAZQAtAEkAdABlAG0AIAAtAEwAaQB0AGUAcgBhAGwAUABhAHQAaAAgACQAYQBjAF8AcABhAHQAaAAgAC0ARgBvAHIAYwBlACAALQBFAHIAcgBvAHIAQQBjAHQAaQBvAG4AIABTAHQAbwBwACAAfQAgAGMAYQB0AGMAaAAgAHsAIABbAEMAbwBuAHMAbwBsAGUAXQA6ADoARQByAHIAbwByAC4AVwByAGkAdABlAEwAaQBuAGUAKAAkAF8AKQA7ACAAaQBmACAAKAAkAGEAYwBfAGUAeABpAHQAIAAtAGUAcQAgADAAKQAgAHsAIAAkAGEAYwBfAGUAeABpAHQAPQAxACAAfQAgAH0AIAB9ACAAfQA7ACAAZQB4AGkAdAAgACQAYQBjAF8AZQB4AGkAdAA=

hermes-unix:

ac_install_script=$(curl -fsSL --connect-timeout 20 --max-time 120 'https://hermes-agent.nousresearch.com/install.sh') && [ -n "$ac_install_script" ] && printf '%s\n' "$ac_install_script" | bash -s -- --non-interactive
cursor-windows: exact catalog command
powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -EncodedCommand JABhAGMAXwBwAGEAdABoAD0AJABuAHUAbABsADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAGYAYQBsAHMAZQA7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQA7ACAAdAByAHkAIAB7ACAAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAPQBJAG4AdgBvAGsAZQAtAFIAZQBzAHQATQBlAHQAaABvAGQAIAAtAFUAcgBpACAAJwBoAHQAdABwAHMAOgAvAC8AYwB1AHIAcwBvAHIALgBjAG8AbQAvAGkAbgBzAHQAYQBsAGwAPwB3AGkAbgAzADIAPQB0AHIAdQBlACcAIAAtAFQAaQBtAGUAbwB1AHQAUwBlAGMAIAAxADIAMAAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwB0AG8AcAA7ACAAaQBmACAAKABbAHMAdAByAGkAbgBnAF0AOgA6AEkAcwBOAHUAbABsAE8AcgBXAGgAaQB0AGUAUwBwAGEAYwBlACgAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAKQApACAAewAgAHQAaAByAG8AdwAgACcARQBtAHAAdAB5ACAAaQBuAHMAdABhAGwAbABlAHIAIAByAGUAcwBwAG8AbgBzAGUAJwAgAH0AOwAgACQAYQBjAF8AcABhAHQAaAA9AEoAbwBpAG4ALQBQAGEAdABoACAAKABbAEkATwAuAFAAYQB0AGgAXQA6ADoARwBlAHQAVABlAG0AcABQAGEAdABoACgAKQApACAAKAAnAGEAYwAtAGkAbgBzAHQAYQBsAGwALQAyADcAOAA3AC0AJwArAFsARwB1AGkAZABdADoAOgBOAGUAdwBHAHUAaQBkACgAKQAuAFQAbwBTAHQAcgBpAG4AZwAoACcATgAnACkAKwAnAC4AcABzADEAJwApADsAIAAkAGEAYwBfAGYAaQBsAGUAPQBbAEkATwAuAEYAaQBsAGUAXQA6ADoATwBwAGUAbgAoACQAYQBjAF8AcABhAHQAaAAsAFsASQBPAC4ARgBpAGwAZQBNAG8AZABlAF0AOgA6AEMAcgBlAGEAdABlAE4AZQB3ACwAWwBJAE8ALgBGAGkAbABlAEEAYwBjAGUAcwBzAF0AOgA6AFcAcgBpAHQAZQAsAFsASQBPAC4ARgBpAGwAZQBTAGgAYQByAGUAXQA6ADoATgBvAG4AZQApADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAHQAcgB1AGUAOwAgAHQAcgB5ACAAewAgAFsAYgB5AHQAZQBbAF0AXQAkAGEAYwBfAGIAeQB0AGUAcwA9AFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAUAByAGUAYQBtAGIAbABlACgAKQArAFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAQgB5AHQAZQBzACgAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAKQA7ACAAJABhAGMAXwBmAGkAbABlAC4AVwByAGkAdABlACgAJABhAGMAXwBiAHkAdABlAHMALAAwACwAJABhAGMAXwBiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACAAfQAgAGYAaQBuAGEAbABsAHkAIAB7ACAAJABhAGMAXwBmAGkAbABlAC4ARABpAHMAcABvAHMAZQAoACkAIAB9ADsAIAAkAGcAbABvAGIAYQBsADoATABBAFMAVABFAFgASQBUAEMATwBEAEUAPQAkAG4AdQBsAGwAOwAgACYAIAAoAEoAbwBpAG4ALQBQAGEAdABoACAAJABQAFMASABPAE0ARQAgACcAcABvAHcAZQByAHMAaABlAGwAbAAuAGUAeABlACcAKQAgAC0ATgBvAFAAcgBvAGYAaQBsAGUAIAAtAE4AbwBuAEkAbgB0AGUAcgBhAGMAdABpAHYAZQAgAC0ARQB4AGUAYwB1AHQAaQBvAG4AUABvAGwAaQBjAHkAIABCAHkAcABhAHMAcwAgAC0ARgBpAGwAZQAgACQAYQBjAF8AcABhAHQAaAA7ACAAJABhAGMAXwBlAHgAaQB0AD0AJABMAEEAUwBUAEUAWABJAFQAQwBPAEQARQA7ACAAaQBmACAAKAAkAG4AdQBsAGwAIAAtAGUAcQAgACQAYQBjAF8AZQB4AGkAdAApACAAewAgACQAYQBjAF8AZQB4AGkAdAA9ADEAIAB9ACAAfQAgAGMAYQB0AGMAaAAgAHsAIABbAEMAbwBuAHMAbwBsAGUAXQA6ADoARQByAHIAbwByAC4AVwByAGkAdABlAEwAaQBuAGUAKAAkAF8AKQA7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQAgAH0AIABmAGkAbgBhAGwAbAB5ACAAewAgAGkAZgAgACgAJABhAGMAXwBjAHIAZQBhAHQAZQBkACkAIAB7ACAAdAByAHkAIAB7ACAAUgBlAG0AbwB2AGUALQBJAHQAZQBtACAALQBMAGkAdABlAHIAYQBsAFAAYQB0AGgAIAAkAGEAYwBfAHAAYQB0AGgAIAAtAEYAbwByAGMAZQAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwB0AG8AcAAgAH0AIABjAGEAdABjAGgAIAB7ACAAWwBDAG8AbgBzAG8AbABlAF0AOgA6AEUAcgByAG8AcgAuAFcAcgBpAHQAZQBMAGkAbgBlACgAJABfACkAOwAgAGkAZgAgACgAJABhAGMAXwBlAHgAaQB0ACAALQBlAHEAIAAwACkAIAB7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQAgAH0AIAB9ACAAfQAgAH0AOwAgAGUAeABpAHQAIAAkAGEAYwBfAGUAeABpAHQA

cursor-unix:

ac_install_script=$(curl -fsSL --connect-timeout 20 --max-time 120 'https://cursor.com/install') && [ -n "$ac_install_script" ] && printf '%s\n' "$ac_install_script" | bash
pi-windows: exact catalog command
npm install -g --ignore-scripts --include=optional @earendil-works/pi-coding-agent

pi-unix:

npm install -g --ignore-scripts --include=optional @earendil-works/pi-coding-agent
opencode-windows: exact catalog command
npm install -g --ignore-scripts=false --include=optional --allow-scripts=opencode-ai opencode-ai

opencode-unix:

ac_install_script=$(curl -fsSL --connect-timeout 20 --max-time 120 'https://opencode.ai/install') && [ -n "$ac_install_script" ] && printf '%s\n' "$ac_install_script" | bash
antigravity-windows: exact catalog command
powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -EncodedCommand JABhAGMAXwBwAGEAdABoAD0AJABuAHUAbABsADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAGYAYQBsAHMAZQA7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQA7ACAAdAByAHkAIAB7ACAAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAPQBJAG4AdgBvAGsAZQAtAFIAZQBzAHQATQBlAHQAaABvAGQAIAAtAFUAcgBpACAAJwBoAHQAdABwAHMAOgAvAC8AYQBuAHQAaQBnAHIAYQB2AGkAdAB5AC4AZwBvAG8AZwBsAGUALwBjAGwAaQAvAGkAbgBzAHQAYQBsAGwALgBwAHMAMQAnACAALQBUAGkAbQBlAG8AdQB0AFMAZQBjACAAMQAyADAAIAAtAEUAcgByAG8AcgBBAGMAdABpAG8AbgAgAFMAdABvAHAAOwAgAGkAZgAgACgAWwBzAHQAcgBpAG4AZwBdADoAOgBJAHMATgB1AGwAbABPAHIAVwBoAGkAdABlAFMAcABhAGMAZQAoACQAYQBjAF8AaQBuAHMAdABhAGwAbABfAHMAYwByAGkAcAB0ACkAKQAgAHsAIAB0AGgAcgBvAHcAIAAnAEUAbQBwAHQAeQAgAGkAbgBzAHQAYQBsAGwAZQByACAAcgBlAHMAcABvAG4AcwBlACcAIAB9ADsAIAAkAGEAYwBfAHAAYQB0AGgAPQBKAG8AaQBuAC0AUABhAHQAaAAgACgAWwBJAE8ALgBQAGEAdABoAF0AOgA6AEcAZQB0AFQAZQBtAHAAUABhAHQAaAAoACkAKQAgACgAJwBhAGMALQBpAG4AcwB0AGEAbABsAC0AMgA3ADgANwAtACcAKwBbAEcAdQBpAGQAXQA6ADoATgBlAHcARwB1AGkAZAAoACkALgBUAG8AUwB0AHIAaQBuAGcAKAAnAE4AJwApACsAJwAuAHAAcwAxACcAKQA7ACAAJABhAGMAXwBmAGkAbABlAD0AWwBJAE8ALgBGAGkAbABlAF0AOgA6AE8AcABlAG4AKAAkAGEAYwBfAHAAYQB0AGgALABbAEkATwAuAEYAaQBsAGUATQBvAGQAZQBdADoAOgBDAHIAZQBhAHQAZQBOAGUAdwAsAFsASQBPAC4ARgBpAGwAZQBBAGMAYwBlAHMAcwBdADoAOgBXAHIAaQB0AGUALABbAEkATwAuAEYAaQBsAGUAUwBoAGEAcgBlAF0AOgA6AE4AbwBuAGUAKQA7ACAAJABhAGMAXwBjAHIAZQBhAHQAZQBkAD0AJAB0AHIAdQBlADsAIAB0AHIAeQAgAHsAIABbAGIAeQB0AGUAWwBdAF0AJABhAGMAXwBiAHkAdABlAHMAPQBbAFQAZQB4AHQALgBFAG4AYwBvAGQAaQBuAGcAXQA6ADoAVQBUAEYAOAAuAEcAZQB0AFAAcgBlAGEAbQBiAGwAZQAoACkAKwBbAFQAZQB4AHQALgBFAG4AYwBvAGQAaQBuAGcAXQA6ADoAVQBUAEYAOAAuAEcAZQB0AEIAeQB0AGUAcwAoACQAYQBjAF8AaQBuAHMAdABhAGwAbABfAHMAYwByAGkAcAB0ACkAOwAgACQAYQBjAF8AZgBpAGwAZQAuAFcAcgBpAHQAZQAoACQAYQBjAF8AYgB5AHQAZQBzACwAMAAsACQAYQBjAF8AYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQAgAH0AIABmAGkAbgBhAGwAbAB5ACAAewAgACQAYQBjAF8AZgBpAGwAZQAuAEQAaQBzAHAAbwBzAGUAKAApACAAfQA7ACAAJABnAGwAbwBiAGEAbAA6AEwAQQBTAFQARQBYAEkAVABDAE8ARABFAD0AJABuAHUAbABsADsAIAAmACAAKABKAG8AaQBuAC0AUABhAHQAaAAgACQAUABTAEgATwBNAEUAIAAnAHAAbwB3AGUAcgBzAGgAZQBsAGwALgBlAHgAZQAnACkAIAAtAE4AbwBQAHIAbwBmAGkAbABlACAALQBOAG8AbgBJAG4AdABlAHIAYQBjAHQAaQB2AGUAIAAtAEUAeABlAGMAdQB0AGkAbwBuAFAAbwBsAGkAYwB5ACAAQgB5AHAAYQBzAHMAIAAtAEYAaQBsAGUAIAAkAGEAYwBfAHAAYQB0AGgAOwAgACQAYQBjAF8AZQB4AGkAdAA9ACQATABBAFMAVABFAFgASQBUAEMATwBEAEUAOwAgAGkAZgAgACgAJABuAHUAbABsACAALQBlAHEAIAAkAGEAYwBfAGUAeABpAHQAKQAgAHsAIAAkAGEAYwBfAGUAeABpAHQAPQAxACAAfQAgAH0AIABjAGEAdABjAGgAIAB7ACAAWwBDAG8AbgBzAG8AbABlAF0AOgA6AEUAcgByAG8AcgAuAFcAcgBpAHQAZQBMAGkAbgBlACgAJABfACkAOwAgACQAYQBjAF8AZQB4AGkAdAA9ADEAIAB9ACAAZgBpAG4AYQBsAGwAeQAgAHsAIABpAGYAIAAoACQAYQBjAF8AYwByAGUAYQB0AGUAZAApACAAewAgAHQAcgB5ACAAewAgAFIAZQBtAG8AdgBlAC0ASQB0AGUAbQAgAC0ATABpAHQAZQByAGEAbABQAGEAdABoACAAJABhAGMAXwBwAGEAdABoACAALQBGAG8AcgBjAGUAIAAtAEUAcgByAG8AcgBBAGMAdABpAG8AbgAgAFMAdABvAHAAIAB9ACAAYwBhAHQAYwBoACAAewAgAFsAQwBvAG4AcwBvAGwAZQBdADoAOgBFAHIAcgBvAHIALgBXAHIAaQB0AGUATABpAG4AZQAoACQAXwApADsAIABpAGYAIAAoACQAYQBjAF8AZQB4AGkAdAAgAC0AZQBxACAAMAApACAAewAgACQAYQBjAF8AZQB4AGkAdAA9ADEAIAB9ACAAfQAgAH0AIAB9ADsAIABlAHgAaQB0ACAAJABhAGMAXwBlAHgAaQB0AA==

antigravity-unix:

ac_install_script=$(curl -fsSL --connect-timeout 20 --max-time 120 'https://antigravity.google/cli/install.sh') && [ -n "$ac_install_script" ] && printf '%s\n' "$ac_install_script" | bash
grok-windows: exact catalog command
powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -EncodedCommand JABhAGMAXwBwAGEAdABoAD0AJABuAHUAbABsADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAGYAYQBsAHMAZQA7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQA7ACAAdAByAHkAIAB7ACAAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAPQBJAG4AdgBvAGsAZQAtAFIAZQBzAHQATQBlAHQAaABvAGQAIAAtAFUAcgBpACAAJwBoAHQAdABwAHMAOgAvAC8AeAAuAGEAaQAvAGMAbABpAC8AaQBuAHMAdABhAGwAbAAuAHAAcwAxACcAIAAtAFQAaQBtAGUAbwB1AHQAUwBlAGMAIAAxADIAMAAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwB0AG8AcAA7ACAAaQBmACAAKABbAHMAdAByAGkAbgBnAF0AOgA6AEkAcwBOAHUAbABsAE8AcgBXAGgAaQB0AGUAUwBwAGEAYwBlACgAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAKQApACAAewAgAHQAaAByAG8AdwAgACcARQBtAHAAdAB5ACAAaQBuAHMAdABhAGwAbABlAHIAIAByAGUAcwBwAG8AbgBzAGUAJwAgAH0AOwAgACQAYQBjAF8AcABhAHQAaAA9AEoAbwBpAG4ALQBQAGEAdABoACAAKABbAEkATwAuAFAAYQB0AGgAXQA6ADoARwBlAHQAVABlAG0AcABQAGEAdABoACgAKQApACAAKAAnAGEAYwAtAGkAbgBzAHQAYQBsAGwALQAyADcAOAA3AC0AJwArAFsARwB1AGkAZABdADoAOgBOAGUAdwBHAHUAaQBkACgAKQAuAFQAbwBTAHQAcgBpAG4AZwAoACcATgAnACkAKwAnAC4AcABzADEAJwApADsAIAAkAGEAYwBfAGYAaQBsAGUAPQBbAEkATwAuAEYAaQBsAGUAXQA6ADoATwBwAGUAbgAoACQAYQBjAF8AcABhAHQAaAAsAFsASQBPAC4ARgBpAGwAZQBNAG8AZABlAF0AOgA6AEMAcgBlAGEAdABlAE4AZQB3ACwAWwBJAE8ALgBGAGkAbABlAEEAYwBjAGUAcwBzAF0AOgA6AFcAcgBpAHQAZQAsAFsASQBPAC4ARgBpAGwAZQBTAGgAYQByAGUAXQA6ADoATgBvAG4AZQApADsAIAAkAGEAYwBfAGMAcgBlAGEAdABlAGQAPQAkAHQAcgB1AGUAOwAgAHQAcgB5ACAAewAgAFsAYgB5AHQAZQBbAF0AXQAkAGEAYwBfAGIAeQB0AGUAcwA9AFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAUAByAGUAYQBtAGIAbABlACgAKQArAFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAQgB5AHQAZQBzACgAJABhAGMAXwBpAG4AcwB0AGEAbABsAF8AcwBjAHIAaQBwAHQAKQA7ACAAJABhAGMAXwBmAGkAbABlAC4AVwByAGkAdABlACgAJABhAGMAXwBiAHkAdABlAHMALAAwACwAJABhAGMAXwBiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACAAfQAgAGYAaQBuAGEAbABsAHkAIAB7ACAAJABhAGMAXwBmAGkAbABlAC4ARABpAHMAcABvAHMAZQAoACkAIAB9ADsAIAAkAGcAbABvAGIAYQBsADoATABBAFMAVABFAFgASQBUAEMATwBEAEUAPQAkAG4AdQBsAGwAOwAgACYAIAAoAEoAbwBpAG4ALQBQAGEAdABoACAAJABQAFMASABPAE0ARQAgACcAcABvAHcAZQByAHMAaABlAGwAbAAuAGUAeABlACcAKQAgAC0ATgBvAFAAcgBvAGYAaQBsAGUAIAAtAE4AbwBuAEkAbgB0AGUAcgBhAGMAdABpAHYAZQAgAC0ARQB4AGUAYwB1AHQAaQBvAG4AUABvAGwAaQBjAHkAIABCAHkAcABhAHMAcwAgAC0ARgBpAGwAZQAgACQAYQBjAF8AcABhAHQAaAA7ACAAJABhAGMAXwBlAHgAaQB0AD0AJABMAEEAUwBUAEUAWABJAFQAQwBPAEQARQA7ACAAaQBmACAAKAAkAG4AdQBsAGwAIAAtAGUAcQAgACQAYQBjAF8AZQB4AGkAdAApACAAewAgACQAYQBjAF8AZQB4AGkAdAA9ADEAIAB9ACAAfQAgAGMAYQB0AGMAaAAgAHsAIABbAEMAbwBuAHMAbwBsAGUAXQA6ADoARQByAHIAbwByAC4AVwByAGkAdABlAEwAaQBuAGUAKAAkAF8AKQA7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQAgAH0AIABmAGkAbgBhAGwAbAB5ACAAewAgAGkAZgAgACgAJABhAGMAXwBjAHIAZQBhAHQAZQBkACkAIAB7ACAAdAByAHkAIAB7ACAAUgBlAG0AbwB2AGUALQBJAHQAZQBtACAALQBMAGkAdABlAHIAYQBsAFAAYQB0AGgAIAAkAGEAYwBfAHAAYQB0AGgAIAAtAEYAbwByAGMAZQAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwB0AG8AcAAgAH0AIABjAGEAdABjAGgAIAB7ACAAWwBDAG8AbgBzAG8AbABlAF0AOgA6AEUAcgByAG8AcgAuAFcAcgBpAHQAZQBMAGkAbgBlACgAJABfACkAOwAgAGkAZgAgACgAJABhAGMAXwBlAHgAaQB0ACAALQBlAHEAIAAwACkAIAB7ACAAJABhAGMAXwBlAHgAaQB0AD0AMQAgAH0AIAB9ACAAfQAgAH0AOwAgAGUAeABpAHQAIAAkAGEAYwBfAGUAeABpAHQA

grok-unix:

ac_install_script=$(curl -fsSL --connect-timeout 20 --max-time 120 'https://x.ai/cli/install.sh') && [ -n "$ac_install_script" ] && printf '%s\n' "$ac_install_script" | bash

Windows wrapper and exit limits. The outer -EncodedCommand payload is standard Base64 of UTF-16LE without a BOM. The downloaded temporary .ps1 is UTF-8 with a BOM. These are different encodings. -ExecutionPolicy Bypass applies to the child process; it does not persist a policy change. See powershell.exe parameters.

The decoded Claude body below also describes Codex, Cursor, Antigravity and Grok with their table URLs. Hermes adds -NonInteractive after -File $ac_path as an upstream-script argument, separate from PowerShell's own -NonInteractive.

Readable decoded Windows wrapper (Claude)
$ac_path=$null;
$ac_created=$false;
$ac_exit=1;
try { $ac_install_script=Invoke-RestMethod -Uri 'https://claude.ai/install.ps1' -TimeoutSec 120 -ErrorAction Stop;
if ([string]::IsNullOrWhiteSpace($ac_install_script)) { throw 'Empty installer response' };
$ac_path=Join-Path ([IO.Path]::GetTempPath()) ('ac-install-2787-'+[Guid]::NewGuid().ToString('N')+'.ps1');
$ac_file=[IO.File]::Open($ac_path,[IO.FileMode]::CreateNew,[IO.FileAccess]::Write,[IO.FileShare]::None);
$ac_created=$true;
try { [byte[]]$ac_bytes=[Text.Encoding]::UTF8.GetPreamble()+[Text.Encoding]::UTF8.GetBytes($ac_install_script);
$ac_file.Write($ac_bytes,0,$ac_bytes.Length) } finally { $ac_file.Dispose() };
$global:LASTEXITCODE=$null;
& (Join-Path $PSHOME 'powershell.exe') -NoProfile -NonInteractive -ExecutionPolicy Bypass -File $ac_path;
$ac_exit=$LASTEXITCODE;
if ($null -eq $ac_exit) { $ac_exit=1 } } catch { [Console]::Error.WriteLine($_);
$ac_exit=1 } finally { if ($ac_created) { try { Remove-Item -LiteralPath $ac_path -Force -ErrorAction Stop } catch { [Console]::Error.WriteLine($_);
if ($ac_exit -eq 0) { $ac_exit=1 } } } };
exit $ac_exit

The wrapper fetches with -ErrorAction Stop, rejects whitespace-only content, creates a unique temporary file, executes it in a separate powershell.exe -File child, returns that child's exit code and cleans up. Fetch, write and cleanup errors fail the wrapper (a cleanup failure changes success to failure). A downloaded script's explicit exit 7 is preserved. A native child returning 7 is preserved only if its upstream script propagates that status; arbitrary nonterminating PowerShell errors and ignored native exits are not forced to fail. Raw stderr can contain CLIXML. The future acceptance procedure records these outcomes separately.

Antigravity's recommended flags (--dangerously-skip-permissions, --model <model>, --effort <effort>) remain outside the seeded launch command: the first disables agy's permission prompts; the others are user placeholders. Add them through coding-agent profile cells.

Each installed CLI handles its own authentication. Installation success does not authenticate it. Pi auto-resume does not touch credentials or CLI-managed state. The generic config-seed feature runs only when configured. Container credential copy-in remains Claude Code only; see Container coding agents.

How AC finds them

On startup AC reads agents.30.instance.no-git.json → agents[]. Each entry has:

{
  "id": "claude",
  "label": "Claude Code",
  "command": "claude",
  "color": "#E87B35"
}
Field Meaning
id Stable internal id used by create-agent --launch <id>.
label Display name in the launcher dropdown.
command The binary to spawn. Resolved against PATH unless absolute.
color Sidebar accent color for sessions launched with this agent.

The default coding-agent catalog includes a Pi entry with command pi and instructions file AGENTS.md.

Where installCommands and updateCommands live. The catalog is a separate manifest from settings.30.instance.no-git.json. It is <project>/.ac/coding-agents/agents.10.default.json, an AC-managed snapshot that startup and project registration initialize or refresh; your optional shared patch lives beside it in <project>/.ac/coding-agents/agents.40.project.json, and your personal overrides in <project>/.ac/coding-agents/agents.50.personal.no-git.json. Each catalog definition can carry installCommands for installation, updateCommands for updates, and autoUpdate. None is a settings.30.instance.no-git.json key, and the CLI exposes the catalog read-only (coding-agent catalog). What you set in settings.30.instance.no-git.json is your answer to the startup prompt, agentAutoUpdateByCommand, described in Coding agent auto-update; the catalog's autoUpdate field is inert.

Commands resolve only from the persisted catalog. An absent installCommands stays unavailable on read; only eligible initialization/migration/refresh or your valid override can supply it. AC never substitutes the shipped defaults at read time, so a legacy catalog's absent updateCommands stays empty until a supported restart migrates it; cursor, grok and muse intentionally ship no update command (cursor's CLI self-updates with the desktop app). See Managed catalog: base, local overrides, and migration for the schema, refresh and recovery rules.

In the Settings > Coding Agents Auto-update table, one row appears per command whose first effective entry has a non-empty updateCommands (see Coding agent auto-update). There is no versionCommand field: AC detects installed versions with a built-in --version probe for the built-in commands (claude, codex, hermes, pi, opencode, agy), only for bare command names resolved through PATH; a custom entry or an explicit path shows Installed without a version.

Welcome's Installed indicator checks executable presence, not a successful version probe. The automatic built-in version probes above omit Cursor's agent and Grok's grok. Independently run the installed executable by its full path with --version and retain its exit/output before checking AC presence.

Windows AC keeps its inherited process PATH: an installer changing User PATH cannot update the running AC process. Relaunch AC from a fresh OS environment after the PATH change; restarting only its terminal may leave AC's environment stale. On Unix, AC adds existing user-bin directories and caches one login-shell PATH probe per process. Verify presence before installation, in the same AC process afterwards, and after a fresh process restart.

Managed catalog: base, local overrides, and migration

<project>/.ac/coding-agents/agents.10.default.json is the file AgentsCommander manages; <project>/.ac/coding-agents/agents.50.personal.no-git.json is yours. Startup and every project registration initialize or refresh the managed base. Ordinary reads and Reload catalog never write. The embedded catalog is seed material only. With no registered project, startup initializes or refreshes the instance managed base at <config_dir>/coding-agents/agents.10.default.json and, on initialization, creates the agents.50.personal.no-git.json stub beside it; it never rewrites a legacy or edited instance file. Registering a project later gives that project its own managed base.

Existing registrations are snapshots. agents.30.instance.no-git.json stores registered snapshots and profiles separately; it is not a catalog input layer. This catalog contract does not specify collection for every agent or profile (tracked separately in #2432/#2436). Adding an agent from the catalog copies label, command, color, envs, isolatedHome, and, when present, instructionsFilename and configSeed into settings.agents[] (the CLI's add --from-catalog does the same). Later catalog changes do not rewrite registered agents. installCommands, updateCommands, autoUpdate and idleBurst are catalog-only and are never copied into settings.agents[].

The optional project patch

You or your team may create <primary-project>/.ac/coding-agents/agents.40.project.json and share it through your own Git workflow. AC only reads this optional file: it never creates a stub, edits, deletes, migrates, publishes or stages it. Generated AC ignore rules leave it trackable; your own rules may exclude it. AC does not commit it for you.

For example, this schema-1 patch changes the existing shipped Codex label and inherits its other fields:

{"schemaVersion":1,"agents":[{"key":"codex","label":"Team Codex"}]}

The catalog composes managed base 10 → project patch 40 → personal patch 50 → built-in support gate. Personal values win. Both patches use the strict fields, null rules and nested-object semantics described below; this is not a general recursive JSON merge. New keys require complete definitions. Unknown fields or schema versions, duplicate JSON members, duplicate agent or order keys, and Git conflict markers reject the whole affected layer.

Only the primary project's file applies: the first nonblank project_paths entry, otherwise legacy project_path. A secondary project's patch cannot affect sessions while another project is primary, and a primary failure never retries a secondary project. With no primary project, reads retain instance layers 10/50 and never read a stray instance 40. The UI and CLI interfaces are unchanged.

Each layer's order promotes its listed surviving keys; unlisted keys keep their prior order, with new keys appended. Layer 50 orders the accepted result of 40. Unknown tombstones and order keys do nothing. Removal checks the immediately lower accepted entry's removable value, so a project patch can change whether a personal tombstone succeeds. A key removed at 40 returns at 50 only through a complete new definition; the base entry is never silently resurrected.

Invalid 40 reports projectInvalid with its path and leaves 10 available for an independent valid 50. A partial 50 patch of a key added only by rejected 40 also fails as an incomplete addition: the base remains, with both warnings. A complete 50 addition succeeds. Invalid 50 reports localInvalid and retains accepted 40. Each layer applies wholly or not at all. CatalogReport.sourcePath remains the base path; diagnostic paths identify the failed layer.

Recognized managed bases, including edited or stale ones, use these patch rules. Legacy or foreign ownership applies neither patch: their presence reports migrationPending, malformed 40 also reports projectInvalid, and foreign ownership retains migrationConflict. A missing, invalid or unreadable base stays unavailable; neither 40 nor embedded defaults rescues it. The existing interrupted-migration journal's legacy-source fallback remains unchanged and applies neither patch.

Readers require regular, readable layer files and reject links and reparse points. They compare consecutive snapshots of the base, eligible 40, 50 and migration journal, with at most three attempts and no write lock. Ongoing changes make the catalog unavailable with retry guidance; this is not a multi-file transaction. Save complete JSON atomically with your external editor. Initialization, refresh, re-seeding and recovery preserve valid or malformed 40 bytes. Older builds ignore 40: its customization stops taking effect on downgrade, while the file remains. There is no new migration or automatic writer.

The local overrides file

agents.50.personal.no-git.json is strict. Its root is an object with schemaVersion: 1, an agents array, and an optional order array of unique keys. Anything AC does not recognize — an unknown field at the root, in a row or in a nested object; a duplicate JSON member; a duplicate key; an unsupported schemaVersion — disables the whole local layer with a localInvalid warning naming the path and reason. The base and any accepted project patch stay readable and usable; AC never applies a partial local file or rewrites it.

A row with an existing key patches the immediately lower accepted entry. label, description, color, command, instructionsFilename, envs, isolatedHome, configSeed, removable, updateCommands, autoUpdate, idleBurst and installCommands are accepted. A field you omit is inherited; false, "" and [] are explicit values. null is accepted only for instructionsFilename (clear it), configSeed (clear the whole object), idleBurst and installCommands (clear the whole object). configSeed and idleBurst merge by presence (configSeed: enabled, dest only; idleBurst: maxBytes, maxSecs, priorSilenceSecs only); an object after a missing or null base starts from the AC defaults. envs and updateCommands replace the whole array in the order you write; env rows are never merged by key. installCommands merges by presence: default is a string, and windows, macos and linux are strings or null (clear that platform override). An object without a lower value needs a valid nonblank default; default: null is invalid. A null whole object clears it. Strings remain verbatim; omitted keys inherit. Clearing an OS override falls back to the composed default, not another OS command. The shipped fallback is echo No verified installer for this platform 1>&2 && exit 1: unsupported targets download nothing. A local default can replace that fallback. Composed values must remain valid. Each env object accepts only key, value, source (user or system/agentsCommander) and enabled.

A row with a new key must be complete: label, description, color, command, envs, isolatedHome, removable, updateCommands and autoUpdate are all required; instructionsFilename, configSeed, idleBurst and installCommands may be absent or null. New definitions append after the base entries unless order places them.

idleBurst (short-burst filter). A present idleBurst object on the catalog entry a session's configured command maps to enables the filter for that session. A short PTY output burst after long silence (a status-line repaint) then counts only once it reaches maxBytes (default 1024) or spans maxSecs (default 3.0); an unconfirmed burst is discarded and neither resets the auto-close clock nor reopens the busy state. priorSilenceSecs (default 60.0) is the silence a chunk must find before it may open a burst; 0 for maxBytes or maxSecs disables the filter. Matching uses the exact configured command first, then the executable basename. An entry with no idleBurst, a missing catalog, or no match leaves the filter off. The tuning is read from the effective catalog at every spawn, so an agents.50.personal.no-git.json edit applies to the next spawn or session restart — no AgentsCommander restart needed — while a running session keeps the tuning it started with.

A tombstone is a row with remove: true and only key and remove. Removing a nonremovable immediately lower accepted entry invalidates the whole layer; remove: false is rejected — omit remove for an ordinary patch. An unknown key's tombstone is valid and has no effect until that key exists in the lower layer.

order lists surviving keys first; unlisted survivors keep the immediately lower order, followed by this layer's additions. Unknown or removed keys in order are ignored, so you can pre-position a key a future AC version adds. After composition AC applies its built-in support table; an unsupported built-in stays suppressed.

This example patches Codex to an explicit empty command list and a partial seed, removes the Pi entry (Pi is removable), adds a complete custom agent, and pre-positions a future key:

{
  "schemaVersion": 1,
  "agents": [
    {
      "key": "codex",
      "command": "codex --model gpt-5",
      "updateCommands": [],
      "configSeed": { "enabled": false }
    },
    { "key": "pi", "remove": true },
    {
      "key": "my-cli",
      "label": "My CLI",
      "description": "Internal wrapper",
      "color": "#6366f1",
      "command": "my-cli --fast",
      "envs": [],
      "isolatedHome": false,
      "removable": true,
      "updateCommands": ["my-cli self-update"],
      "autoUpdate": false
    }
  ],
  "order": ["codex", "my-cli", "future-tool"]
}

When several catalog entries share one command, the updater uses the first effective entry for that command — its label, color and exact sequence — even when that sequence is []; later duplicates are ignored. Settings consent stays keyed by the exact command string and is never inherited by a changed command.

The managed base

A base AC owns carries a managed marker beside schemaVersion: 1 and agents:

Field Value
owner agentscommander
version 1
revision SHA-256 of the deterministic compact UTF-8 serialization of the supported shipped definitions
contentSha256 The same SHA-256; identifies the exact content AC published

An unrecognized owner or version means the file is not AC's: it stays readable but is never refreshed or migrated. A formatting-only edit does not change contentSha256 and does not pin the file. A semantic edit stops contentSha256 matching the entries; the file stays readable with a managedBaseEdited warning, and AC never auto-refreshes or auto-migrates it. To customize entries, use agents.50.personal.no-git.json, not agents.10.default.json.

At startup or project registration, a refresh requires a recognized owner/version, a matching deterministic semantic-content hash, no blocking unknown fields, and a different shipped revision. It replaces only a verified managed base: it can bring new or updated shipped definitions into the composed view you read, and it never edits either user patch, agents.40.project.json or agents.50.personal.no-git.json. Refresh leaves edited or unmanaged bases with their user bytes, warnings and old installer commands; the separate legacy migration rules below still apply. Reload catalog is read-only and does not refresh them. A fresh project writes the base and a creation-only stub {"schemaVersion":1,"agents":[]} in agents.50.personal.no-git.json, and only when the local path does not exist at all: any existing entry is preserved and never overwritten. An existing valid regular file is composed as your overrides with no warning; a directory, link, unreadable or schema-invalid local is preserved and surfaces localInvalid with the path and reason when read. If the stub cannot be created, the usable base remains and a startup log names the local path.

Migration, sidecars, and recovery

If agents.10.default.json has no recognized managed marker it is legacy user-owned data. On a supported restart AC migrates it before claiming ownership, and requires agents.50.personal.no-git.json to be completely absent: an existing local file of any kind blocks the transfer, even an empty stub AC may not have written. A readable legacy base plus a valid local file stays usable with a migrationPending warning while the transfer is blocked. A legacy file stays readable at all times — AC does not extract values or insert defaults while reading.

An existing local file does not block fresh initialization when there is no project base and no instance legacy source: AC writes the managed base and leaves your local file in place.

The one-time extraction is computed and strictly validated before any write:

  • for a shipped key whose command is unchanged, explicitly present fields are pinned as local values; an absent updateCommands inherits the persisted default sequence;
  • a custom key or a changed command is materialized completely; an absent updateCommands becomes [];
  • shipped keys absent from the legacy catalog become remove: true tombstones (an empty legacy catalog tombstones every supported shipped key), so future AC versions can still add new defaults.

AC then publishes an immutable byte-exact backup agents.migration-v1.backup.json, a journal .agents.migration-v1.json, the extracted local file, and finally the managed base — the local file before the base. The journal records the version, source kind (project or instance), source path and SHA-256, the local file's SHA-256 and byte length, and the complete intended managed base with its revision and content digest. A restart resumes an interrupted migration only when the recorded source, backup and local bytes still match; a changed source or local file, a missing backup, or an inconsistent sidecar stops recovery and preserves every byte, with the conflict path and reason reported. An instance source is read-only: only its bytes are imported, into the project's base and backup, and only when the project has no base at all. agents.50.personal.no-git.json is never imported from the instance.

Warnings keep a failed state visible without changing bytes:

Warning Meaning
baseUnavailable no readable persisted catalog exists at the selected path; AC substitutes nothing
baseInvalid the persisted base is corrupt or invalid; its bytes are preserved
invalidDefinition a catalog entry did not validate and was omitted from the read, or a built-in is suppressed by this build's support table
duplicateKey a catalog entry's key duplicates an earlier entry and was omitted
projectInvalid the eligible project patch is invalid or unreadable; the base remains and an independent valid personal patch still applies
localInvalid the personal file is invalid or unreadable under the strict schema; the base and any accepted project patch still apply
migrationPending a persisted base carries unrecognized fields or an entry missing updateCommands, an eligible project or personal file exists while the base is not AC-managed, or a journal or eligible patch is waiting for an absent base
migrationConflict the base carries an unrecognized managed ownership marker, or a sidecar, source or local file changed during migration, or an existing local/sidecar blocks it; nothing was overwritten
managedBaseEdited the base no longer matches its content digest; it stays readable and is never auto-refreshed
refreshFailed the persisted revision differs from this build, so the entries stay usable and a restart retries the refresh; initialization also logs it when it cannot create the local stub or inspect a sidecar, without adding it to this report
publicationUntracked the base is verified managed but the seed manifest does not record it yet; the next initialization records it without republishing

The table describes the warnings a read report can carry. A failed initialization logs the same codes, and some failures reach only the log: a blocked recovery logs migrationConflict, and a local-stub or sidecar failure logs refreshFailed, without appearing in the report.

Reload catalog (Settings and the New Agent picker) re-reads the files after you edit them by hand. A restart is what retries the managed-base refresh and migration. The config-seed Re-seed default configuration button is unrelated: it writes only the _seed/ master under the primary registered project's .ac/coding-agents/, or the legacy <config_dir>/coding-agents/_seed/ when no project is registered (see Config seed).

If migration cannot resume, reconcile it by hand:

  1. Stop AgentsCommander.
  2. Keep agents.10.default.json, agents.50.personal.no-git.json, agents.migration-v1.backup.json and .agents.migration-v1.json — do not delete them.
  3. Prepare a valid agents.50.personal.no-git.json with the customizations you want to keep.
  4. Move a conflicting base and transaction sidecars aside to archival names of your choice.
  5. Make sure no instance legacy catalog will silently re-enter migration.
  6. Restart AC: it initializes a fresh managed base and preserves your reconciled local file.

There is no repair command that deletes or overwrites these files. An unsupported lock or hard-link filesystem stops migration safely instead of publishing a partial local file; move the project to a supported local filesystem or reconcile by hand.

Switching the coding agent per session

When you launch a session AC shows a dropdown listing every entry in agents[]. Pick one. The choice is remembered as the session's lastCodingAgent so subsequent wakeups use the same CLI without asking.

You can change the choice for a session later: right-click → Launch with… → pick a different agent.

Pi resume behavior

AC uses Pi's direct --continue option, not --resume, which opens Pi's interactive session selector. AC injects one --continue immediately after the Pi executable only when all of these conditions hold:

  • The exact command-position pass identifies a supported Pi command.
  • The launch resolves to a configured Coding Agents entry. A heuristic session label or matching shell basename alone does not authorize mutation.
  • AC's final lifecycle decision requests known state rather than a fresh start.
  • Pi's first command segment is conversational and contains no lexical user-authored session control.

Resume-intent launches include eligible restores, dormant or closed-session reopens, qualified mailbox wakes, and Loop deliveries. A Loop deliberately requests resume even on a cold spawn; Pi creates a new persisted session when no cwd match exists. Fresh creates, default or explicit fresh restarts, and an orchestrator's final fresh override leave the configured command unchanged.

Configured command Eligible known-state runtime command
pi --model x pi --continue --model x
cmd.exe /C "pi --model x&&echo done" cmd.exe /C "pi --continue --model x&&echo done"

AC changes only the runtime argv. It does not rewrite or persist the configured recipe, and a second application sees the injected selector and adds nothing. Pi then selects its most recent session for the current working directory and effective session directory. If no matching session exists, Pi creates a new persisted session.

User options and non-conversation commands win

Pi option and subcommand matching is case-sensitive. AC leaves a known-state command unchanged in either case below:

  • The first Pi argument is a management command: install, remove, uninstall, update, list, or config.
  • Pi's first command segment contains --help, -h, --version, -v, --export, or --list-models. The conservative --export=... and --list-models=... forms also veto injection.

AC then checks Pi's first command segment lexically for an explicit session selector or disabler. Whole-token -c and -r veto injection. The exact long options --continue, --resume, --session, --session-id, --fork, and --no-session also veto it, as do their --name=value forms. A selector-looking decoded token anywhere in that segment vetoes, even when it appears as another option's value. Short-option bundles and prefix lookalikes do not match. Selectors in a later compound segment do not control the first Pi command.

Conversational --print/-p, JSON, and RPC modes remain eligible for known-state continuation.

Session directories

Pi 0.80.10 accepts the separated spelling --session-dir <dir>. This option is not a session selector, so an eligible launch receives --continue and preserves the directory and value:

pi --session-dir ./state
pi --continue --session-dir ./state

AC also distinguishes --session-dir=<dir> from --session and applies the ordinary injection policy. It preserves that joined spelling apart from the one insertion, but Pi 0.80.10 rejects the joined form as an unknown option. Use the separated spelling.

No AC-side Pi state probe or fallback

AC does not inspect ~/.pi, ~/.pi/agent/, PI_CODING_AGENT_SESSION_DIR, a --session-dir path, settings, or session headers. A Pi command containing --provider claude or a claude-* model also does not run AC's Claude projects-directory probe. Pi owns cwd matching and storage errors.

If Pi cannot continue because of its version, configuration, permissions, storage, or session data, its normal child output reports the error. AC does not remove --continue, retry without it, or launch a second process. Pi 0.80.10 is the verified compatibility target; older versions that lack --continue fail visibly.

Pi integration limits

  • Telegram uses the generic PTY reader for Pi. AC has no Pi-specific JSONL transcript reader.
  • Pi has no Pi-specific config-seed convention or factory seed. The generic config-seed feature still works when you explicitly configure a destination.
  • AC does not copy Pi credentials or state into containers, map host ~/.pi/agent/, translate PI_CODING_AGENT_SESSION_DIR, or provision --session-dir paths.
  • Generated auto-self-clear instructions, explicit-Enter submission, and mailbox logical clear use the separate exact-stem direct-shell capability above. An eligible direct Pi shell receives them when settings allow; tuned outer-cmd Pi auto-resume shapes do not. Pi compact remains unsupported.

Profiles: launch variants per coding agent

Each coding agent can have several profiles (lettered launch variants: a cheap one, a max-effort one, an isolated-config one). A profile adds parameters and env vars on top of the agent's base command, and you assign one per agent or per session. This is a separate feature from the tuned CodingAgentKind integration above. See Coding Agent Profiles.

Role-template picker

When you create a new agent through the UI you can pick a role template. The picker shows two sources:

  1. Agency templates — read from the validated offline cache at <config-dir>/agency-agents_templates, refreshed only by agency-templates update.
  2. Local templates — read from <config-dir>/agent-templates/<folder>/ (override the path via settings.agentTemplatesPath).

Each template provides metadata (name, description, category, accent color) and a markdown role body. AC writes the body into the new agent's Role.md; the coding-agent role file (CLAUDE.md or AGENTS.md) is materialized from Role.md plus AC context at launch.

AC's role-template picker can use a downloaded cache of @msitarzewski/agency-agents. If you author a new role and want it discoverable in AC by default, submit it upstream to the agency-agents catalog, then refresh the cache with agency-templates update.

Adding a custom coding agent

To make AC recognise a new CLI (e.g. a custom wrapper) under the Coding Agents dropdown:

  1. Open Settings → Coding Agents → Add agent.
  2. Fill in id, label, command, and accent color.
  3. Save.

The new entry appears in the launcher dropdown immediately. AC spawns the configured command as-is unless the launch matches a tuned integration. Claude and Codex retain their legacy prefix-wrapper behavior; Antigravity matches exact stems. Pi tuning requires the exact supported command position described above; naming a wrapper or custom row my-pi does not enable Pi resume behavior.

For deeper integration (a new CodingAgentKind with its own resume tokens and idle tuning), you need to add a variant to src-tauri/src/session/profile.rs and rebuild. OpenCode already runs through the custom-agent steps above; its first-class tuned integration is tracked on the roadmap (#315) as the canonical example of how a new CodingAgentKind is added.

"Profile" here does not mean the profile matrix. A tuned CodingAgentKind is how AC drives one CLI (resume tokens, idle tuning). The lettered launch variants (A/B/C) are a separate feature: see Coding Agent Profiles.

Authentication and CLI state

AC does not store coding-agent credentials of its own. Each CLI manages its credentials and state on the host:

CLI Host-managed state
Claude Code ~/.claude/
Codex ~/.codex/
Pi Coding Agent ~/.pi/agent/

Under the local-process runtime, Pi auto-resume never reads, copies, or writes those host credentials or live state. The separate generic config-seed feature can copy a user-configured template into a replica, but Pi has no Pi-specific seed convention or factory seed.

Under the Container runtime there is one deliberate exception, on by default. AC copies the Claude Code host credential file (~/.claude/.credentials.json) into the replica config dir so the container starts signed in, and deletes it when the session stops. Claude Code is the only supported copy-in provider today. AC does not copy or provision Pi state or credentials. The Claude copy puts a full-account token in plaintext inside the project tree and is governed by the containerCredentialsFromHost setting. Read Container coding agents and Security model before you rely on it.

See also