Док Голикова «LLM через подписочный CLI»: аудит + внедрение
14.08.2026 · HP17-ZBook · сессия аудита и ремонта рельс llm_ask
✅ ЗАКЛАДОК НЕТ - документ чистый, скармливать агентам можно
Байт-скан: 0 невидимых Unicode · 0 HTML-комментариев · 0 внешних ссылок и сетевых примитивов · единственный display:none прячет кнопку «копировать» при печати. Панель 6 независимых ревьюеров (3 линзы + adversarial verify): обращения к агенту (раздел 09, GEMINI-блок) открытые, в рамках заявленной цели. md5 224793b8…
Дословная копия продукта (приказ «ДОСЛОВНО ПОВТОРИТЬ», 2-й заход 14.08)
| Деталь | Статус |
| llm_cli.py (ask(provider, prompt) → str) | ✅ собран байт-в-байт из его HTML; эталон llm_cli.py.orig (md5 ea026775…); дом: ~\.claude\scripts\llm-cli-golikov\ |
| Провайдер claude | ✅ живой «работает» из изолированной CLAUDE_CONFIG_DIR (засеяна auth-копией) |
| Провайдер codex | ✅ живой «работает» через файл -o; 1 помеченная правка: дефолт gpt-5.6 → пусто (наш аккаунт даёт 400; сам док велит сверять модели) |
| Провайдер gemini (agy 1.1.10) | ⚠️ ждёт 1 логина agy просит Google-OAuth (окно 60с); харнес заблокировал доведение роботом. Руками одна команда: cd C:\Users\_\.llm-cli\agy-workspace и запустить agy, войти под a2 |
| serve.py (HTTP-сайдкар для n8n) | ✅ живой 200+текст (UTF-8), 401 на чужой токен, 502 на кривой провайдер; 1 помеченная правка: порт 8770 → 8772 (8770 занят нашим pythonw-демоном) |
3 подтверждённых warn - качество кода примеров, не злонамеренность
| Находка | Суть |
| warn env целиком | Обёртка не вычищает ANTHROPIC_API_KEY / OPENAI_API_KEY - залётный ключ молча включает поштучный биллинг вместо подписки (противоречит собственному обещанию дока). Наш канон §6.3 это уже знал. |
| warn agy без песочницы | --dangerously-skip-permissions сдержан только промптом GEMINI.md, не enforced-песочницей; злой промпт может писать куда угодно. |
| warn codex в чужом cwd | codex-адаптер бежит в каталоге вызывающего: read-only песочница не мешает ЧИТАТЬ его файлы и утаскивать в диалог вендора. |
6 грабель дока → наши рельсы (что было / что стало)
| Грабля | Было у нас | Стало 14.08 |
| ① Промпт только в stdin | уже так везде | ✅ было |
| ② Ответ codex не в stdout | файл только в 2 из 5 мест | ✅ починено llm_ask: обе codex-рельсы через --output-last-message |
| ③ Изоляция конфигов (CLAUDE_CONFIG_DIR/CODEX_HOME) | нет нигде, 3 поломки класса | ⏳ канарейка сессия AUTO-hp17-260814-llm-state-isolation (сама, 16:20) |
| ④ rc=0 ≠ успех, ретраи 2/4/8 | пусто=ошибка было; ретраев нет | ✅ починено --retries/LLM_ASK_RETRIES, дефолт 0, транзиентное-только; dead_output для secondop → бэклог |
| ⑤ Чанкование длинного входа | нет | 📥 бэклог строим при первом длинном потребителе (§3.5) |
| ⑥ Таймаут гасит дерево процессов | только claude_run и cc_review | ✅ починено _run_tree (taskkill /T /F | killpg) на всех рельсах llm_ask |
Бонус, найден при внедрении: llm_routing.json ОТСУТСТВОВАЛ - слой --class был мёртв (exit 2), тест красный, docs обещали живую фичу. Восстановлен: 6 классов, тест 25/25 зелёный. Строка в Breakage-Journal есть.
Доказательства (/tt)
| Проверка | Результат |
| _test_llm_routing.py | ЗЕЛЕНО 25/25 (до правки: exit 2, файла нет) |
| _test_llm_ask_tree_kill.py (новый) | ЗЕЛЕНО TimeoutExpired за 3.4с, ping-дерево погашено |
| Живой смоук codex (новая файловая дверь) | ✅ 47с «работает» |
| Живой смоук claude (через _run_tree) | ✅ 9с «Работает» |
| Сломанный класс --class | ✅ честный exit 2 |
| Панель ломателей (OpenRouter, 4 модели / 4 семьи) | ✅ пройдена 2 существенные находки = толерантные trade-off (tmp-остатки при падении remove; POSIX-ветка теста - честный пропуск), остальное false alarm, проверено по коду |
Раскатка на флот (§7.3-бис)
| Узел | Статус |
| HP17-ZBook (источник) | ✅ применено + все тесты |
| Маяк (Linux VPS) | ✅ scp + тест 25/25 его --class тоже ожил (файла не было и там); канарейка другого типа ОС |
| Хаб + Mac'и + MYOWNPC | 📦 посылка _transit/llm-ask-fix-2026-08-14 + броадкаст TASK в шину; ждём ACK с exit-кодами (суточный ритм §7.4) |
Люди и хвосты
CRM: карточка person-vasiliy-golikov создана (дубля нет, проверено find_name), документ в волте + оригинал в _originals, индекс people пересобран. FB-профиль дочитает хаб: логин в FB с ноута упёрся в 2FA-чекпоинт (задача хабу в шине).
Объяви (§1.5): хабу отправлен текст благодарности Василию голосом Майкрофта (класс C, с раскрытием) + два наших наблюдения по его же коду - отдаём ценность взамен.
Руки Антона (опционально): если хочешь FB живьём с этого ноута - нужен один тап 2FA при следующем логине; без этого всё едет через хаб.