Русский
Документация
Инструменты

Инструменты

Управление инструментами, которые может использовать LLM.

Инструменты позволяют LLM выполнять действия в вашей кодовой базе. OpenCode поставляется с набором встроенных инструментов, но вы можете расширить его пользовательскими инструментами или MCP-серверами.

По умолчанию все инструменты включены и не требуют разрешения для запуска. Вы можете управлять поведением инструментов через разрешения.


Настройка

Используйте поле permission для управления поведением инструментов. Вы можете разрешить, запретить или потребовать одобрения для каждого инструмента.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "deny",
    "bash": "ask",
    "webfetch": "allow"
  }
}

Вы также можете использовать подстановочные знаки для управления несколькими инструментами сразу. Например, чтобы потребовать одобрения для всех инструментов с MCP-сервера:

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "mymcp_*": "ask"
  }
}

Подробнее о настройке разрешений.


Встроенные

Вот все встроенные инструменты, доступные в OpenCode.


bash

Выполнение команд оболочки в среде вашего проекта.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "bash": "allow"
  }
}

Этот инструмент позволяет LLM запускать команды терминала, такие как npm install, git status или любую другую команду оболочки.


edit

Изменение существующих файлов с использованием точных замен строк.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "allow"
  }
}

Этот инструмент выполняет точные правки файлов путём замены точных совпадений текста. Это основной способ, которым LLM изменяет код.


write

Создание новых файлов или перезапись существующих.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "allow"
  }
}

Используйте это, чтобы разрешить LLM создавать новые файлы. Он перезапишет существующие файлы, если они уже есть.

Примечание: инструмент write управляется разрешением edit, которое охватывает все модификации файлов (edit, write, apply_patch).


read

Чтение содержимого файлов из вашей кодовой базы.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "read": "allow"
  }
}

Этот инструмент читает файлы и возвращает их содержимое. Он поддерживает чтение определённых диапазонов строк для больших файлов.


grep

Поиск содержимого файлов с использованием регулярных выражений.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "grep": "allow"
  }
}

Быстрый поиск содержимого по вашей кодовой базе. Поддерживает полный синтаксис regex и фильтрацию по шаблону файлов.


glob

Поиск файлов по сопоставлению шаблонов.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "glob": "allow"
  }
}

Поиск файлов с использованием glob-шаблонов, таких как **/*.js или src/**/*.ts. Возвращает пути совпадающих файлов, отсортированные по времени изменения.


lsp (экспериментальный)

Взаимодействие с настроенными LSP-серверами для получения функций кодового интеллекта, таких как определения, ссылки, информация при наведении и иерархия вызовов.

Примечание: этот инструмент доступен только когда OPENCODE_EXPERIMENTAL_LSP_TOOL=true (или OPENCODE_EXPERIMENTAL=true).

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "lsp": "allow"
  }
}

Поддерживаемые операции включают goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol, goToImplementation, prepareCallHierarchy, incomingCalls и outgoingCalls.

Чтобы настроить, какие LSP-серверы доступны для вашего проекта, смотрите LSP-серверы.


apply_patch

Применение патчей к файлам.

opencode.json
{
  "$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) и возврат его содержимого в диалог.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "skill": "allow"
  }
}

todowrite

Управление списками задач во время сессий кодирования.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "todowrite": "allow"
  }
}

Создаёт и обновляет списки задач для отслеживания прогресса во время сложных операций. LLM использует это для организации многоэтапных задач.

Примечание: этот инструмент по умолчанию отключён для субагентов, но вы можете включить его вручную. Подробнее


webfetch

Получение веб-контента.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "webfetch": "allow"
  }
}

Позволяет LLM получать и читать веб-страницы. Полезно для поиска документации или исследования онлайн-ресурсов.


websearch

Поиск информации в интернете.

Примечание: этот инструмент доступен только при использовании провайдера OpenCode или когда переменная окружения OPENCODE_ENABLE_EXA установлена в любое истинное значение (например, true или 1).

Чтобы включить при запуске OpenCode:

OPENCODE_ENABLE_EXA=1 opencode
opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "websearch": "allow"
  }
}

Выполняет веб-поиск с использованием Exa AI для поиска релевантной информации в интернете. Полезно для исследования тем, поиска текущих событий или сбора информации за пределами даты отсечения обучающих данных.

API-ключ не требуется — инструмент подключается напрямую к размещённому MCP-сервису Exa AI без аутентификации.

Совет: используйте websearch, когда нужно найти информацию (обнаружение), и webfetch, когда нужно получить содержимое с конкретного URL (извлечение).


question

Задавать пользователю вопросы во время выполнения.

opencode.json
{
  "$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.