Языковая модель, запущенная сама по себе, ограничена одним действием — генерацией текста. Она не видит файловую систему, не может запустить скрипт и не знает, что произошло в мире после даты её обучения. Чтобы модель стала агентом — программой, которая выполняет задачи, а не просто отвечает на вопросы, — ей нужен доступ к инструментам: функциям, которые она вызывает самостоятельно в ходе работы.
Ранние реализации такого вызова были хрупкими: агент выводил текст вроде `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. Разница в том, что здесь каждая функция написана вручную и прозрачна для разработчика. Следующий шаг, который анонсируют авторы, — подключить инструменты к агенту и разобраться с безопасностью исполнения произвольных команд.


