SandboxesРуководстваЗапуск OpenCode

Запуск OpenCode в sandbox

Чтобы запустить OpenCode в sandbox на Lizard (lizard.build), подключите учётные данные через lizard agents (подписку ChatGPT или ключ Anthropic, OpenAI, OpenRouter или LLM Gateway), создайте sandbox из шаблона opencode и отправляйте промпты командой lizard sandbox prompt <id> --agent opencode "…". Если удобнее веб-интерфейс OpenCode, запустите в sandbox opencode web --hostname 0.0.0.0 --port 4096 и откройте порт командой lizard sandbox expose.

Статус тестов: команды взяты из Lizard CLI 4.0.42 и раннера агентов платформы по состоянию на 2026-10-12. Шаги с веб-интерфейсом мы сверили с исходным кодом OpenCode 1.18.34, который отдаёт интерфейс и API с одного порта, и с исходным кодом маршрутизатора sandbox в Lizard, который хранит токен доступа в cookie и пропускает WebSocket. Для этой страницы мы ещё не прогоняли ни один из вариантов целиком в работающем sandbox.

Перед началом

  • Lizard CLI, в который вы вошли через lizard login, и проект: выполните lizard init в папке или передавайте -p <project> командам sandbox.
  • Lizard Pro или 7-дневный пробный период Pro (нужна карта). Sandboxes оплачиваются посекундно по размеру, пока работают; см. лимиты и цены.

Подключение учётных данных

Учётные данныеКоманда
Подписка ChatGPTlizard agents login chatgpt --open
API-ключ Anthropiclizard agents add anthropic
API-ключ OpenAIlizard agents add openai
API-ключ OpenRouterlizard agents add openrouter
API-ключ LLM Gatewaylizard agents add llmgateway

OpenCode получает все подключённые учётные данные, которые умеет использовать, и каждый ключ или вход открывает модели своего провайдера. Токен подписки Claude он не принимает; для него используйте Claude Code. Вход через ChatGPT попадает в запуск как короткоживущий токен доступа, а не refresh-токен. API-ключи попадают в запуск как переменные окружения, например ANTHROPIC_API_KEY.

OpenCode называет модели в формате provider/model. Задайте модель по умолчанию или передавайте -m в каждом промпте:

lizard agents use opencode -m openrouter/anthropic/claude-sonnet-4.5
lizard agents status

Если подключён только ключ OpenRouter и модель не выбрана, Lizard запускает openrouter/openai/gpt-5.3-codex.

Создание sandbox

lizard sandbox create -t opencode --timeout 3600000

Сохраните выведенный ID в переменной: SB=sb_abc123. В CLI срок жизни по умолчанию составляет пять минут, после чего Lizard удаляет sandbox вместе с файлами; --timeout 3600000 даёт ему один час. В шаблоне opencode есть Node.js 22, закреплённый релиз OpenCode, git, Python 3, ripgrep, curl, jq, unzip и Lizard CLI.

Перенесите код так же, как для Claude Code:

lizard sandbox exec $SB -- git clone https://github.com/your-org/your-app /workspace/app

Для приватного или локального репозитория см. перенос кода в sandbox.

Отправка промпта

lizard sandbox prompt $SB --agent opencode --cwd /workspace/app "add input validation to the signup form"

Каждый запрос запускает opencode run --auto, который одобряет любой запрос прав, если он не запрещён явно: OpenCode правит файлы и выполняет команды без подтверждения. --effort <level> превращается в --variant для OpenCode. Продолжить беседу можно с -c <conversation-id>; в каждом следующем промпте снова передавайте --agent opencode и --cwd. Ctrl-C прекращает наблюдение, а lizard sandbox interrupt $SB останавливает агента.

Чтобы забрать изменения патчем, см. как забрать изменения.

Веб-интерфейс OpenCode

opencode web отдаёт браузерный интерфейс OpenCode и его API с одного порта. Запустите его в sandbox и откройте этот порт через URL предпросмотра.

Учётные данные из lizard agents получают только запуски lizard sandbox prompt, поэтому этому серверу нужен свой ключ. Скопируйте его файлом, чтобы он не попал в командную строку:

printf 'export ANTHROPIC_API_KEY=%s\n' "$ANTHROPIC_API_KEY" > opencode.env
lizard sandbox files put $SB opencode.env /root/opencode.env
rm opencode.env

Запустите сервер и откройте порт:

lizard sandbox exec $SB -- sh -c '. /root/opencode.env && cd /workspace/app && nohup opencode web --hostname 0.0.0.0 --port 4096 >/tmp/opencode.log 2>&1 </dev/null & echo $! > /tmp/opencode.pid'
lizard sandbox expose $SB 4096

Откройте URL, который выведет expose. В нём есть ?lizard_token=; Lizard переносит токен в cookie для этого хоста и перенаправляет на ту же страницу уже без токена, поэтому собственные запросы интерфейса, поток событий и WebSocket терминала проходят.

  • Флаг --hostname 0.0.0.0 обязателен. По умолчанию OpenCode слушает 127.0.0.1, и тогда URL предпросмотра отвечает Sandbox is not listening on port 4096.
  • Задайте фиксированный --port. Без него OpenCode выбирает случайный свободный порт.
  • Храните URL в секрете: любой, у кого он есть, может выполнять команды в sandbox через OpenCode. Чтобы дополнительно требовать пароль, добавьте export OPENCODE_SERVER_PASSWORD=… в opencode.env; используйте имя пользователя opencode.
  • Лог сервера читайте командой lizard sandbox exec $SB -- tail -n 50 /tmp/opencode.log. Остановить сервер можно командой lizard sandbox exec $SB -- sh -c 'kill $(cat /tmp/opencode.pid)'.
  • Интерфейс останавливается вместе с sandbox. Продлить срок можно командой lizard sandbox timeout $SB 3600000.

Частые проблемы

Сообщение или симптомРешение
OpenCode has no credential. Connect one of: …Подключите одни из учётных данных выше через lizard agents.
Your ChatGPT login expiredСнова выполните lizard agents login chatgpt.
В выводе упоминается CodexПромпт ушёл без --agent opencode.
URL предпросмотра отвечает 401Откройте полный URL, который вывел expose, вместе с lizard_token. См. URL предпросмотра.
URL предпросмотра отвечает 502Сервер не запущен или слушает 127.0.0.1. Проверьте /tmp/opencode.log.
Веб-интерфейс загружается, но все модели выдают ошибкуУ сервера нет ключа провайдера. Исправьте /root/opencode.env, остановите сервер и запустите его снова.

См. также

Обновлено