Editors (ACP)

horon acp is an Agent Client Protocol adapter on stdio, backed by the same daemon as every other command. It serves protocol versions 1 and 2 and answers initialize with the highest version both sides support.

Registering the agent

Two values: the command and the argument acp.

{
  "agent_servers": {
    "horon agent": {
      "type": "custom",
      "command": "/absolute/path/to/horon",
      "args": ["acp"]
    }
  }
}

That is Zed’s settings.json. The ACP plugins for JetBrains, Neovim and VS Code take the same two values; the setting key differs per plugin.

Authentication

id Offered when What it does
horon-agent-credentials Always Checks whether the credentials of a [providers.<name>] profile can be used to call models

Register a profile with horon provider add. Even when the client advertises auth.terminal, there is only one method: this build has no login command for the editor to run in a terminal.

authenticate succeeds with {} when the daemon reports a usable model and returns -32000 when it does not; session/new returns -32000 in the same situation. An unknown methodId is -32602. logout is not advertised because there is no way to erase credentials.

Advertised capabilities

Item Value
loadSession true
promptCapabilities image: true, embeddedContext: true, audio: false
mcpCapabilities http: true, sse: true (stdio is always supported)
sessionCapabilities close, resume, list, delete, additionalDirectories

A method that calls an unadvertised capability is refused with -32601; so is an unknown request starting with _. Unknown notifications are ignored, and notifications never get a response. Any request sent before initialize is -32600. A protocolVersion that is missing or outside 0–65535 is -32602; 0 is in range but selects nothing, so it answers -32022 Unsupported protocol version with the supported list. Preparing for v2 takes an info object with a string name and version.

Version 2

v2 is additive for clients that negotiate it: session/prompt acknowledges with a messageId and progress arrives as state_update notifications, session/load becomes session/resume with replayFrom, authenticate/logout become auth/login/auth/logout, session/set_mode becomes session/set_config_option, v2 has no tool_call update (the first tool_call_update creates the call), and capability markers are objects instead of booleans. v2 answers protocolVersion: 2 and advertises no loadSession. v1 behaves exactly as before.

A connection can fall back to v1 only with [acp] protocol_v2 = false or HORON_AGENT_ACP_PROTOCOL_V2=0; a running horon acp has to be restarted for the change to apply.