Два coding-агента в одном репозитории: кого оставить главным
Два AI-агента в одном репозитории: кого оставить главным
В репозитории лежат CLAUDE.md, AGENTS.md, .claude/settings.json и opencode.json. Оба агента умеют читать код, менять файлы и запускать тесты. Проблема появляется позже: один запрашивает разрешение на команду, другой запускает её сразу, а изменение в одном файле правил не попадает во второй.
Спор о том, какой из агентов «в целом сильнее», тут не поможет. Модель, прова, провайдер и правила проекта меняют результат сильнее, чем название клиента. Практичнее выбрать один основной инструмент, а второй оставить резервным. Для этого достаточно трёх вопросов: откуда берутся модели, как закреплены права и кто отвечает за инструкции репозитория.
Вам точно нужно менять провайдера?
Claude Code работает как агентская оболочка вокруг моделей Claude. Внутри сессии модель можно сменить, а настройки разнести по уровням Managed, User, Project и Local. Если репозиторий уже построен вокруг Claude, CLAUDE.md и .claude/settings.json, выор Claude Code основным убирает лишний слой адаптации.
OpenCode строит список моделей из подключённых провайдеров и конфигурации проекта. Модель можно выбрать для текущей сессии, отдельного агента или одного неинтерактивного запуска. Когда по рабочему процессу нужно постоянно переключаться между несколькими провайдерами или моделями, эта возможность становится одним из главных аргументов в пользу OpenCode.
Проверьте это на задачах команды. Если они всегда идут через одну линейку Claude, «больше провайдеров» пока не даёт практической выгоды. Если же провайдеры меняются каждую неделю, а для разных агентов нужны разные модели, OpenCode попадает точно в этот сценарий.
Права похожи, но конфиги не взаимозаменяемы
Оба инструмента умеют разрешать действие, спрашивать подтверждение или запрещать его. Похожая лексика создаёт ложное ощущение, что один JSON можно почти без правок перенести в другой. Так легко получить тихое расхождение в правах.
В Claude Code правила лежат в иерархии settings.json. По официальной документации, совпадения разбираются в порядке deny, ask, allow, и первое совпавшее правило побеждает. Поэтому запрет нельзя отменить более широким разрешением. Отдельно задаётся режим по умолчанию: default, acceptEdits, plan, auto и другие. Он определяет, какие действия будут останавливаться для вопроса.
В OpenCode permission-правила тоже используют allow, ask и deny. Их можно уточнять по инструменту, команде или пути. Здесь побеждает последнее совпавшее правило. Обычный порядок такой: широкое правило сначала, более точные исключения после. Если переставить их местами, фактические права могут разойтись с ожиданиями.
Сначала опишите намерение обычным текстом: какие операции только на чтение можно выполнять сразу, какие команды всегда должны спрашивать, а какие пути нельзя трогать. После этого переведите одно и то же намерение в синтаксис каждого инструмента. Резервная конфигурация не должна притворяться основной производственной политикой.
Не спешите копировать CLAUDE.md в AGENTS.md
Claude Code берёт постоянные инструкции проекта из CLAUDE.md. OpenCode в первую очередь ищет AGENTS.md, но при его отсутствии умеет использовать проектный CLAUDE.md как совместимый резервный вариант. Эта деталь избавляет от ненужной миграции.
Когда Claude Code остаётся основным, а OpenCode нужен лишь как резерв, сначала оставьте один проверенный CLAUDE.md. Не создавайте копию в AGENTS.md только ради наличия второго файла. OpenCode сможет использовать fallback. Два файла-близнеца быстро превращаются в две версии правды.
Если основным становится OpenCode и команда переносит канонические правила в AGENTS.md, не рассчитывайте, что Claude Code подхватит их автоматически. Назначьте один источник правды и одного ответственного за него. Для резервного клиента нужен контролируемый минимум, а не вторая независимо растущая инструкция.
Решение даст один маленький diff
Возьмите задачу, которую можно однозначно принять за полчаса. Например, добавьте один граничный случай в существующую проверку ввода и обновите связанный тест. Запустите оба инструмента от одной точки в изолированных ветках. Дайте им одинаковую цель, разрешённую область правок и команду приёмки. Модель, проектные инструкции и исходную ветку тоже лучше не менять.
Запишите только наблюдаемые вещи. Какие права запросил агент? Соблюдал ли он инструкции и границы файлов? Содержит ли итоговый diff только нужные правки? Прошла ли команда приёмки? Стиль ответа и случайная разница в скорости генерации для такого решения мало значат.
Если оба запуска прошли приёмку, сравните объём ручной поддержки. Команда работает с Claude, ей нужны централизованные уровни настроек, а репозиторий уже опирается на CLAUDE.md. Оставьте Claude Code основным. Регулярно нужны разные провайдеры и модели для разных агентов, а команда готова считать AGENTS.md и OpenCode permissions основной схемой. В этом случае основным будет OpenCode.
После выбора считайте конфигурацию основного агента рабочей. Для резервного оставьте ровно столько, сколько нужно для аварийной задачи. Выбор не обязан быть вечным: когда изменятся провайдеры, политика команды или файл с каноническими инструкциями, повторите тот же маленький тест.
Источники
How Claude Code works - https://code.claude.com/docs/en/how-claude-code-works
Claude Code settings - https://code.claude.com/docs/en/settings
Configure permissions - https://code.claude.com/docs/en/permissions
Models | OpenCode - https://opencode.ai/docs/models
Permissions | OpenCode - https://opencode.ai/docs/permissions
Rules | OpenCode - https://opencode.ai/docs/rules
Providers | OpenCode - https://opencode.ai/docs/providers