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

Инструменты

Ниже приведён полный список инструментов, которые агент Kodik может использовать в своей работе. Доступные инструменты зависят от текущего режима. Доступ к файлам регулируется правилами .kodikignore.

Если модель возвращает несколько независимых вызовов инструментов за один ход, Kodik запускает все допущенные вызовы параллельно независимо от типа инструмента. Это относится к встроенным и MCP-инструментам, файловым изменениям, командам терминала, действиям браузера и дочерним инструментам субагента. Изменения одного и того же файла или ноутбука сохраняют порядок вызовов модели, в том числе для эквивалентных относительных путей, а независимые ресурсы по-прежнему обрабатываются параллельно. Вызов, которому всё ещё требуется подтверждение, ждёт решения пользователя, а зависимые действия выполняются последовательно, когда результат одного нужен для формирования следующего.

Kodik запускает каждый вызов инструмента, как только модель закончила его писать, пока остальная часть ответа ещё приходит, и тогда же запрашивает подтверждение вызова. Это относится к чтению, поиску, веб-запросам, командам терминала и MCP-инструментам; остальные вызовы, например изменения файлов, действия браузера, субагенты, вопросы и инструменты плана, цели, памяти и сжатия, по-прежнему запускаются после завершения ответа, как и все вызовы после них в том же ответе, поэтому ни один вызов не опережает более ранний, от которого может зависеть. Карточка запущенного вызова появляется, когда ответ завершён. Следующий запрос агента по-прежнему ждёт результатов всех вызовов и передаёт их в порядке вызовов. Если ответ обрывается на середине, уже запущенные вызовы останавливаются, их результаты отбрасываются, а ответ возобновляется или повторяется, как и раньше. Субагенты следуют тому же правилу.

Названия встроенных инструментов не зависят от выбранной модели, за одним исключением: модели OpenAI редактируют файлы через apply_patch, формат патчей, на котором они обучены, вместо create_file, edit_file и delete_file, а все остальные модели с поддержкой инструментов используют эти три. При смене модели OpenAI на другую посреди чата инструменты редактирования меняются вместе с ней.

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

Временное состояние текстового поиска освобождается после завершения, ошибки или отмены. Повторные ошибки в шаблонах поиска не накапливают состояние завершённых поисков, пока Kodik открыт.

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

Если временное хранилище для большого вывода команды недоступно, Kodik сохраняет ограниченный предварительный просмотр, не удерживая весь вывод в памяти. Следующие команды снова смогут сохранять полный вывод, когда хранилище станет доступно.

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

По мере поступления вывода текст, который больше не входит в предварительный просмотр, освобождается из его буфера. История завершённых команд сохраняет те же начало и конец, а сохранённый полный вывод остаётся доступен в карточке команды.

Завершённые вызовы инструментов освобождают временные данные выполнения, пока окно чата остаётся открытым. Сохранённые результаты остаются доступны в разговоре, в том числе после перезагрузки.

Когда агент ищет доступный инструмент, в чате появляется Поиск инструментов, а после завершения — Поиск инструментов завершён. У поиска инструментов нет раскрываемых подробностей; при ошибке или остановке отображается короткое сообщение о статусе.

Kodik ищет отложенные инструменты локально, и загружать их может любой провайдер в любом формате API. Собственный API OpenAI и модели Claude с поддержкой отложенных инструментов (Claude Sonnet 4.5, Opus 4.5, Haiku 4.5 и новее) используют свои форматы обнаружения. Все остальные подключения, включая модели Kodik, OpenRouter, другие серверы Responses, форматы Chat Completions и Gemini и другие модели в формате Anthropic, используют обычную функцию tool_search: её результат содержит схемы найденных инструментов, а агент вызывает загруженный инструмент через call_tool, поэтому набор инструментов в запросах не меняется и загрузка инструмента сохраняет кэш промпта. Серверный поиск инструментов OpenRouter не используется.

В режимах Code и Debug агент читает, ищет и загружает страницы через терминал, поэтому инструменты чтения файлов, поиска и загрузки там по умолчанию отложены, как и инструменты управления субагентами. Список задач доступен сразу во всех режимах, кроме моделей OpenAI и Claude: для них он отложен во всех режимах, потому что их инструкции ничего в нём не планируют. В разделе Harness перечислены все значения по умолчанию, и любой из инструментов можно включить.

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

Агент получает каждый результат с отдельным статусом выполнения: успешно, ошибка, отказано, пропущено, отменено или истекло время ожидания. Исходный вывод инструмента остаётся под статусом без изменений, включая XML или HTML из файла либо MCP-сервера. Если результат слишком велик, Kodik показывает его начало и конец и, когда может сохранить полный вывод, указывает путь к нему.

Раскройте завершённый вызов MCP, чтобы посмотреть аргументы и результат. Вложенные объекты и массивы показываются в формате JSON и переносятся по ширине панели чата.

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

Каждый инструмент стоит контекста: его описание и параметры входят в список инструментов модели, а правила его использования — в системный промпт, и всё это отправляется с каждым запросом. Если вы инструментом не пользуетесь, эти токены тратятся впустую. Отключение убирает инструмент и из списка инструментов, и из системного промпта — освобождая контекст для вашего кода и истории диалога.

Политика доступности инструментов находится в разделе Harness настроек Kodik — это единая точка для всех 25 встроенных инструментов и подсказок промпта, тогда как Agents отвечает за поведение ассистента и суммаризацию. Единственный переключатель инструмента изменяет выбранный режим; структурно недоступные инструменты перечисляются как недоступные. Разрешениями на выполнение без запроса управляет отдельный раздел Auto Approve.

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

Инструмент Назначение Примечания
read_file Чтение содержимого файла Поддерживает диапазоны строк через параметр ranges; агент читает только нужные строки, все за один вызов. Один вызов возвращает до 16 КБ и называет строки, которые читать дальше; файлы, превышающие контекстное окно модели, не читаются напрямую. Повторное чтение тех же строк неизменённого файла в рамках одного сообщения возвращает короткую пометку, что прежнее чтение всё ещё актуально. Уважает .kodikignore.
edit_file Редактирование одного файла Изменяет один существующий файл списком edits из точных замен { old_string, new_string }. Агент копирует каждый old_string из файла, где он должен совпадать ровно с одним местом, и передаёт отличающийся new_string; пустой new_string удаляет совпадение. Перед правкой файл нужно прочитать. Все изменения одного файла передаются в одном вызове и применяются по порядку, каждое к файлу в том виде, в каком его оставила предыдущая правка, поэтому правка может опираться на предыдущую. Вызов выполняется целиком или не выполняется совсем: если одна из правок больше не совпадает, файл остаётся без изменений, а агент узнаёт, какая правка не подошла и почему. Отдельные вызовы для одного файла тоже выполняются по порядку, и каждый применяется, а при подтверждении и показывается, к файлу в том виде, в каком его оставил предыдущий вызов; вызовы для разных файлов могут выполняться параллельно. Полная замена файла сохраняет точный, полностью доступный для проверки diff без квадратичного роста стоимости предпросмотра. Текст, в котором модель заменила типографские кавычки, тире или неразрывные пробелы файла на прямые кавычки, дефисы и обычные пробелы (или наоборот), всё равно совпадает, если однозначно указывает на одно место. Нечёткое восстановление после расхождения пробелов или контекста в ответе модели ограничено бюджетом: слишком неоднозначный old_string оставляет файл без изменений и просит агента перечитать его с более уникальными окружающими строками. После правки сообщает агенту, что изменение применено, поэтому агент не перечитывает файл, и передаёт ошибки файла для записанной версии модели редактора, не больше 20 (предупреждения и остальные ошибки доступны через read_lints), кроме ошибок редактора, которые опровергает сам проект: «Cannot find module» для относительного модуля, который есть на диске, глобальных имён и импортов проекта Deno и глобальных имён тестового раннера, типы которого проект не устанавливает; файл без активности диагностического провайдера не получает безусловную секундную задержку.
create_file Создание одного файла Создаёт один новый текстовый файл с полным буквальным содержимым, автоматически создаёт отсутствующие родительские каталоги и отказывается перезаписывать существующий путь. Пустое содержимое создаёт пустой файл. Для нескольких файлов используется по одному вызову на файл, а независимые вызовы могут выполняться параллельно.
delete_file Удаление одного файла Полностью удаляет один существующий файл. Чтобы удалить текст, сохранив сам файл, агент использует edit_file с пустым new_string; он не удаляет и не создаёт файл заново, чтобы обойти неудачную правку. Для удаления нескольких файлов используется по одному вызову на файл, а независимые вызовы могут выполняться параллельно.
apply_patch Патчи файлов (модели OpenAI) Использует формат Codex: текст между *** Begin Patch и *** End Patch, без JSON. Один вызов может добавить, изменить, удалить или переместить несколько файлов; изменение поддерживает несколько блоков @@. *** Add File может заменить существующий файл. Прямые вызовы и патчи в heredoc терминала используют один механизм выполнения, просмотра изменений, подтверждения и чекпоинтов. Undo All восстанавливает все файлы, включая источник и назначение перемещения. Переключатели файловых операций в Harness действуют на весь патч; перемещение требует разрешённых изменения, создания и удаления. Отключение apply_patch возвращает моделям OpenAI три файловых инструмента. Пользовательский провайдер должен поддерживать freeform/custom tools; несовместимый endpoint возвращает ошибку провайдера.
edit_notebook Редактирование Jupyter-ноутбука Поддерживает операции insert, edit, delete для ячеек типа code и markdown. Языки: Python, JS, TS, R, Julia, SQL. Изменённые ноутбуки учитывают настройку отображения изменений файлов; открытые редакторы ноутбуков обновляются и сохраняются после правок инструмента, а ноутбуки с несохранёнными изменениями сначала нужно сохранить или сбросить. Правки ноутбуков отображаются в панели изменений файлов и участвуют в восстановлении контрольных точек, как правки любых других файлов.
shell Выполнение команды оболочки Выполняется без терминала: stdin закрыт, stdout/stderr объединяются в обычный текст, возвращается настоящий код завершения. Ждёт, пока команда не завершится или не истечёт timeout (по умолчанию 5 секунд, не больше минуты); команда, которая ещё работает, продолжает выполняться в фоне и сообщает результат, когда завершится.
get_terminal_output Получение вывода фонового процесса Принимает terminal_id, возвращённый командой shell, и возвращает новый вывод вместе с текущим состоянием жизненного цикла. Нужен только для проверки прогресса по запросу; завершение доставляется автоматически.
kill_terminal Остановка фонового процесса Принимает terminal_id, останавливает команду, освобождает терминал и возвращает тот же формат состояния с собранным выводом. Одобряется автоматически.
glob Поиск файлов по шаблону Поддерживает шаблоны вида **/*.ts.
grep Полнотекстовый поиск (ripgrep) Поиск по регулярному выражению с поддержкой опций ripgrep. Уважает .kodikignore.
read_lints Чтение диагностики линтера Возвращает ошибки и предупреждения из VS Code для одного или нескольких файлов (или всего рабочего пространства).
lsp Навигация по коду через языковые серверы Использует языковые серверы, уже запущенные в окне (те же, что работают для «Перейти к определению» и «Найти все ссылки»): definition, type_definition, implementation, references, hover, document_symbols, workspace_symbols, incoming_calls, outgoing_calls. Только чтение, выполняется без подтверждения, по умолчанию отложен (агент загружает его через поиск инструментов), не требует индекса и входа в аккаунт. См. lsp.
web_fetch Загрузка содержимого URL Только HTTPS (plain HTTP разрешён только для localhost). Возвращает страницу в формате Markdown. Таймаут — 30 секунд.
web_search Поиск в интернете Только на провайдере Kodik. Возвращает ранжированные результаты (заголовок, URL, фрагмент) и, как правило, синтезированный ответ. Каждый поиск оплачивается из баланса кредитов.
browser Управление встроенным браузером Доступен в режимах, где его разрешает политика режима, если инструмент включён в Harness. Открывает страницы, может использовать уже открытые вкладки, запускать dev-сервер, делать скриншоты, читать консоль, инспектировать, менять размер, переходить по страницам и взаимодействовать с UI.
todo_write Управление списком задач Создаёт и обновляет элементы списка задач для работы из трёх и более шагов, по нескольку элементов за обновление.
memory Сохранение заметок в памяти Записывает заметки в рабочую/глобальную память или в session memory текущей задачи. См. Память.
sub_agent Делегирование подзадачи субагенту Запускает субагента с отдельным контекстом. С background: true возвращается сразу, а субагент отчитывается после завершения. См. Субагенты.
agent_status Проверка субагентов и открытых чатов Без agent_id выводит всех фоновых субагентов текущего чата; scope: "sessions" вместо этого выводит другие чаты, открытые и закрытые, а scope: "all" — и то и другое; список чатов сужают status (running, idle, closed), active_within_minutes, workspace и query, а листают limit и offset. scope: "self" описывает текущий чат: его session id, заголовок, режим, модель, рабочую область, заполненность контекста и статус цели. С идентификатором из подтверждения фонового запуска sub_agent сообщает статус, цель и время работы выбранного субагента; wait: true блокирует до завершения и возвращает полный отчёт. С id открытого чата сообщает его недавнюю активность. См. Субагенты.
send_message Сообщение субагенту, родителю или чату Родитель указывает agent_id работающего или недавно завершённого фонового субагента; завершённый дочерний агент возобновляется с точно сохранённым разговором. Субагент с инструментами указывает parent. Любой чат может указать id другого чата, открытого или нет; закрытый чат сразу начинает работать над сообщением, как над вашим (см. Сообщения другим чатам). Обмен между дочерними агентами недоступен. См. Субагенты.
ask_questions Уточняющие вопросы Задаёт короткие вопросы, когда неоднозначность запроса меняет план работы. У каждого варианта может быть пояснение в одну строку; ответить можно вариантом, своими словами или кнопкой «Пропустить» — тогда Kodik узнаёт, что вопрос пропущен, и продолжает по своему усмотрению. Если за минуту вы не тронули карточку, вопросы пропускаются, и агент продолжает по своему усмотрению, называя свои допущения. Карточка показывает обратный отсчёт этой минуты; выбор варианта, ввод текста или нажатие клавиши на ней останавливает отсчёт, и тогда время на ответ не ограничено. Пропущенная так карточка помечена «Пропущено — ответа не было вовремя», а то, что вы напишете после, уходит агенту обычным сообщением.
check_understanding Проверка понимания Проводит короткую проверку понимания в режиме обучения.
create_lesson Создание уроков Создаёт интерактивный HTML-урок и открывает его во встроенном браузере в режиме обучения.
generate_plan Создание плана Создаёт проверяемый план реализации в режиме планирования.
Инструменты MCP Любые инструменты из MCP-серверов Зависят от подключённых серверов. См. MCP.

Подключённые MCP-инструменты всегда добавляются в конец общего списка Harness после всех встроенных инструментов; внутри каждой группы инструменты отсортированы по алфавиту. Это действует во всех режимах, включая Plan, Ask и Educator. Их переключатель выбранного режима действует со следующего запроса, а конфигурацией сервера и инструмента управляют настройки MCP. В подсказки промпта и итоговые суммы входят только активные MCP-инструменты. MCP-инструмент может иметь побочные эффекты, определённые сервером, даже если выбранный режим оставляет встроенные инструменты Kodik для рабочего пространства только для чтения.

Повторное чтение файлов, поиск текста и поиск файлов проверяют текущее состояние рабочей области перед подавлением дублирующегося вывода. Если вы или другой процесс изменили файл либо создали файл, подходящий под шаблон поиска, тот же вызов может вернуть новые данные. Неизменившиеся повторы по-прежнему получают подсказку о зацикливании; субагенты следуют тому же правилу.

Для изменения файла нужен полный путь, включая имя файла. Если указан путь к папке, инструмент возвращает ошибку, чтобы агент мог исправить вызов. Если путь Windows начинается с буквы диска или обратного слеша и содержит недопустимый управляющий символ, например табуляцию, полученную из \t, ошибка предлагает передать полный путь с прямыми слешами или правильно экранированными обратными слешами. Табуляции и переводы строк в содержимом файла сохраняются.

Проверка вывода терминала тоже получает текущее состояние перед подавлением неизменившегося повтора. Новый вывод или результат завершения возвращается даже после нескольких пустых проверок. После компактизации, заменившей прежние результаты инструментов сводкой, чат и субагенты могут снова прочитать тот же файл полностью; отменённые вызовы по-прежнему учитываются защитой от повторов.

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

При поиске в папке grep использует настройку проекта files.encoding. Если path указывает на один файл, инструмент определяет его кодировку: кириллица находится в файлах Windows-1251, UTF-8 и UTF-16. Инструменты read_file и edit_file также декодируют текст файла и сохраняют его кодировку при записи. Если автоматическое определение неоднозначно, задайте правильную кодировку проекта в files.encoding.

Чтобы найти пустые строки, используйте grep с pattern: "^$". Результаты содержат путь к файлу и номер строки, даже если текст совпадения пуст.

Фильтры glob и exclude работают как в ripgrep: шаблон без /, например *.ts, совпадает с файлами на любой глубине, а шаблон с /, например src/*.ts, отсчитывается от папки поиска.

lsp отвечает на вопросы о коде точно, а не по совпадению текста: где объявлен символ, все места его использования, его тип и документация, какие классы реализуют интерфейс, структура файла и иерархия вызовов. Ссылки учитывают псевдонимы импорта и реэкспорты и никогда не включают то же имя в комментариях или строках. Для обычного текста, конфигурации и типов файлов без языкового сервера агент по-прежнему использует grep.

Агент указывает символ по файлу, номеру строки (с 1) и идентификатору на этой строке, поэтому ему не нужно считать колонки; если имя встречается на строке несколько раз, нужное выбирается через occurrence или character. Результаты — это path:line:column со строкой исходного кода; выводится не более 100 мест (200 символов) с указанием общего количества. В развёрнутой карточке инструмента показан список мест; щелчок по месту открывает файл в этой позиции.

  • Работает во всех папках рабочего пространства и в удалённых рабочих пространствах (SSH, WSL) с установленными там языковыми расширениями. Навигация агента не открывает вкладки редактора и не перемещает курсор, а несохранённые изменения в редакторе учитываются.
  • Входные пути вне рабочего пространства или защищённые .kodikignore отклоняются, а результаты в защищённых файлах скрываются с указанием их количества. Места в файлах зависимостей вне рабочего пространства помечаются как [external].
  • Для типа файлов без языкового сервера возвращается понятное сообщение, и агент переключается на grep. Пока языковой сервер загружается, lsp немного ждёт; если ответа всё ещё нет, он сообщает об этом, а не о том, что ничего не найдено, а к результатам, в которых могут отсутствовать другие файлы, добавляется примечание.
  • Недоступен в headless CLI, где нет окна редактора.

Параметр ranges принимает массив объектов {start_line, end_line}, где end_line — последняя прочитанная строка, и позволяет читать только нужные части большого файла. Один вызов возвращает до 16 КБ строк; размер считается в байтах, поэтому файлы с длинными строками, например минифицированный JSON, тоже ограничены. Если чтение остановилось на этом пределе, результат подсказывает, какие ranges запросить дальше. Если файл превышает допустимый размер (зависит от контекстного окна модели), read_file вернёт сообщение с рекомендациями использовать grep или ranges вместо полного чтения.

read_file("src/server.ts", ranges=[{start_line: 1, end_line: 50}])

read_file также открывает изображения PNG, JPEG, GIF и WebP. Изображение, у которого сторона длиннее 2048 пикселей или которое большое и близко к квадрату, перед отправкой уменьшается, а агент получает его исходный размер. PNG, JPEG и WebP сохраняют формат, GIF отправляется как статичный PNG. Изображения читаются до 20 МБ независимо от ограничения для текстовых файлов, зависящего от контекстного окна; если файл не является корректным изображением, агент получает ошибку.

shell выполняет команду без терминала: stdin закрыт, stdout/stderr объединяются в порядке прихода, ANSI-последовательности удаляются, а возвращается настоящий код завершения. Вызов ждёт, пока команда не завершится или не истечёт её timeout (по умолчанию 5000 мс; timeout меньше 5000 мс считается равным 5000, а больше 60000 мс — равным 60000, и вызов не отклоняется). Истечение таймаута не завершает и не перезапускает команду: она продолжает работать в фоне, а результат содержит её terminal_id, вывод на этот момент и пометку, что результат команды придёт позже как событие Terminal event. В пакете вызовов команда с таймаутом по умолчанию так же уходит в фон, когда другой вызов уже завершился и прошла секунда, а ваше сообщение сразу прерывает любое ожидание. Terminal event сообщает код выхода, время работы и только тот вывод, которого агент ещё не читал; get_terminal_output нужен только для проверки прогресса или новых логов до завершения. Команда, которой нужны TTY, пароль, SSH/аутентификация, редактор, REPL или другой интерактивный ввод, сразу завершается ошибкой, а результат подсказывает агенту попросить вас запустить её. shell, get_terminal_output и kill_terminal возвращают одинаковые поля жизненного цикла: состояние выполнения, идентификатор терминала, код выхода и метаданные собранного вывода.

shell принимает command, description, timeout, workdir и requires_approval, а команда всегда передаётся строкой оболочки. workdir задаёт папку, в которой выполняется команда, относительно рабочей области или абсолютным путём. Названия этих параметров из других агентов для программирования, например cwd, working_directory или timeout_ms, тоже работают, а флаг другого агента для запуска команды в фоне не учитывается: команда, которая ещё работает после ожидания, и так переходит в фон. Вызов с любым другим параметром или с командой в виде списка аргументов отклоняется ещё до запроса подтверждения.

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

Результат всегда относится только к дочернему процессу, который его породил; если фоновый процесс завершается во время активного хода, модель получает его настоящий код выхода и финальный вывод.

Выполняющаяся команда занимает только собственный процесс. Параллельные и последующие вызовы shell могут запускаться, пока npm run dev продолжает работать, а kill_terminal останавливает группу процессов по тому же terminal_id.

Остановленная команда получает нейтральный статус stopped, если её прервал пользователь или агент вызвал kill_terminal: карточка показывает Команда остановлена, а не ошибку и не оставляет повторную кнопку остановки. Команда, которая сама завершилась с кодом 130, считается ошибкой, как и при любом другом ненулевом коде; остановленной считается только команда, которую остановили вы или агент.

Если команду остановили вы, в следующий результат инструмента или сообщение пользователя модель один раз получает событие Terminal event с названием остановленной команды. Остановка через kill_terminal не помечается как выполненная пользователем, потому что модель уже знает, что сама запросила остановку.

Команды агента выполняются в неинтерактивных оболочках, поэтому никогда не попадают в историю ваших терминалов.

# Запуск dev-сервера: через 5 секунд он ещё работает и продолжает работать в фоне
terminal_id = shell("npm run dev")
# Получение логов прогресса при необходимости
get_terminal_output(terminal_id=terminal_id)
# Остановка процесса
kill_terminal(terminal_id=terminal_id)

Открывает headless-браузер, загружает страницу и возвращает её содержимое в формате Markdown. Вывод обрезается до 32 КБ. Не работает с plain HTTP (кроме localhost).

С параметром query агент получает не всю страницу, а только её разделы, где встречаются слова запроса, — каждый со своим заголовком и в порядке страницы. Страница остаётся в разговоре и отправляется заново с каждым следующим запросом, поэтому точечная загрузка длинной страницы документации занимает намного меньше контекста. Если запрос не встречается ни в одном разделе, возвращается начало страницы.

Позволяет агенту находить актуальную информацию, на которую у него нет ссылки: свежие версии библиотек и их API, незнакомые сообщения об ошибках, breaking changes, страницы официальной документации. Поиск выполняется на стороне сервера через бэкенд Kodik — ключи поискового провайдера никогда не попадают на вашу машину. Каждый успешный поиск списывает фиксированную сумму с того же баланса кредитов, что и использование моделей; неудачные поиски не оплачиваются. Агент комбинирует два веб-инструмента: ищет через web_search, затем читает самый перспективный результат целиком через web_fetch.

Если поисковый сервис возвращает нечитаемый ответ или его обязательный прокси недоступен, поиск сообщает об ошибке и не списывает кредиты. После восстановления сервиса можно повторить запрос.

Доступен только на провайдере Kodik. На кастомных провайдерах (со своим ключом или локальным сервером) инструмент не предлагается — там поиск невозможно выполнить и оплатить. У подтверждения есть собственный переключатель авто-одобрения (webSearch) — см. Авто-Одобрение.

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

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

Встроенный браузер поддерживает JavaScript-диалоги prompt(). Агент получает сообщение и значение по умолчанию, ожидает диалог с condition: "dialog" и отвечает через handle_dialog с prompt_text. Подтверждение возвращает введённый текст, включая пустую строку; без текста сохраняется значение по умолчанию, а отмена возвращает null. Вы также можете ответить в окне Browser prompt. Переход на другую страницу или закрытие вкладки отменяет ожидающий диалог.

Страница, вызывающая window.open – так открываются окна входа и оплаты, – получает новую вкладку в том же окне, и эта вкладка сохраняет связь со страницей, которая её открыла, поэтому сценарий может вернуть результат и завершиться. Окно, которое страница пытается открыть без вашего клика, отклоняется – как и в Chrome.

Управляет тем же Integrated Browser, который видите вы в Kodik. Агент открывает собственную вкладку с выбранным режимом хранения данных браузера. Открытая вами вкладка остаётся приватной, пока вы не сфокусируете её и явно не разрешите поделиться ею с текущим чатом; отзыв доступа не закрывает вашу вкладку. Агент может открыть предпросмотр по URL, при необходимости сначала запустить команду dev-сервера и дождаться ответа URL, а затем закрыть предпросмотр и остановить запущенный им сервер.

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

Вкладки, открытые вами или агентом, используют параметр workbench.browser.dataStorage в Settings JSON:

  • global (по умолчанию): файлы cookie, авторизации и данные сайтов общие для вкладок и рабочих областей и сохраняются при создании чата, закрытии вкладки и перезапуске Kodik.
  • workspace: те же данные сохраняются в текущей рабочей области отдельно от других рабочих областей.
  • ephemeral: каждая новая вкладка получает временное изолированное хранилище.

Чат по-прежнему управляет только своими вкладками или вкладками, которыми вы явно поделились. В постоянном режиме новые вкладки агента могут использовать аккаунты, в которые вы уже вошли в этом профиле браузера. В ненадёжных рабочих областях всегда используется ephemeral. Чтобы выйти из всех аккаунтов в текущем постоянном профиле и удалить данные сайтов, выберите Clear Storage (Global) или Clear Storage (Workspace) в меню браузера, затем перезагрузите страницу. Изменение режима хранения применяется к новым вкладкам; вход из старой временной вкладки нужно повторить в новой постоянной вкладке.

При ручном просмотре выберите Find in Page в меню браузера … (или нажмите Ctrl+F / Cmd+F), чтобы найти текст на отображаемой странице. Совпадения подсвечиваются при переходе между ними. Панель поиска открывается поверх страницы сразу под заголовком браузера и не меняет размер viewport.

Используйте browser для всего, что рендерится в браузере. Инструмент умеет перечислять вкладки, принадлежащие текущему чату или явно предоставленные ему, выбирать связанный popup или дочернюю вкладку по ID сессии, делать скриншоты viewport, элемента, области или всей страницы, читать консоль, менять размер до мобильного/планшетного/десктопного брейкпоинта, переходить по страницам, инспектировать HTML/стили/размеры элемента через типизированную диагностику браузера и читать компактный accessibility snapshot с открытыми shadow roots и фреймами. Он может кликать, заполнять поля, нажимать сочетания клавиш, выбирать опции, отмечать контролы, наводить курсор, перетаскивать элементы и прокручивать страницу или вложенный контейнер. Если семантическое наведение невозможно, агент может использовать координаты, привязанные к свежему скриншоту; устаревшие или чужие координаты отклоняются.

Ссылки из snapshot действуют только для текущего наблюдения. Агент может строго искать элементы по role/name, label, placeholder, тексту, test ID, адресу ссылки, CSS и фрейму и ждать URL, загрузку, состояние сети без активных запросов, текст, состояние элемента, popup, диалог, выбор файла или загрузку; ожидания ограничены по времени и отменяемы, а неоднозначная или устаревшая цель завершается ошибкой вместо скрытого выбора первого совпадения. JavaScript-диалоги сообщаются до возобновления страницы, загружать можно только подтверждённые файлы из workspace, а скачивания агента сохраняются во временном хранилище его сессии. Принадлежащая агенту браузерная сессия остаётся привязанной к своему чату после Developer: Reload Window, поэтому следующее действие переподключается к той же атрибутированной вкладке, а не открывает дубликат. Если Browser View потерян по другой причине, следующее действие выполняет одну ограниченную попытку переподключения, повторно загружает последнюю страницу и восстанавливает вкладку в фоне.

Для авторизованных сценариев выполните команду Kodik: Save Browser Credential и привяжите учётные данные к точному http://- или https://-origin. Агент видит только название и непрозрачный ID; Kodik заполняет сохранённые имя пользователя и пароль ниже границы, видимой модели, и запрещает повторное использование после смены origin. Чтение/запись буфера обмена и выбор учётных данных требуют подтверждения. diagnostics выдаёт ограниченный отчёт об ошибках страницы, неудачных запросах, производительности и ресурсах, а activity — журнал с удалёнными секретами. Содержимое страницы всегда считается недоверенным. CAPTCHA, passkey, MFA или подтверждение на устройстве приостанавливают автоматизацию для передачи управления пользователю; чтобы забрать или вернуть управление самостоятельно, откройте вкладку браузера и выполните Take Over / Return Agent Browser через палитру команд.

Открытие произвольных URL, запуск dev-серверов и взаимодействие со страницей подчиняются вашим настройкам авто-подтверждения. Устаревшее compatibility-действие eval не может выполнять произвольный JavaScript: оно принимает только литералы/арифметику, разрешённые чтения свойств страницы или элемента и данные состояния урока; присваивания и вызовы функций отклоняются. Скриншоты, сделанные агентом, показываются прямо в чате; нажмите на миниатюру, чтобы открыть полное изображение во вкладке редактора.

Инструменты read_file, grep, shell и другие проверяют .kodikignore перед доступом к файлам. Файлы, совпадающие с шаблонами в .kodikignore, недоступны агенту. Подробнее — в разделе Игнорируемые файлы.

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