Read-only measurement of an agent's autonomy debt from its approvals log: how many times it asked the human for permission in a window, how many asks expired unanswered, and which classes they fall into (machine noise, login or 2FA, physical UAC, money). Use to find asks the agent should have decided itself and to cut needless interruptions. Triggers: /ask-debt, autonomy debt, how often do I ask, expired asks.
Scanned 10/7/2026
npx -y skills add tonydzi/second-brain-starter-kit --skill ask-debt --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ask Debt?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/tonydzi-ask-debt)More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.
---
name: ask-debt
description: "Read-only measurement of an agent's autonomy debt from its approvals log: how many times it asked the human for permission in a window, how many asks expired unanswered, and which classes they fall into (machine noise, login or 2FA, physical UAC, money). Use to find asks the agent should have decided itself and to cut needless interruptions. Triggers: /ask-debt, autonomy debt, how often do I ask, expired asks."
license: MIT
version: 1.0.0
---
# /ask-debt — сколько я спрашиваю Антона и сколько из этого было зря
Метрика долга по правилу `asks-are-my-autonomy-debt`: **протухание аска — это не «Антон занят», это «я спросил там, где не следовало»**. Скилл считает эту долю, режет её по классам и вытаскивает ложные аски пофамильно.
**Движок:** `$USERPROFILE/.claude/scripts/ask_debt.py` (читает `$USERPROFILE/.claude/approvals.db`, снимки рядом в `_ask_debt_snapshots.json`). Никаких серверов и своих БД — AK-47.
## Запуск
```bash
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](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.
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.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!