Как я подружил Claude Code с редактором Zed напрямую из терминала
Коротко: в Zed уже есть Claude Code как ACP-агент в боковой панели. Но если запустить CLI `claude` во встроенном терминале Zed, он не умел подключаться к самому редактору так, как это работает в VS Code, JetBrains и Neovim. Я добавил недостающее — нативную «IDE-интеграцию» Claude Code. Ниже история и то, как это устроено внутри.
Почему стоит смотреть на Zed
Zed написан на Rust и рисует интерфейс собственным GPU-движком (GPUI), а не через веб-стек. Отсюда практические отличия от привычных редакторов:
- **Нативность вместо Electron.** VS Code под капотом — это Chromium и JavaScript (Electron). Zed работает без браузерной прослойки, поэтому ниже задержка ввода и меньше расход памяти. - **Без тяжёлой JVM.** Среды JetBrains мощные, но стартуют дольше и заметно требовательнее к памяти из-за JVM и фоновых индексаций. Zed запускается почти мгновенно и остаётся лёгким даже на крупных проектах. - **Отзывчивость как цель дизайна.** Минимальная задержка набора и рендеринг на GPU — то, вокруг чего Zed построен с самого начала. Делают его авторы Atom и Tree-sitter: подсветка и разбор кода работают на Tree-sitter, а поддержка LSP встроена.
Плюс из коробки — совместная работа над проектом в реальном времени и открытый исходный код.
Проблема
У Claude Code есть два разных способа жить в редакторе. Первый — агент в панели (через протокол ACP), он в Zed уже есть. Второй — «IDE integration»: вы запускаете обычный `claude` в терминале, а он находит редактор и начинает с ним разговаривать. Именно так в VS Code появляются подсветка вашего выделения в `@`-упоминаниях, доступ к диагностике и, главное, окна с принятием/отклонением правок прямо в редакторе.
В Zed этого второго способа не было. `claude` во встроенном терминале работал «вслепую»: не видел выделение, не знал про ошибки от языкового сервера, а свои изменения писал в файл напрямую, без наглядного diff в редакторе.
Что получилось
- Автоматическое подключение во встроенном терминале — без команды `/ide`. - `@`-упоминание текущего выделения. - Диагностика, видимая модели. - Список открытых редакторов, открытие файла, сохранение, проверка несохранённого буфера. - Блокирующие diff-окна: предложение Claude открывается вкладкой side-by-side, вид сразу центрируется на первом изменении, а CLI ждёт, пока вы нажмёте Keep (зелёная) или Reject (красная).
Как это устроено
При старте каждое окно Zed слушает `127.0.0.1:0` и кладёт lockfile, по которому CLI находит редактор:
```json // ~/.claude/ide/.lock (права файла 0600, каталога 0700) { "pid": 12345, "workspaceFolders": ["/путь/к/проекту"], "ideName": "Zed", "transport": "ws", "authToken": "" } ```
Транспорт — локальный WebSocket с авторизацией по заголовку `x-claude-code-ide-authorization`, поверх — JSON-RPC 2.0 / MCP (`initialize`, `tools/list`, `tools/call`). Автоподключение во встроенном терминале даёт инъекция двух переменных окружения:
``` CLAUDE_CODE_SSE_PORT=<порт> ENABLE_IDE_INTEGRATION=true ```
Самая интересная часть — openDiff. Он блокирующий: CLI присылает предложенное содержимое файла, Zed строит diff (старое слева, новое справа) и не возвращает ответ, пока вы не примете решение. На Keep редактор отдаёт CLI финальный текст, и запись на диск делает уже сам CLI; на Reject изменение отбрасывается. Отдельно пришлось повозиться, чтобы diff открывался не поверх терминала с `claude`, а в соседней панели, и чтобы вид сразу прокручивался к первому изменению, а не к началу файла.
Как попробовать
```bash git clone https://github.com/vitaly-andr/zed.git cd zed && git checkout claude-code-ide-integration cargo run --release -p zed # Linux: сначала ./script/linux для зависимостей сборки ```
Откройте встроенный терминал, запустите `claude`, попросите его изменить файл — в редакторе откроется diff с кнопками Keep/Reject.
Статус и ссылки
Работает уже сейчас из форка. Я отправил pull request в основной репозиторий Zed и жду ревью — примут или нет, решает команда Zed, но пользоваться можно прямо из форка, не дожидаясь мержа.
- Форк: https://github.com/vitaly-andr/zed (ветка `claude-code-ide-integration`) - Issue: https://github.com/zed-industries/zed/issues/58298 - Pull request: https://github.com/zed-industries/zed/pull/58300
Призыв
Попробуйте и, если понравится, поставьте звезду форку — и отметьтесь в PR или issue. Это лучший способ показать команде Zed, что фича нужна людям. Буду рад замечаниям и баг-репортам.