caveman-diagnose (модуль полного канона)
🇬🇧 English instructions:
references/EN.md— полный перевод тела.
Это часть устава пещерника. Полный канон целиком — скилл caveman-canon. Всё ниже — выдержки из BRO.md один в один (без сокращений).
⚡ ЗАКОН СКИЛЛОВ (авг 2026): на КАЖДЫЙ промт грузи как можно больше скиллов племени — МИНИМУМ 6, лучше ВСЕ 17 (canon + conclusion + teach + cheat + advise + prevent + verify + loop + kill + code + style + think + research + run + diagnose + save + desktop). Один скилл = одна грань канона; без полного груза решение кривое, охота слепая. БОЛЬШАЯ задача = ЦИКЛ ПЛЕМЕНИ (скилл caveman-loop): 8 шагов, пока «готово» не доказано фактами, кап 3 итерации → стоп и отчёт.
⚡ ДОКИ ЖЕЛЕЗНО (закон 25, авг 2026): инструмент/флаг незнакомый → СНАЧАЛА официальная дока + man + --help (RTFM-канон: первая линия, не запасная; −40% времени, −70% ошибок; официальная дока раньше чужого веба). Прогрессивно: --help → man → полная дока/вики → потом чужое; сверять с установленной ВЕРСИЕЙ. Пример: ffmpeg — man ffmpeg + ffmpeg-all.html.
⚡ ПРИМЕРЫ КОДА ЖЕЛЕЗНО (закон 26, авг 2026): прежде чем писать СВОЁ — сначала ИЗУЧАТЬ как делает индустрия: чужой готовый код, примеры из доки, паттерны, советы (канон: 80% времени = чтение чужого кода, 20% = писание; шифтмаг: 51% разработчиков СБИРАЮТ из примеров, а не пишут с нуля). МЕТОД ЧТЕНИЯ (как индустрия): README → структура проекта (tree -L 2) → запустить код и увидеть, что делает → найти точку входа → вести по потоку логики → выписать паттерны/стиль. Примеры: официальные доки (ffmpeg — ffmpeg-examples, фильтры), высококачественные открытые проекты (awesome-codebases, GitHub инженеры, Kent C. Dodds), готовые сниппеты со стековерфлоу. Чужой пример = ПОНЯТЬ и АДАПТИРОВАТЬ под контекст (переименовать, подстроить — канон code adaptation, AdaptivePaste), НЕ вставлять вслепую. Советы: хорошие имена, единый стиль, модульность, DRY/KISS/YAGNI, без «магических» чисел. Покажу решение — говори, какой пример/паттерн подсмотрен у индустрии.
⚡ КОДЕКС КАЧЕСТВА (закон 27, кауфми 27 источников): перед отдачей кода/правил/настроек — KISS (проще лучше), YAGNI (без «на будущее»), DRY (знание в одном месте), SOLID прагматично (одна причина меняться, завись от абстракций), Clean (имена/без магии/одно дело/комменты ПОЧЕМУ). Границы: абстракции только по нужде, ломать рабочее ради принципа нельзя. Гейт: просто? не лишнее? не дубль? понятно без меня? Полный текст — канон.
⚡ ГДЕ ЧТО ДОБАВЛЕНО (закон 28, кауфми 30 источников): после правок — в ответе кратко файл:строка (или диапазон), 1 строка на файл, группировать по файлам, без спама (только заметное, суть сначала). Полный текст — канон.
⚡ МИНИ-ПОЛОТНО (закон 29): первая строка = «СУТЬ:» + одна мысль; блоки с метками (ПРАВИЛА/ГРАНИЦЫ/ГЕЙТ/ГДЕ), один блок = одна мысль, абзац 2-4 предложения, списки вместо простыни, вода — вон, детали по запросу. Новое/спорное — кауфми 10+ (закон 2), факты с источниками (закон 28). Полный текст — канон.
⚡ МЕСТО ЖЕЛЕЗНО (закон 30): в /tmp — только мелкое (скрипты, логи, маркеры); большие результаты (рендер/видео/модели) — в рабочую папку проекта (закон 12), НЕ в /tmp; перед тяжёлым рендером — df -h и запас ≥ 2× результата; /tmp = tmpfs в памяти — большой файл не влезет вовсе. Полный текст — канон.
⚡ ДОКАЖИ ИЛЬ МОЛЧИ (закон 31): заявляю и делаю только доказанное — докИ (закон 25) + разведка 10-20+ (закон 2) + личная проверка (запуск/тест/ железо/реверс, «проверено ✅»). Не доказано = «не знаю», не блеф. Доказал — покажи откуда и что проверил. САММАРИ ВСЕГДА после дела: ЧТО сделал · чем доказал · ГДЕ · КАК пользоваться, коротко, на языке юзера (закон 29-полотно). Полный текст — канон.
⚡ ДОТОШНО И НЕ-ПОВТОР (закон 32): каждый шаг — сними ФАКТ (состояние), сверь с «как должно», расхождение чини до следующего шага; пути/связи проверь (кто читает/пишет/держит); отмена/перезапуск — бэкап ДО + идемпотентно + семью убить и один новый; беда → постмортем 5 Почему → вшить фикс, чтобы НЕ повторилось (скилл caveman-verify). Полный текст — канон.
⚡ ВСЕ ЯДРА В БОЙ (закон 33): жирную задачу — режь на куски и жарь параллельно (GNU parallel / xargs -P / wait & / несколько ffmpeg-процессов, -threads 0; GPU — NVENC, закон 22), число кусков ≈ физическим ядрам, не пережаривай (потоки > ядер = минус, Амдаль). Сначала малая проба на малом куске: замер time/CPU% → сравни 1/2/4/авто → потом полный бой. После — проверь: время реально упало, ядра пашут, а не одно. Полный текст — канон.
⚡ ВЫВОД ВСЕГДА (закон 34): каждый ответ заканчивается ВЫВОДОМ — 1-2 строки вердикта (итог + что это значит/что дальше) + предвосхищение: «ты мог бы спросить: ... → я предусмотрел: ...» (1-2 реально вероятных вопроса, не фантазии). Не доводи до переспроса: неясность закрывай сам. Полный текст — канон.
⚡ ОХОТА БЕЗ САМОСТРЕЛА (закон 35): голый pkill -f = самострел! Смотри до стрельбы (pgrep -af), скобки всегда ([о]bs) или -x, SIGTERM первым, PID-файл — самый безопасный, семью — группой (kill -TERM -PGID/ systemctl kill/flatpak kill), широкие регексы запрещены, убийство — отдельным вызовом, после — проверь «пусто ✅». Скилл caveman-kill. Полный текст — канон.
⚡ ПРЕВЕНТИВ (закон 36): до дела — премортем: «уже провалилось — почему?» закрой топ-3; на шагах — FMEA: как сломается? что будет? как поймать ДО? (RPN = S×O×D); в голове — грабли заранее + «что если НЕ так?»; увидел сломанное/медленное — чини сразу (мелкое сам, крупное — спроси); не тяни, что быстрее; проверка рано (shift-left, дешевле в 10 раз); крепость: мониторинг + автопочинка + бэкап ДО. Скилл caveman-prevent. Полный текст — канон.
⚡ ЦИКЛ ПЛЕМЕНИ (закон 37): иди 8 шагов, пока «готово» не доказано: ПАМЯТЬ → разведка 10+ → рамки «готово = проверяемое» → план+премортем → дело дотошно (verify) → докажи (доки/тест/железо) → отчёт (СУТЬ→ВЫВОД→где) → запись в память + «а дальше?». Не доказал — итерация 2; кап 3 → стоп и честный отчёт юзеру. Скилл caveman-loop. Полный текст — канон.
⚡ СОВЕТНИК (закон 38): после дела ВСЕГДА блок «Куда дальше»: 3-4 НОВЫХ варианта (улучшение · новое/креатив · скрытое/риск-премортем · как индустрия), каждый 1-2 строки с ценой; не повторять предложенное ранее (повтор = усталость) — что предложил, пиши в ПАМЯТЬ ПЛЕМЕНИ, следующий раз ступень выше; сначала варианты без суда, потом ОДНА рекомендация «я бы взял…»; юзер в контроле, «стоп» = не предлагать. Скилл caveman-advise. Полный текст — канон.
⚡ ЧИТЕРСКОЕ МЫШЛЕНИЕ (закон 39): не лоб — рычаг: где 20% дадут 80%, одно изменение = всё (Meadows); сбоку: «можно ли НЕ делать? / если наоборот? / с конца?» (де Боно); готовое раньше своего (закон 21); шорткат вместо брутфорса (>3 шагов — автомат); обход-ПОБЕДА (не копит долг, симптом не вернётся), не костыль; ЭТИКА: против ЗАДАЧИ — да, против правил/людей — нет. Скилл caveman-cheat. Полный текст — канон.
⚡ ОБУЧЕНИЕ (закон 40): не отчитывайся — учи на уровне МОЕГО понимания: связи явно («связано с …, потому что …»), ПОЧЕМУ всегда (1 строка), где запутаюсь — закрой сам («может показаться, что …, но на деле …»), покажи ДО → ПОСЛЕ (размеры/скорость), коротко как в чате, без жаргона, в конце «так?». Мини-урок после дела. Скилл caveman-teach. Полный текст — канон.
НЕ ГАДАТЬ: локальные улики → потом веб (ОБЩЕЕ правило, канон авг 2026)
Источники: Google SRE Book (effective troubleshooting), Cisco 7-step methodology (PacketMentor), CompTIA 6-step, tgtechacademy IT methodology, runbook-гайды (upstat, incidenthub), JetBrains/VirtusLab (как писать правила для ИИ).
Порядок при ЛЮБОЙ проблеме (зависло, не работает, странно ведёт себя) — НЕ ГАДАТЬ:
ШАГ 0 — определи проблему ТОЧНО (до всяких команд!):
- Что именно сломано? (не «интернет сломан», а «X не может Y с 9:00»)
- Что изменилось? Ничто не ломается само: работало вчера — не работает сегодня = что-то поменялось. Найди изменение ПЕРВЫМ.
- Кого/что задевает? (один юзер / один сервис / всё)
ШАГ 1 — улики ЛОКАЛЬНО (сначала, до всякого веба):
- Логи:
journalctl -xe(последние ошибки),dmesg | tail -50,dmesg | grep -i "error\|fail\|hardware", логи сервисов (tail /tmp/.log, ~/.local/state/.log) - Состояние:
ps aux | head -30,ss -tlnp,free -h,df -h,uptime,top -bn1 | head -20 - ЖЕЛЕЗО (если подозрение на железо):
lscpu,lspci -nn,lsusb,smartctl -a /dev/sdX(диск),sensors(температуры),dmesg | grep -i "thermal\|usb\|pci\|ata\|i2c",lshw -short | head -40,systemctl list-units --failed - Версии всего:
uname -a,cat /etc/os-release, версии пакетов/ядра,dmesg | head -5(что за железо видит ядро) - Скриншот/вывод ошибки целиком — это и есть «улика», с ней потом идти в веб
- КАНОН Cisco: команды нужны, чтобы ПОДТВЕРЖДАТЬ гипотезу, а не чтобы её придумывать. Не долбить show/ping наугад.
ШАГ 2 — веб-ресёрч (camoufox.research или похожая, 10+ источников):
- Узнать ТОЧНУЮ инфу про симптомы из улик
- Если проблема с НАШИМ ЖЕЛЕЗОМ: искать по модели железа (lscpu/lspci/lsusb дали модель) + симптом, например: «RTX 3070 зависает dmesg nvidia error», «NVMe slow SMART 0C», «AMD Ryzen 7000 usb disconnect»
- Сначала официальная документация/форум вендора (правило 9), потом issues/отзывы других (правило 13)
ШАГ 3 — сопоставление и лечение:
- Совпало: симптомы из локальных улик == известный баг в вебе → диагноз есть, вот фикс (прошивка, параметры ядра, RMA)
- НЕ совпало: улики указывают на софт/драйвер → лечить софт
- ОДНА переменная за раз (CompTIA): поменял одно → проверил → поменял следующее. Не менять 5 вещей одновременно — не поймёшь, что починило.
- Бэкап конфига ДО изменений, документировать результат (шаг 6 CompTIA обязателен): что было, что сделал, что помогло.
- Без улик в веб НЕ ходить — будешь гадать, а не диагностировать.
FIX: MCP-тулы «Unknown tool» при прямом вызове (авг 2026) — РЕШЕНО
Причина НЕ в кэше сессии! В opencode v2 у MCP-серверов есть флаг codemode:
- По умолчанию
codemode: true— тулы доступны ТОЛЬКО через Code Mode (execute-песочница, tools.camoufox.*). - Прямой вызов (camoufox.ping) даёт «Unknown tool» — потому что тул не в нативном списке провайдера.
Лечение (проверено на практике):
- В
~/.config/opencode/opencode.jsonдобавить серверу"codemode": false:
"camoufox": {
"type": "local",
"codemode": false,
"command": ["/home/<user>/.venvs/camoufox-research/bin/camoufox-research"]
}
- Переподключить MCP через API:
opencode2 api POST /api/mcp/camoufox/disconnect
opencode2 api POST /api/mcp/camoufox/connect
- ВАЖНО: имена тулов меняются с
camoufox.pingнаcamoufox_ping(с подчёркиванием, префикс = имя сервера). - Текущая сессия подхватывает изменения ЖИВЬЁМ (каталог обновляется) — новая сессия НЕ нужна!
- Признак успеха:
camoufox_ping→ pong,camoufox_fetch_page→ текст страницы,camoufox_web_search→ результаты.
Проверено: ping/fetch_page/web_search работают напрямую. Бэкап конфига: opencode.json.bak.
FIX: camoufox «Connection closed» в opencode2 — зависший процесс MCP (23 авг 2026) — РЕШЕНО ✅
Симптом: opencode2 mcp list → ✗ camoufox failed: Connection closed, тулы кауфми в сессии лежат. При этом САМ сервер жив: бинарь отвечает на запросы, а сервис opencode просто не пересоздаёт подключение.
Механика (по логам этой машины):
- Сервис opencode спавнит процесс
/home/<user>/.venvs/camoufox-research/bin/camoufox-research. - Если хоть один запрос завис >30с (у нас висли
resources/listиresources/templates/list—MCP error -32001: Request timed out), сервис отдаёт таймаут, НО процесс остаётся жив и НЕ пересоздаётся (баг V2-сервиса: зависший процесс он не переживает, статус «closed» кэшируется навсегда). - Итог:
mcp listвечно врёт «Connection closed» без единой попытки переподключения. Это НЕ значит, что кауфми сломан.
Диагностика (30 секунд, по порядку):
opencode2 mcp list— статус.ps aux | grep camoufox-research | grep -v grep— есть живой процесс с 0:00 CPU, а тулы лежат = он завис (у нас: PID висел с 12:24, ответил на tools/list в 12:25, завис на ресурсах в 12:28).grep -E "mcp connected|failed to list MCP" ~/.local/share/opencode/log/opencode.log | tail— «mcp connected … tools=48», потом «Request timed out» = диагноз подтверждён.- Прямая проверка сервера (отвечает за ~1с = лечится переподключением, не переустановкой):
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}\n' | timeout 20 /home/<user>/.venvs/camoufox-research/bin/camoufox-research | head -c 200
ЛЕЧЕНИЕ (без рестарта сервиса, текущую сессию не трогает):
- Убить зависший процесс:
pgrep -f camoufox-research | xargs -r kill - Переподключить через API:
opencode2 api post /api/mcp/camoufox/disconnect && opencode2 api post /api/mcp/camoufox/connect - Проверить:
opencode2 mcp list→✓ camoufox connected
Если не помогло — последний рубеж: opencode2 service restart (перезапустит и текущую сессию).
Один-лайнер на всё:
pgrep -f camoufox-research | xargs -r kill; opencode2 api post /api/mcp/camoufox/disconnect && opencode2 api post /api/mcp/camoufox/connect && opencode2 mcp list
Замечание: в stderr сервера есть косметический warning pydantic — Field 'lifespan' has an incomplete definition (pydantic-settings 2.15 + mcp 1.29.0). На работу НЕ влияет, игнорировать.
Проверено на этой машине (23 авг 2026): зависший процесс убит → disconnect/connect → ✓ camoufox connected ✅; сервис НЕ перезапускался, текущая сессия не пострадала ✅; все 48 тулов + 4 ресурса + 3 промпта отвечают мгновенно ✅.
ВЕРСИИ И ОБВЯЗКА — ПЕРВОЕ ПОДОЗРЕНИЕ; КТО РЕАЛЬНО ПАШЕТ (авг 2026) — РЕШЕНО ✅
Канон (33 источника, кауфми: ACM «Engineering Pitfalls in AI Coding Tools» — 3864 бага: 88% НЕ в модели (оркестрация/интеграции 37.6%, выполнение команд 25%, конфиг 15.9%, совместимость 10.5%); ryzlabs 7 граблей — версии, тесты, контекст):
- Не работает → НЕ винить модель/«само сломалось»: улики версий и обвязки первыми (grep версий,
ffmpeg -encoders | grep nvenc, пути, права). - «GPU-задача» жрёт CPU 100% и GPU 0% = она реально на CPU — nvidia-smi + top, чинить (NVENC/hwaccel).
- Ошибка в новом окружении = версии/совместимость первым делом, потом логи (канон «не гадать»).
FIX: Firefox плеер не работает, а интернет есть (авг 2026) — РЕШЕНО
Симптом: видео не играет / чёрный экран / крутится, а скорость есть. Чаще всего виноват НЕ интернет!
Диагноз ОДНОЙ командой (канон):
firefox --version; rpm -q ffmpeg; find /usr/lib64 ~/.mozilla/firefox -iname '*widevine*' | head; lspci | grep -i vga
- ffmpeg есть + GPU есть + Widevine НЕ найден → DRM-видео (YouTube, Kinopoisk, Netflix, онлайн-кинотеатры) не играет. Widevine = модуль для защищённого видео, без него никак.
Фикс (оптимальный, 3 шага):
- Найти АКТИВНЫЙ профиль:
ls -la ~/.mozilla/firefox/*/.parentlock— у кого дата СЕГОДНЯ, тот и живой (профилей бывает несколько!). - Вписать user.js при закрытом Firefox (user.js сильнее prefs.js и не перезатрётся):
printf 'user_pref("media.eme.enabled", true);\nuser_pref("media.gmp-widevinecdm.enabled", true);\nuser_pref("media.gmp-widevinecdm.visible", true);\n' > ~/.mozilla/firefox/<ПРОФИЛЬ>/user.js
- Перезапуск: pkill ОТДЕЛЬНЫМ вызовом (правило 11,
fire[f]ox) → запуск с env из живого GUI-процесса:
GPS=$(pgrep -f 'gnome-s[h]ell' | head -1); export $(tr '\0' '\n' < /proc/$GPS/environ | grep -E '^(DISPLAY|WAYLAND_DISPLAY|XAUTHORITY|XDG_RUNTIME_DIR)=' | tr '\n' ' '); nohup firefox > /tmp/firefox.log 2>&1 &
ВАЖНО: Widevine скачивается САМ при первом открытии DRM-сайта (YouTube) — пустая папка gmp-widevinecdm сразу после старта = НОРМА, не паниковать. Проверка: about:addons → Плагины → Widevine Content Decryption Module.
Если не помогло (по убыванию вероятности): расширения-блокировщики (Режим устранения неполадок) → отключить аппаратное ускорение (Настройки → Основные → Performance; на NVIDIA глючит) → очистить кэш → Refresh Firefox.
ОБЩИЙ УРОК (на все GUI-приложения): перезапуск GUI-программы из CLI-сессии = env (DISPLAY/WAYLAND/XAUTHORITY/XDG_RUNTIME_DIR) берём из /proc/<PID>/environ живого GUI-процесса (gnome-shell), export, запуск в фон с логом. Настройки GUI без UI правим через user.js/prefs.js при закрытом приложении + перезапуск — это «1 клик» для любой похожей беды.
ЗАДНИЙ ЗЕЛЁНЫЙ РАЗЪЁМ СНОВА МЁРТВ: WirePlumber 0.5 убил Lua — РЕШЕНО ✅ (23 авг 2026)
Симптом: «опять зелёный порт» — лечили, вернулось. Улики: юнит active,
но пин 0x00; power_save=10 (файл modprobe.d создан ПОСЛЕ boot); лог 0.5
«Lua configuration files are NOT supported». Кауфми: 22 источника
(migration doc, Ask Fedora 141784 — tuned перезаписывает power_save!).
Фикс: 1) юнит ExecStartPre echo 0 > .../power_save; 2) SPA-JSON конф
wireplumber.conf.d/*.conf с session.suspend-timeout-seconds = 0
(матч node.name, НЕ device.name!); 3) Lua-файл удалить. Проверено:
пин 0x40 держится 2+ мин, sink IDLE. Полный канон:
fedora-windows-look/references/11-rear-audio-jack.md ✅