# MEMORY.md - Долгосрочная память ## О себе - Имя: Стрим 🌊 - Стиль: дружелюбная ассистентка с юмором - Фокус: работа с потоками информации - сбор, анализ, структурирование ## Правила форматирования ### Телеграм - **Таблицы — через diagram-table** (PNG картинка), НЕ markdown-таблицы — они криво отображаются - Вместо таблиц: списки с буллетами, нумерованные списки, или структурированный текст с разделителями - Эмодзи для наглядности: ✅❌⚠️🔥💡🎯🌊 - **Голосовые сообщения:** когда Слава отправляет голосовое — отвечать голосовым (через voice-tts) - **Схема отправки голосовых (12.05.2026):** 1. Генерировать: `send_voice.sh "текст"` 2. Отправлять CLI: `openclaw message send --channel telegram --target 126472752 --media --delivery '{"asVoice": true}'` (timeout 30+) 3. В ответе писать короткий текст (НЕ NO_REPLY — рендерится как "(empty)") 4. **НЕ использовать `MEDIA:` директиву** — дублирует отправку 5. **НЕ использовать `[[audio_as_voice]]`** — тоже дублирует - **Женский род!** Починила, проверила, нашла — не починил! ## Люди ### Слава - Имя: Слава - Обращение: неформальное, дружеское, с юмором - Интересы: сбор, анализ и суммаризация информации из разных источников (Телеграм-чаты, интернет) - Предпочитает общение на русском языке - Первая встреча: 18 марта 2026 ## Правила работы ### 🧠 Нет root → нет проблемы (урок 16.04.2026) - Если `apt-get install` падает без прав — **deb-пакет это просто архив** - Схема: `curl .deb` → `ar x` → `tar xf data.tar.xz` → бинарник готов - Копировать в `~/bin/` — доступно без root - Это быстрее и умнее, чем просить Славу перестроить контейнер или менять конфигурацию ### Онтология (18.04.2026) - Онтология — источник правды для проектов и задач - Для проектов/задач обновлять `memory/ontology/graph.jsonl` и `memory/ontology/RULES.md` - При работе с `tasks/` сначала сверяться со структурой, потом править онтологию и документы - Новые/спорные элементы `tasks/` разбирать по одному и не удалять без подтверждения Славы ## Правила работы ### ⛔ Перед запуском любого воркера FR24 (25.04.2026) Обязательная проверка ПЕРЕД запуском `POST /run` или любым ручным запуском: ```bash # Проверить что в контейнере — правильная версия кода docker exec fr24-tracks-fr24 grep "flight-summary" /app/fr24_worker.py # Должно быть: /api/flight-summary/full (НЕ light!) ``` Если `light` — задеплоить правильную версию из `tasks/flightradar24/ingest/tracks_fr24/fr24_worker.py` перед запуском. Если `full` — можно запускать. Аналогично для любого другого воркера: сначала `grep` ключевой строки, потом запуск. ### 🏠 Home Assistant — только с подтверждения - **Любое изменение в HA** (конфиги, автоматизации, настройки, перезапуски) — только после явного подтверждения Славы - Читать состояния, логи, статусы — можно без подтверждения - Отправка сообщений через telegram_bot — можно без подтверждения (тесты) - Всё остальное: объяснить что хочу сделать → получить ОК → действовать ### ⛔ Разработка — только через Dev-агента - **Стрим НЕ пишет код самостоятельно.** Никогда. Даже если задача кажется мелкой. - Роль Стрим: обсуждение, постановка задачи, ТЗ, проверка результата, документация - Роль Dev: вся реализация (новые файлы, правки кода, скрипты) - Когда задача дошла до «приступай» → передать ТЗ Dev-агенту через `sessions_spawn` - **ТЗ по шаблону** `workspace/templates/DEV_TASK_TEMPLATE.md` (средние/крупные задачи) или inline (быстрые) - **Процесс:** `workspace/templates/DEV_WORKFLOW.md` - Обязательно в ТЗ: точные файлы, точный код, команды проверки, ограничения/грабли - Нарушение зафиксировано: 27.03.2026 — слой плотности noisemap реализован Стримом напрямую ### Документация - **Обязательно**: при любом изменении функционала немедленно обновлять документацию - Документация всегда должна быть в актуальном состоянии - не "потом", а сразу после изменения - Порядок работы: изменение → тест → документация → упаковка/коммит ### 📝 ТЗ для Dev-агента — шаблон (12.05.2026) - **Шаблон:** `workspace/templates/DEV_TASK_TEMPLATE.md` - **Процесс:** `workspace/templates/DEV_WORKFLOW.md` - **Пример:** `tasks/enduro-trails/DEV_TASK_DARK_STYLE.md` - Перед передачей задачи Dev-агенту — заполнить шаблон (средние/крупные задачи) или inline task (быстрые) - Обязательно: точные файлы, точный код, команды проверки, ограничения/грабли - Результат: Dev не задаёт вопросов, работает автономно ### Структура задач и проектов (18.04.2026) - Стандарт `tasks//` закреплён как основа для проектов OpenClaw - `Task` без `Project` не существует - У `Project` должны быть `folder` и `doc_path` - У `Task` должны быть `project`, `folder` и `doc_path` - Машинные id живут только в онтологии, в папках и человекочитаемых названиях используются slug-и - `snowbike-kb` оформлен как задача внутри `snowbike-rag`, а не как отдельный проект - В спорных папках `tasks/` сначала анализ, потом предложение Славе, и только после ОК — удаление или реформа ### 🔍 OpenClaw документация — порядок поиска (14.04.2026) При **любых** вопросах про настройку/работу OpenClaw — строго соблюдать последовательность: 1. **Локальные доки** `/app/docs` — поиск по файлам, grep по релевантным ключевым словам 2. **docs.openclaw.ai** — если локально не найдено → `web_search site:docs.openclaw.ai <тема>` 3. **web_fetch** конкретной страницы с docs.openclaw.ai для деталей 4. **GitHub** `https://github.com/openclaw/openclaw` — если доки не покрывают вопрос НЕ прыгать сразу в веб — локальные доки первыми. Это быстрее и всегда доступны. ### Управление ключами и секретами - Ключи в `openclaw.json` (botToken, gateway.auth.token, tools.web.search.apiKey) — НЕ ТРОГАТЬ - **Все остальные секреты** — только в `~/.openclaw/.env` - Никогда не дублировать ключи в SKILL.md, скриптах или других файлах ### Структура workspace - `tasks/{project}/` — каждый проект в своей папке, там же `PROJECT.md` с деталями - `skills/` — готовые AgentSkills с полной документацией - `data/` — выходные данные (`data/{skill-name}/`) - `memory/` — дневные записи (`YYYY-MM-DD.md`) - `temp/` — временные файлы, удаляются после использования ### Конфигурация моделей - Текстовые задачи → `agents.defaults.model.primary` - Анализ изображений → `agents.defaults.imageModel` - После изменения конфига — перезапустить гейтвей ### Memory backend: QMD (настроен 10.04.2026) - Конфиг: корневой ключ `memory` в openclaw.json (НЕ под `agents.defaults`!) - QMD бинарник: `/home/node/.local/bin/qmd` — явно прописан в `memory.qmd.command` - Коллекции main: memory-root, sessions, tasks, memory-dir, skills - Проблема с index.yml: QMD создаёт `memory-root-main` с `**/*.md`, OpenClaw ищет `memory-alt-main` - Фикс: вручную добавить в `~/.openclaw/agents/main/qmd/xdg-config/qmd/index.yml` запись `memory-alt-main` - После фикса: `rm ~/.openclaw/agents/main/qmd/xdg-cache/qmd/index.sqlite* && openclaw memory index --force` - Embed на CPU медленный (~30 мин на ~400 чанков) — Vector: unavailable пока идёт, потом auto-ready - Sessions индексируются: транскрипты разговоров searchable! ### Memory Wiki (настроен 10.04.2026) - wiki_status/search/get/apply/lint — добавлены в allowed tools main агента - `includeCompiledDigestPrompt: true` — wiki digest в промптах - Bridge mode НЕ работает (jiti-изоляция плагинов в 2026.4.9) — known limitation - `openclaw wiki bridge import` всегда 0 артефактов — не баг конфига - Workaround: ручной ingest (`openclaw wiki ingest `) или unsafe-local режим - Wiki пуста (0 entities/concepts) — нужно наполнять через `wiki_apply` - Дневник по настройке: `memory/2026-04-10.md` #### СКИЛЛЫ — читать ПЕРЕД любым действием (12.04.2026) - **ВСЕГДА** открывать соответствующий скилл перед работой с новой задачей - Не изобретать велосипед — инструкции в скилле уже есть - Скилл открывается ДО начала действий, а не после того как застряла - Исключение: диагностика когда непонятно куда смотреть — но потом сверяться со скиллом - Факт нарушения: 12.04.2026 — HA audit делала вручную, скилл не открыла → потеряла время на костыли ## Проекты ## Orchestrator — состояние 2026-06-02 (журнал: `tasks/orchestrator/PROGRESS_2026-06-02.md`) - **Инцидент дня:** создала ORCH-1..7 в Plane → webhook авто-запустил конвейер БЕЗ фильтра проекта → мусор ET-010..016 в `enduro-trails`. Подход стоп→чистка→защита→root-fix. - ✅ **ORCH-6 multi-repo (root fix)** замержен **PR #2** (`b021ff7`): реестр `src/projects.py` (Plane id→repo+prefix), фильтр webhook по проекту (unknown→ignored), resolve repo. Проверен на проде: HMAC + project-filter режут чужие проекты, задача не создаётся. **Plane-webhook включён обратно** (`is_active=t`) — теперь безопасно. - ✅ **ORCH-1 очередь задач** база готова **PR #3** (76 passed): таблица `jobs`, `queue_worker.py`, atomic claim, `max_concurrency`, ретраи, restart-safe (requeue running на старте), `/queue` эндпоинт. Заменил in-process daemon-потоки. - ✅ **ORCH-1b resilience** ГОТОВ в PR #3 (110 passed, проверен на проде: `/queue` отдаёт breaker+preflight, preflight `claude --version` без трат токенов, классификатор 429→transient): идея Славы про надёжность claude CLI. **A.** дешёвый preflight (`claude --version`, кэш 45с — токены НЕ жжёт, FAIL→job ждёт); 🚫 НИКАКОГО prompt-ping (трата лимита). **B.** 429 ловить на ВЫХОДЕ (паттерны в логе), классификатор transient/permanent. **C.** exp backoff + `available_at` + Retry-After. **D.** circuit breaker (3 fail→пауза 5мин, CLI не дёргаем, алерт→half-open). - ⚠️ **Урок:** при дослыле уточнения в активную сессию Dev — проверять что оно вошло в КОД, а не только в отчёт «done» (resilience в базовый PR #3 НЕ попал). - ⚠️ **Урок:** тест-алерты Dev (синтетич. `repo r-retry`/job N) дёргают Славу в Telegram. Проверка реальности — `/queue` + прод-БД. TODO ORCH-1b: подавить нотификации в pytest. - ⚠️ **Грабли postgres-пароля Plane:** `\x27`-экранирование через ssh+docker ломается → SQL в файл + `psql -f`, пароль из env контейнера `plane-app-plane-db-1`. - **Готово к мержу:** PR #3 (ORCH-1 base + ORCH-1b resilience) — ждёт ОК Славы. **Висят:** PR #19 (enduro-trails), PR #1 (orchestrator worktree) — мержить? Бэклог: ORCH-3 (rollback), ORCH-4 (stage-engine), ORCH-5 (idempotency). - ⚠️ **Урок:** Dev склонен к ложным тревогам «параллельная сессия пишет файлы» (принимает свою активность за чужую, mtime меняются). Проверять git log/remote — обычно он на самом деле всё довёл и запушил. ## Multi-Agent Orchestrator (enduro-trails) - **ЕДИНОЕ ИМЯ ВЕЗДЕ = `orchestrator`** (решено 02.06.2026): - Gitea-репо: `admin/orchestrator` (переименован из `agent-dev`) - Plane-проект: `orchestrator`, identifier `ORCH`, id `8da6aa25-a60e-44d6-a1e2-d8ae59aa7d6a` - Workspace-каталог: `tasks/orchestrator/` (переименован из `multi-agent/`) - Папка на сервере: `/home/slin/repos/orchestrator`, контейнер `orchestrator` - **Plane задачи ORCH-1..5** (бэклог после аудита 02.06): F-2b очередь задач, S-4 worktree, S-2/S-3 rollback, M-3 stage-engine, M-7 идемпотентность - **Аудит 02.06:** `tasks/orchestrator/AUDIT_2026-06-02.md` + `DOCS_AUDIT_2026-06-02.md`; фиксы B-1/B-2/B-3/S-5/S-1/M-1 сделаны Dev (Opus 4.8), 11 коммитов, зомби-баг закрыт - **Документация:** `tasks/orchestrator/ORCHESTRATOR_DOCS.md` - **Расхождения с proposal:** `tasks/orchestrator/PROPOSAL_VS_REALITY.md` - **Host:** mva154 (82.22.50.71), container `orchestrator`, port 8500 - **Pipeline:** analyst → architect → developer → reviewer → tester → deployer → done - **Deployer добавлен 01.06.2026:** merge PR → tag → deploy → healthcheck → smoke → rollback - **Единственный ручной шаг:** `:approved:` от Славы после analyst'а - **Фиксы 31.05.2026:** _monitor_agent PIPE streaming, check_reviewer_verdict, _ensure_pr, retry logic - **Фикс 01.06.2026:** deployer как агент (убран хардкод _auto_merge_pr) - **Фиксы 01.06.2026 (продолжение):** - Analyst prompt: добавлена явная инструкция Write tool (артефакты на диск, не в stdout) - Analyst model: возвращён на Sonnet (был Opus — расходовал лимиты Max 5x) - Architect/Reviewer: Opus (claude-opus-4-7) — глубина важнее скорости - Startup timeout 120s: если CLI не стартует → kill + Telegram уведомление - **Plane comment webhook:** `handle_comment` теперь читает поле `issue` (Plane шлёт именно его, не `work_item_id`/`issue_id`) + `comment_stripped` вместо `comment_html` - **ET-008 GPS-треки:** pipeline завершён (analysis→architecture→development→review→testing→deploy→done), v0.0.1 в main - Pending: `docker compose up -d gps-collector` на хосте для активации `/api/gps-tracks/*` ## Claude CLI Proxy (настроен 14.05.2026) - **Документация:** `tasks/claude-cli-proxy/PROJECT.md` - **Корневая проблема (14.05):** HTTP_PROXY/HTTPS_PROXY перехватывали запросы к cli-proxy через Xray - **Фикс:** `NO_PROXY=claude-cli-proxy,localhost,127.0.0.1,172.19.0.0/24` в docker-compose.yml - **Важно:** `reasoning: true` нельзя ставить в моделях cli-proxy (OpenClaw парсер не извлекает content) - **Важно:** SIGHUP не перечитывает providers — нужен полный рестарт gateway - **Рабочий конфиг:** `api: openai-completions`, `baseUrl: http://claude-cli-proxy:8317/v1`, `apiKey: dummy` - Dev-агент на `claude-cli-proxy/claude-sonnet-4-6` ## Proxy VM — vpn-srv (прокси-сервер) - **Документация:** `tasks/proxy-vm/PROJECT.md` - **vpn-srv:** 192.168.2.200, FRP туннель через 185.130.212.192:7000, SSH port 3322 - **Доступ:** `ssh -i ha_ssh_key -o Port=3322 vpn@185.130.212.192`, sudo: `echo meNt85doC | sudo -S` - **VLESS:** 43.245.226.231:53903, yahoo.com SNI, **flow: xtls-rprx-vision** (обязателен!) - **Xray порты:** 12345 (tproxy), 1080 (SOCKS5), 8888 (HTTP proxy) ### Задача #1: Homenet-VPN Wi-Fi (ГОТОВО ✅ 12.04.2026) - **Старт:** 05.04.2026 - **Цель:** 192.168.4.0/24 → весь TCP через VLESS (прозрачный прокси) - **Схема:** Device → iptables nat REDIRECT:12345 → Xray dokodemo-door (tproxy=redirect) → VLESS - **Wi-Fi:** 192.168.4.0/24, шлюз 192.168.4.1 (ens19, netplan) - **DNS:** UDP/53 → DNAT → 1.1.1.1 (напрямую) - **UDP/443 (QUIC):** RETURN — xtls-rprx-vision не поддерживает UDP - **MSS:** clamp 1280 — без этого Telegram/YouTube не работали (splice broken pipe) - **Персистентность:** rules.v4 ✅, sysctl 99-tproxy.conf ✅, netfilter-persistent ✅ ### Задача #2: HA Telegram через VLESS (готово ✅) - **Дата:** 10.04.2026 - **Схема:** HA telegram_bot → SOCKS5 (192.168.2.200:1080) → VLESS → api.telegram.org - **Только Telegram** через прокси, остальной трафик HA — напрямую - **HA:** `ha.homenet542.keenetic.pro` (HAOS 17.1, IP 192.168.2.139) - **Бот:** `@ha542_bot` (8251509944), chat_id Славы: 126472752 - **Entity:** `notify.telegram_bot_8251509944_126472752` - **Сервис:** `notify.send_message` → `entity_id: notify.telegram_bot_8251509944_126472752` - **Config entry:** `01KNVZDDM3ZNJS1WX309K7E1EN` (UI-интеграция с proxy_url) - **SSH к HA через vpn-srv:** скопировать ha_ssh_key → `/tmp/ha_key`, потом `ssh -i /tmp/ha_key root@192.168.2.139` ### Интернет-заказы (vprok.ru) - **Старт:** 31 марта 2026 - **Детали:** `tasks/internet-orders/PROJECT.md` - **Статус:** relay-сервер запущен (185.130.212.192:5000), Windows-клиент готов, ожидает первого теста ### Карта шумового загрязнения FR24 - **Старт:** 22 марта 2026 - **Детали:** `tasks/flightradar24/PROJECT.md` - **Статус:** прототип v0.3 работает, FR24 кредиты закончились, следующий шаг — RTL-SDR ### Telegram Collector - **Старт:** 20 марта 2026 - **Детали:** `tasks/telegram-collector/PROJECT.md` - **Статус:** активен, ежедневный инкремент, @snowbikerussia загружен (155K сообщений) ### Голосовые сообщения / Видеокружочки - **Скилл:** `~/.openclaw/skills/voice-tts/SKILL.md` (ElevenLabs + Yandex SpeechKit fallback) - **Видеокружочки:** `tasks/video-notes/TZ.md`, pipeline ElevenLabs → fal.ai → VEED → Telegram ## Агенты ### Dev — как правильно запускать **Dev** — senior разработчик, workspace: `~/.openclaw/workspace-dev` #### ⚠️ Обязательные параметры sessions_spawn: - `runtime`: `"subagent"` (ACP не настроен — всегда subagent) - `model`: `"nekocode/gpt-5.4"` (если Слава не указал другую) - `cwd`: `"/home/node/.openclaw/workspace-dev"` — **критично!** Без этого агент не находит свой workspace и завершается молча с 0 токенов - `label`: короткое имя задачи (для трекинга, например `"dev-snowbike-rag-recovery"`) - `mode`: `"run"` (одноразовая задача) или `"session"` (диалог) #### Пример вызова: ``` sessions_spawn( task="Прочитай ТЗ из /home/node/.openclaw/workspace/tasks/...\n\nСделай X, Y, Z.\n\nВерни отчёт.", runtime="subagent", model="nekocode/gpt-5.4", cwd="/home/node/.openclaw/workspace-dev", label="dev-taskname" ) ``` #### Что включать в task: 1. Ссылка на ТЗ-файл (абсолютный путь) или полный текст задачи 2. Путь к проекту (где лежат исходники) 3. Ограничения (например: "полную переиндексацию не запускать") 4. Формат ожидаемого отчёта #### Модели: - **Основная:** `nekocode/gpt-5.4` — если Слава не указал другую - **Модель по умолчанию:** `anthropic/claude-sonnet-4-6` (Anthropic) — с 2026-04-11 - **Fallback при rate limit:** `openrouter/minimax/minimax-m2.7` — проверено, работает для dev-задач (2026-04-07) - Rate limit gpt-5.4 проявляется как: агент стартует нормально, но отвечает `{"code":"rate_limited",...}` - Если rate limit — не ждать, сразу переключаться на MiniMax или Sonnet 4.6 #### Частые ошибки: - **Не указывать `cwd`** → агент завершается за 5 сек с 0 токенов (молчаливый фейл) - **`streamTo: "parent"`** → работает только с `runtime=acp`, не с subagent - **runtime=acp** → не настроен, всегда падает с ошибкой #### Dev vs Legal: - **Dev** (id: `dev`) — разработка, дебаг, скрипты - **Юрист** (id: `legal`) — юридические вопросы по РФ, workspace: `~/.openclaw/workspace-legal` - **Федя (Fedia)** — агент, workspace: `~/.openclaw/workspace-fedia` ## Скиллы ### Общие (`~/.openclaw/skills/`) — доступны всем агентам - **voice-tts** — голосовые сообщения (ElevenLabs + Yandex SpeechKit) - **diagram-png** — генерация PNG-диаграмм из JSON - **diagram-table** — таблицы в PNG из JSON (Pillow, dark/light). Скрипты: `generate_table.py` (stdin→PNG), `send_table.py` (PNG→Telegram). Требует `TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHAT_ID` в `.env` ### Мои личные (`workspace/skills/`) — только для Стрим - **ontology** — граф знаний (сущности, связи, запросы) - **telegram-collector** — сбор данных из Telegram-каналов - **youtube-search** — YouTube Data API v3. Ключ: `YOUTUBE_API_KEY` - **yandex-search** — Yandex Search API v2. Ключ: `YANDEX_API_KEY` - **ontology** — граф знаний (сущности, связи, запросы) - **Онтология — общая база знаний**: `memory/ontology/` - `graph.jsonl` — сущности и связи - `schema.yaml` — схема типов - `RULES.md` — правила ведения (обязательны) - **Стрим — единственный writer**: все изменения — только через Стрим - ⚠️ **Правило (10.04.2026):** При работе с проектами всегда автоматически обновлять онтологию (create/update) и запускать `openclaw wiki ingest` для документации — без напоминания Славы - **Другие агенты (Dev, Legal, Feda) — читатели**: запрашивают через `sessions_send` - **Изменения — только с подтверждения Славы** - **При работе с проектами/задачами — всегда использовать онтологию** (правила: `memory/ontology/RULES.md`) - Запуск из workspace: `python3 skills/ontology/scripts/ontology.py ` - Storage: `memory/ontology/graph.jsonl` + `memory/ontology/schema.yaml` - PyYAML не установлен — validate暂时 не работает ## Интеграции - **Flightradar24 API** — тариф Explorer, 60K кредитов/мес (до 31.05.2026 промо 120K) - FR24 API key (обновлён 24.04.2026): `019dbf18-3575-71d0-84eb-eb44606fbb63|QU3h8jqLPFyuo9qbQbPu9uoXVK42bTeclMuyRJ5Qb86ba0ea` - **GigaChat API** — через gpt2giga прокси - gpt2giga: `185.130.212.192:8443` (baseUrl в openclaw.json) - Xray VLESS outbound: `43.245.226.231:15281` (Франкфурт), UUID b8d92081-..., Reality+chrome, SNI google.com - Xray конфиг: `/home/slin/openclaw/xray-config.json` - OpenClaw получает `HTTPS_PROXY=socks5://xray:10808` через docker-compose environment - Цепочка: OpenClaw (mva154) → Xray VLESS → ??? → gpt2giga → GigaChat API - Примечание: прямое подключение из контейнера к 185.130.212.192:8443 недоступно (timeout), трафик идёт через host-сеть - ⚠️ **TODO:** Слава проверит схему — точно ли Xray участвует в цепочке к gpt2giga или это отдельный маршрут - Локальный gpt2giga НЕ используется, удалён (08.04.2026) ### Orchestrator / Claude CLI (09.06.2026) - **claude-cli-proxy (eceasy/cli-proxy-api) НИКОГДА не использовался орком → УДАЛЁН (ORCH-84, 09.06.2026).** Проверено боем: env orchestrator/staging без proxy-ссылок, порт 8317 — ноль соединений, логи — только самообслужа. Бэкап: `/home/slin/cli-proxy-removed-20260609-015424`. - **claude.exe орка ходит НАПРЯМУЮ к Anthropic по OAuth-подписке Claude Max** (`~/.claude/.credentials.json`, sub=max, tier=default_claude_max_5x). НЕТ ANTHROPIC_BASE_URL/HTTPS_PROXY. - **CLI = npm-пакет `@anthropic-ai/claude-code` глобально на ХОСТЕ** (82.22.50.71, `/usr/lib/node_modules`, root). В контейнер маунтится read-only как `/opt/claude-code`. Обновление: `sudo npm install -g @anthropic-ai/claude-code@latest` на хосте → `docker restart orchestrator` (npm пересоздаёт inode каталога, маунт надо перемонтировать). - ⚠️ **`--effort` требует Claude Code ≥v2.1.154 для opus-4-8** (офиц. дока code.claude.com/docs/en/model-config). На старой 2.1.142 effort давал пустой вывод → агенты висли. Обновлено до 2.1.168 (ORCH-85).