Девятнадцать агентских CLI, одна глубина интеграции
Запустить CLI в терминале — лёгкая десятая часть интеграции. Остальное — статусы, сессии, инструменты и прерывание, и к каждому CLI приходится искать свой вход.
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
Что значит «та же глубина»
Мы записали всё, что приложение делает для 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 — 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, и каждый из них измерен на перехватывающем сервере, а не взят из документации.
По дороге прибавились два исправления поменьше: карточки Kilo Code больше не теряют настройки из-за общего демона, а токен Qwen Code для MCP-сервера приложения больше не пишется на диск. Полные списки — в журнале изменений 0.1.128, 0.1.133 и 0.1.137.




















