The Agent Client Protocol Overview

February 1, 20262 minute read

With the explosion of AI coding agents—Claude Code, Gemini CLI, OpenCode, Goose, Codex CLI, we've entered an era where every major AI lab ships their own terminal-based coding assistant. But there is one problem. Each agent has its own events or outputs.

The Agent Client Protocol (ACP) is an an open standard abstracts the events and outputs of AI agents and provides a common interface for editors to interact with them. Similar to MCP but for agent to client (UI) communication.

ACP is a JSON-RPC 2.0 protocol with a simple premise:

  1. Clients (editors like Zed, JetBrains or Obsidian) manage the user environment
  2. Agents (Claude Code, Gemini CLI, OpenClaw (prev. Clawdbot)) Thinking and tool execution
  3. They communicate over stdio (agent runs as subprocess) or HTTP (remote agents)

acp

Protocol Events

MethodDirectionPurpose
initializeClient → AgentNegotiate protocol version & capabilities
session/newClient → AgentCreate new conversation session
session/loadClient → AgentResume existing session
session/promptClient → AgentSend user message
session/set_modeClient → AgentSwitch agent operating mode
fs/read_text_fileAgent → ClientRead file (includes unsaved edits)
fs/write_text_fileAgent → ClientWrite/create file
terminal/createAgent → ClientStart shell command
terminal/outputAgent → ClientGet command output
terminal/wait_for_exitAgent → ClientWait for command completion
terminal/killAgent → ClientTerminate running command
terminal/releaseAgent → ClientClean up terminal
session/request_permissionAgent → ClientRequest user approval for action

Notifications (One-Way)

NotificationDirectionPurpose
session/updateAgent → ClientStream progress, messages, tool calls
session/cancelClient → AgentAbort current operation

Session Update Types

Update TypeDescriptionContent
planAgent's execution planList of steps with status
agent_message_chunkStreamed text responseText content block
user_message_chunkEcho of user inputText content block
thought_message_chunkAgent's reasoningText content block
tool_callNew tool invocationID, title, kind, status
tool_call_updateTool progress/resultStatus change, content
available_commandsSlash commandsList of available commands
mode_changeMode switchNew mode info

Tool Call Status Flow

tool

Protocol Flow

Complete Lifecycle

protocol

Terminal Execution Flow

terminal

Permission Request Flow

permission