Урок 7 из 8 · 25 мин · обновлено
Git, отмена правок и права агента
Как не потерять рабочий код при работе с ИИ-агентом: коммит перед задачей, /undo и /redo, просмотр изменений через git diff. Права агента в OpenCode 2: allow, ask и deny для команд и файлов, защита .env и опасные команды.
Коммит перед задачей
Агент может испортить работающий код: переписать лишнее, удалить нужное, запутаться в своих правках. Лучшая защита — Git, система, которая хранит версии проекта. Если вы ещё не работали с ним, на этом сайте есть курс «Git и GitHub». Для работы с агентом хватит трёх команд.
Один раз в папке проекта:
git init
Перед каждой задачей агенту — сохранить текущую версию:
git add .
git commit -m "Трекер с тёмной темой"
Этот снимок называется коммит. Что бы агент ни сделал дальше, к коммиту можно вернуться.
Посмотреть и отменить
После работы агента посмотрите, что именно изменилось с последнего коммита:
git diff
Строки с минусом удалены, с плюсом — добавлены. Если результат устраивает — сделайте новый коммит. Если нет — есть два пути.
Отменить последнюю правку агента командой в OpenCode:
/undo
Она откатывает изменения файлов из последнего ответа агента и убирает это сообщение из разговора. Можно повторить несколько раз, чтобы откатить несколько шагов. Передумали — /redo вернёт отменённое. Обеим командам нужен Git в папке проекта.
Вернуться к последнему коммиту целиком, если всё запуталось:
git restore .
Команда отменяет все незакоммиченные изменения в файлах, которые Git уже знает. Новые файлы, созданные агентом, она не трогает — их удалите вручную или через git clean.
Права агента
OpenCode 2 решает, что агенту можно делать, по правилам с тремя ответами:
- allow — разрешено без вопросов;
- ask — спросить вас перед действием;
- deny — запрещено.
По умолчанию агенту разрешено почти всё: читать и править файлы, запускать команды. Исключение — файлы .env, где обычно хранят пароли и ключи: перед их чтением агент спросит разрешения.
Правила пишут в файл opencode.json в корне проекта. Например, так агент будет спрашивать перед любой командой, кроме двух безопасных, а отправлять код на GitHub не сможет совсем:
{
"$schema": "https://opencode.ai/config.json",
"permissions": [
{ "action": "shell", "resource": "*", "effect": "ask" },
{ "action": "shell", "resource": "git status *", "effect": "allow" },
{ "action": "shell", "resource": "git diff *", "effect": "allow" },
{ "action": "shell", "resource": "git push *", "effect": "deny" }
]
}
Здесь action — что делает агент (shell — команды терминала, edit — правка файлов, read — чтение), resource — к чему относится правило, а * означает «что угодно».
Важно: срабатывает последнее подходящее правило. Поэтому сначала пишут общее правило, а исключения — после него. Если поставить «спрашивать для всех» последним, оно перекроет разрешения выше.
По умолчанию агент может читать и править файлы и за пределами папки проекта. Если это нежелательно, добавьте правило { "action": "external_directory", "resource": "*", "effect": "ask" }.
Читать команды перед подтверждением
Когда агент спрашивает разрешения, он показывает команду. Прочитайте её. Большинство команд безопасны: показать файлы, запустить проверку. Насторожиться стоит, если команда:
- удаляет —
rm,del,git clean,git reset --hard; - отправляет что-то в интернет —
git push,curlс вашими данными; - устанавливает программы и пакеты —
npm install,pip install; - трогает файлы вне проекта — пути вроде
~/илиC:\Users\.
Если не понимаете, что делает команда, откажите и спросите агента: «Зачем эта команда и что она изменит?»
Попробуйте сами. Сделайте в папке трекера git init и первый коммит. Попросите агента добавить кнопку «Сбросить все отметки». Посмотрите изменения через git diff, затем откатите их командой /undo и убедитесь через git diff, что изменений не осталось.
Что должно получиться
git init
git add .
git commit -m "Трекер привычек: первая версия"
После задачи агенту git diff покажет добавленные строки кнопки и её обработчика. После /undo команда git diff ничего не выведет: файлы вернулись к состоянию коммита, а сообщение с задачей исчезло из разговора.
Если /undo сообщает об ошибке, проверьте, что git init выполнен в той же папке, где запущен OpenCode.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Зачем делать коммит перед задачей агенту?
Коммит фиксирует рабочую версию. Что бы агент ни сделал дальше, к ней можно вернуться.
-
Что нужно, чтобы работали /undo и /redo?
OpenCode отменяет правки с помощью Git. Без него откатывать нечем.
-
Вы хотите, чтобы агент спрашивал перед каждой командой терминала, но git status запускал сам. Как расположить правила?
Срабатывает последнее подходящее правило. Поэтому общее правило пишут первым, а исключения — после него.
-
Агент просит разрешения выполнить rm -rf build. Что делать?
Команда удаляет папку без возврата. Перед подтверждением проверьте, что удаляется именно то, что нужно.