Инструменты
Управление инструментами, которые может использовать LLM.
Инструменты позволяют LLM выполнять действия в вашей кодовой базе. OpenCode поставляется с набором встроенных инструментов, но вы можете расширить его пользовательскими инструментами или MCP-серверами.
По умолчанию все инструменты включены и не требуют разрешения для запуска. Вы можете управлять поведением инструментов через разрешения.
Настройка
Используйте поле permission для управления поведением инструментов. Вы можете разрешить, запретить или потребовать одобрения для каждого инструмента.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
}Вы также можете использовать подстановочные знаки для управления несколькими инструментами сразу. Например, чтобы потребовать одобрения для всех инструментов с MCP-сервера:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"mymcp_*": "ask"
}
}Подробнее о настройке разрешений.
Встроенные
Вот все встроенные инструменты, доступные в OpenCode.
bash
Выполнение команд оболочки в среде вашего проекта.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": "allow"
}
}Этот инструмент позволяет LLM запускать команды терминала, такие как npm install, git status или любую другую команду оболочки.
edit
Изменение существующих файлов с использованием точных замен строк.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}Этот инструмент выполняет точные правки файлов путём замены точных совпадений текста. Это основной способ, которым LLM изменяет код.
write
Создание новых файлов или перезапись существующих.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}Используйте это, чтобы разрешить LLM создавать новые файлы. Он перезапишет существующие файлы, если они уже есть.
Примечание: инструмент
writeуправляется разрешениемedit, которое охватывает все модификации файлов (edit,write,apply_patch).
read
Чтение содержимого файлов из вашей кодовой базы.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"read": "allow"
}
}Этот инструмент читает файлы и возвращает их содержимое. Он поддерживает чтение определённых диапазонов строк для больших файлов.
grep
Поиск содержимого файлов с использованием регулярных выражений.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"grep": "allow"
}
}Быстрый поиск содержимого по вашей кодовой базе. Поддерживает полный синтаксис regex и фильтрацию по шаблону файлов.
glob
Поиск файлов по сопоставлению шаблонов.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"glob": "allow"
}
}Поиск файлов с использованием glob-шаблонов, таких как **/*.js или src/**/*.ts. Возвращает пути совпадающих файлов, отсортированные по времени изменения.
lsp (экспериментальный)
Взаимодействие с настроенными LSP-серверами для получения функций кодового интеллекта, таких как определения, ссылки, информация при наведении и иерархия вызовов.
Примечание: этот инструмент доступен только когда
OPENCODE_EXPERIMENTAL_LSP_TOOL=true(илиOPENCODE_EXPERIMENTAL=true).
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"lsp": "allow"
}
}Поддерживаемые операции включают goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol, goToImplementation, prepareCallHierarchy, incomingCalls и outgoingCalls.
Чтобы настроить, какие LSP-серверы доступны для вашего проекта, смотрите LSP-серверы.
apply_patch
Применение патчей к файлам.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}Этот инструмент применяет файлы патчей к вашей кодовой базе. Полезен для применения diff и патчей из различных источников.
При обработке хуков tool.execute.before или tool.execute.after проверяйте input.tool === "apply_patch" (не "patch").
apply_patch использует output.args.patchText вместо output.args.filePath. Пути встроены в строки-маркеры внутри patchText и являются относительными к корню проекта (например: *** Add File: src/new-file.ts, *** Update File: src/existing.ts, *** Move to: src/renamed.ts, *** Delete File: src/obsolete.ts).
Примечание: инструмент
apply_patchуправляется разрешениемedit, которое охватывает все модификации файлов (edit,write,apply_patch).
skill
Загрузка навыка (файла SKILL.md) и возврат его содержимого в диалог.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"skill": "allow"
}
}todowrite
Управление списками задач во время сессий кодирования.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todowrite": "allow"
}
}Создаёт и обновляет списки задач для отслеживания прогресса во время сложных операций. LLM использует это для организации многоэтапных задач.
Примечание: этот инструмент по умолчанию отключён для субагентов, но вы можете включить его вручную. Подробнее
webfetch
Получение веб-контента.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"webfetch": "allow"
}
}Позволяет LLM получать и читать веб-страницы. Полезно для поиска документации или исследования онлайн-ресурсов.
websearch
Поиск информации в интернете.
Примечание: этот инструмент доступен только при использовании провайдера OpenCode или когда переменная окружения
OPENCODE_ENABLE_EXAустановлена в любое истинное значение (например,trueили1).Чтобы включить при запуске OpenCode:
OPENCODE_ENABLE_EXA=1 opencode
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"websearch": "allow"
}
}Выполняет веб-поиск с использованием Exa AI для поиска релевантной информации в интернете. Полезно для исследования тем, поиска текущих событий или сбора информации за пределами даты отсечения обучающих данных.
API-ключ не требуется — инструмент подключается напрямую к размещённому MCP-сервису Exa AI без аутентификации.
Совет: используйте
websearch, когда нужно найти информацию (обнаружение), иwebfetch, когда нужно получить содержимое с конкретного URL (извлечение).
question
Задавать пользователю вопросы во время выполнения.
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"question": "allow"
}
}Этот инструмент позволяет LLM задавать пользователю вопросы во время задачи. Он полезен для:
- Сбора предпочтений или требований пользователя
- Прояснения неоднозначных инструкций
- Получения решений по вариантам реализации
- Предложения выбора направления
Каждый вопрос включает заголовок, текст вопроса и список вариантов. Пользователи могут выбрать из предложенных вариантов или ввести собственный ответ. Когда вопросов несколько, пользователи могут перемещаться между ними перед отправкой всех ответов.
Пользовательские инструменты
Пользовательские инструменты позволяют вам определять собственные функции, которые может вызывать LLM. Они определяются в вашем файле конфигурации и могут выполнять произвольный код.
Подробнее о создании пользовательских инструментов.
MCP-серверы
MCP-серверы (Model Context Protocol) позволяют вам интегрировать внешние инструменты и сервисы. Это включает доступ к базам данных, интеграции с API и сторонние сервисы.
Подробнее о настройке MCP-серверов.
Внутреннее устройство
Внутренне инструменты, такие как grep и glob, используют ripgrep (opens in a new tab) под капотом. По умолчанию ripgrep учитывает шаблоны .gitignore, что означает, что файлы и каталоги, перечисленные в вашем .gitignore, будут исключены из поиска и списков.
Шаблоны игнорирования
Чтобы включить файлы, которые обычно были бы проигнорированы, создайте файл .ignore в корне вашего проекта. Этот файл может явно разрешить определённые пути.
!node_modules/
!dist/
!build/Например, этот файл .ignore позволяет ripgrep искать внутри каталогов node_modules/, dist/ и build/, даже если они перечислены в .gitignore.