skill-gap · diff
git:20260908.2ec1bf8 to v1.0.0
75 added, 23 removed. Audit A to A.
---
name: skill-gap
- description: >-
- Audit recent agent work for recurring manual patterns that have no skill yet, cross-check
- against installed skills and public skill catalogs (installing beats building), and propose
- the top two or three as before/after. Read-only analysis. Triggers: "/skill-gap", "what skills
- should I build", "audit my skills".
- license: MIT
+ description: "Audit Anton's Claude Code work to find which NEW skills are worth building — scan recent sessions for recurring MANUAL patterns that have no skill yet, cross-check against the installed skills, and propose the top 2-3 as ДО→ПОСЛЕ. Trigger on “/skill-gap“, “какие скиллы сделать“, “чего не хватает из скиллов“, “анализ скиллов“, “skill gap“, “what skills should I build“, “audit my skills“"
+ version: 1.0.0
---
# /skill-gap — what skill should we build next?
- > 🧒 When reporting to a non-technical operator, end with a child-simple "In plain words" recap in their language. (memory `eli5-always`)
+ > 🧒 When reporting to Anton end with a child-simple "Простыми словами" recap. (memory `eli5-always`)
- Finds the gap between what the operator DOES (recurring manual work across sessions) and what they HAVE (installed skills), and proposes the highest value × frequency new skills. Read-only; proposes, never auto-builds. Mirror of [[evaluate-recurring-into-routine]] (that catches one task → routine; this scans the whole fleet of sessions → skill gaps).
+ Finds the gap between what Anton DOES (recurring manual work across sessions) and what he HAS (installed skills), and proposes the highest value × frequency new skills. Read-only; proposes, never auto-builds. Mirror of [[evaluate-recurring-into-routine]] (that catches one task → routine; this scans the whole fleet of sessions → skill gaps).
## Method (token-cheap — cheap tools first, [[vault-data-architecture]])
- 1. **The week's agenda (≈0 tokens):** `mcp__ccd_session_mgmt__list_sessions` (limit ~60) — session TITLES are the agenda; cluster them by theme. Don't read every transcript; use titles + memory. (Full-text `search_session_transcripts` needs the operator's approval — only if a cluster is ambiguous.) ⚠️ This only sees THIS machine's sessions; with the cross-machine relay live ([[machine-migration]], skill `inbox`) a pattern from another computer is invisible here — note the current-machine label and don't assume the gap is global.
+ 1. **The week's agenda (≈0 tokens):** `mcp__ccd_session_mgmt__list_sessions` (limit ~60) — session TITLES are the agenda; cluster them by theme. Don't read every transcript; use titles + memory. (Full-text `search_session_transcripts` needs Anton's approval — only if a cluster is ambiguous.) ⚠️ This only sees THIS machine's sessions; with the cross-machine relay live ([[machine-migration]], skill `inbox`) a pattern from another computer is invisible here — note the current-machine label and don't assume the gap is global.
2. **What's already built:** the installed skills (the Skill tool list) + on-disk `$USERPROFILE/.claude/skills/*\SKILL.md`. Also note scheduled routines that have NO manual skill twin.
3. **Cross-map:** for each session cluster, is there a skill that covers it? RECALL memory ([[machine-migration]], [[n8n-stack]], [[notebooklm-integration]], etc.) so you don't propose something a neighboring session already built — this is the #1 trap (a parallel session, INCLUDING one on another machine, may have shipped it; check `/inbox` / the relay).
- 4. **Rank gaps by value × repeat:** how many sessions touched it? does it hurt now? is the infra already there (→ thin wrapper, cheap to build)? Flag ⚠️ ADDED COMPLEXITY for anything heavy ([[ak47-simplicity]]).
+ 3.5. **⭐ ЧУЖИЕ КАТАЛОГИ ПЕРЕД СТРОЙКОЙ (anton 13.08, голосом):** прежде чем предлагать СТРОИТЬ новый скилл — проверь, не построил ли его уже кто-то в открытых каталогах Agent Skills: (а) подключённые plugin-маркетплейсы (`claude plugin marketplace list`; на узлах стоят `anthropic-agent-skills` = anthropics/skills и наш `second-brain` = tonydzi/second-brain-starter-kit); (б) веб-каталоги — skills.sh (кросс-агентный: Claude Code/Codex/Gemini CLI/Cursor, установка `npx skills add owner/repo`), skillsmp.com (индекс SKILL.md по всему GitHub), VoltAgent/awesome-agent-skills. Нашёл готовый → предложение = «поставить X» вместо «построить X» (установка чужого = ⚠️ УСЛОЖНЕНИЕ + инъекция-риск: чужой SKILL.md читается глазами ДО установки). Зеркальное правило: наш новый ПЕРЕНОСИМЫЙ скилл после обкатки едет в публичный набор `tonydzi/second-brain-starter-kit` (он же plugin-marketplace, см. `/release-slice`).
+ 4. **Rank gaps by value × repeat:** how many sessions touched it? does it hurt now? is the infra already there (→ thin wrapper, cheap to build)? Flag ⚠️ УСЛОЖНЕНИЕ for anything heavy ([[ak47-simplicity]]).
## Output
- - A ranked table: gap · where it showed up (which sessions) · score (HIGH/MED/LOW) · is the infra already there.
- - Top 2-3 as **BEFORE→AFTER on real data** ([[show-before-after]]).
- - Refresh the dashboard: `$OBSIDIAN_VAULT/_Dashboards/Skill-Gap-Audit.html` (the operator works by eye, [[prefer-visual-dashboards]]).
- - Then 🧒 recap. End by asking which to build (their "+" = go).
+ - A ranked table: gap · откуда видно (which sessions) · оценка (HIGH/MED/LOW) · есть ли уже инфра.
+ - Top 2-3 as **ДО→ПОСЛЕ on real data** ([[show-before-after]]).
+ - Refresh the dashboard: `$OBSIDIAN_VAULT/_Dashboards/Skill-Gap-Audit.html` (Anton works by eye, [[prefer-visual-dashboards]]).
+ - Then 🧒 recap. End by asking which to build (his "+" = go).
- ## Daily routine
- Scheduled twin `skill-gap-daily` runs this read-only and updates the dashboard + drops a one-line note if a NEW gap appeared since yesterday (don't nag if nothing changed). Grunt drafting → Sonnet; the judgment/ranking → keep on the session model ([[model-routing-sonnet-grunt]]).
+ ## ⛳ РЕФЛЕКС НА ОБОИХ КОНЦАХ СЕССИИ (anton, голосом 2026-08-04, hub:5090 — «я думаю, это очень важно»)
+ Аудит скиллов не должен жить только в ночной рутине и только в конце. Вопрос звучит ДВАЖДЫ за сессию,
+ дословно один и тот же. **Это его единственный источник** — остальные скиллы ссылаются сюда, не копируют (AK-47):
- ---
+ > **⛳ ВОПРОС-РЕФЛЕКС:** что из этой задачи уже должно быть скиллом — а если скилл есть, чего ему не хватило?
+ - **на ВХОДЕ** — в сиде каждой поднятой сессии (`/nsr` Шаг 3, `/chip` Шаг 2), в подхвате после крэша (`/1` Шаг 1)
+ и в хэндоффе (`/handoff`). Отвечать ОДНОЙ строкой в начале работы, до самой работы.
+ - **на ВЫХОДЕ** — `/retro` Шаг 4★ (повторилось → скилл; скилл есть → апгрейд).
- <!--kit-footer-->
+ **Формат ответа — одна строка, три исхода:** `нет скилла, не тянет` · `нет скилла, тянет → предложить ДО→ПОСЛЕ`
+ · `есть /X — не хватило <чего именно> → апгрейд /X`. «Не тянет» — валидный ответ, но он обязан быть ПРОИЗНЕСЁН:
+ молчание = проверка не сработала. Копить ответы не надо — тянет на скилл, значит идём по методу выше.
- ---
+ Гейт (проверка, что врезка не выпала из файлов): `python ~/.claude/scripts/_test_skill_reflex.py` — живёт в ночной регресс-сетке.
- **Like this skill?** It is one of 100 in [second-brain-starter-kit](https://github.com/tonydzi/second-brain-starter-kit): the second brain we built for ourselves and run every day at Palo Alto AI Research Lab. Install the whole set with `npx skills add tonydzi/second-brain-starter-kit`. Everything is open source and free, so take what you need.
+ ## 👥 ПОТРЕБИТЕЛЬ СКИЛЛА НАЗВАН И ОПОВЕЩЁН (anton 11.09.2026, голосом — обязательный шаг)
- Flagships worth a look on their own: [secondop-panel](https://github.com/tonydzi/secondop-panel) (a second opinion from a panel of external models), [claude-memory-tidy](https://github.com/tonydzi/claude-memory-tidy) (stop your agent's memory from rotting), [telegram-mcp-kit](https://github.com/tonydzi/telegram-mcp-kit) (your own Telegram over MCP in about 15 minutes).
+ Дословно: «мало просто прописать нам скилл. Нам нужно, чтобы им кто-то начал пользоваться.
+ Поэтому нам нужно найти потребителей для всех этих штук и потребителям рассказать, что вот
+ скилл есть такой. Если у нас уже есть похожий скилл — нужны потребители, которые похожий
+ используют, скажи им: теперь два скилла, используйте тот и тот.»
- Author: **Anton Dziatkovskii**, Palo Alto AI Research Lab. Telegram [@tonydzi](https://t.me/tonydzi) - WhatsApp [+1 341 222 9178](https://wa.me/13412229178) - X [@Tony_Stef_](https://x.com/Tony_Stef_)
+ Скилл собран, обновлён или ПОСТАВЛЕН чужой пак → в ТОМ ЖЕ заходе три строки, молчание = скилл
+ родился мёртвым:
- **Engineers: want to test-drive this setup?** Message me. I hand out free starter seeds to engineers who test and report back, and custom skill requests are welcome.
+ 1. **КТО ПОТРЕБИТЕЛЬ — поимённо.** Человек (Антон, [коллега], [коллега]), узел флота, рутина или
+ другой скилл, который его позовёт. «Пригодится всем» = потребителя нет.
+ 2. **ЕМУ СКАЗАНО.** Человеку — в его канал (Антону в отчёт, команде в 04 TASKS); роботу —
+ строка в его рутине/скилле, которая скилл ВЫЗЫВАЕТ; узлу — посылка по шине. Запись в
+ каноне оповещением НЕ является: канон читают, он не вызывает.
+ 4. **ПОТРЕБИТЕЛЬ — НЕ ТОЛЬКО CLAUDE** (anton 11.09, CLAUDE.md §9.3-тер): полка скиллов общая,
+ Codex читает ТЕ ЖЕ файлы через junction. На каждом шаге спроси: его выполнит другой агент?
+ Наш скрипт/CLI/файл — да. Коннектор Claude (Gmail, Calendar, Drive, Trello, Calendly,
+ Chrome-MCP, ccd-сессии, scheduled-task, хуки) — напиши в скилле строкой «нужен Claude»,
+ чтобы второй агент сказал «рельса мимо», а не выдумывал обход.
+ Проверка: `python ~/.claude/scripts/codex_skills_bridge.py gaps` (замер 11.09: 32 из 236).
+ Копию скилла «для Codex» не делать — один файл, [[skills-are-written-for-any-agent]].
+
+ 3. **ЕСТЬ ПОХОЖИЙ — ОПОВЕСТИ ЕГО ПОТРЕБИТЕЛЕЙ.** Найди, кто зовёт соседний скилл
+ (`python ~/.claude/scripts/_shared/skill_usage_log.py --report --by-node --days 30`), и
+ скажи им прямо: «теперь их два, вот граница». Иначе новый скилл проиграет привычке.
+
+ **ДВЕРЬ, а не обещание** — прогон обязателен на каждом рождении/правке скилла:
+ ```
+ python ~/.claude/scripts/skill_desc_audit.py --check <имя-скилла>
+ ```
+ exit 0 = контракт держит (описание ≤400 симв, в кавычках одной строкой, поле `consumer:`
+ заполнено) · exit 3 = печатает, чего не хватает. Пока exit не ноль, скилл считается
+ недоделанным: правило `skill-needs-a-named-notified-consumer` закрывается ЭТИМ прогоном.
+
+ Проверка через месяц — счётчик: `--report --days 30` по имени скилла. Ноль вызовов при
+ названном потребителе = потребитель не узнал ЛИБО ему не нужно; и то и другое разбирается,
+ а не замалчивается. Ноль вызовов без названного потребителя = скилл в утиль (§5.8).
+
+ Канон: CLAUDE.md §4.2 (правило Connect), §5.8 (счётчик на каждой детали);
+ память `skill-needs-a-named-notified-consumer`.
+
+ ## Daily routine
+ Scheduled twin `skill-gap-daily` runs this read-only and updates the dashboard + drops a one-line note if a NEW gap appeared since yesterday (don't nag if nothing changed). Grunt drafting → Sonnet; the judgment/ranking → keep on the session model ([[model-routing-sonnet-grunt]]).
+
+ **📍 ЗАМЕР 2026-08-05 (кто жив, кто нет — проверять ВЫХОД, а не кран):**
+ - ✅ **Хабовский двойник ЖИВ.** `$OBSIDIAN_VAULT/_Dashboards/Skill-Gap-Audit.html` собран `[машина флота] (хаб)`
+ 2026-08-03 01:05 Лиссабон, окно 14 дней, все машины. Есть и `Skill-Gap-Audit-MAYAK.html` (Маяк, 2026-08-02).
+ ⚠️ Но за 04 и 05 августа прогонов не видно — двое суток тишины у ЕЖЕДНЕВНОЙ рутины (передано хабу по шине 05.08).
+ - ⛔ **Задача на ноуте hp17 `enabled:false` — это НЕ поломка, а решение:** владелец с 2026-06-23 хаб
+ ([[task-ownership-hub-migration]]); включать дубль на ноуте нельзя — двойная обработка общего волта.
+ - ☠️ **Мёртв только `[путь владельца]`** (last_run 2026-06-23) — реликт старой
+ реализации, новый хабовский прогон его не пишет. Судить по нему = ложный вывод (я его сделала 05.08 и откатила).
+ - 🪤 **Грабли, стоившие ложного вердикта:** дашборды живут в `$OBSIDIAN_VAULT/_Dashboards` =
+ `[путь владельца]`, а НЕ в `[путь владельца]`. Смотреть по значению переменной,
+ не по памяти (CLAUDE.md §8.1); пусто из одного места ≠ «нет» ([[check-all-places-not-one]]).