ACP — это Language Server Protocol для coding-агентов: редактор запускает агент подпроцессом и общается с ним по JSON-RPC. Разбираем, что внутри, кто поддерживает и как подключить свой агент.
Если у вас три редактора и пять coding-агентов, без общего протокола получается пятнадцать интеграций. Agent Client Protocol (ACP) сводит это к трём плюс пяти: клиент реализует одну сторону, агент — другую, и любая пара работает вместе. Ниже — как протокол устроен, чем отличается от MCP и A2A, кого он уже поддерживает и как подключить агент к ACP-клиенту на практике.
Agent Client Protocol стандартизует связку «редактор ↔ coding-агент». Идея та же, что у Language Server Protocol: раньше каждый редактор писал интеграцию под каждый язык, теперь пишет одну — под протокол. С агентами всё повторяется: Cursor, Zed, JetBrains, Neovim, Obsidian и десятки других клиентов иначе вынуждены поддерживать Claude Code, Codex, Gemini CLI, OpenCode и остальных по отдельности.
Протокол развивают Zed Industries и JetBrains, ядро написано на Rust и открыто под Apache-2.0. Спецификация живёт в двух ветках: стабильная v1 (последняя схема — v1.28.0 от 30 октября 2026 года) и черновик v2 с переработанным жизненным циклом промпта. У протокола есть библиотеки для Kotlin, Java, Python, Rust и TypeScript и отдельный набор тестов, которым проверяют реализацию агента.
Цикл простой: клиент поднимает агент как дочерний процесс, стороны обмениваются возможностями, затем открывается сессия и начинается ход промпта. На одно соединение можно открыть несколько сессий — это и есть «несколько параллельных задач в одном окне», а не маркетинговое обещание.
| Элемент протокола | Направление | Зачем нужен |
|---|---|---|
| initialize | клиент → агент | согласовать версию и набор возможностей |
| session/new · session/list | клиент → агент | сессии и их восстановление |
| session/prompt | клиент → агент | поставить задачу и получить поток ответа |
| tool call update | агент → клиент | показать, что именно выполняется, в реальном времени |
| request_permission | агент → клиент | подтверждение опасных действий |
| fs/read_text_file · terminal/create | агент → клиент | файлы и терминал руками клиента, а не в обход |
| session/cancel | клиент → агент | остановить работу без убийства процесса |
Важная деталь: файловую систему и терминал агенту даёт клиент. Агент не получает root в вашей системе «по умолчанию» — он просит клиент прочитать файл или запустить команду, а клиент может отказать или показать дифф. Это же место, где ломается безопасность: если клиент разрешает всё без вопросов, протокол не спасёт.
MCP при этом никуда не исчезает. Клиент передаёт агенту конфигурацию своих MCP-серверов, и агент подключается к ним напрямую — ACP лишь доставляет конфиг. Если редактор сам хочет выставить свои инструменты как MCP-сервер, он поднимает маленький прокси: гонять MCP и ACP по одному сокету не нужно.
Три протокола часто смешивают в одну кучу, хотя они закрывают разные оси. MCP — «агент ↔ инструменты и данные». ACP — «редактор ↔ агент». A2A — «агент ↔ агент», обмен задачами между независимыми системами. В рабочем стеке 2026 года они сосуществуют: клиент по ACP поднимает агента, агент по MCP берёт инструменты, а по A2A зовёт соседнего агента.
| Протокол | Что соединяет | Транспорт | Когда нужен |
|---|---|---|---|
| MCP | агент и инструменты/данные | JSON-RPC, stdio или HTTP | подключить базу, API, файлы |
| ACP | редактор и coding-агент | JSON-RPC поверх stdio | запускать разные агенты из одного клиента |
| A2A | агент и агент | HTTP, Agent Card | делегировать задачу другому сервису |
Список агентов уже не про экзотику: Claude Agent (через адаптер Zed), Codex CLI (через codex-acp), Gemini CLI, Cursor, GitHub Copilot (публичная превью), Goose, OpenCode, OpenHands, Cline, Qwen Code, Kimi CLI, Junie от JetBrains, Kiro CLI, Mistral Vibe, Hermes Agent от Nous Research. Часть подключается нативно, часть — через ACP-обёртку: это нормальная практика, а не признак «недоделанности».
Клиентов ещё больше, и они разошлись по категориям: от IDE (Zed, JetBrains, Qt Creator, Sublime Text, Pulsar) до мессенджеров и мобильных приложений. T3 Code — показательный пример: приложение не поставляет модели, оно управляет уже установленными и залогиненными агентами, то есть работает как «поверхность управления харнессами».
| Категория клиентов | Сколько | Примеры |
|---|---|---|
| Редакторы и IDE | 23 | Zed, JetBrains, Qt Creator, Sublime Text, Exo для VS Code |
| Desktop и Web | 65 | T3 Code, Necoder, AionUi, Oleafly |
| Мессенджеры | 18 | боты, подключающие ACP-агентов в чат |
| Мобильные клиенты | 13 | телефон как пульт к агенту на рабочей машине |
| CLI и TUI | 10 | acpx, Toad, Nori CLI, Hash |
| Фреймворки и коннекторы | 20 | мосты к A2A, MCP-шлюзам и оркестраторам |
Минимальный сценарий — взять клиент, который уже умеет ACP, и подключить к нему агент. Zed, JetBrains AI Assistant и Neovim через CodeCompanion поддерживают это из коробки; для остальных есть сторонние плагины.
# проверьте версию клиента — ACP-поддержка появилась не сразу zed --version
# либо вручную: агент должен уметь запускаться в ACP-режиме pip install agent-client-protocol # Python-библиотека для своей реализации
{
"agent_servers": {
"my-agent": {
"command": "my-agent",
"args": ["--acp"]
}
}
}# в чате клиента: «прочитай README и предложи правку» # ожидаемо: запрос разрешения на fs/read_text_file
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": 1,
"clientCapabilities": {
"fs": { "readTextFile": true, "writeTextFile": true },
"terminal": true
}
}
}Если вы пишете агент, а не подключаете готовый, начните с библиотеки: реализация на Python или TypeScript закрывает транспорт и типы сообщений, вам остаётся обработка промптов и вызовов инструментов. Перед публикацией прогоните официальный набор тестов — он проверяет реализацию по пунктам спецификации, а не «на глаз».
| Риск | Как проявляется | Что делать |
|---|---|---|
| Несовпадение версий | сессия открывается, но промпт не уходит | сверить protocolVersion в initialize |
| Слишком широкие права | агент правит файлы без запроса | включить подтверждения, работать в ветке |
| Устаревший адаптер | агент «не виден» в списке клиента | обновить обёртку codex-acp / claude-agent-acp |
| Секреты в MCP-конфиге | ключи уезжают в проект вместе с конфигом | переменные окружения вместо литералов |