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

Ранние реализации такого вызова были хрупкими: агент выводил текст вроде `Action: web_fetch`, а обвязка разбирала его регулярными выражениями. Модель могла чуть изменить формат — и всё ломалось. Современные LLM решают эту проблему иначе: они дообучены формировать структурированные JSON-запросы на вызов инструментов. Встроенная валидация снижает число ошибок и делает агента предсказуемым.

ИнструментФункцияОсобенности
run_bashВыполняет команду в оболочкеСамый мощный и опасный; возвращает stdout и stderr
read_fileЧитает строки файлаПоддерживает offset и limit для постраничного чтения
write_fileСоздаёт или перезаписывает файлАвтоматически создаёт недостающие каталоги
edit_fileТочечная замена строки в файлеЗаменяет только первое вхождение; не трогает остальное
glob_filesИщет файлы по шаблону имениРекурсивный поиск по каталогу
grepИщет по содержимому файловВозвращает путь, номер строки и строку; фильтр по типу файла
webfetchЗагружает веб-страницуТолько HTTP/HTTPS; лимит 2 МБ; возвращает чистый текст

В руководстве реализуется подмодуль `tools` на чистом Python — без LangChain, AutoGen и других фреймворков. Это позволяет понять, что именно происходит внутри, прежде чем пользоваться готовыми абстракциями.

Центральный инструмент набора — `run_bash`. Он передаёт произвольную команду в оболочку через `subprocess.run` и возвращает stdout и stderr. Это одновременно самый универсальный и самый рискованный инструмент: агент получает возможность делать на машине буквально всё. Авторы руководства прямо предупреждают, что вопрос безопасности будет рассмотрен отдельно.

Для работы с файлами реализованы три инструмента с разными задачами. `read_file` читает файл постранично — с параметрами `offset` и `limit`, чтобы не загружать в контекст сотни строк за раз. `write_file` создаёт файл целиком, автоматически создавая недостающие каталоги. `edit_file` делает точечную замену: находит первое вхождение строки и заменяет его — это безопаснее полной перезаписи, когда нужно исправить одну строку кода, не трогая остальное. Именно `edit_file` авторы называют основным инструментом кодинг-агентов.

Для навигации по файловой системе добавлены `glob_files` и `grep`. Первый ищет файлы по шаблону имени рекурсивно по каталогу. Второй ищет по содержимому с помощью регулярных выражений и возвращает путь к файлу, номер строки и саму строку. Параметр `include` в `grep` позволяет ограничить поиск конкретным типом файлов — например, только `.py`, чтобы не сканировать бинарники.

Седьмой инструмент — `webfetch` — загружает веб-страницу по HTTP или HTTPS и возвращает её текстовое содержимое. BeautifulSoup убирает HTML-разметку, лишние переносы строк сворачиваются, а размер ответа ограничен 2 МБ. Это не даёт одной большой странице занять всё контекстное окно модели.

Комбинация этих семи инструментов покрывает большинство задач, которые решают популярные кодинг-агенты — Cursor, GitHub Copilot Workspace, Devin. Разница в том, что здесь каждая функция написана вручную и прозрачна для разработчика. Следующий шаг, который анонсируют авторы, — подключить инструменты к агенту и разобраться с безопасностью исполнения произвольных команд.