Все записи
БлогВыпускИнтеграцииИнженерия

Девятнадцать агентских CLI, одна глубина интеграции

Запустить CLI в терминале — лёгкая десятая часть интеграции. Остальное — статусы, сессии, инструменты и прерывание, и к каждому CLI приходится искать свой вход.

6 мин чтенияЧто вошло в 0.1.137

NeuroSquad 0.1.137 добавляет девять агентских CLI — Gemini CLI, GitHub Copilot CLI, Amp, Factory Droid, aider, Goose, Kimi Code, Cline и Auggie — и дотягивает Cursor CLI и Crush до уровня остальных. Итого девятнадцать, и впервые слово «поддерживается» значит для всех одно и то же.

Три дня назад это было не так. Первый выпуск запускал в карточках десять CLI, но глубоко был интегрирован только Claude Code: его статусы приходили из его собственных хуков, его сессия продолжалась после перезапуска, он получал инструменты по стрелкам. Остальные работали в терминале, и за ними в основном следила эвристика. Эта запись — о том, как этот разрыв закрылся за три выпуска в пределах суток.

Живая копия — попробуйте

На уровне Claude Code: 1

10 работает в карточке

  • Claude Code
  • Hermes Agent
  • OpenCode
  • Codex CLI
  • pi
  • omp
  • Kilo Code
  • Qwen Code
  • Cursor CLI
  • Crush
  • Gemini CLI
  • GitHub Copilot CLI
  • Amp
  • Factory Droid
  • aider
  • Goose
  • Kimi Code
  • Cline
  • Auggie
Полная интеграция: возобновление сессии, точные статусы, MCP по стрелкам, режим карточек, расходРаботает в карточке с живым терминалом
У каких CLI была полная интеграция — выпуск за выпуском. Пройдите по шагам.

Что значит «та же глубина»

Мы записали всё, что приложение делает для Claude Code, в чеклист примерно из сорока возможностей, и у каждого CLI есть свой документ, который проходит по этому списку строка за строкой. Каждая строка — одно из трёх: нативно (у CLI это есть, и приложение этим пользуется), эмулировано (собрано из другого механизма этого CLI — и как именно) или невозможно — с доказательством, обычно строкой из исходников самого CLI.

Строки, которые важнее всего тому, кто работает на холсте:

  • Возобновление сессии: перезапустите приложение или карточку — и агент продолжит тот же разговор.
  • Точные статусы: работает, ждёт вас, закончил — по собственным событиям CLI и с текстом того, о чём он спрашивает.
  • Инструменты по стрелкам: MCP-инструменты приложения плюс подключённые MCP-серверы и скиллы.
  • Режим карточек: агент работает через карточки (терминал для команд, браузер для веба), а не через свои встроенные инструменты, — и это держится даже в опасном режиме.
  • Безопасное прерывание тормозом бюджета, без потери сессии.
  • Расход и модель по карточке, индикатор контекста и сжатие, продолжение после лимита.

К каждому CLI — свой вход

Чеклист один, а механизм почти никогда не совпадает. Для Claude Code приложение передаёт файл настроек поверх ваших, и его хуки сообщают о каждой смене состояния одной строкой curl. Вот как туда добрались некоторые другие.

OpenCode получает плагин — один файл на все карточки, — который сообщает о состоянии сессии и о запросах разрешений. Конфиг передаётся через одну переменную окружения, выбранную методом исключения: переменная для встроенного JSON уже несла заголовки атрибуции OpenRouter, а два писателя одной переменной затирают друг друга; переменная для папки конфига спрятала бы ваш глобальный файл инструкций. С прерыванием тоже пришлось быть аккуратнее: Ctrl+C в OpenCode при пустом поле ввода закрывает приложение, а тормоз бюджета раньше слал именно его. Теперь он дважды нажимает Escape.

Hermes Agent читает слой конфигурации уровня администратора, и приложение направляет его на собственный файл для каждой карточки, который сливается с вашим по листьям. Живая проверка показала, что интерактивный режим подключает MCP-серверы, только если они есть в вашем исходном конфиге, — поэтому карточка сама набирает /reload-mcp, как только готово приглашение, а первый промпт ждёт строки Agent updated, прежде чем вставиться. Ещё одна находка: когда падает провайдер модели, Hermes так и не присылает событие конца сессии, и карточка навсегда застревала на «работает»; пока ход открыт, приложение теперь ещё и следит в терминале за ошибками провайдера, которые печатает Hermes.

У Gemini CLI, как и у его форка Qwen Code, есть путь к системным настройкам, но этот файл он загружает, только если тот принадлежит администраторам и недоступен пользователям на запись. Файл в папке приложения пропускается с предупреждением безопасности. Зато Gemini честно уважает подмену домашней папки, поэтому каждая карточка Gemini работает со своим домом, где лежит её слой настроек, — а всё остальное из вашего настоящего ~/.gemini, включая сессии и вход, подключено через связи каталогов (junction). Сессия карточки — это ваша сессия: gemini --resume работает из обычного терминала и обратно.

У aider нет ни MCP-клиента, ни хуков, ни API плагинов. Зато это программа на Python, а Python раньше всего остального импортирует модуль sitecustomize из пути поиска. Карточка aider стартует с одной папкой в начале PYTHONPATH, чей модуль по мере загрузки патчит шесть модулей aider — каждый патч с защитой, так что если будущая версия aider переименует метод, отключится только эта одна функция, — а затем убирает свои переменные, чтобы их не унаследовало ничего, что запускает aider.

Kilo Code по умолчанию подключается к уже запущенному демону Kilo вместо того, чтобы стартовать свой рабочий процесс, а у демона своё окружение — и карточка молча теряла бы конфиг, инструменты и MCP-токен. Теперь каждая карточка Kilo стартует с ключом, отключающим подключение. Codex CLI раньше переживал остановку своей карточки: npm-шим умирал, а codex.exe продолжал жить. Теперь карточка запускает настоящий исполняемый файл напрямую.

Диалог «Новый агент» с открытым списком агентских CLI
При создании агента выберите CLI, провайдера и модель. Установленные CLI ищутся по текущему PATH этого компьютера.

«Невозможно» — тоже ответ

Некоторые строки заполнить нельзя, и сказать об этом прямо — часть работы. Несколько CLI — Auggie, Droid, Goose, Kimi — не дают вызывающей стороне выбрать id сессии; приложение перехватывает id, который они выдают сами, и продолжает сессию по нему. У Auggie нет команды сжатия, потому что он сам сворачивает историю, когда окно заполняется, — у его карточки просто нет кнопки Compact. Cline читает список инструментов сервера один раз, при старте сессии, и ничто его не обновляет, — поэтому стрелка, нарисованная посреди сессии, начинает действовать со следующего запуска, и в документации так и написано.

У Kimi Code то же ограничение, и там оно эмулировано: карточке Kimi с самого начала предлагаются все встроенные группы инструментов, а стрелки решают в момент вызова, разрешён ли он. В карточку заметки, созданную посреди сессии, агент записал в той же сессии.

Amp — самый честный случай. Его агентский цикл, включая вызовы модели, работает на серверах Amp; локальный CLI только выполняет инструменты. Поэтому OpenRouter и атрибуция для Amp невозможны, а всё, что приложение делает вокруг него, проверено на локальной подделке сервера Amp.

Как это проверяли

Каждый CLI ставился во временную папку, никогда глобально, и запускался отдельной сборкой приложения со своим профилем и временной домашней папкой, так что ничей настоящий конфиг не читался и не записывался. Большинство CLI были направлены на маленький сервер модели со сценарием на loopback-интерфейсе — он отвечает на PING, вызывает инструменты, зависает на пятнадцать секунд, возвращает 429, — чтобы лимиты, зависания и запросы разрешений можно было вызвать по требованию, а не ждать.

Тот же сервер записывал заголовки запросов — так и проверялась атрибуция OpenRouter: каждый CLI, который работает с OpenRouter, теперь отправляет заголовки NeuroSquad, включая карточки на собственном входе CLI в OpenRouter, и каждый из них измерен на перехватывающем сервере, а не взят из документации.

Меню добавления карточки: сначала агентские CLI, поиск, установленные отмечены
Меню добавления начинается с агентов; установленные на этом компьютере отмечены.

По дороге прибавились два исправления поменьше: карточки Kilo Code больше не теряют настройки из-за общего демона, а токен Qwen Code для MCP-сервера приложения больше не пишется на диск. Полные списки — в журнале изменений 0.1.128, 0.1.133 и 0.1.137.