Демонстрация: настоящая задача для 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
Автор статьи: Клавдия Кондакова