# ACP (Agent Client Protocol): что это и как работает

> **ACP (Agent Client Protocol)** — это открытый протокол, по которому редактор кода общается с ИИ-агентом для программирования. Редактор запускает агента как отдельный процесс и обменивается с ним сообщениями JSON-RPC, а сам агент не привязан к конкретной среде разработки. ACP называют «LSP для coding-агентов»: так же, как один языковой сервер работает в разных редакторах, один ACP-агент работает в любом редакторе с поддержкой протокола.

Протокол придумали в Zed, затем к нему присоединилась JetBrains: проектом совместно управляют две компании. По состоянию на 31.10.2026 стабильной остаётся версия v1. Lead Maintainer от JetBrains с февраля 2026 года — Sergey Ignatov, от Zed — Ben Brandt.

## Что это и зачем {#chto-eto}

Раньше каждый редактор писал отдельную интеграцию под каждого агента, а агент делал отдельный интерфейс под каждый редактор. ACP заменяет это одной общей схемой: агент реализует протокол один раз, редактор тоже один раз, и любая пара работает. Для разработчика это значит, что выбор агента не привязывает его к редактору, и наоборот.

Роли в протоколе:

- **Клиент** — редактор или другое приложение с интерфейсом. Он показывает диалог, запрашивает у пользователя разрешения и даёт агенту доступ к рабочей среде.
- **Агент** — программа, которая с помощью модели правит код. Обычно её запускает сам клиент как подпроцесс.

## Как это работает {#kak-rabotaet}

Для локальных агентов используется транспорт stdio. Клиент запускает агента как подпроцесс, пишет JSON-RPC-сообщения в его stdin и читает ответы из stdout. Сообщения разделены переводом строки. Удалённые агенты по HTTP или WebSocket пока в разработке: транспорт на Streamable HTTP описан в RFD и не вошёл в стабильную спецификацию.

Типичный сеанс выглядит так:

1. `initialize` — клиент и агент договариваются о версии протокола и возможностях.
2. `session/new` (или `session/load`, чтобы продолжить прошлую сессию) — создаётся сессия. Одно соединение может держать несколько сессий.
3. `session/prompt` — клиент отправляет запрос пользователя.
4. Пока агент работает, он присылает уведомления `session/update`: фрагменты ответа, план, вызовы инструментов, диффы. Если нужно действие с последствиями, агент вызывает `session/request_permission`, и редактор спрашивает пользователя.
5. `session/cancel` прерывает работу. Ход завершается ответом на `session/prompt` с причиной остановки.

Тексты в протоколе передаются в Markdown, а многие типы данных заимствованы из MCP.

В документации уже описана и версия v2 («consolidation release»): она меняет жизненный цикл запроса и убирает часть клиентских API. Авторы рекомендуют реализациям поддерживать v1 и v2 одновременно, пока v2 не стабилизируется.

## Чем отличается от MCP и LSP {#otlichiya}

| Протокол | Между кем | Что передаёт |
|---|---|---|
| ACP | редактор ↔ coding-агент | диалог, план, диффы, запросы разрешений |
| [MCP](/pages/mcp-model-context-protocol) | агент ↔ инструменты и источники данных | вызовы инструментов, ресурсы, промпты |
| LSP | редактор ↔ языковой сервер | автодополнение, диагностика, переходы по коду |
| Agent2Agent (A2A) | агент ↔ другой агент | делегирование задач между независимыми агентами |

ACP и MCP не конкурируют, а работают вместе. Редактор передаёт агенту список настроенных пользователем MCP-серверов, и агент подключается к ним напрямую. Подробнее о том, что такое [агент](/pages/ai-agent) и его [обвязка](/pages/agent-harness), — в соседних статьях глоссария.

## Какие клиенты и агенты поддерживают ACP {#ekosistema}

**Клиенты.** Родной клиент — Zed. JetBrains поддерживает ACP в AI Assistant (в документации JetBrains версия 2026.2) и в своём приложении Air. Для Neovim есть плагины: CodeCompanion, avante.nvim, agentic.nvim и hermes.nvim, а для VS Code — несколько сторонних расширений. Протокол поддерживают также Emacs (agent-shell.el), Sublime Text, Qt Creator и Obsidian. Актуальный список — на странице Clients сайта протокола.

**Агенты.** На странице Agents сайта протокола перечислено 49 агентов. Среди них Claude Agent (через адаптер), Codex CLI (через адаптер), Gemini CLI, Kimi CLI, Qwen Code, OpenCode, Goose, Cline, Cursor, GitHub Copilot, Junie, OpenHands и Pi. Часть агентов поддерживает ACP напрямую, часть работает через адаптер. Для простой установки есть ACP Registry, где собраны агенты с поддержкой аутентификации.

## Связь с RouterAI {#routerai}

В ACP-схеме редактор не выбирает модель за агента. Провайдер, Base URL, ключ и модель — это настройки самого агента, а у Zed об этом сказано прямо: ключ, введённый для встроенного Zed Agent, не настраивает внешних агентов. Поэтому подключить RouterAI к ACP-агенту значит настроить его так же, как при запуске из терминала:

| Агент | Как подключить RouterAI |
|---|---|
| Claude Agent | Anthropic Messages API, Base URL `https://routerai.ru/api`: [гайд по Claude Code](/pages/vibe-coding-claude-code) |
| Codex | настройки провайдера самого Codex: [гайд по Codex](/pages/vibe-coding-codex) |
| Встроенный агент Zed | `openai_compatible` в `settings.json`: [гайд по Zed](/pages/vibe-coding-zed-dev) |
| Pi | [гайд по Pi](/pages/vibe-coding-pi) |

Модели берите из [каталога RouterAI](/models). Для адаптера Claude подходят модели семейства `anthropic/*`, например `anthropic/claude-sonnet-5.5` для основной работы и `anthropic/claude-haiku-5.5` для быстрых задач. RouterAI работает из России без VPN, оплата в рублях.

## Пример: свой ACP-агент в Zed {#primer-zed}

В Zed агентов ставят из ACP Registry (Agent Settings → External Agents → Add Agent → Install from Registry). Агента, которого нет в реестре, добавляют вручную: Add Agent → Add Custom Agent. Zed открывает `settings.json` с записью в `agent_servers`. Пример для адаптера Claude с RouterAI:

```json
{
  "agent_servers": {
    "Claude (RouterAI)": {
      "type": "custom",
      "command": "npx",
      "args": ["-y", "@agentclientprotocol/claude-agent-acp"],
      "env": {
        "ANTHROPIC_BASE_URL": "https://routerai.ru/api",
        "ANTHROPIC_AUTH_TOKEN": "sk-xxxxxxxxxxxxxxxx",
        "ANTHROPIC_API_KEY": "",
        "ANTHROPIC_MODEL": "anthropic/claude-sonnet-5.5"
      }
    }
  }
}
```

Поля `type`, `command`, `args` и `env` описаны в документации Zed. Переменные `ANTHROPIC_*` — те же, что использует Claude Code в [нашем гайде](/pages/vibe-coding-claude-code). Мы проверили такой запуск вручную вне Zed: адаптер с этими переменными прошёл `initialize` и `session/new`, ответил на `session/prompt` и в отчёте об использовании назвал модель `anthropic/claude-sonnet-5.5`, то есть запрос ушёл через RouterAI. Ключ в `settings.json` хранится открытым текстом, поэтому не коммитьте этот файл в репозиторий.

Если агент в Zed ведёт себя странно, откройте журнал сообщений командой `dev: open acp logs` из палитры команд. В JetBrains похожую запись добавляют в файл `~/.jetbrains/acp.json` (раздел `agent_servers` с полями `command`, `args`, `env`).

## Что почитать {#chto-pochitat}

- [Agent Client Protocol](https://agentclientprotocol.com) — спецификация, списки агентов и клиентов
- [Zed: ACP](https://zed.dev/acp) — страница протокола на сайте Zed
- [Zed: External Agents](https://zed.dev/docs/ai/external-agents) — установка и настройка внешних агентов
- [JetBrains: ACP в AI Assistant](https://www.jetbrains.com/help/ai-assistant/acp.html)
- [MCP (Model Context Protocol)](/pages/mcp-model-context-protocol) — протокол агента с инструментами
