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

Терминал

Агент Kodik выполняет команды в терминале через инструмент shell. Каждый вызов привязан к рабочему каталогу текущей задачи, виден в чате и требует подтверждения — если только оно не настроено автоматически.

Когда агент вызывает shell, команда появляется в чате со статусом pending. Вы можете одобрить или отклонить её. После выполнения агент видит полный вывод команды и реагирует на него.

Команды выполняются в оболочке вашего терминального профиля по умолчанию (Terminal: Select Default Profile), и агент пишет команды в синтаксисе именно этой оболочки — например Git Bash, Command Prompt, Cygwin или PowerShell на Windows, либо zsh на macOS. Если выбранный профиль добавлен расширением, Kodik просит VS Code создать именно этот профиль, а не подставляет другую оболочку.

Kodik использует интеграцию с оболочкой, чтобы получить код завершения и вывод именно текущей команды. Если выбранная оболочка не может передать код завершения, команда получает нейтральный статус «Завершение не подтверждено», а не ошибку. Агент всё равно получает собранный вывод и не перезапускает команду только ради проверки статуса.

Если размер вывода превышает доступное контекстное окно, Kodik автоматически запускает сжатие контекста перед возвратом результата.

Для долгих процессов — dev-серверов, watch-режимов, стриминга логов — используйте параметр block_until_ms: 0. Он запускает команду в фоне и немедленно возвращает terminal_id, не блокируя работу агента.

# Запуск в фоне
terminal_id = shell("npm run dev", block_until_ms=0)
# Опрос вывода
command_status(terminal_id=terminal_id)
# Остановка по завершении (или для перезапуска)
kill_terminal(terminal_id=terminal_id)

Вызывайте command_status с полученным terminal_id, чтобы получать инкрементальный вывод по мере его появления. Таким образом агент может самостоятельно мониторить логи сервера, не требуя от вас вставлять вывод вручную.

Каждый результат command_status содержит вывод только соответствующей фоновой команды, без вывода предыдущих команд из переиспользуемого терминала. Если процесс завершился без определяемого кода, command_status сообщает «Завершение не подтверждено», а не внутреннее значение вроде undefined.

Фоновая команда занимает собственный терминал, поэтому она никогда не блокирует следующую команду агента — агент может запустить dev-сервер и сразу же выполнять команды против него (каждая команда выполняется в отдельном терминале, по возможности переиспользуя свободный). Когда фоновый процесс больше не нужен или его требуется перезапустить после изменения, агент останавливает его вызовом kill_terminal(terminal_id); процесс завершается, а его терминал освобождается. Вы также можете сами остановить любую фоновую команду из меню терминалов сессии на её вкладке чата.

Некоторые команды никогда не одобряются автоматически — даже в режиме автопилота. Это защита от случайного удаления данных или деструктивных системных операций. По умолчанию заблокированы:

Удаление файлов:

  • rm *, sudo rm *
  • del *, rd *, rmdir *, Remove-Item *, ri *

Деструктивные команды Git:

  • git clean*

Поиск с удалением:

  • find * -delete*, find * -exec rm*

Работа с дисками:

  • mkfs*, dd if=*, format *

Системные операции:

  • shutdown*, reboot*

Прочие опасные:

  • > /dev/*, :(){:|:&};:, chmod -R 777 /, chown -R *:* /

Вы можете настроить список заблокированных команд в настройках авто-одобрения. Подробнее — в разделе Авто-одобрение.

Если авто-одобрение включено, агент проверяет команду по настроенным шаблонам (например, npm run * или git *). Если команда совпадает с шаблоном и не входит в список заблокированных, она выполняется без запроса.

В режиме автопилота одобряются все команды, кроме заблокированных. Уведомление отображается, если команда выполняется в фоне более 30 секунд.

Вы можете вручную добавить вывод из встроенного терминала VS Code в контекст чата с помощью команды Add Terminal Output to Chat (kodik.addTerminalOutputToChat). Команда доступна через контекстное меню терминала и через палитру команд. Это удобно, когда нужно показать агенту вывод команды, которую вы запускали самостоятельно.