ask-debt

READ-ONLY замер «ДОЛГА АВТОНОМНОСТИ» по журналу одобрений 02 (approvals.db) — сколько я спросил Антона за окно, сколько из этого ПРОТУХЛО (никто не ответил), по каким классам (машинный шум / логин-2FA

SKILL.md

GitHub

/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]]).

Что в отчёте

  1. Шапка — асков за окно, протухло (шт. и %), красных флагов, статусы, и дельта к прошлому замеру.
  2. Классы асков — Машинный шум (сторож спрашивает разрешения на собственную работу) · Деньги · Логин / 2FA · UAC / физика · Контент-гейт · Решения · Прочее. Колонка «доля журнала» показывает, чем журнал забит; «% протухания» — где именно долг.
  3. Темп по неделям — растёт долг или падает.
  4. 🚩 Ложные аски — тексты с «+ = да, займись» / «займись?» / «разобраться?». Это те, где ответ описывает МОЮ работу.
  5. ⚠️ Мягкие флаги — «+ = да, жму / поднять / запускаю»: я спрашиваю разрешение на собственный следующий шаг.

Как читать (пороги)

  • % протухания по классу ≥70% — класс сам по себе больной, не «Антон не успел».
  • Машинный шум в топе доли журнала — сторож генерит вопросы о своей же работе; лечение на уровне КОДА сторожа, а не формулировки.
  • Логин / 2FA 100% протухания — истинные блоки (руки Антона), но упакованы неверно: проси руки («разбуди узел», «нажми Разрешить»), а не разрешение, и одним клик-путём.
  • Флагов 0 — только тогда журнал чистый.

Что делаю после замера (иначе замер бесполезен)

  1. Каждый 🚩-аск прогоняю тестом: «это решение Антона или мой недоделанный шаг?» → мой → иду и делаю сам, аск не восстанавливаю.
  2. Класс-лидер шума → задача на корень (гейт в самом стороже). ⚠️ Правку контура одобрений (publish_canon.py, approval.py) харнес мне блокирует — это работа под явным «+» Антона с показанным диффом, обходить нельзя.
  3. Истинные блоки (Логин / 2FA, UAC / физика, Деньги) остаются его — Tier-2 не ослабляется ([[remote-approval-qqq]]); их лечим упаковкой: клик-путь + скриншот.
  4. Снимок сохраняется автоматически → следующий замер покажет, стало лучше или хуже.

Почему отчёт не может тихо соврать «стало лучше»

  • Окно скользящее: старый протухший аск однажды просто выедет за --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.