Демонстрация: настоящая задача для OpenCode в Docker на бесплатной модели

Введение

Эта статья — часть большого руководства OpenCode в Docker на Ubuntu 24.04.

Руководство показывает, как запускать OpenCode с флагом --auto внутри контейнера Docker.

С --auto агент не спрашивает вас перед каждой командой, поэтому контейнер ограничивает то, до чего он может достать: агент работает только в одном git worktree, отдельной копии проекта.

Эта статья показывает одну настоящую задачу от начала до конца: команду, что делал агент, его отчёт и изменение в worktree. Задача идёт на бесплатной модели.

Запуск

Задача: добавить Alpine Linux в список дистрибутивов раздела Linux.

Worktree — из шага 2 (worktree для агента), модель — бесплатная модель OpenCode из шага 4 (конфигурация и заметки для контейнера):

container/tools/ai/opencode-docker.sh ../site-agent run "Add Alpine Linux (/linux/alpine/) to the list of distributions in the Linux section, next to Debian, Ubuntu, CentOS and Rocky. Then check the change the way the skills say."

Запуск занял 4 минуты 13 секунд и ничего не спросил.

Агент загрузил три навыка, поискал, отредактировал один файл и проверил его инструментами (вывод OpenCode, только вызовы инструментов, сокращённо):

> build · deepseek-v4.1-flash-free $ ls /work/container/src/linux | head -50 $ grep -rn "Rocky" /work/container/src --include=*.php -l | head -20 → Read container/src/linux/index.php $ cat /work/container/src/linux/_linux_menu_inc.php ← Edit container/src/linux/_linux_menu_inc.php $ php -l /work/container/src/linux/_linux_menu_inc.php; php -l /work/container/src/linux/index.php; php -v | head -2 No syntax errors detected in /work/container/src/linux/_linux_menu_inc.php No syntax errors detected in /work/container/src/linux/index.php $ cd /work/container/src && php -d error_reporting=E_ALL -r '$_SERVER["DOCUMENT_ROOT"]="/work/container/src"; require "/work/container/src/linux/index.php";' > /tmp/linux_index.html 2>/tmp/linux_index.err; echo "exit=$?" exit=0 $ cd /work && python3 container/tools/search/find_article.py --scan container/src/linux/_linux_menu_inc.php $ cd /work/container && ./tools/linters/check-line-endings.sh --files src/linux/_linux_menu_inc.php $ cd /work/container && ./tools/check-sitemap.sh OK: /work/container/tools/../src/sitemap.xml valid XML, single document, 4270 urls, no duplicates

Отчёт

Конец его ответа (сокращённо):

## Checks run (per the skills) - `php -l` on the include and on `linux/index.php`: clean. - CLI render of `/linux/` (DOCUMENT_ROOT shim): exit 0 [...] the rendered table now ends `Rocky → Alpine`. - Link target health: `/linux/alpine/index.php` renders exit 0 and declares `lang: 'en'`; no `.htaccess` rule redirects `/linux/alpine/`. - `check-sitemap.sh`: sitemap valid XML, single document, 4270 URLs, no duplicates. ## On the host git diff -- container/src/linux/_linux_menu_inc.php I can't commit from here (no git in the container).

Изменение на хосте

На хосте в worktree лежит это единственное изменение:

git -C ../site-agent status --short

M container/src/linux/_linux_menu_inc.php

git -C ../site-agent diff

--- a/container/src/linux/_linux_menu_inc.php +++ b/container/src/linux/_linux_menu_inc.php @@ -24,6 +24,10 @@ echo' <a href="/ru/linux/rocky/"> Rocky </a> +<tr><td><td> + <a href="/linux/alpine/"> + Alpine + </a> </tbody> </table>

То же в TUI

Для интерактивного TUI уберите run и задачу.

Его строка состояния показывает auto между именем агента и моделью:

container/tools/ai/opencode-docker.sh ../site-agent

Автор статьи: Клавдия Кондакова