Инструменты OpenCode

Основные возможности OpenCode исходят не только от самой большой модели, но и отинструментов, которые могут быть вызваны。

Суть инструментов: превращение LLM из умеющего говорить в умеющего делать.

Инструменты = способность OpenCode к выполнению, а разрешения = границы безопасности.


1. Что такое инструменты

Инструменты — это интерфейсы возможностей для LLM выполнять операции в проекте, например:

  • Чтение кода
  • Изменение файлов
  • Выполнение команд
  • Поиск кода
  • Доступ к сети

Без инструментов: может только генерировать код

С инструментами: можетнапрямую манипулировать проектом


2. Управление разрешениями инструментов (самое важное)

По умолчанию:

  • Все инструменты включены
  • И могут выполняться без подтверждения

В производственных средах необходимо настроить разрешения!

1. Базовая настройка разрешений

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "deny",
    "bash": "ask",
    "webfetch": "allow"
  }
}
Значение разрешения Описание
allow Разрешить прямое выполнение
deny Полностью запрещено
ask Требуется ручное подтверждение перед выполнением

2. Управление подстановочными знаками

Можно управлять инструментами пакетно:

{
  "permission": {
    "mymcp_*": "ask"
  }
}

Все инструменты из MCP требуют одобрения


3. Объяснение встроенных инструментов

OpenCode поставляется с полным набором инструментов инженерного уровня:

1. bash (выполнение команд)

{
  "permission": {
    "bash": "allow"
  }
}

Назначение:

  • Выполнять shell-команды
  • Например, npm install, git status

Риск:Высокий (рекомендуется установить в ask)

2. edit (основной инструмент)

{
  "permission": {
    "edit": "allow"
  }
}

Назначение:

  • Изменение существующих файлов
  • На основе точной замены текста

Примечание:Это ключевая возможность ИИ изменять код

3. write (создание файлов)

Назначение:

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

Примечание:

write контролируется разрешением edit

4. read (Чтение файла)

{
  "permission": {
    "read": "allow"
  }
}

Назначение:

  • Чтение файлов кода
  • Поддерживает чтение построчно

Риск:Низкий (рекомендуется всегда разрешать)

5. grep (Поиск по содержимому)

{
  "permission": {
    "grep": "allow"
  }
}

Назначение:

  • Поиск по коду с помощью регулярных выражений

6. glob (Сопоставление файлов)

Назначение:

  • Поиск путей к файлам (например, src/**/*.ts)

7. list (Просмотр каталогов)

Назначение:

  • Вывод структуры каталогов

8. patch (Применение патча)

Назначение:

  • Применить diff-патчи

Примечание:Управляется разрешением на редактирование

9. lsp (Экспериментально)

Назначение:

  • Интеллектуальный анализ кода (переход к определению, поиск ссылок)

Как включить:

OPENCODE_EXPERIMENTAL_LSP_TOOL=true

10. skill (Загрузка навыков)

Назначение:

  • Загрузить SKILL.md
  • Улучшить поведение AI

11. todowrite (Управление задачами)

Назначение:

  • Ведение списков задач
  • Отслеживание сложных рабочих процессов

12. webfetch (Чтение веб-страниц)

Назначение:

  • Получить содержимое по указанному URL

13. websearch (Онлайн-поиск)

Как включить:

OPENCODE_ENABLE_EXA=1 opencode

Назначение:

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

Разница:

  • websearch: поиск информации (обнаружение)
  • webfetch: чтение содержимого (получение)

14. question (Интерактивный опрос)

Назначение:

  • Задавать вопросы пользователю
  • Сбор требований

Подходит для:

  • Неясные требования
  • Когда требуются решения пользователя

4. Пользовательские инструменты

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

Например:

  • Вызов внутренних API
  • Работа с базами данных
  • Выполнение бизнес-логики

Суть:Позволить LLM вызывать функции


5. Серверы MCP (расширенные возможности)

MCP (Model Context Protocol) позволяет подключать внешние системы:

  • Базы данных
  • Сторонние API
  • Внутренние сервисы

Это эквивалентно подключению «внешних возможностей» к ИИ


6. Базовый механизм (важно)

OpenCode использует ripgrep в качестве поискового движка:

  • Учитывает .gitignore
  • По умолчанию игнорирует такие каталоги, как node_modules

Как переопределить правила игнорирования

Создайте файл:

.ignore

Пример:

!node_modules/
!dist/
!build/

Принудительно включить эти каталоги


7. Лучшие практики (настоятельно рекомендуется)

  • read / grep / glob → разрешить
  • edit → спрашивать (этап разработки)
  • bash → спрашивать (производственная среда)
  • webfetch → разрешить

Основные принципы:

  • Чтение может быть открытым
  • Изменения должны контролироваться
  • Будьте осторожны при выполнении команд
Другие расширения