Несколько агентов, один репозиторий: правила владения из реальных инцидентов
Когда в одном репозитории работает больше одного агента, чаще всего случаются две беды: затирание чужих файлов и коммит чужой незавершённой работы. Дайте каждому агенту своё рабочее дерево, добавляйте только названные пути и правьте общие управляющие файлы по одной записи.
🎯 Для Руководитель команды, который запускает больше одного кодового агента на одном репозитории
- Три инцидента, которые случаются, когда агенты делят рабочее дерево
- Правила: одно дерево на агента, явные пути, одна запись за раз
- Тест, который ловит «худеющий» управляющий файл
👥 Что идёт не так
Один агент на репозитории ведёт себя как один аккуратный коллега. Несколько агентов — как несколько коллег, одновременно правящих один документ без подписей. Случаются три вещи. Они затирают друг друга. Коммит захватывает чужое полусделанное изменение. А потом никто не может сказать, кто что изменил, и причину не устранить.
📅 Два инцидента
21 сентября 2026 агент записал устаревшую копию общего управляющего файла поверх свежей. В файле лежал реестр идущих инициатив. Он потерял пятнадцать ключей и три записи конвейера, включая ссылку на принятое архитектурное решение.
26 сентября 2026 два агента одновременно правили одно временное рабочее дерево. Коммит одного из них захватил бы незавершённые изменения другого. Второй агент ещё и сменил владельца папки, что сломало прогон тестов первого.
📐 Правила, которые мы написали
- Одно рабочее дерево на агента. Каждый агент создаёт свою папку с именем из себя и задачи и кладёт в неё маленький файл владельца: агент, номер процесса, время, задача. Увидели файл владельца не вашего — остановитесь и скажите человеку.
- Только явные пути. Добавляйте файлы по имени. «Добавить всё» не используйте никогда: в общем дереве всегда лежат чужие изменения.
- Управляющие файлы правят по одной записи. Перечитайте файл непосредственно перед записью. Если инструмент не умеет точечной правки, верните предлагаемый текст владельцу, а не пишите файл целиком.
- У каждой инициативы есть владелец. Реализует владелец. Остальные предлагают изменения в отчёте.
- Заканчивайте коммитом. Изменение, оставшееся незакоммиченным в общем дереве после задачи, — дефект: его никто не примет, чужой коммит может его захватить или оно потеряется.
🧪 Тест на «худеющие» файлы
Потерю 21 сентября поймал бы дешёвый тест. Наш сравнивает управляющие файлы в рабочем дереве с закоммиченной версией и падает, если запись, бывшая в коммите, исчезла. Сообщение об ошибке начинается с фиксированного слова, чтобы его было легко искать. В файле теста 4 теста, и он идёт в ночных воротах.
🛠️ Практика: настройте за час
- Создавайте рабочее дерево на агента скриптом, который заодно пишет файл владельца.
- Сделайте так, чтобы «добавить всё» падало: обёртка или pre-commit проверка выводит добавляемые пути и просит назвать каждый в задаче.
- Выберите три файла, которые управляют вашей системой: реестр, список конвейеров, конфигурацию. Запишите их.
- Напишите тест, который загружает каждый из коммита и из дерева и падает, если ключ или запись пропали.
- Добавьте поле владельца в каждую инициативу.
- Добавьте правило: задача не закончена, пока нет коммита и push.
✅ Проверьте себя
- Запустите двух агентов на двух задачах. Их папки разные, в каждой лежит файл владельца.
- Удалите запись из управляющего файла и запустите тест. Он падает и называет запись.
- Попробуйте добавить всё. Проверка останавливает вас и показывает, что увидела.
- По окончании задачи
git statusв общем дереве не показывает ничего вашего.
🚧 Когда это не работает
- Конфликты слияния остаются. Отдельные деревья переносят конфликт на слияние. Правило владельца удерживает его маленьким.
- Генерируемые файлы. Файлы, которые перегенерирует каждый агент, будут конфликтовать всегда. Выведите их из git или сериализуйте.
- Диск и сборка. Каждому дереву нужны место и сборка. Для лёгких задач используйте неглубокие копии.
- Агенты, игнорирующие инструкции. Правило в файле — не принуждение. Важное переносите в проверки.
- Правки людей. Люди, пишущие в общее дерево, ломают модель. Дайте им тоже своё дерево.
📊 Доказательства
| Что измерено | Записи, потерянные из управляющего файла 21 сентября 2026; число тестов сторожа |
| Когда | Записи об инцидентах прочитаны 3 ноября 2026, 22:06 UTC |
| Артефакт | Наш файл правил для агентов и файл теста на «худеющие» управляющие файлы (4 теста) в закрытом репозитории |
| Ограничение | Два инцидента в одной команде. Сколько случаев было бы без правил, мы не считали |
➡️ Дальше
Как делить работу между агентами, читайте в Делить работу между агентами — и когда не стоит, а как передавать работу с критериями — в Разработке по спецификации.
Источники
- Делить работу между агентами — и когда не стоит: устройство роя.
- Разработка по спецификации на готовых пакетах задач: передача с критериями.
- AGENTS.md и файлы правил: где живут правила.
- Политика и реестр использования ИИ: владение в реестре.
🔗 Связи статьи
Открыть полный граф знаний ↗Связи опубликованных статей. Выберите узел, чтобы открыть статью у заголовка.
Связи статей · клавиатура / текст
Та же тема
- Векторная база — это карта, а не источник: чему нас научил поиск
- Когда неизвестно, сколько стоил вызов модели: заморозка, затем сверка
- Как разбить большую задачу для дешёвой модели: урок 24 000 байт
- Навыки, MCP-инструменты и правила: три способа дать агенту возможности
- Восемь ошибок наших агентов в shell и git и правило на каждую
- Ключи провайдера — вне агента: один шлюз и один токен на задачу
Следующие шаги
Связанные материалы
Векторная база — это карта, а не источник: чему нас научил поиск
Векторная база находит фрагменты, близкие по смыслу к вашему вопросу. Она не знает, какие из них верны или актуальны. Считайте каждое попадание указателем: откройте названный файл, сверьте хэш, а числа берите из артефакта, а не из найденного абзаца.
ИИ-агенты и MCP простыми словамиКогда неизвестно, сколько стоил вызов модели: заморозка, затем сверка
Иногда вызов модели обрывается по таймауту, и вы не знаете, списал ли провайдер деньги. Никогда не записывайте это как ноль. Пометьте как неопределённое, остановите новые платные вызовы и пусть названный человек сверит это с выпиской провайдера. Отказы до генерации — исключение.
ИИ-агенты и MCP простыми словамиКак разбить большую задачу для дешёвой модели: урок 24 000 байт
Дешёвая модель хорошо справляется с одной небольшой чёткой задачей и плохо — с большой кучей. Мы ограничиваем задачу 24 000 байт и отклоняем большие до вызова любой модели. Режьте по единицам — один файл или одна страна на задачу — и проверяйте размер до запуска.
ИИ-агенты и MCP простыми словамиНавыки, MCP-инструменты и правила: три способа дать агенту возможности
Агенты получают способности по-разному. Правило ограничивает, что они делают, навык говорит, как делать работу, а MCP-инструмент позволяет вызывать функцию. У каждого свой риск, поэтому объявляйте все три в реестре и проверяйте тестом, что ничего не существует вне списка.
💬 Комментарии