Git не для агентов
Почему git ломает AI-агентов и как jj решает каждую из этих проблем
Проблема
Git создавался для людей. Интерактивный rebase, staging area, detached HEAD — всё это предполагает человека за терминалом, который понимает контекст и может принять решение.
AI-агент — не человек. Он не может ответить на вопрос rebase --continue. Не может выбрать файлы в git add -i. Не может осмысленно разрешить merge-конфликт в середине длинной операции.
Реальные инциденты: Claude Code потерял 4 дня работы из-за reset --hard (issue #11237). Codex уничтожил 9 файлов одной командой (issue #8643). Copilot сдаётся при ошибке pre-commit hook вместо того чтобы исправить проблему.
Контекст
Проблема глубже чем кажется. Git — это не просто неудобный инструмент для агентов. Это инструмент с фундаментально неправильными абстракциями для автоматизации.
Staging area. Для человека — удобная промежуточная зона. Для агента — лишний шаг, который ничего не даёт и создаёт состояние “частично добавлено”.
Деструктивные команды без подтверждения. git checkout . уничтожает все незакоммиченные изменения. Без вопросов. Человек знает что делает. Агент выполняет команду из привычного паттерна — и теряет работу.
Конфликты блокируют workflow. Когда два параллельных агента работают в одном репозитории, merge-конфликты останавливают обоих. Ни один не может продолжить пока конфликт не разрешён.
Хуки ломают автоматизацию. Pre-commit hook с линтером? Агент получает ошибку, не может закоммитить, и часто не понимает как исправить проблему в рамках hook-скрипта.
Решение
jj (Jujutsu) — VCS нового поколения от Google. Работает поверх git-бэкенда (colocated mode), но с радикально другой моделью.
Рабочая копия = коммит. Каждое сохранение файла — уже в истории. Потерять незакоммиченную работу невозможно в принципе.
# В git: забыл закоммитить → reset --hard → работа потеряна
# В jj: рабочая копия — это коммит. Всегда.
jj log # видим все изменения, включая текущие
Operation log — полная история операций. Каждое действие в jj записывается. Откатить любую операцию на любую глубину — одна команда.
jj op log # история всех операций
jj undo # откатить последнюю
jj op restore <id> # откатить на любую точку
Конфликты — это данные, а не блокировка. jj записывает конфликт прямо в коммит. Работа продолжается. Конфликт разрешается когда удобно, а не когда git заставляет.
Нет staging area. Нет git add. Все изменения автоматически в текущем коммите. Один шаг вместо двух.
Всё неинтерактивное. Никаких промптов, никакого --continue, никаких редакторов. Каждая команда — атомарная операция с предсказуемым результатом.
Workspaces для параллельных агентов. jj workspace add создаёт изолированное рабочее пространство с общим графом коммитов. Два агента работают параллельно без конфликтов.
jj workspace add ../agent-workspace-2
# Два агента, два workspace, один репозиторий
# Каждый видит коммиты другого, но не мешает
Colocated mode — нулевой риск. jj git init --colocate на любом существующем git-репозитории. Git и jj работают бок о бок. Команда продолжает использовать git, агенты используют jj.
Инсайт
Инструменты разработки создавались для человеческого удобства. Интерактивность, гибкость, визуальная обратная связь — всё это мешает автоматизации.
Для AI-агентов нужны другие свойства: атомарность операций, полный undo, предсказуемость без диалога, безопасность при параллельной работе.
jj покрывает 7 из 11 свойств идеальной VCS для агентов. Оставшиеся четыре (semantic diff, content-addressing, agent metadata, sandbox-first) пока не реализованы ни в одном инструменте.
Не нужно ждать идеального решения. jj git init --colocate — одна команда, и каждый git-репозиторий становится безопаснее для агентов уже сегодня.