Локальные AI-агенты, Git и DevOps/aka-gst

Раздел · 6 мин

Метод и правила работы

Содержание раздела
  1. Как пользоваться этой версией
  2. Главное правило
  3. Обозначения
  4. Можно ли продолжить после эксперимента 8
  5. Роли компонентов
  6. Поток данных
  7. Рабочая структура и окна
  8. Какие окна будут использоваться
  9. Как понять, где вы находитесь
  10. PowerShell: команды, которые часто путают
  11. Bash heredoc не работает в PowerShell
  12. Остановка foreground-сервера
  13. Просмотрщик Codex
  14. Красная строка Failed to paste image
  15. Никогда не публикуйте
  16. Универсальный controlled-agent контракт
  17. Как отвечать на запрос разрешения
  18. Стандарт доказательств
  19. Шаблон записи результата

Ниже сохранён подробный Codex-практикум V2: 15 экспериментов, отдельные prompts, команды, ошибки и критерии. Используйте его после Части I. Hermes можно подставить как инженерного агента, сохраняя тот же controlled-agent contract; в экспериментах 9-12 отдельно выбирайте Hermes API Server или минимальный gateway, а не оба одновременно.

macOS. Исходные лабораторные команды преимущественно даны для PowerShell. Перед выполнением на macOS используйте таблицу эквивалентов ниже и native zsh-команды из Части I. Не вставляйте PowerShell variables `$env:` и here-strings `@'...'@` в zsh.

ЗадачаWindows PowerShellmacOS zsh
Перейти в каталогSet-Location PATHcd PATH
Создать каталогNew-Item -ItemType Directorymkdir -p
Скопировать файлCopy-Itemcp
Проверить файлTest-Pathtest -f
Найти listenerGet-NetTCPConnectionlsof -nP -iTCP:PORT -sTCP:LISTEN
HTTP GETInvoke-RestMethodcurl -fsS
Environment$env:NAME='value'export NAME='value'
Активировать venv.\.venv\Scripts\Activate.ps1source .venv/bin/activate
Остановить foregroundCtrl+CCtrl+C
Многострочный Python@' ... '@ | uv run python -uv run python - <<'PY' ... PY

Как пользоваться этой версией

Эта редакция намеренно подробнее сокращённого практикума. Она рассчитана на последовательное выполнение: теория объясняет смысл шага, готовый prompt задаёт Codex безопасный scope, PowerShell-блок даёт точные команды, а раздел проверки помогает не принять красивый ответ модели за доказательство.

Главное правило

Не импровизируйте со scope. Если Codex обнаружил проблему, которой нет в текущей атомарной цели, зафиксируйте её и остановитесь. Не разрешайте агенту одновременно диагностировать, менять конфигурацию, патчить source и публиковать изменения.

Обозначения

Обычный PowerShellКоманда выполняется пользователем вне сессии Codex. Используется для интерактивного входа, UAC, foreground-сервисов и ручных проверок.
Codex CLIГотовый prompt вставляется в новую или текущую сессию Codex из указанной рабочей папки.
После подтвержденияНе выполняйте следующие команды до того, как Codex покажет план и вы явно ответите «одобряю».
PASSЕсть реальный вывод, файл, test result или наблюдение, прямо доказывающее критерий.
NOT PROVENУтверждение возможно верно, но доказательства нет. Это не PASS.

Можно ли продолжить после эксперимента 8

Да. Не начинайте заново автоматически. Выполните эксперимент 8.5, сопоставьте старые результаты с критериями и повторите только проверки без доказательств. Если раньше ради pyttsx3 менялся source, функциональный результат можно сохранить, но критерий source tree unchanged остаётся невыполненным до отдельного решения.

Роли компонентов

В оригинальной архитектуре Hermes совмещал инженерную роль и runtime gateway. В этой редакции обязанности разделены. Такое разделение важно: Codex не становится HTTP-сервисом только потому, что умеет писать и запускать код.

CodexАнализирует репозиторий, предлагает план, меняет согласованные файлы, запускает тесты и работает с Git. Не является постоянным endpoint для VTuber.
Local gatewayПостоянно слушает 127.0.0.1:8642, принимает OpenAI-compatible запросы, проверяет Bearer token и маршрутизирует только разрешённые backend/model.
OllamaЛокально обслуживает qwen3-vl:4b через 127.0.0.1:11434/v1. Это основной offline backend.
OpenRouter/OpenAIОпциональные cloud backends. В базовых voice/vision экспериментах выключены и не получают аудио.
Open-LLM-VTuberКлиентская/runtime-система с WebSocket, Live2D, LLM, ASR и TTS. Подключается к gateway через local conf.yaml.

Поток данных

Codex -> читает/меняет/тестирует -> Git workspace

Browser microphone -> sherpa_onnx_asr -> text
text + screenshot -> Open-LLM-VTuber -> Local Gateway :8642
Local Gateway -> Ollama :11434/v1 -> qwen3-vl:4b
model response -> pyttsx3_tts -> Windows speakers

Приватность. ASR и TTS остаются локальными. Gateway не должен логировать полный prompt, response, Authorization и речь пользователя.

Рабочая структура и окна

Рекомендуемая структура

C:\dev\agent-lab\
|-- Open-LLM-VTuber\       # upstream exercise repository
|-- local-agent-gateway\   # отдельный gateway project
|-- evidence\              # только обезличенные доказательства
|-- praktikum_codex_gateway_ru_v2.docx
`-- praktikum_codex_gateway_ru_v2.pdf

Какие окна будут использоваться

PowerShell A: ollama serve. Окно остаётся открытым, пока работает локальная модель.

PowerShell B: gateway на 127.0.0.1:8642. Появляется с эксперимента 9.

PowerShell C: uv run run_server.py --verbose в Open-LLM-VTuber.

Codex CLI: отдельная сессия для анализа и согласованных изменений.

Browser: локальная страница VTuber, screenshot и microphone smoke tests.

Как понять, где вы находитесь

powershell
Get-Location
git branch --show-current
git status --short

Перед копированием команды. Сверьте путь в prompt с текущим Get-Location. Большинство ошибочных результатов в первых экспериментах возникало из-за запуска rg из C:\dev\agent-lab вместо корня Open-LLM-VTuber.

PowerShell: команды, которые часто путают

Bash heredoc не работает в PowerShell

Конструкция python - <<'PY' предназначена для Bash. В Windows PowerShell используйте here-string, затем передайте его в stdin Python.

@'
print("Проверка PowerShell here-string")
'@ | uv run python -

Остановка foreground-сервера

Нажмите Ctrl+C в том же окне, где запущен сервер. Закрытие окна допустимо как аварийный вариант, но в доказательстве лучше показать штатную остановку и отсутствие listening port.

Просмотрщик Codex

Если вывод открылся на полном экране и внизу написано q to quit, нажмите q. Это закрывает просмотрщик результата, а не удаляет задачу и не останавливает систему.

Красная строка Failed to paste image

Она означает, что CLI получил команду вставки изображения, но в буфере не было поддерживаемого image format. К sandbox и выполнению текстовой команды это не относится.

Никогда не публикуйте

  • реальное значение Token из gh auth status;
  • полный conf.yaml с ключами;
  • пути C:\Users\<имя>\...;
  • исходное аудио или transcript личной речи;
  • скриншоты с чатами, cookies, email и ключами.

Универсальный controlled-agent контракт

Этот блок уже встроен в prompts изменяющих экспериментов. Если вы формулируете дополнительный атомарный шаг самостоятельно, начинайте с него.

Скопировать целиком

Работай как инженер в режиме контролируемого агента.
Перед любым изменением покажи карту релевантной части репозитория, одну атомарную цель, файлы чтения и изменения, риски и команды проверки.
Сначала покажи план. Не меняй файлы до моего явного подтверждения.
Не используй sudo, force push, git reset --hard, git clean -fd и опасные команды удаления.
Не переключай и не изменяй main.
Не читай и не печатай .env, токены, SSH-ключи, cookies и keychain.
Не трогай файлы за пределами указанного scope.
Не скрывай ошибки и не подменяй тест словесным утверждением.
После изменения покажи краткий diff, реальный минимальный тест и git status --short.
Если нужен больший scope, остановись и запроси новый атомарный шаг.

Как отвечать на запрос разрешения

  • Yes, proceed - разрешение только текущей команды. Это безопасный выбор по умолчанию после проверки команды.
  • Yes, and don't ask again - постоянное правило для префикса. Выбирайте только для узкого и понятного read-only префикса.
  • No / Esc - команда отменяется. Используйте, если scope шире задания, команда читает секреты или меняет неизвестные файлы.

Важно. Разрешение выйти за sandbox не делает опасную команду безопасной. Сначала проверяют точный target и причину escalation.

Стандарт доказательств

Практикум считается завершённым не тогда, когда агент написал «готово», а когда каждый критерий связан с фактом. Доказательство должно быть минимальным: достаточно нужных строк лога, а не полного дампа с персональными данными.

КомандаТочный текст команды, рабочая папка и exit code.
РезультатМинимальные строки, доказывающие ожидаемое состояние.
Ручное наблюдениеДопустимо для слышимого TTS и отсутствия feedback loop; явно помечается как ручное.
Gitgit diff для изменяющего шага и git status --short после него.
ОграничениеЧто тест не проверил. Например, health 200 не доказывает генерацию модели.

Шаблон записи результата

Эксперимент: <номер и название>
Дата/версия: <дата, commit или версия>
Команда: <точная команда>
Exit code: <0 или фактический код>
Доказательство: <минимальный обезличенный вывод>
Статус: PASS / FAIL / NOT PROVEN
Что доказано: <одно предложение>
Что не доказано: <одно предложение>
Git status --short: <пусто или фактические строки>
Следующий шаг: <только один>