Перейти к содержимому

Авто-Одобрение

Авто-одобрение отвечает на вопрос «когда Kodik спрашивает разрешение?». Настройки находятся в разделе Auto Approve настроек Kodik. Если нужно, чтобы агент вообще не имел какой-то возможности, отключите инструмент в разделе Harness — это полностью убирает его у агента. См. Инструменты.

Большую часть работы агент выполняет без запросов — в рабочей области чата и в любой другой папке, поэтому чат, который работает сразу с несколькими рабочими областями или соседним репозиторием, не останавливается на каждом файле.

Без запроса выполняются:

  • чтение файлов, поиск и просмотр папок (read_file, grep, glob), навигация по коду и диагностика;
  • изменение, создание и удаление файлов и блокнотов — кроме защищённых путей;
  • команды терминала, которые только читают (cat, ls, rg, git log и т. п.), — см. ниже;
  • поиск в интернете и запуск субагентов;
  • действия браузера на локальных страницах (localhost, 127.0.0.1, файлы);
  • инструменты MCP, которые их сервер помечает как только читающие.

Запрос появляется для:

  • изменения файла по защищённому пути;
  • команды терминала, которую не покрывает ни список читающих команд, ни ваши шаблоны команд, и любой команды из списка заблокированных;
  • первой загрузки страницы с нового домена (web_fetch) — см. Веб-домены;
  • действия браузера на сайте, который не является локальным, — см. Сайты браузера;
  • остальных инструментов MCP.

Подтверждение создания файла сохраняет кнопки Одобрить и Отклонить, даже если нет изменений для просмотра. Для таких карточек работают те же сочетания клавиш.

Если вы отклоняете действие, Kodik запоминает инструмент и его точные аргументы на время текущего запроса, в том числе после компактизации. Агент может предложить другое действие, а ваше новое сообщение позволяет снова запросить подтверждение исходного действия. Перестановка полей объекта, в том числе вложенного, не меняет действие; другие значения или порядок элементов массива считаются другим действием. Пропуск карточки не сохраняет такой отказ. В отчёте субагента отклонённое действие также отличается от ошибки выполнения.

Когда сфокусирован чат, Alt+Enter выполняет основную кнопку ожидающей карточки, а Alt+Backspace — дополнительную: «Одобрить»/«Отклонить» или то, как они названы в конкретной карточке. Обе кнопки показывают сочетание клавиш, на которое отвечают, а после переназначения команд kodik.chat.approvePendingAction и kodik.chat.rejectPendingAction в редакторе горячих клавиш подсказка обновляется. Черновик в поле ввода при этом сохраняется.

Нажатие Stop, пока инструмент ждёт подтверждения, отменяет ход. Инструмент не запускается, а его карточка показывает Canceled.

У кнопки Одобрить в карточке запроса есть выпадающее меню. Оно предлагает разрешение, которое избавит от повторных запросов для подобных вызовов, и одним нажатием сохраняет его и одобряет ожидающий вызов:

  • Команда терминала предлагает шаблоны, построенные из неё самой: npm run * и npm * для npm run build.
  • Загрузка страницы предлагает её домен: «Всегда разрешать загрузку с docs.python.org».
  • Действие браузера предлагает сайт, на котором оно выполняется: «Всегда разрешать действия браузера на example.com».
  • Пункт Настройки автоодобрения ничего не разрешает — он открывает настройки, описанные на этой странице.

Kodik предлагает только то разрешение, которое действительно сработает. Для цепочки команд шаблон не предлагается, так как один шаблон не покроет все её сегменты; для команды из списка заблокированных не предлагается ничего, потому что этот список имеет приоритет над шаблонами. Для защищённого пути тоже ничего не предлагается: такое изменение одобряется по одному, а сам список меняется в настройках.

Переключатель Режим подтверждений (mode) выбирает один из трёх уровней. Его же можно переключить кнопкой под полем ввода; её значок показывает текущий режим: замок — «Стандартные подтверждения», робот — «Автопилот», открытый замок — «Полный доступ».

  • Стандартные подтверждения (default) — всё, что перечислено выше в «Как это работает».
  • Автопилот (autopilot) — команды терминала, загрузка страниц, действия браузера и инструменты MCP выполняются автоматически. Основной ограничитель — суждение самой модели: команду, которую модель пометила как рискованную (например, force-push), всё ещё нужно подтвердить. Изменение защищённого пути, команда из списка заблокированных, ввод учётных данных, буфер обмена и загрузка файлов в браузере по-прежнему требуют подтверждения.
  • Полный доступ (fullAccess) — всё выполняется без запросов, кроме команд из списка заблокированных. Используйте только в изолированных одноразовых средах.

В ранних версиях был переключатель Автопилота (autopilotMode). Включённый переключатель автоматически мигрирует в mode: "autopilot".

Изменение, создание или удаление файла по защищённому пути требует подтверждения в режимах Стандартные подтверждения и Автопилот. Это файлы, которые дают власть над агентом или средой либо хранят секреты. По умолчанию защищены:

  • внутренности Git: **/.git/**;
  • конфигурация, которая запускает код или выдаёт права: **/.kodik/hooks/**, **/.kodik/skills/**, **/.kodik/commands/**, **/.kodik/*.json, **/.vscode/*.json, **/.mcp.json, **/.claude/**, **/.codex/**, **/.cursor/**, **/.husky/**;
  • секреты: **/.env, **/.env.* (кроме .env.example, .env.sample и .env.template), **/.npmrc, **/.yarnrc, **/.yarnrc.yml, **/.pypirc, **/.netrc;
  • домашние dotfiles и системные папки: ~/.*, ~/.*/**, ~/Library/**, ~/AppData/**, /etc/**, /usr/**, /System/**, /Library/**, C:/Windows/**, C:/Program Files/**, C:/Program Files (x86)/**, C:/ProgramData/**.

Шаблон с **/ или просто имя (.env, secrets/*.json) действует в любой папке. Шаблон с ~/ или абсолютный путь описывает место за пределами папок чата: если открыть как рабочую область, например, репозиторий с dotfiles, его файлы изменяются как в любом проекте. Строка, начинающаяся с !, делает исключение из совпавших выше шаблонов.

Список можно дополнить или сократить в настройках; Сбросить к значениям по умолчанию возвращает встроенный список.

Команды терминала, которые только читают, выполняются без запроса, как и собственные инструменты агента для чтения: cat, head, tail, wc, sort, diff, sed -n '10,20p', git status, git log, git diff, git show, ls, find, tree, pwd, echo, cd, grep, rg, git grep — в любой папке.

Команда перестаёт считаться читающей, если она пишет файл через перенаправление (>, >>; > /dev/null и 2>&1 допустимы), подставляет переменную или результат другой команды ($HOME, $(...)), задаёт переменные окружения перед командой, запускается в фоне через & или использует ключи, которые пишут файлы или запускают программы: find -exec и -delete, sed -i, sort -o, rg --pre, git -c, git grep -O, git grep --open-files-in-pager. Такая команда требует подтверждения или совпадения с шаблоном.

Шаблоны (commandPatterns) одобряют отдельные команды терминала без включения Автопилота. Каждый шаблон поддерживает символ * (например, npm run *, git *), и его можно временно отключить, не удаляя.

Команды сравниваются с шаблоном без учёта регистра; совпадение идёт с начала строки, и шаблону должен соответствовать каждый сегмент цепочки. Шаблон одобряет саму команду, но не то, куда она пишет: команда, которая перенаправляет вывод в защищённый путь (например, echo x > ~/.zshrc при шаблоне echo *), или команда, запущенная внутри защищённой папки (workdir), всегда требует подтверждения.

Список заблокированных (blockedCommands) — это приоритетный запрет: любая команда, совпадающая с шаблоном из этого списка, всегда требует подтверждения, в любом режиме — Стандартные подтверждения, Автопилот и Полный доступ. Он имеет приоритет над шаблонами команд, поэтому широкое разрешающее правило (например, git *) не сможет автоматически выполнить заблокированную команду (например, git push *). Каждый шаблон поддерживает символ * и проверяется для каждого сегмента цепочки команд. Список действует и для команды, которой браузер запускает dev-сервер.

По умолчанию список пуст. Частые варианты:

  • Удаление файлов: rm *, sudo rm *, del *, Remove-Item *
  • Очистка git: git clean*
  • Уничтожение диска: mkfs*, dd if=*, format *
  • Выключение системы: shutdown*, reboot*

web_fetch загружает страницы с доменов из списка Web Fetch Domains без запроса; первая загрузка с любого другого домена требует подтверждения, и её карточка может добавить домен в список. Запись example.com означает только этот домен, *.example.com — также его поддомены, а * — любой домен. Поиск в интернете (web_search) подтверждения не требует.

Браузер работает с локальными страницами (localhost, 127.0.0.1, *.localhost, файлы) без запроса. На любом другом сайте открытие страницы и действия на ней (клик, ввод текста, прокрутка) требуют подтверждения, пока сайт не добавлен в список Browser Sites — из карточки запроса или в настройках. Ввод учётных данных, чтение и запись буфера обмена и загрузка файлов требуют подтверждения на любом сайте. Если start запускает dev-сервер, его команда проходит те же правила, что и команды терминала.

Инструмент MCP выполняется без запроса, если его сервер помечает инструмент как только читающий (readOnlyHint) или если инструмент указан в autoApprove в конфигурации сервера. Флажок Автоодобрение в карточке инструмента MCP добавляет его туда. Остальные инструменты MCP требуют подтверждения.

  • Добавляйте шаблоны для команд, которые вы и так всегда одобряете: сборка, тесты, линтер.
  • Добавьте в заблокированные команды то, что никогда не должно выполняться само, например git push * или rm *.
  • Дополните защищённые пути файлами, которые в вашем проекте хранят секреты или управляют деплоем.
  • Автопилот и Полный доступ включайте для изолированных сред; для работы с продакшеном оставайтесь в Стандартных подтверждениях.