Documentation
Reference
Agents and capabilities
What each coding agent can do through Helmlane, how to sign it in, and how any ACP agent or SDK plugin joins — generated from the capability matrix the apps themselves use.
How to read this
Every agent keeps its own conversations and its own strengths, so the controls differ from one to the next. Helmlane shows a control only when that agent supports it on that computer — it never renders a button that would fail when you tap it.
- Supported. Proven and on.
- Partly supported. On, with the caveat noted.
- Awaiting verification. Off until it is proven.
- Not supported. The note says what to do instead.
Some things work everywhere because Helmlane provides them itself: Handoff to another agent, the hosted Fork of a chat (wherever Follow up works), the terminal, tasks, git and previews.
At a glance
| Capability | Cursor | Codex | Claude Code | Claude Desktop | OpenCode | Gemini CLI | Antigravity CLI | Antigravity IDE | ZCode | Muse CLI | Amp | Aider |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Read history | Supported: IDE composers + transcripts; cursor-agent chats listed from its own store | Supported: shared ~/.codex store: app, CLI and IDE threads | Supported: ~/.claude/projects JSONL DAG (excludes Desktop-marked sessions) | Supported: Desktop session index + Desktop-marked transcripts; cloud chats not exposed | Supported: shared OpenCode history | Supported: ~/.gemini/tmp JSONL | Supported: ~/.gemini SQLite+JSONL | Supported: IDE SQLite+JSONL | Supported: SQLite index; app-server only for already-active sessions | Supported: MSP session/list + view/page | Partly supported: threads Helmlane ran here, from its own recording of the stream | Partly supported: chats Helmlane started, from their own Aider history files |
| Start chats | Supported: in the running Cursor app (helmlane-bridge); refused when no window has the project open | Supported: CLI app-server (same binary, config and account as the app) | Supported | Partly supported: drives the app via the Helmlane Desktop Driver (Accessibility); asks on the Mac while in use; folder must be a sidebar project | Supported: server + project handoff when Desktop is installed | Supported | Supported: agy -p | Partly supported: IDE's own agent via the Helmlane bridge (IDE 2.5+) | Supported: session/create | Supported: MSP session/start | Supported: amp -x --stream-json --stream-json-input | Supported: aider --message-file on a Helmlane-owned history |
| Follow up | Supported: IDE chats in the app; cursor-agent chats on the real CLI; legacy agent-* on @cursor/sdk | Supported: app threads inside the running app (IPC); others on the CLI app-server | Supported: claude --resume on a resident session | Partly supported: drives the app on a sidebar session (not archived, title unique in its project group); asks on the Mac while in use | Supported: server + project handoff when Desktop is installed | Supported: gemini --resume | Supported: agy --conversation | Partly supported: Helmlane bridge (IDE 2.5+) | Supported: session/send | Supported: MSP session/resume + turn/start | Supported: amp threads continue <id> -x | Supported: --restore-chat-history |
| Live output | Supported: IDE: persisted-bubble tail; CLI: stream-json | Supported: app-server notifications or the app owner stream | Supported: stream-json | Partly supported: app-written transcript, per content block | Supported: shared-server SSE | Supported: stream-json | Supported: stream-json | Partly supported: native transcript + engine run state | Supported: NDJSON stream | Supported: MSP view items (text, reasoning, tools, subagents) | Partly supported: message-granular stream-json; no token deltas | Partly supported: reply-granular from the history file |
| Stop | Supported: composer.cancelChat / SIGINT | Supported: turn/interrupt, or through the app owner | Supported: control-channel interrupt; session survives | Partly supported: presses the app's Stop control | Supported | Supported: process SIGINT | Supported: process SIGINT/TERM | Partly supported: engine cancel via the bridge | Supported: session/stop | Supported: MSP turn/interrupt | Supported: process SIGINT | Supported: SIGINT, then SIGTERM |
| Steer mid-run | Partly supported: legacy @cursor/sdk chats only; the app and cursor-agent -p take no mid-run input | Supported: turn/steer, or through the app owner | Partly supported: interrupt and resend; no mid-turn fold in headless mode (measured across tool boundaries) | Not supported: no Desktop mid-turn surface; the app queues follow-ups | Not supported: not in the server API | Not supported | Not supported | Not supported | Not supported: ZCode 0.16.5 rejects session/send while a turn is active | Supported: MSP turn/steer with an expectedTurnId guard | Awaiting verification: steer: true input documented, unproven live | Not supported: one message per process |
| Approvals and questions | Awaiting verification: verify: IDE approvals via Cursor's Accept/Reject commands; questions shown, answered in Cursor | Supported: app-server approvals, or answered through the app owner | Supported: can_use_tool over the control channel (needs --permission-prompt-tool stdio) | Partly supported: permission/question cards answered with the card's buttons (live prompt not yet exercised) | Supported: server permissions and questions (question.asked → POST /question/:id/reply; OpenCode 1.18.26) | Not supported: approval modes are configuration | Not supported: agy cannot surface approvals headless; permission modes choose the posture | Partly supported: command/file/permission approvals + questions; deploy targets stay in the IDE | Supported: PermissionRequested / approvals | Supported: MSP approval/request + userInput/request | Not supported: no approval surface in execute mode; denials reported | Not supported: --yes-always; shell commands always declined |
| Queue | Supported | Supported | Supported: app-level | Partly supported: Claude Desktop's own queue | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: native session_input + app-level | Supported: app-level | Supported: app-level | Supported: app-level |
| Choose a model | Supported: IDE picker catalog; per-chat model on create and follow-up | Supported: model/effort/speed/mode; app threads otherwise keep app settings | Supported: Sonnet/Opus/Fable/Haiku aliases + 3P | Partly supported: model/effort/permission mode via the app's pickers | Supported: configured providers only | Supported | Supported: agy models slugs | Partly supported: the IDE's own model list | Supported: GLM series + custom providers | Supported: local model catalog + MSP model/list | Not supported: Amp routes models by agent mode, chosen in Amp | Supported: Aider default + pulled Ollama models (ollama_chat/) |
| Usage and cost | Supported | Supported: thread/tokenUsage/updated; not streamed for app-run turns | Supported: result tokens/cost + real context window | Partly supported: app usage meter when the session is on screen | Supported: native message telemetry | Supported: headless statistics | Supported: stream-json tokens | Not supported | Supported: SQLite model_usage + usage/stats | Supported: MSP session/tokenUsage + real context window | Partly supported: per-response tokens attributed to the agent mode; no price | Supported: exact per-response tokens from the analytics log; Aider price when known |
| Rename | Partly supported: IDE chats via composer.updateTitle; others Helmlane-only | Supported | Supported: app-level + native title ingestion | Partly supported: app session header; a title already used in the project group is refused | Supported | Supported: app-level | Partly supported: native title read/app-level | Partly supported: title mirrored into the IDE when running | Supported: app-level | Supported: MSP session/rename + app-level title | Supported: app-level | Supported: app-level |
| Archive | Partly supported: desktop mirroring only | Supported | Supported: app-level | Partly supported: archives through the app; unarchive stays in the app | Supported: app-level (native delete is not archive) | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level |
| Pin | Partly supported: desktop mirroring only | Supported | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level | Supported: app-level |
| Native fork | Not supported: Handoff available | Supported | Not supported: native identity requires the first prompt; Handoff available | Not supported: Handoff available | Supported | Not supported | Not supported: Handoff available | Not supported | Supported: session/fork | Supported: MSP session/fork with durable provenance | Not supported: Handoff available | Not supported: Handoff available |
| Approve for this chat | Not supported: not proven: Cursor prompts carry no session scope | Supported: exact read-only commands (the allowlist below) in their folder, approved by Helmlane each time (a plain accept, never acceptForSession); file changes, typing into a running command and network prompts never offered | Supported: exact read-only Bash commands (the allowlist below), in-folder edits (when Claude offers accept-edits), one WebFetch domain, WebSearch, one MCP tool, approved by Helmlane each time (a plain allow, never a Claude rule or settings file) | Not supported: prompts are answered in the app window | Not supported: always grants the whole project, not one chat | Not supported: no interactions | Not supported: no session-scoped answer | Not supported: no session-scoped answer | Not supported: not proven | Not supported: host session choices exist; no recorded fixture proves their scope yet | Not supported | Not supported |
| Attach images | Supported | Supported | Supported | Not yet | Supported | Not yet | Not yet | Supported | Not yet | Supported | Supported | Not yet |
| Sign in from phone | Not supported | Supported | Supported | Not supported | Not supported | Not supported | Not supported | Not supported | Not supported | Supported | Not supported | Not supported |
Generated from the capability matrix, the same table the apps render from.
Cursor
IDE and CLI agent · cursor
Cursor's editor composers through a bridge in the running Cursor app, plus `cursor-agent` for CLI chats.
Sign in
On the computer, as the user the Helmlane agent runs as:
Sign in to the Cursor app on the computer. (cursor-agent login signs in only the CLI, not the app.)
Sign-in cannot be finished from a phone. sign in from the Cursor app (cursor-agent login signs in the CLI, not the IDE)
How Helmlane knows
- Signed-in check
- the IDE's own sign-in in its state store (
cursorAuth/*tokens; a refresh token means the IDE renews its own access) - Shown as unknown when
- the state store cannot be read
- Engine
- running Cursor app via helmlane-bridge + storage reader;
cursor-agentfor CLI chats;@cursor/sdkfor legacyagent-*chats - Runs as
- GUI-owned app runs + supervised
cursor-agent -p
Available (13)
- Read historyIDE composers + transcripts;
cursor-agentchats listed from its own store - Start chatsin the running Cursor app (helmlane-bridge); refused when no window has the project open
- Follow upIDE chats in the app;
cursor-agentchats on the real CLI; legacyagent-*on@cursor/sdk - Live outputIDE: persisted-bubble tail; CLI:
stream-json - Stop
composer.cancelChat/ SIGINT - Steer mid-run · partlylegacy
@cursor/sdkchats only; the app andcursor-agent -ptake no mid-run input - Queue
- Choose a modelIDE picker catalog; per-chat model on create and follow-up
- Usage and cost
- Rename · partlyIDE chats via
composer.updateTitle; others Helmlane-only - Archive · partlydesktop mirroring only
- Pin · partlydesktop mirroring only
- Attach images
Not available (3)
- Approvals and questions · awaiting verificationverify: IDE approvals via Cursor's Accept/Reject commands; questions shown, answered in Cursor
- Native forkHandoff available
- Approve for this chatnot proven: Cursor prompts carry no session scope
Codex
CLI agent · codex
OpenAI Codex through its app-server, with native approvals, steering and forks.
Sign in
On the computer, as the user the Helmlane agent runs as:
Run codex login in a terminal on the computer, or start a device-code sign-in from your phone.
Finish an expired sign-in from your phone. codex login --device-auth — device code
How Helmlane knows
- Signed-in check
- app-server
account/read(requiresOpenaiAuthwith no account = signed out) - Shown as unknown when
- app-server not started
- Engine
codex app-server(JSON-RPC, app-bundled CLI) + Codex app IPC router for threads the app owns- Runs as
- supervised child process + follower of the running Codex app
Available (16)
- Read historyshared ~/.codex store: app, CLI and IDE threads
- Start chatsCLI app-server (same binary, config and account as the app)
- Follow upapp threads inside the running app (IPC); others on the CLI app-server
- Live outputapp-server notifications or the app owner stream
- Stop
turn/interrupt, or through the app owner - Steer mid-run
turn/steer, or through the app owner - Approvals and questionsapp-server approvals, or answered through the app owner
- Queue
- Choose a modelmodel/effort/speed/mode; app threads otherwise keep app settings
- Usage and cost
thread/tokenUsage/updated; not streamed for app-run turns - Rename
- Archive
- Pin
- Native fork
- Approve for this chatexact read-only commands (the allowlist below) in their folder, approved by Helmlane each time (a plain
accept, neveracceptForSession); file changes, typing into a running command and network prompts never offered - Attach images
Not available (0)
Claude Code
CLI agent · claude
Anthropic's Claude Code, one resident process per conversation with a two-way control channel for approvals.
Sign in
On the computer, as the user the Helmlane agent runs as:
Run claude auth login in a terminal on the computer, or start the sign-in from your phone: open the link it shows, then enter the code the page gives you back in Helmlane.
Finish an expired sign-in from your phone. claude auth login — login URL; the page's code is relayed back from the phone (codeEntry)
How Helmlane knows
- Signed-in check
claude auth status --json- Shown as unknown when
- output unparseable
- Engine
- Claude CLI (
claude -p stream-json+ bidirectional control channel,CLAUDE_CODE_ENTRYPOINT=helmlane) + on-disk JSONL DAG reader - Runs as
- one resident supervised process per conversation
Available (15)
- Read history~/.claude/projects JSONL DAG (excludes Desktop-marked sessions)
- Start chats
- Follow up
claude --resumeon a resident session - Live output
stream-json - Stopcontrol-channel
interrupt; session survives - Steer mid-run · partlyinterrupt and resend; no mid-turn fold in headless mode (measured across tool boundaries)
- Approvals and questions
can_use_toolover the control channel (needs--permission-prompt-tool stdio) - Queueapp-level
- Choose a modelSonnet/Opus/Fable/Haiku aliases + 3P
- Usage and cost
resulttokens/cost + real context window - Renameapp-level + native title ingestion
- Archiveapp-level
- Pinapp-level
- Approve for this chatexact read-only Bash commands (the allowlist below), in-folder edits (when Claude offers accept-edits), one WebFetch domain, WebSearch, one MCP tool, approved by Helmlane each time (a plain
allow, never a Claude rule or settings file) - Attach images
Not available (1)
- Native forknative identity requires the first prompt; Handoff available
Claude Desktop
Desktop app · claude-desktop
The installed Claude Desktop app, driven through macOS Accessibility by the Helmlane Desktop Driver, with its own engine, account and settings. Cloud-only Claude chats are not visible.
Sign in
On the computer, as the user the Helmlane agent runs as:
Sign in from the Claude Desktop app on the Mac. (claude auth login signs in the Claude Code CLI, not the app.)
Allow “Helmlane Desktop Driver” once in System Settings → Privacy & Security → Accessibility.
Sign-in cannot be finished from a phone. sign in from Claude Desktop (claude auth login signs in the CLI, not the app)
How Helmlane knows
- Signed-in check
- None available
- Shown as unknown when
- always: the app keeps its sign-in and the Desktop Driver exposes no query
- Engine
- the installed app (
com.anthropic.claudefordesktop) driven through macOS Accessibility by the signed Helmlane Desktop Driver + Desktop's session index + Desktop-marked JSONL transcripts - Runs as
- GUI-owned; driver app + transcript watcher
Available (12)
- Read historyDesktop session index + Desktop-marked transcripts; cloud chats not exposed
- Start chats · partlydrives the app via the Helmlane Desktop Driver (Accessibility); asks on the Mac while in use; folder must be a sidebar project
- Follow up · partlydrives the app on a sidebar session (not archived, title unique in its project group); asks on the Mac while in use
- Live output · partlyapp-written transcript, per content block
- Stop · partlypresses the app's Stop control
- Approvals and questions · partlypermission/question cards answered with the card's buttons (live prompt not yet exercised)
- Queue · partlyClaude Desktop's own queue
- Choose a model · partlymodel/effort/permission mode via the app's pickers
- Usage and cost · partlyapp usage meter when the session is on screen
- Rename · partlyapp session header; a title already used in the project group is refused
- Archive · partlyarchives through the app; unarchive stays in the app
- Pinapp-level
Not available (4)
- Steer mid-runno Desktop mid-turn surface; the app queues follow-ups
- Native forkHandoff available
- Approve for this chatprompts are answered in the app window
- Attach imagesNot delivered to this agent yet; the composer says so instead of dropping the image.
OpenCode
CLI and desktop app · opencode
OpenCode's own server API, with the model providers you configured in OpenCode.
Sign in
On the computer, as the user the Helmlane agent runs as:
Run opencode auth login on the computer and pick a model provider.
Sign-in cannot be finished from a phone. opencode auth login needs an interactive provider pick
How Helmlane knows
- Signed-in check
GET /provideron its own server: theconnectedlist (0 = nothing signed in, soexpired; only Helmlane's injected Ollama =unknown)- Shown as unknown when
- server unreachable (no state reported)
- Engine
opencode serveHTTP API (published OpenAPI) + official JS/TS SDK, plus optional signed app discovery +opencode://open-projecthandoff- Runs as
- supervised
opencode serveprocess (+ GUI handoff when the Desktop app is installed)
Available (14)
- Read historyshared OpenCode history
- Start chatsserver + project handoff when Desktop is installed
- Follow upserver + project handoff when Desktop is installed
- Live outputshared-server SSE
- Stop
- Approvals and questionsserver permissions and questions (
question.asked→POST /question/:id/reply; OpenCode 1.18.26) - Queueapp-level
- Choose a modelconfigured providers only
- Usage and costnative message telemetry
- Rename
- Archiveapp-level (native delete is not archive)
- Pinapp-level
- Native fork
- Attach images
Not available (2)
- Steer mid-runnot in the server API
- Approve for this chat
alwaysgrants the whole project, not one chat
Gemini CLI
CLI agent · gemini
Google's Gemini CLI in non-interactive mode, resuming its own saved chats.
Sign in
On the computer, as the user the Helmlane agent runs as:
Run gemini in a terminal on the computer and finish the sign-in it offers, or provide an API key in the environment or ~/.gemini/.env.
Sign-in cannot be finished from a phone. no login subcommand: the paste-back flow (NO_BROWSER) only runs by starting a session, which would spend a request and write history
How Helmlane knows
- Signed-in check
- API key (env,
~/.gemini/.env),oauth_creds.jsonrefresh token, gcloud ADC, settings selection (an API-key selection with no key, or no selection and no credential, =expired) - Shown as unknown when
- personal-OAuth selection without the file (keychain), Vertex/Cloud Shell
- Engine
gemini -pnon-interactive mode (--resume,--output-format stream-json) + disk reader- Runs as
- supervised CLI process (
stream-jsonstdout)
Available (11)
- Read history~/.gemini/tmp JSONL
- Start chats
- Follow up
gemini --resume - Live output
stream-json - Stopprocess SIGINT
- Queueapp-level
- Choose a model
- Usage and costheadless statistics
- Renameapp-level
- Archiveapp-level
- Pinapp-level
Not available (5)
- Steer mid-run
- Approvals and questionsapproval modes are configuration
- Native fork
- Approve for this chatno interactions
- Attach imagesNot delivered to this agent yet; the composer says so instead of dropping the image.
Antigravity CLI
CLI agent · antigravity-cli
The Antigravity CLI (`agy`) in headless mode, reading its own transcripts.
Sign in
On the computer, as the user the Helmlane agent runs as:
Sign in from Antigravity on the computer. The CLI has no status command, so Helmlane shows its sign-in state as unknown unless a keyless credential is in the environment.
Sign-in cannot be finished from a phone. sign in from Antigravity
How Helmlane knows
- Signed-in check
- None available
- Shown as unknown when
- always:
agyhas no status command, its token store is undocumented (possibly keychain), andGOOGLE_API_KEY/GOOGLE_APPLICATION_CREDENTIALSare not documented as honoured byagy1.x (SPIKE.md §4 predates §7, which was never run live), so they are not counted - Engine
- Antigravity CLI (
agy) headless / Language Server + SQLite/JSONL transcripts; MCP for tools - Runs as
- supervised CLI process (
stream-jsonstdout)
Available (11)
- Read history~/.gemini SQLite+JSONL
- Start chats
agy -p - Follow up
agy --conversation - Live output
stream-json - Stopprocess SIGINT/TERM
- Queueapp-level
- Choose a model
agy modelsslugs - Usage and cost
stream-jsontokens - Rename · partlynative title read/app-level
- Archiveapp-level
- Pinapp-level
Not available (5)
- Steer mid-run
- Approvals and questionsagy cannot surface approvals headless; permission modes choose the posture
- Native forkHandoff available
- Approve for this chatno session-scoped answer
- Attach imagesNot delivered to this agent yet; the composer says so instead of dropping the image.
Antigravity IDE
IDE · antigravity-ide
Conversations in the Antigravity IDE, observed from its transcripts. Stopping, approvals and model choice stay in the IDE.
Sign in
On the computer, as the user the Helmlane agent runs as:
Sign in inside the Antigravity IDE.
Sign-in cannot be finished from a phone. sign in from the IDE
How Helmlane knows
- Signed-in check
- None available
- Shown as unknown when
- always: sign-in lives inside the IDE; neither the launcher nor the agent bridge exposes an auth query
- Engine
helmlane-antigravity-bridgeextension → the IDE's own language server (Connect RPC) + SQLite/JSONL transcripts- Runs as
- GUI-owned process; bridge over an owner-only Unix socket
Available (12)
- Read historyIDE SQLite+JSONL
- Start chats · partlyIDE's own agent via the Helmlane bridge (IDE 2.5+)
- Follow up · partlyHelmlane bridge (IDE 2.5+)
- Live output · partlynative transcript + engine run state
- Stop · partlyengine cancel via the bridge
- Approvals and questions · partlycommand/file/permission approvals + questions; deploy targets stay in the IDE
- Queueapp-level
- Choose a model · partlythe IDE's own model list
- Rename · partlytitle mirrored into the IDE when running
- Archiveapp-level
- Pinapp-level
- Attach images
Not available (4)
- Steer mid-run
- Usage and cost
- Native fork
- Approve for this chatno session-scoped answer
ZCode
Coding agent · zcode
ZCode through its app-server protocol, with native approvals, queueing and forks.
Sign in
On the computer, as the user the Helmlane agent runs as:
Configure a model provider in the ZCode app on the computer.
Sign-in cannot be finished from a phone. configure a provider in the app
How Helmlane knows
- Signed-in check
- app-server
listModelsin a known workspace (models =authenticated, empty = no model provider configured =expired) - Shown as unknown when
- no refresh requested, no workspace to ask in, app-server not ready
- Engine
zcode app-server(JSON-RPC stdio protocol server) + SQLite reader (~/.zcode/cli/db/db.sqlite)- Runs as
- supervised child process
Available (13)
- Read historySQLite index; app-server only for already-active sessions
- Start chats
session/create - Follow up
session/send - Live outputNDJSON stream
- Stop
session/stop - Approvals and questions
PermissionRequested/ approvals - Queuenative
session_input+ app-level - Choose a modelGLM series + custom providers
- Usage and costSQLite
model_usage+usage/stats - Renameapp-level
- Archiveapp-level
- Pinapp-level
- Native fork
session/fork
Not available (3)
- Steer mid-runZCode 0.16.5 rejects
session/sendwhile a turn is active - Approve for this chatnot proven
- Attach imagesNot delivered to this agent yet; the composer says so instead of dropping the image.
Muse CLI
CLI agent · muse-cli
Muse CLI through its session host protocol, with steering, approvals and forks.
Sign in
On the computer, as the user the Helmlane agent runs as:
Run muse login on the computer, or set META_API_KEY.
Finish an expired sign-in from your phone. muse login — device code
How Helmlane knows
- Signed-in check
META_API_KEY, or the login record inmuse/auth.json(token itself in the keychain)- Shown as unknown when
- no store (older CLI)
- Engine
muse serve(MSP JSON-RPC session host over stdio) + on-disk model catalog;session.jsonlreader kept for read-only degradation and terminal liveness- Runs as
- supervised child process, one per sandbox posture
Available (15)
- Read historyMSP
session/list+view/page - Start chatsMSP
session/start - Follow upMSP
session/resume+turn/start - Live outputMSP view items (text, reasoning, tools, subagents)
- StopMSP
turn/interrupt - Steer mid-runMSP
turn/steerwith anexpectedTurnIdguard - Approvals and questionsMSP
approval/request+userInput/request - Queueapp-level
- Choose a modellocal model catalog + MSP
model/list - Usage and costMSP
session/tokenUsage+ real context window - RenameMSP
session/rename+ app-level title - Archiveapp-level
- Pinapp-level
- Native forkMSP
session/forkwith durable provenance - Attach images
Not available (1)
- Approve for this chathost session choices exist; no recorded fixture proves their scope yet
Amp
CLI agent · amp
Sourcegraph's Amp in execute mode, streaming JSON, with Helmlane keeping its own record of each run.
Sign in
On the computer, as the user the Helmlane agent runs as:
Create an access token in Amp's settings and set it as AMP_API_KEY for Helmlane on the computer, or run amp login there.
Sign-in cannot be finished from a phone. amp login is not documented as finishable elsewhere; sign in on the machine
How Helmlane knows
- Signed-in check
AMP_API_KEYholding a Settings access token (sgamp_…), the documented non-interactive credential- Shown as unknown when
- always otherwise: a saved
amp loginaccount is in an unpublished store, and Amp has no documented status command - Engine
amp --execute --stream-json --stream-json-input(Claude-Code-compatible JSONL) + Helmlane's own recording of each run's stream- Runs as
- supervised CLI process per run
Available (11)
- Read history · partlythreads Helmlane ran here, from its own recording of the stream
- Start chats
amp -x --stream-json --stream-json-input - Follow up
amp threads continue <id> -x - Live output · partlymessage-granular stream-json; no token deltas
- Stopprocess SIGINT
- Queueapp-level
- Usage and cost · partlyper-response tokens attributed to the agent mode; no price
- Renameapp-level
- Archiveapp-level
- Pinapp-level
- Attach images
Not available (5)
- Steer mid-run · awaiting verification
steer: trueinput documented, unproven live - Approvals and questionsno approval surface in execute mode; denials reported
- Choose a modelAmp routes models by agent mode, chosen in Amp
- Native forkHandoff available
- Approve for this chat
Aider
CLI agent · aider
Aider driven one message at a time over a chat history Helmlane owns, with your configured models or pulled Ollama models.
Sign in
On the computer, as the user the Helmlane agent runs as:
Nothing to sign in to: put model API keys in Aider's configuration on the computer, or pull a model with Ollama.
Sign-in cannot be finished from a phone. nothing to sign in to
Install AiderHow Helmlane knows
- Signed-in check
- — (no account; model keys live in Aider's configuration, local models need none)
- Shown as unknown when
- always
- Engine
aider --message-fileover a Helmlane-owned--chat-history-file, observed through that file and--analytics-log; pulled Ollama models asollama_chat/<name>- Runs as
- supervised CLI process per run
Available (11)
- Read history · partlychats Helmlane started, from their own Aider history files
- Start chats
aider --message-fileon a Helmlane-owned history - Follow up
--restore-chat-history - Live output · partlyreply-granular from the history file
- StopSIGINT, then SIGTERM
- Queueapp-level
- Choose a modelAider default + pulled Ollama models (
ollama_chat/) - Usage and costexact per-response tokens from the analytics log; Aider price when known
- Renameapp-level
- Archiveapp-level
- Pinapp-level
Not available (5)
- Steer mid-runone message per process
- Approvals and questions
--yes-always; shell commands always declined - Native forkHandoff available
- Approve for this chat
- Attach imagesNot delivered to this agent yet; the composer says so instead of dropping the image.
Any ACP agent
One adapter covers every agent that speaks theAgent Client Protocol. It appears in Helmlane as acp:<name>. Helmlane registers an agent from a reviewed launcher table when its binary is installed and its own--help names the ACP entry point:
| Agent | Command | Registered |
|---|---|---|
goose | goose acp | Automatically |
kimi | kimi acp | Automatically |
qwen | qwen --experimental-acp (or --acp) | Automatically |
gemini | gemini --experimental-acp (or --acp) | Opt-in — the built-in Gemini CLI covers it |
opencode | opencode acp | Opt-in — the built-in OpenCode covers it |
claude-code | claude-code-acp | Opt-in — the built-in Claude Code covers it |
codex | codex-acp | Opt-in — the built-in Codex covers it |
Add your own agents, opt in to a table entry, or turn one off by writing~/.helmlane/acp/agents.json on the computer. Helmlane reads it the next time it starts, keeps your choices, and deletes the file. Commands come only from that table and that file — never from anything an agent read or a webhook sent.
{
"agents": [
{ "launcher": "gemini" },
{
"slug": "my-agent",
"displayName": "My Agent",
"command": "/opt/tools/my-agent",
"args": ["--acp"]
}
],
"disabled": ["kimi"]
}| Signed-in check | session/new answering ACP auth_required |
| Shown as unknown | until a session has been attempted |
| Sign in from phone | Not supported: no reviewed login surface |
Sign in with the agent’s own command on the computer, as the user the Helmlane agent runs as.
Adapter SDK plugins
For agents that do not speak ACP, the adapter SDK (@helmlane/adapter-sdk) builds a plugin that appears asext:<publisher>/<name>. Install one by placing it in its own folder under ~/.helmlane/adapters/ with a manifest:
{
"id": "ext:acme/review-bot",
"entry": "dist/index.js"
}A plugin runs inside the Helmlane agent with its privileges, so the loader holds it to the same standard ssh holds ~/.ssh:
- the folder and entry file must belong to you and be writable by nobody else;
- the entry must stay inside its own folder after following links;
- the manifest and the adapter must agree on the id, and a plugin can never impersonate a built-in or an ACP agent;
- a plugin built for a newer Helmlane agent is refused instead of half-running.
A plugin that fails any check is reported with the reason and not loaded. Like ACP agents, a loaded plugin starts with every capability off until a conformance run proves it.
| Signed-in check | None: the SDK has no sign-in concept |
| Shown as unknown | always: the SDK has no login concept |
| Sign in from phone | Not supported |