# Caveman Diagnose

> ЧИНИМ БЕЗ ГАДАНИЯ: локальные улики (логи/dmesg/состояние) → веб по уликам → сопоставил → лечи, одна переменная за раз. Фиксы: MCP Unknown tool (codemode false), camoufox Connection closed (убить процесс → disconnect → connect), Firefox плеер не работает, WirePlumber 0.5 убил Lua. Триггеры: не работает, зависло, сломалось, логи, dmesg, улики, unknown tool, connection closed, mcp, кауфми лёг, диагноз, почему, версии, совместимость, gpu-задача на cpu, nvidia-smi. EN: Fix without guessing: local clues (logs/dmesg/state) → web by clues → treat, one variable at a time. Use when something is broken, hangs, or fails.

- Skill: `aidvizhhub/caveman-diagnose` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add aidvizhhub/caveman-diagnose`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aidvizhhub/caveman-diagnose/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: MIT
- Author: aidvizhhub (https://skillmd.com/u/aidvizhhub)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/aidvizhhub/caveman-diagnose

---


# 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» — потому что тул не в нативном списке провайдера.

Лечение (проверено на практике):
1. В `~/.config/opencode/opencode.json` добавить серверу `"codemode": false`:
```json
"camoufox": {
  "type": "local",
  "codemode": false,
  "command": ["/home/<user>/.venvs/camoufox-research/bin/camoufox-research"]
}
```
2. Переподключить MCP через API:
```
opencode2 api POST /api/mcp/camoufox/disconnect
opencode2 api POST /api/mcp/camoufox/connect
```
3. ВАЖНО: имена тулов меняются с `camoufox.ping` на `camoufox_ping` (с подчёркиванием, префикс = имя сервера).
4. Текущая сессия подхватывает изменения ЖИВЬЁМ (каталог обновляется) — новая сессия НЕ нужна!
5. Признак успеха: `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 просто не пересоздаёт подключение.

Механика (по логам этой машины):
1. Сервис opencode спавнит процесс `/home/<user>/.venvs/camoufox-research/bin/camoufox-research`.
2. Если хоть один запрос завис >30с (у нас висли `resources/list` и `resources/templates/list` — `MCP error -32001: Request timed out`), сервис отдаёт таймаут, НО процесс остаётся жив и НЕ пересоздаётся (баг V2-сервиса: зависший процесс он не переживает, статус «closed» кэшируется навсегда).
3. Итог: `mcp list` вечно врёт «Connection closed» без единой попытки переподключения. Это НЕ значит, что кауфми сломан.

Диагностика (30 секунд, по порядку):
1. `opencode2 mcp list` — статус.
2. `ps aux | grep camoufox-research | grep -v grep` — есть живой процесс с 0:00 CPU, а тулы лежат = он завис (у нас: PID висел с 12:24, ответил на tools/list в 12:25, завис на ресурсах в 12:28).
3. `grep -E "mcp connected|failed to list MCP" ~/.local/share/opencode/log/opencode.log | tail` — «mcp connected … tools=48», потом «Request timed out» = диагноз подтверждён.
4. Прямая проверка сервера (отвечает за ~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`

ЛЕЧЕНИЕ (без рестарта сервиса, текущую сессию не трогает):
1. Убить зависший процесс: `pgrep -f camoufox-research | xargs -r kill`
2. Переподключить через API: `opencode2 api post /api/mcp/camoufox/disconnect && opencode2 api post /api/mcp/camoufox/connect`
3. Проверить: `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 граблей — версии, тесты, контекст):
1. Не работает → НЕ винить модель/«само сломалось»: улики версий и обвязки первыми (grep версий, `ffmpeg -encoders | grep nvenc`, пути, права).
2. «GPU-задача» жрёт CPU 100% и GPU 0% = она реально на CPU — nvidia-smi + top, чинить (NVENC/hwaccel).
3. Ошибка в новом окружении = версии/совместимость первым делом, потом логи (канон «не гадать»).

---

---

## FIX: Firefox плеер не работает, а интернет есть (авг 2026) — РЕШЕНО

Симптом: видео не играет / чёрный экран / крутится, а скорость есть. Чаще всего виноват НЕ интернет!

Диагноз ОДНОЙ командой (канон):
```bash
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 шага):
1. Найти АКТИВНЫЙ профиль: `ls -la ~/.mozilla/firefox/*/.parentlock` — у кого дата СЕГОДНЯ, тот и живой (профилей бывает несколько!).
2. Вписать user.js при закрытом Firefox (user.js сильнее prefs.js и не перезатрётся):
```bash
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
```
3. Перезапуск: pkill ОТДЕЛЬНЫМ вызовом (правило 11, `fire[f]ox`) → запуск с env из живого GUI-процесса:
```bash
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 ✅

