# OpenCode с Ollama: локальная модель и проверка правки кода

Источник: https://modelium.tech/zhurnal/opencode-s-ollama/

OpenCode может редактировать файлы и запускать команды, получая ответы от модели через локальную Ollama. Для первого запуска выберите именно локальный тег, ограничьте права клиента и проверьте изменение одного учебного файла через Git diff. Адрес localhost сам по себе не доказывает отсутствие иных сетевых запросов, а ответ модели не доказывает, что файл изменился.

Документация сверена 3 октября 2026 года по закреплённым ревизиям OpenCode и Ollama. **Это инструкция для проверки на собственном устройстве, не отчёт о прогоне Modelium.** У OpenCode и Ollama есть версии с отличающимся поведением; перед работой с настоящим кодом проверьте установленную версию и настройки. [s1](#src-s1) [s7](#src-s7)

## Что именно будет локальным?

OpenCode — отдельный агентный клиент: он читает проект, редактирует файлы и может выполнять команды; Ollama обслуживает выбранную модель. Официальная интеграция Ollama предлагает как **Local**, так и **Cloud** модели, поэтому команда `ollama launch opencode` сама по себе не доказывает, что код обрабатывается только локально: в выборе нужно явно указать установленный локальный тег. Для сетевого контура потребуются отдельные проверки и ограничения клиента. [s1](#src-s1) [s8](#src-s8)

Здесь результатом считается **правка одного учебного файла** с подтверждённым diff, а не правдоподобный ответ агента. Общий [путь для coding-agent через Aider](/zhurnal/lokalnyy-koding-agent-cherez-ollama/) решает близкую задачу другим клиентом; эта страница посвящена именно настройке OpenCode, разрешениям действий и проверке его интеграции с Ollama. Если нужен только сервер модели, начните с [Ollama](/zapusk/ollama/). [s1](#src-s1) [s5](#src-s5)

## Как подготовить безопасный тест?

Выберите отдельный **пустой Git-репозиторий без секретов и клиентских данных** на машине, где уже установлены Ollama, OpenCode и Git. Убедитесь, что локальный сервер Ollama отвечает и нужная модель действительно есть в `ollama list`; если её ещё нет, скачивание выбранного тега через `ollama pull <тег>` потребует сети и диска. Возможность модели возвращать `tool_calls` предусмотрена API Ollama, но надёжность редактирования конкретным тегом этим не гарантируется: проверяйте поведение на учебном файле. [s1](#src-s1) [s4](#src-s4)

Ollama рекомендует для coding tools контекст **64 000 токенов и больше** и приводит пример `OLLAMA_CONTEXT_LENGTH=64000 ollama serve`. Это рекомендация runtime, **не** минимум RAM/VRAM и не обещание, что ваша модель или железо поддержат такой режим: длинный контекст расходует больше памяти. Если приложение Ollama или служба уже запустили сервер, не стартуйте второй на том же порту — меняйте настройку именно у работающей службы или приложения. После пробного обращения `ollama ps` показывает столбцы `CONTEXT` и `PROCESSOR` для фактически загруженной модели. В документации провайдера OpenCode при проблемах с tool calls отдельно советуют начать с `num_ctx` 16–32k: эти советы не следует выдавать за измеренный единый порог успеха. [s3](#src-s3) [s2](#src-s2) [s8](#src-s8)

## Как подключить OpenCode к Ollama и ограничить права?

Для быстрого знакомства Ollama документирует `ollama launch opencode`. Команда может запустить OpenCode с временной конфигурацией выбранной модели; `ollama launch opencode --config` настраивает интеграцию без интерактивной сессии. Запуск не перезаписывает глобальный `~/.config/opencode/opencode.json`, а модель, заданная только в этом файле, не обязана появиться в списке выбора самой команды `ollama launch`. **Выберите локальный тег, а не Cloud**, и проверьте фактические настройки до разрешения действий. [s1](#src-s1)

Для контролируемого учебного проекта используйте официальный ручной вариант: в корне проекта задайте `opencode.json` с custom provider `ollama`, пакетом `@ai-sdk/openai-compatible`, `options.baseURL` равным `http://localhost:11434/v1` и `models` с тем же ID, что выбранный локальный тег. Пример документации использует `qwen3.5`; если у вас установлен другой тег, замените ID в обоих местах, не считайте пример гарантией совместимости любого варианта. Конфигурация OpenCode **сливается** из нескольких мест: проектный файл не отменяет остальные непересекающиеся глобальные/управляемые настройки, поэтому проверьте их и не открывайте секретный рабочий репозиторий для этого теста. [s1](#src-s1) [s2](#src-s2) [s7](#src-s7)

В тот же учебный `opencode.json` добавьте разрешения `permission`: `"*": "ask"`, `"bash": "ask"`, `"edit": "ask"`, `"external_directory": "deny"`, `"webfetch": "deny"`, `"websearch": "deny"` и `"task": "deny"`. Для применения вставьте эти пары в JSON-объект `permission` рядом с объектом `provider` из [официального примера настройки OpenCode](https://github.com/anomalyco/opencode/blob/bbe4c952d707bcb5436646de30a1ed8f0cc64b74/packages/web/src/content/docs/providers.mdx). Это настройка разрешений самого клиента, **не** сетевая песочница ОС: команды, которым вы дадите право запуска, тоже могут обращаться к сети. По умолчанию у OpenCode большинство прав — `allow`; не запускайте `--auto` в первом тесте, так как этот режим подтверждает запросы, для которых установлен `ask`. [s2](#src-s2) [s5](#src-s5)

При ручном варианте откройте проект в терминале, проверьте `opencode models ollama`, затем запустите `opencode -m ollama/<тег>`; путь модели для `-m` — `provider/model`, а в интерактивном клиенте модель выбирается через `/models`. Не вводите в провайдере адрес облачного API и не полагайтесь на незаметное переключение в Cloud. Если в списке нет тега, сначала перепроверьте локальный `ollama list` и JSON-конфигурацию — одна только запись модели в конфиге не создаёт веса. [s6](#src-s6) [s1](#src-s1) [s2](#src-s2)

## Как доказать правку, не доверяя ответу агента?

В новом учебном Git-проекте создайте `smoke.txt` со строкой `hello`, добавьте и закоммитьте только его, затем убедитесь, что `git status --short` пуст. Не переносите процедуру в чужой репозиторий с незакоммиченными файлами. Попросите OpenCode: «Замени `hello` на `hello world` **только в** `smoke.txt`; не выполняй другие команды и не меняй остальные файлы». Разрешите лишь ожидаемое редактирование одного файла; запрос на `bash`, работу вне проекта или сетевые обращения отклоните. Такое разрешение — условие вашей проверки, а не результат, уже полученный Modelium. [s5](#src-s5) [s1](#src-s1)

После выхода из клиента запустите `git status --short`, `git diff --check` и `git diff -- smoke.txt`. Успех — diff изменяет ровно разрешённый файл без посторонних правок, а его содержимое показывает `hello world`; если агент только написал это в чате, тест **не пройден**. Просмотрите все неожиданные файлы до повторного запуска. Чтобы откатить лишь подтверждённую учебную правку, выполните `git restore -- smoke.txt`, потом проверьте `git status --short`; не используйте массовый сброс реального проекта. Это редакционный протокол проверяемого результата, а не сообщение о собственном эксперименте. [s5](#src-s5) [s6](#src-s6)

## Что делать, если правки нет или запрос ушёл не туда?

Проверьте по порядку: верен ли локальный `baseURL` с `/v1`, совпадает ли тег модели в `ollama list` и `opencode models ollama`, есть ли права на `edit`, достаточен ли фактически выделенный контекст в `ollama ps`, не выбран ли Cloud вместо Local. Ответ локального Ollama API с поддержкой tool calls — лишь часть цепочки: выбранная модель должна предложить нужный вызов, клиент — запросить разрешение, а Git diff — подтвердить изменение. Сведения об агентном [tool calling](/zhurnal/tool-calling-lokalnyh-modeley/) и [контексте Ollama](/zhurnal/ollama-kontekst-dlya-agenta/) полезны для отдельной диагностики. [s1](#src-s1) [s2](#src-s2) [s3](#src-s3) [s4](#src-s4) [s5](#src-s5)

Если нужна работа **без внешней сети**, не считайте `localhost` и запрет только `webfetch` доказательством изоляции: другие действия клиента, плагины и разрешённые shell-команды нужно проверить отдельно сетевым тестом, описанным в [проверке офлайн-контура](/zhurnal/proverka-offline-kontura-ii/). Ollama отдельно документирует отключение своих облачных функций через `OLLAMA_NO_CLOUD=1` с перезапуском сервера; этот флаг сам по себе не изолирует OpenCode и не заменяет настройки ОС. [s8](#src-s8) [s5](#src-s5)

**Следующий шаг:** после успешного diff откройте [проверку контекста и размещения модели](/zhurnal/ollama-kontekst-dlya-agenta/) и повторите опыт на тестовом проекте вашего размера. Modelium не запускал модель, не проверял реальный tool call, не измерял качество правки, скорость или память. [s3](#src-s3) [s4](#src-s4)

## Источники

1. [Ollama — OpenCode integration: запуск, локальные модели и config precedence](https://github.com/ollama/ollama/blob/d9075caf1ae19447716325d1094f50edea4b036d/docs/integrations/opencode.mdx) — получено 2026-10-03
2. [OpenCode — Ollama provider и локальный baseURL](https://github.com/anomalyco/opencode/blob/bbe4c952d707bcb5436646de30a1ed8f0cc64b74/packages/web/src/content/docs/providers.mdx) — получено 2026-10-03
3. [Ollama — Context length, allocation and ollama ps](https://github.com/ollama/ollama/blob/f0078ae4766d0d570e196158f20dde309bd96124/docs/context-length.mdx) — получено 2026-10-03
4. [Ollama — Tool calling capability and model-dependent calls](https://github.com/ollama/ollama/blob/cc9555aff0f220748dc761a4302cfaea7c62c9fe/docs/capabilities/tool-calling.mdx) — получено 2026-10-03
5. [OpenCode — Permissions, defaults, ask/deny and auto mode](https://github.com/anomalyco/opencode/blob/0a5bed2bc2549d988ba969765ec6722615c56e01/packages/web/src/content/docs/permissions.mdx) — получено 2026-10-03
6. [OpenCode — CLI model selection, run and models](https://github.com/anomalyco/opencode/blob/fd9bd448a2e68990e7aed3495e5590cecb934bfb/packages/web/src/content/docs/cli.mdx) — получено 2026-10-03
7. [OpenCode — Config locations and merge order](https://github.com/anomalyco/opencode/blob/b04697366f05419e9bd7a92f841813dd976161c9/packages/web/src/content/docs/config.mdx) — получено 2026-10-03
8. [Ollama — FAQ: local server, context and cloud features](https://github.com/ollama/ollama/blob/948f69330acf96a2310f1b53fdfc211731a386d8/docs/faq.mdx) — получено 2026-10-03
