🔬 Watcher Token Audit
Правило Артура Арсёнова (Soul Daemon, $0.08→$0.002/день): сначала Python, потом LLM. LLM зовётся только на СУЖДЕНИИ; сбор/фильтр/транспорт = код (0 токенов). Аудит 2026-07-02, машина ZBOOKG8 (laptop-HP17), сессия B (implementer).
11
уже 0 токенов (Python-only)
6
LLM только на суждении (норм)
3
починено/построено в этой сессии
~51k
ИЗМЕРЕННЫЙ балласт одного headless claude -p (30,360 создание кэша + 20,813 чтение — json usage)
| Скрипт | Где зовёт LLM | Сбор или суждение? | Частота | Оценка токенов/день | Статус |
creator-watcher\cw_gate.py |
claude -p --model sonnet на КАЖДЫЙ STRIPPED-элемент (по одному) |
Суждение, но без 0-токен префильтра — очевидный мусор тоже ехал в Sonnet |
ночной прогон (пока on-demand) |
~51k/вызов измерено × очередь (29 элементов ≈ 1.5M за прогон; кэш 1ч смягчает) |
🔧 ПОЧИНЕНО: префильтр |
chatgpt\chatgpt_freshness_check.cmd |
headless claude -p только чтобы ОТПРАВИТЬ фикс-текст в TG |
Транспорт (= сбор): текст фиксированный + 2 числа из json, суждения ноль |
ежедневно, при STALE |
~25k за срабатывание → 0 |
🔧 ПОЧИНЕНО: nag_send.py |
creator-watcher\cw_translate.py | claude -p sonnet, батчами по 8 | Язык (легитимный LLM), идемпотентен (кириллица = скип) | on-demand | малая, батчед | ✅ ок |
claude_sessions\judge_sessions_llm.py | claude -p sonnet на ambiguous-хвост | Суждение; детектор отсеивает ~95% бесплатно, вердикты кэшируются навсегда | ночью | steady-state ≈ 0 | ✅ образец |
foxpod\foxpod_weekly_judge.py | 1 вызов Sonnet на недельный дайджест | Суждение; сбор = regex-вены + BANTER-фильтр (0 ток.) | еженедельно | ~4k/день в среднем | ✅ образец |
alpha\judge_nightly.cmd | 1 headless Sonnet-сессия судит 10 майнеров | Суждение; все 10 детекторов 0-токенные | Пн 05:00 | 1 сессия/нед | ✅ ок |
dispatcher\signal_dispatcher.py | route:wake → claude -p | Суждение; wake ЗАБЛОКИРОВАН по умолчанию (--allow-wake opt-in) | по событию | 0 (гейт закрыт) | 🚪 за гейтом |
C:\mcp\tg-watch-daemon (вне _imports) | 1 claude -p на whitelist-сообщение | Суждение (черновик ответа); событийный, не поллинг | по событию | по трафику | ✅ ок |
| — 0 LLM ТОКЕНОВ (Python-only, проверено grep'ом всего _imports): — |
watchers\watch_run.py (/watch-channel ночной) | — | сбор Telethon + детектор mine_channel | ночью | 0 | 0 ток. |
alpha\alpha_scan / bets / bridge / contradictions_scan.py | — | детекторы (regex/SQL), дайджест для судьи | ночью/еженед. | 0 | 0 ток. |
content-factory\voice_triage.py | — | классификация в сессии, стор детерминирован | 3×/день | 0 | 0 ток. |
cowork\cowork_loop.py + cowork_watch | — | регистрация/маячки, 0 LLM | 15 мин | 0 | 0 ток. |
foxpod\foxpod_digest.py | — | детектор вен | ежедн. | 0 | 0 ток. |
cw_detect / cw_fetch / cw_strip / cw_eval / cw_render | — | сбор/стрип/дашборд | ночью | 0 | 0 ток. |
chatgpt_freshness_check.py, sync\conflict_sweeper.py, syncthing_watchdog*, tg_daemon\guard.py+status.py, airtable_watch.py, server_watchdog.py | — | watchdog'и: сравнение дат/портов/файлов = код | разные | 0 | 0 ток. |
🔧 Фикс 1 — cw_gate.py: 0-токенный префильтр перед Sonnet
ДО: каждый STRIPPED-транскрипт (даже 504 символа «What if plants could talk?») ехал в Sonnet — ~25k токенов на вызов.
ПОСЛЕ: prefilter() режет транскрипты <2000 символов до LLM. Калибровка на 29 реальных вердиктов: ловит 6/29 (21%), ложных срабатываний 0 (минимальный PROMOTED = 14 258 символов, запас 7×). ≈300k токенов на прогон очереди 30 шт. (по измеренным 51k/вызов) /tt: 12/12 ✅ (живой прогон на копии базы, Sonnet замокан «взорваться если позовут» — 0 вызовов).
🔧 Фикс 2 — chatgpt freshness nag: LLM-транспорт → nag_send.py (0 токенов)
ДО: при застое ChatGPT→волт поднимался ЦЕЛЫЙ headless claude -p (грузит весь CLAUDE.md+MEMORY.md — измерено ~51k токенов), чтобы отправить фиксированный текст с двумя числами из _freshness.json.
ПОСЛЕ: nag_send.py шлёт тот же текст детерминированно через bus_ping.py --post → чат 03 (канон cc-alerts-to-chat-03). Старый LLM-путь остался закомментированным fallback'ом при падении рельса. /tt: живой прогон на реальном STALE (4 дня) → PING OK → group 03, LLM не вызван; края (нет json / битый json / нет рельса) деградируют кодом 1. ✅
🔧 Фикс 3 — lint-гейт «LLM на сборе» в ночной /arch (Anton «++», 2026-07-02)
arch\lint_llm_collection.py: детерминированный скан всего _imports (.py/.cmd/.ps1) на LLM-вызовы (claude -p / api.anthropic / claude_run.py), baseline = сегодняшний аудит (29 known sites), НОВЫЙ незаревьюенный вызов → RED-флаг к утру. Вшит в run_architect.cmd после lint_print_encoding. /tt: подсадной фейк → RED exit 1 + флаг; удалил → GREEN, флаг очищен. ✅ Правило стало сторожем: класс «LLM тихо вписали в watcher» закрыт.
После адверсариального ревью (APPROVE-WITH-NITS) дочинено: флаги обоих линтов вшиты в sys_check (chk-lint-flags, daily/critical → RED.flag → утренний пинг) — «тревога без звонка» закрыта, причём для соседнего lint_encoding тоже; линты подняты выше sys_check в пайплайне; регекс расширен (claude_exe(), --print, Start-Process) + задокументированы известные слепые зоны; nag_send при занятом рельсе делает 1 ретрай и скипает БЕЗ дорогого LLM-fallback (fallback только на реальный фейл). Бонус ревью: звонок сразу поймал живое нарушение в cofounder_watch.py (· без stdout-guard) — починено. Сквозной /tt: фейк → lint RED → chk-lint-flags FAIL → RED.flag; чисто → 8 checks 0 fail.
⛔ Проверено и отклонено (делали eval, не внедрили)
1. Батчинг cw_gate (8/вызов) — eval на 16 реальных вердиктов: совпадение survive-вердикта всего 62% (10/16), включая 2 потери сигнала (одиночный HELD → батч drop). Гейт качества главнее экономии → остаёмся на поштучном судействе. Скрипт eval: scratchpad _eval_gate_batch.py.
2. Микропрофиль headless (--bare) — измерено: --bare НЕ читает OAuth-keychain («Not logged in») = работал бы только на платном API (нарушение «сначала лимиты подписки»); --setting-sources project экономит ~1k из 51k (бессмысленно). Смягчение уже встроено: 30k балласта кэшируются на 1 час → последовательные вызовы судьи в одном прогоне платят в основном чтение кэша.
3. ChatGPT-синк: токен 401 (мёртв), на ноуте Chrome-расширение не подключено → self-heal задиспатчен ХАБУ (владелец синка) по шине; при провале хаб эскалирует Антону.
🧒 Простыми словами: у нас есть роботы-сторожа. Раньше двое из них звали дорогого умного помощника даже для глупой работы: один — чтобы «прочитать» заведомо пустые бумажки, второй — просто чтобы отнести записку. Теперь пустые бумажки выкидывает бесплатное сито, а записку относит бесплатный курьер. Умного помощника зовём только думать. Остальные 17 сторожей уже так и работали.
Источники: grep всего E:\Obsidian\_imports\**\*.py|.cmd по claude -p / api.anthropic / ANTHROPIC_API_KEY · watcher.db (29 вердиктов) · system.db · /tt-прогоны. Оценка «25k/вызов headless» = CLAUDE.md+MEMORY.md+системный промпт (confidence: med). Статус: artifact.proposed (сессия B, implementer) — ревью и «done» за координатором.