Запуск 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 оплачиваются посекундно по размеру, пока работают; см. лимиты и цены.
Подключение учётных данных
| Учётные данные | Команда |
|---|---|
| Подписка ChatGPT | lizard agents login chatgpt --open |
| API-ключ Anthropic | lizard agents add anthropic |
| API-ключ OpenAI | lizard agents add openai |
| API-ключ OpenRouter | lizard agents add openrouter |
| API-ключ LLM Gateway | lizard 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, остановите сервер и запустите его снова. |
См. также
Обновлено