/ask-debt — сколько я спрашиваю Антона и сколько из этого было зря
Метрика долга по правилу asks-are-my-autonomy-debt: протухание аска — это не «Антон занят», это «я спросил там, где не следовало». Скилл считает эту долю, режет её по классам и вытаскивает ложные аски пофамильно.
Движок: $USERPROFILE/.claude/scripts/ask_debt.py (читает $USERPROFILE/.claude/approvals.db, снимки рядом в _ask_debt_snapshots.json). Никаких серверов и своих БД — AK-47.
Запуск
python ~/.claude/scripts/ask_debt.py --days 30
Вывод — готовая markdown-таблица, её показываю Антону как есть (плюс блок 🧒 «Простыми словами» и вывод «что чиню сам»).
Полезные флаги:
| Флаг | Что делает |
|---|
--days 30 | окно замера (по умолчанию 30; --days 0 = всё время) |
--html | плюс дашборд в $OBSIDIAN_VAULT/_Dashboards/Ask-Debt.html (--html <путь> = свой путь) |
--json | сырой json вместо markdown (для рутин/сторожей) |
--no-snapshot | не сохранять снимок — просто посмотреть |
--db <путь> | другая база (для тестов) |
Дашборд по умолчанию НЕ пишется — предлагаю его сам, когда Антон просит «покажи» или замер идёт в отчёт ([[prefer-visual-dashboards]]).
Что в отчёте
- Шапка — асков за окно, протухло (шт. и %), красных флагов, статусы, и дельта к прошлому замеру.
- Классы асков —
Машинный шум (сторож спрашивает разрешения на собственную работу) · Деньги · Логин / 2FA · UAC / физика · Контент-гейт · Решения · Прочее. Колонка «доля журнала» показывает, чем журнал забит; «% протухания» — где именно долг.
- Темп по неделям — растёт долг или падает.
- 🚩 Ложные аски — тексты с «+ = да, займись» / «займись?» / «разобраться?». Это те, где ответ описывает МОЮ работу.
- ⚠️ Мягкие флаги — «+ = да, жму / поднять / запускаю»: я спрашиваю разрешение на собственный следующий шаг.
Как читать (пороги)
- % протухания по классу ≥70% — класс сам по себе больной, не «Антон не успел».
Машинный шум в топе доли журнала — сторож генерит вопросы о своей же работе; лечение на уровне КОДА сторожа, а не формулировки.
Логин / 2FA 100% протухания — истинные блоки (руки Антона), но упакованы неверно: проси руки («разбуди узел», «нажми Разрешить»), а не разрешение, и одним клик-путём.
- Флагов 0 — только тогда журнал чистый.
Что делаю после замера (иначе замер бесполезен)
- Каждый 🚩-аск прогоняю тестом: «это решение Антона или мой недоделанный шаг?» → мой → иду и делаю сам, аск не восстанавливаю.
- Класс-лидер шума → задача на корень (гейт в самом стороже). ⚠️ Правку контура одобрений (
publish_canon.py, approval.py) харнес мне блокирует — это работа под явным «+» Антона с показанным диффом, обходить нельзя.
- Истинные блоки (
Логин / 2FA, UAC / физика, Деньги) остаются его — Tier-2 не ослабляется ([[remote-approval-qqq]]); их лечим упаковкой: клик-путь + скриншот.
- Снимок сохраняется автоматически → следующий замер покажет, стало лучше или хуже.
Почему отчёт не может тихо соврать «стало лучше»
- Окно скользящее: старый протухший аск однажды просто выедет за
--days, и долг «упадёт» сам. Поэтому в шапке печатается строка ⚠️ Из скользящего окна ВЫШЛО N асков (протухших M) — часть падения даёт время, а не автономность (находка Codex T3, 28.07).
- Дельта между разными окнами (7 дн. против 30 дн.) помечается как несопоставимая, а не выдаётся за прогресс.
- Аски с битой/пустой датой не выбрасываются молча — идут в корзину недели
без даты.
- «Снимок сохранён» пишется только если запись реально прошла.
Если сломается
| Симптом | Что это | Лечение |
|---|
НЕТ БАЗЫ: …approvals.db | на этой машине журнала одобрений нет (не хаб) | замер делать на узле, где живёт approval.py |
нет таблицы pending | схема журнала изменилась | сверить PRAGMA table_info(pending) и поправить список колонок в load_rows |
⚠️ снимки нечитаемы | побился json снимков | скрипт сам отложит его в *.corrupt-<дата> и начнёт новый; старый можно вскрыть руками |
дельта всегда — | нет прошлого снимка с тем же окном | сделать замер с тем же --days ещё раз (снимки пишутся при каждом прогоне без --no-snapshot) |
| аск попал не в тот класс | регулярка шире/уже нужного | править RULES в ask_debt.py — порядок сверху вниз, первое совпадение выигрывает |
Регресс-сетка: python ~/.claude/scripts/_test_ask_debt.py (33 проверки: счёт, классы, флаги, пустая/битая БД, мусорные типы, XSS в дашборде, снимки, честность окна, read-only инвариант по md5). exit 0 = скилл исправен. Прогонять после любой правки ask_debt.py.
Границы
- READ-ONLY по approvals.db — база открыта
mode=ro, ни одного write; статусы асков скилл не трогает (это approval.py). Доказано: md5 базы до и после прогона совпадает, попытка write через тот же коннект отбивается.
- Не шлёт ничего в 02 и никуда наружу.
- Классификатор — регулярки по тексту, не LLM: аск с двумя блокерами попадёт в один класс (первый по приоритету). Цифры — оценка формы журнала, не приговор конкретному аску.
- Замер по ЭТОЙ машине: у каждого узла свой
approvals.db.
- Два одновременных прогона не бьют файл снимков (tmp уникален по pid), но при совпадении момента один снимок может потеряться — на дельту это не влияет (снимки — история, не источник цифр).
<!--kit-footer-->
Like this skill? It is one of 100 in 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.
Flagships worth a look on their own: secondop-panel (a second opinion from a panel of external models), claude-memory-tidy (stop your agent's memory from rotting), telegram-mcp-kit (your own Telegram over MCP in about 15 minutes).
Author: Anton Dziatkovskii, Palo Alto AI Research Lab. Telegram @tonydzi - WhatsApp +1 341 222 9178 - X @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.