/rep-reply — отвечаем людям нашим опытом
Зачем
Репутация не покупается постами в свои каналы — она складывается там, где живые инженеры
уже мучаются нашей болью. Один точный ответ с артефактом в чужом треде стоит больше десяти
постов в своём. Канон громкости: §1.5 (молчание требует причины) + ⛔ спам ≠ громкость
(одно точное сообщение в правильную дверь, никаких вееров одинакового текста).
⭐ Шаг 0-тер — ПОЛКА × ПРОСЬБА: сперва туда, где хозяин сам просит то, что у нас лежит (anton 21.09.2026, голосом)
Ещё до людного треда: python3 ~/.claude/scripts/shelf_match.py --top 15 (0 LLM, ~5 мин API) — пересечение
НАШИХ публичных репо (полка, ниши из domain.json + фразы боли в registry/github-universe/shelf_overrides.json)
с живыми issue целевых репо, где внешних мержат. Печатаются только точные матчи: в тексте issue названа
боль конкретного нашего репо. Даём ТОЛЬКО то, что есть на полке; ниша без репо у нас = не наша экспертиза, мимо.
Первый ответ захода → лучший точный матч: ответ по существу + ссылка на репо как готовое решение, не «посмотрите
наш проект». ⛔ Обязательная обратная связь по КАЖДОМУ взятому или отброшенному матчу из топ-5:
shelf_match.py --verdict <url> hit|miss "почему" — miss исключается навсегда, точность печатается в следующем
прогоне; без вердиктов фильтр не ужесточится (замер 21.09: уровень «ниша» дал 929 матчей, уровень «боль» — 335,
из них настоящих на глаз ~⅓). Таблица для Антона: --publish → вкладка «Полка × просьбы» книги целей.
🪙 Тела топ-N issue для вердиктов НЕ читает дорогая модель: Agent(model: "sonnet") получает список url и возвращает по каждому ≤3 строки «что просят · что у нас · hit/miss с причиной»; дорогая модель только утверждает вердикты (замер 21.09: 70 тел прочитаны Fable, рельса Sonnet = 0 вызовов, причина «забыл»).
Пусто → строка «полка не спрошена» в журнал и Шаг 0-бис.
⚠️ Прибора НЕТ на узле — это не «пусто», и чинить его в прогоне охоты не надо (замер 23.09, хаб:
shelf_match.py не найден ни в ~/.claude, ни в _imports на глубину 4, хотя Шаг 0-тер написан 21.09).
Пиши в лог skip со строкой «полка не спрошена: прибора нет на узле» и иди на Шаг 0-бис; развёртывание
прибора — работа посылки/деплоя, а не охоты, иначе прогон съедает себя на инфраструктуре.
⭐ Шаг 0-бис — САМЫЙ ЛЮДНЫЙ ЖИВОЙ ТРЕД ДОМЕНА ПЕРВЫМ (anton 15.09.2026, «делай правило, не жди реакции»)
Первый ответ захода идёт НЕ в гнёзда ниже, а туда, где прямо сейчас больше всего живых людей спорят
про нашу боль. Один веер, один bash-скрипт, слова домена по одному (длинная фраза даёт пусто):
memory · fleet · consensus · "second brain" · supersede · handoff · CRM · watchdog · "exit 0" →
gh search issues "<слово> reactions:>10" --state open --updated ">$(date -v-14d +%F)" --sort comments --order desc --limit 10.
⚠️ reactions:>10 в САМОМ запросе — не украшение, а фильтр роевого спама (замер GIT-S5 17.09: без него
6 слов домена дали 36 кандидатов, из них 35 — репо-пустышки с 2500💬 от 1–3 ботов, и живая дверь была
ровно одна; с ним верх выдачи = anthropics/claude-code, openai/codex, microsoft/vscode, пустышки ушли
полностью). Фильтр НЕ заменяет домен-суждение: реакции тянут вверх мега-треды мимо ниши (Proton, WSL, golang)
— их отсекаем словами ниши, как раньше.
Кандидат = ≥10 комментариев · ≥5 разных авторов · обновлён ≤14 дней · нашего голоса нет
(gh api .../comments --jq '[.[].user.login]|unique'). Ботские «control board» треды (сотни 💬 от 1–3
авторов) — монолог, не дверь. Нашли → читаем тред целиком, ищем, чего в нём ещё НЕТ, и несём туда замер
с датой и артефакт (эталон: gastownhall/beads#5877, 14.09 — 77💬, 15 авторов, 25 дней без нас; коммент +
код в тот же день). Второй тред того же репо в тот же час — только с отдельной ценностью (§1.5).
⚠️ github_targets.py --check на несканированном репо отвечает «домен=off, вне круга» — это значит
«не сканировали», не «запрещено»; решение по описанию репо и словам домена (класс
domain-gate-off-for-unscanned-repo). Канон: reglament-samyy-lyudnyy-zhivoy-tred-domena-pervym,
память [[loudest-live-thread-first]]. Пусто по всем словам → строка «людного треда нет» и дальше Шаг 1.
Шаг 1 — ОХОТА (где искать)
Скоуп-поиск бьёт глобальный (замер 11.08: глобальные фразы дают пусто, скоуп даёт золото).
Гнёзда с трафиком, по порядку ценности:
anthropics/claude-code — наш главный домен, десятки тысяч issue.
- Фреймворки, где мы уже стоим форками:
openai/openai-agents-python, agno-agi/agno,
pydantic/pydantic-ai, modelcontextprotocol/*.
2-бис. ⭐ Гнёзда 2 расширены 13.09: + langchain-ai/langgraph · run-llama/llama_index.
Замер 13.09: один прогон словаря × 7 репо дал 70 живых кандидатов ≤30 дней, из них 1 из 3
отправленных ответов пришёл из нового репо (langgraph#8850). Главное не доля, а то, что в
langgraph и llama_index нашего голоса нет ВООБЩЕ ни в одном треде — чистое поле, пока мы
год ходим в claude-code. Темы те же (checkpoint/resume/durability/HITL), трафик выше.
- Репо, куда нас уже заносило потоком (/contrib-watch, /consumer-hunt журналы).
⚠️ Гнездо вычерпывается: ≥3 из 5 топ-кандидатов уже наши → переключай гнездо, не ищи глубже.
Замер 10.09: в anthropics/claude-code 4 из 5 лучших свежих тредов (#92998 #92505 #88738 + #78569)
уже несли комментарий tonydzi — ежедневная рутина год ходит в одну дверь и сама её и вычерпала.
Признак ловится на гейте п.4, но ПОСЛЕ чтения треда, то есть уже потраченными токенами. Дешевле
считать долю сразу после охоты и, если она ≥60%, переносить прогон в гнёзда 2 (openai/openai-agents-python,
agno-agi/agno, pydantic/pydantic-ai, modelcontextprotocol/*), где наши темы (session persistence,
HITL approval resume, compaction) живые и нашего голоса ещё нет.
📌 Словарь охоты по гнёздам 2 (замер 11.09: этот список × 6 репо = 8 чистых кандидатов за один
скрипт, ни в одном нашего голоса не было): memory · session · resume · approval · human-in-the-loop · persistence · checkpoint · timeout · hang · stall · compaction · handoff. ⭐ Добор 13.09:
silent · exit code · scheduled — exit code в одиночку дало langgraph#8850 (1 из 3 ответов
дня), silent подняло ещё 4 кандидата в верхних 40. Ловят класс «прибор врёт зелёным», по
которому у нас самый толстый банк датированных замеров. Остальные 2 ответа дня пришли по
старым словам (resume → agno#9928, memory → agno#10139).
Одно слово на запрос
(грабля «длинные фразы дают пусто» ниже), --limit 3 --sort updated --state open, весь веер одним
bash-скриптом, а не 70 вызовами.
Банк тем = карта НАШИХ артефактов (тема → чем отвечаем):
| тема-запрос | наш артефакт |
|---|
| self-healing agent fleet / breakage journal / third-strike auto-repair | труба §5.10 21.08: журнал классов → догоняющий скан обоих форматов → авто-сессия починки (selfheal.py: scan_journal, кап/прогон, TTL raised, recycle, анти-петля ✅починено; 12+9 тест-кейсов). Контрибьют-тест 21.08: (а) да — agent-флоты с ночными рутинами болеют этим классом; (в) да — generic-срезом без путей; (б) gh search «agent self-healing breakage repair» пусто → живой тред не найден, ждёт /issue-match |
| memory across sessions / compaction / CLAUDE.md | sqlite-graph-memory · claude-memory-tidy · second-brain-starter-kit |
| session handoff / continuity | скилл /handoff · claude-consensus |
| agents on multiple machines / state drift | claude-consensus · fleet-deploy |
| scheduled / headless / cron agent failures, exit 0 lies | verified-ops-starter · Breakage-Journal (регресс-сетка, карта сигналов) |
| «list_scheduled_tasks показывает не все задачи» · пропавшие рутины в Desktop · опись рутин | замер 20.08: MCP отдаёт ТОЛЬКО стор своей сессии (6 из 79); истина — claude-code-sessions/*/*/scheduled-tasks.json, сторы СЛИВАТЬ по id (свежий lastRunAt побеждает). Живые треды: anthropics/claude-code 8 открытых, ближайший — «Desktop app update silently wiped the internal scheduled-tasks registry» (10.08, 3 коммента). Артефакт-кандидат: диагностический сниппет, не наш сборщик (в нём волт и git25-журнал) |
| запланированная задача молча встала / «Skipped» без причины / lastRunAt врёт / как связать taskId с сессией | ⚠️ ПУТЬ И ФОРМАТ, обе грабли оплачены 21.09: стор лежит НЕ в ~/.claude, а в %APPDATA%\Claude\claude-code-sessions\*\*\scheduled-tasks.json (macOS: ~/Library/Application Support/Claude/...), и рядом появилось ВТОРОЕ дерево local-agent-mode-sessions — считать оба, иначе первый скан вернёт 0 сторов и это прочтётся как «скипов нет»; поле at внутри события = epoch МИЛЛИСЕКУНДЫ, разбор его как ISO-строки МОЛЧА даёт «0 за 24ч» при реальных 1939 (замер 21.09, поймано перед самой публикацией). В том же сторе лежит recordedSkips — taskId → [{at, reason}], причина КАЖДОГО отказа машиночитаемо: 13689 событий, за 24ч 5953 global_limit (потолок ВСЕЙ машины, не «эта задача ещё бежит») + 1539 per_task_limit; пропущенный fireAt ретраится с медианой 60.0с (512 событий за 98.5ч на одной задаче), при этом lastRunAt/lastScheduledFor остаются null, а fireAt пришпилен к пропущенному времени. Рядом local_<uuid>.json несёт scheduledTaskId + cliSessionId + lastActivityAt — это ПРОЩЕ, чем маркер в транскрипте (gist из #84196). ⚠️ Две ловушки, обе опубликованы: sessionId в индексе = app-side local_<uuid>, транскрипт назван по cliSessionId; и lastActivityAt НЕ сторожит живость — 02.09 10:24Z своя же живая сессия показала «тихо 7.0 мин» при дописываемом транскрипте 0.0 мин. Использован в anthropics/claude-code#91371 (02.09). Контрибьют-тест 02.09: 3/3 да |
| Desktop-сайдбар не видит сессии CLI / индекс сессий застрял / «папка старая, значит мёртвая» | контроль-замер здоровой машины 02.09: level-1 папка ОДНА и её mtime на 9 дней старше (Windows двигает дату каталога только при добавлении/удалении записи В НЁМ), а level-2 писалась в ту же минуту; живой признак — mtime local_*.json (78 за сутки). Индекс НЕ зеркало транскриптов: 282 записи против 16539 .jsonl. Использован в anthropics/claude-code#91017 (02.09) |
| backup mirror replays deletions / robocopy MIR data loss / recovery window | mass-delete gate + deletion quarantine (_imports/backup/daily_backup_E_to_F.ps1, 31 тест; кандидат /release-slice — отдать срезом без путей хаба и bus_send). Контрибьют-тест 21.08: (а) да — /MIR-footgun классический; (в) да — срезом; (б) gh search пусто, живой тред не найден → стучаться пока некуда, ждёт /issue-match |
| orphan/dead-code detector lies across OS boundaries / cron-scheduler blindness / false-red watchdog | суд сирот 21.08: паттерн «вердикт „никто не зовёт" валиден только для окна вызывателей ТОЙ же ОС» + детерминированная сверка schtasks/hooks (sweep-final-[id].json, 124/178 ложных красных) + Breakage-класс orphan-detector-blind-to-windows-callers. Контрибьют-тест 21.08: (а) да — mixed-OS флоты классика; (в) да — паттерн без путей; (б) gh search пусто → ждёт /issue-match |
| experiment/shadow rollout without harvest date / stale flags never reaped | жнец теней: harvest_watch.py (две даты у каждого пилота, exit 1 = созревшее, сторож не живёт в том, что сторожит) + рутина auto-hub-260821-shadow-harvest-daily. Контрибьют-тест 21.08: (а) да — stale-flag/эксперимент-без-финиша боль индустрии; (в) да; (б) gh search этими запросами пусто → ждёт /issue-match |
| Windows CLI arg-limit убивает агентские рельсы молча («The command line is too long»: npm *.CMD → cmd.exe 8191, native → 32767) | транспорт-паттерн stdin / --prompt-file + красный self-test на раздутый argv (dr_headless_dispatch). Контрибьют-тест 21.08: (а) да — любой Windows-агентник с codex/gemini CLI; (в) да — паттерн без наших путей; (б) gh search не сделан → /issue-match до стука |
| agent session looks alive but has taken no turn / green indicator over a dead loop / how to DETECT a silent stall | детектор возраста последнего type:"assistant" хода в ~/.claude/projects/*/*.jsonl (замер 22.08 на хабе: 46 транскриптов за 6ч, 34 с ходом старше 60 мин, свежайший 0 = эталон) + честная оговорка, которой нет ни у кого: возраст САМ ПО СЕБЕ пере-стреливает, не хватает знаменателя (кто обязан двигаться), поэтому декларацию обязан отдавать рантайм; плюс «Stop-хук не сторожит петлю, которая не берёт ход» (§5.5) с нашим ложным зелёным 04.08. Использован в anthropics/claude-code#82546 (22.08). Контрибьют-тест 22.08: 3/3 да → кандидат /release-slice, дом = tonydzi/verified-ops-starter (четвёртая проверка рядом с output freshness) |
silent API stall / бесконечный спиннер / dead connection не детектится / API_TIMEOUT_MS инъекция десктопом | корпусный замер разрывов ожидания API api_wait_gaps.py (gist ef98ce22141e61505ba540bf798e1fc9, stdlib, read-only). Замер 25.08 на Windows-хабе: инъекция API_TIMEOUT_MS=900000 + CLAUDE_CODE_ENTRYPOINT=claude-desktop ПОДТВЕРЖДЕНА на 2.1.237 (значит не macOS-специфика), НО 1859 транскриптов за 7 дней дали 221 разрыв ≥60с и НОЛЬ в полосе 860-940с, максимум 356с, 1 реальная запись Request timed out → инъекция усилитель, а не причина. Две ловушки прибора, обе пойманы до публикации: наивный скан «все разрывы ≥60с» меряет возобновления сессий (первый проход выдал «залипание 32 дня»), а счётчик таймаутов ловит САМ СЕБЯ (8 из 9 совпадений = текст скрипта в сканируемом транскрипте). Использован в anthropics/claude-code#88178 (25.08). Контрибьют-тест 25.08: 3/3 да |
| human-in-the-loop approval | agent-approval-gate |
| human-in-the-loop step silently expires / durable interrupts / forcing function для шага человека | reglament «принудительное столкновение» (канал где человек живёт + доставка в срок + дефолт при тишине) + кейс session_brief (вердикт проспал 8 дн при 2 «работающих» напоминалках). Контрибьют-тест 21.08: 3/3 да; живой тред JamesHWade/deputy#43 «Durable human-in-the-loop interrupts» (upd 21.08) — кандидат /rep-reply |
| LLM reviewer trust / verdict parsing | verdict-contract · secondop-panel |
| MCP память / много сессий / daemon | mcp-daemon-diet · telegram-mcp-kit · whatsapp-mcp-kit |
| Desktop не стартует / MSIX / зомби-процессы | claude-desktop-watchdog · claude-mac-patrol |
| scheduled task молча не бежит (battery defaults schtasks) | claude-desktop-watchdog (install_watchdog.ps1 battery-fix) · verified-ops-starter |
| как ДОКАЗАТЬ что watchdog работает (live kill-test, watchdog-of-watchdog) | claude-desktop-watchdog (claude_desktop_livetest.ps1 + output_freshness слой) |
| авторестарт не даёт приложению ДОобновиться (MSIX Register нужен ноль процессов; безоконный труп держит single-instance замок) | claude-desktop-watchdog v1.3 staged-corpse ветка (17.08) · память desktop-staged-update-corpse — кандидат на /release-slice, живых чужих тредов пока не найдено (4 запроса gh, поиск исправен) |
| MSIX Status=Modified,NeedsRemediation / пакет флипает обратно после Repair / StateRepository rot | разбор 24.08 (хаб): скриптовый Add-AppxPackage -Register на здоровом пакете = 0x[id] → Modified (виндовая СВОЯ ремедиация чинит, наша ломает); мгновенный флип Ok→Modified после успешного Register = гниль StateRepository, лечится ТОЛЬКО Remove-AppxPackage + официальный Claude Setup.exe (подпись проверить; ставит тот же MSIX — не-MSIX сборки нет); паттерн «твой ночной авто-ремонт и есть болезнь» (лживый staged-детектор → грязный Register). Память appx-container-deadlock-not-file-lock. Контрибьют-тест 24.08: (а) да — Claude Desktop Windows юзеры массово ловят Modified/NeedsRemediation; (в) да — паттерн без наших путей; (б) ✅ СДЕЛАНО 24.08 вечером — лечилка раздана в 6 живых тредов (anthropics/claude-code#84333 #88138 #84851 #81992 #81180 + openai/codex#35347), все под вахтой pr_watch; дубли в остальные claude-code-треды класса НЕ шлём (перекрёстно связаны, 7-й коммент = веер) |
AGENTS.md режется молча / project_doc_max_bytes / instruction budget 32 KiB | codex_mirror.py (версионное зеркало с гейтами + кап) · посылка codex-cap-handoff (config.toml=131072) — живые треды: openai/codex#37956, openai/codex#36371, open-mercato#4484, hermes-agent#50165 |
| продолжить сессию Claude Code в Codex / cross-CLI handoff | handoff_to_codex.py + блок §C7 в AGENTS.md (агент сам читает ~/.codex/_handoff/CURRENT.md первым) |
| RAG citations / hallucinated sources | verbatim-citation-gate |
| token cost / subscription utilization | llm-spend-audit |
| цена САМОГО старта сессии / «преамбула жжёт до всякой работы» / per-source attribution бюджета | llm-spend-audit session_tax.py — замер 21.08 на хабе: 13094 транскрипта, 4461 сессия за 14д, медиана первого запроса 97 982 токена (21 080 / 133 119), за 21.08 — 99 751 на 121 сессию. Пуант, которого в чужих тредах нет: always-loaded преамбула — это ИСТОЧНИК расхода, которого нет ни в одной таксономии (хуки/плагины/субагенты/воркфлоу), и ему нужен счётчик БЕЗ потолка. Использован в anthropics/claude-code#85422 (21.08) |
| docstring drift / docs out of sync with code / docs-as-code gate | reglament-dokumentaciya-po-chastyam-i-vnutri-koda (docstring=один источник + updated-дата, гейт /tt Шаг 3.5, git blame по строкам) — живой тред: Verified-zkEVM/evm-asm#10657 («docstring drift... no gate watching», обновлён 09.08) |
| тестирование n8n Code-нод / как проверить логику ноды без кликов в UI | харнес _test_voice_finalizer.py (18.08): поднимает ВРЕМЕННЫЙ воркфлоу в живом n8n через REST, гоняет ноду настоящим движком на записанных payload'ах телеграм-триггера, стенд удаляет за собой — кандидат на /release-slice. Контрибьют-тест 18.08: (а) ✅ боль универсальная (Code-ноды проверяют кликами) · (б) 🤔 НЕ подтверждено — 3 запроса gh, первые два пустые из-за синтаксиса глобального поиска, поиск исправен (issue n8n-io/n8n отдаются), тредов именно по теме не найдено · (в) ✅ отдаётся без утечки после вычистки id чатов и хендлов |
unattended/scheduled CLI process не выходит после прогона / leaked claude processes / машина деградирует без сигнала | замер 03.09 на Windows-хабе: 132 живых CLI-процесса %APPDATA%\Claude\claude-code\2.1.246\claude.exe формы --output-format stream-json --input-format stream-json --permission-prompt-tool stdio, родитель = Electron-main, только 2 с --resume (= сигнатура рутинного прогона); старшему 67 ч; выборка CPU за 15-секундное окно простоя — 27 жгут прямо сейчас (>0.5 с CPU / 15 с ≈ 4% ядра), из них 17 старше суток. Сцепка с нашей веткой: recordedSkips в том же сторе даёт 3692 global_limit за 24ч на 24 задачи = единственное место, где ущерб СЧИТАЕМ (автор писал «нет пользовательского сигнала»). ⚠️ Граница вслух: со-встречаемость, НЕ доказанная причинность. Использован в anthropics/claude-code#91642 (03.09). Контрибьют-тест 03.09: 3/3 да |
| read-before-write гейт бьёт по файлам, которых сессия «не читала» (auto-memory pointer, свой же вывод пайплайна) | корпусный замер 03.09: 4014 транскриптов за 14 дней → 62 ошибки File has not been read yet в 35 транскриптах, из них только 5 на MEMORY.md; из 46 сопоставленных с вызовом — 37 Write против 5 Edit, цели = *-judged-latest.md, PLAN-<host>-<дата>.md (файлы, которые сессия САМА породила скриптом). Пуант, которого в треде не было: класс шире «инъектированных файлов» — это ЛЮБОЙ контент, пришедший не через in-conversation Read; и фикс «валидировать по content-match» закрывает только Edit. Использован в anthropics/claude-code#78569 (03.09) |
| память worktree-сессии уезжает в стор, который умрёт вместе с worktree (write-сторона cwd-ключа) | перепись 03.09: 12 worktree-keyed сторов памяти, 15 файлов, которые ни одна будущая сессия origin-репо не поднимет (свежайший 30.08), против 12 главных сторов с 1374 файлами; у 3 из 12 файлы есть, а строк-указателей в их же MEMORY.md ноль = невидимы дважды. Вывод для фикса: резолв через originCwd только на ЧТЕНИЕ узаконит потерю, нужна разовая миграция. Использован в anthropics/claude-code#81833 (03.09) |
| shared markdown journal + несколько писателей / Syncthing conflict siblings / потеря строк при append | пер-узловые шарды журнала поломок: запись ТОЛЬКО дверью selfheal.py journal (прямой md-append отбивается хуком breakage_write_guard.py), ночная свёртка шардов в общий файл, conflict_merge.py вливает уникальные строки из sync-conflict копий. Контрибьют-тест 05.09: (а) да — общий md под мульти-писателем классика; (в) да — механизм без наших путей; (б) да, живые двери найдены: psimaker/vaultsync#150 (28.08, open, labels risk:data-loss — политика удержания конфликтов) и ProfSynapse/nexus#290 (15.08, open — «conflict siblings can affect shard writes»). 3/3 → кандидат /release-slice + стучаться через /issue-match |
| вердикт verify судится РОДИТЕЛЬСКОЙ оболочкой / «работает в bash, падает в cmd.exe» / кроссплатформенная раскатка | _shared/shell_lane.py + verify_probe.py + гейт deploy_cmd_portability.py: команда раскатки объявляет свою рельсу, а не наследует ту, в которой её запустили; замер 03.09 нашёл семь корней, не один. Контрибьют-тест 05.09: (а) да — mixed-OS флоты болеют; (в) да — срезом без путей хаба; (б) пусто по трём формулировкам при живом приборе (контроль-запрос вернул хиты) → живой двери нет, ждёт /issue-match. 2/3 |
⚠️ Две грабли рельсы, обе замерены:
- Длинные фразы в
gh search issues дают ПУСТО. 21.08: батч из 6 многословных запросов
(«scheduled task did not run», «approval permission prompt automation») вернул ноль по всем,
а короткие («worktree», «token budget», «compaction») на том же репо — золото. Поиск при этом
исправен. Ищи в 1-2 слова, иначе решишь, что тем нет.
ensure_gh_token() возвращает ИМЯ ИСТОЧНИКА («store»), а не токен. Пойман дважды (07.09 и
09.09): 5-символьная строка читается как обрезанный токен, и рука тянется «чинить» рабочую дверь.
Она кладёт токен в окружение — забирай оттуда: export GH_TOKEN=$(python -c "...; gh_env.ensure_gh_token(); print(os.environ.get('GH_TOKEN',''))").
updatedAt врёт про жизнь треда: это может быть массовый label-sweep бота. Пойман дважды
(18.08 22:06 и 21.08 10:09 — десятки issue с одинаковой меткой до секунды). Гейт п.1 считать
ТОЛЬКО по последнему РЕАЛЬНОМУ комменту: gh api repos/<r>/issues/<n>/comments --jq '.[-1]'.
Команда охоты (примеры; сортировка по updated, только open):
gh search issues --repo anthropics/claude-code "<тема>" --state open --sort updated --limit 5 \
--json number,title,updatedAt,commentsCount \
--template '{{range .}}#{{.number}} ({{timeago .updatedAt}}, {{.commentsCount}}c) {{.title}}{{"\n"}}{{end}}'
Шаг 2 — ОТБОР (гейт качества, анти-спам; ВСЕ пункты обязательны)
Отвечаем ТОЛЬКО если:
- Тред живой: обновлялся ≤30 дней, открыт.
⚠️ УНАСЛЕДОВАННЫЙ КАНДИДАТ ПРОВЕРЯЕТСЯ ПО ЧАСАМ, А НЕ ПО РЕКОМЕНДАЦИИ ПРОШЛОЙ СМЕНЫ.
Замер 15.09: смена 14.09 передала
llama_index#22559 как «самый вкусный», а тред стоял
с 03.08 = 43 дня, то есть мёртв по этому же пункту. Кандидат из rep_reply.jsonl —
такой же claim, как любой другой: ПЕРЕД чтением треда одним gh api repos/<r>/issues/<n> --jq .updated_at сверь возраст. Пишешь кандидата в лог — клади в reason дату
последней активности, чтобы завтрашняя смена видела протухание без похода в API.
- У автора есть вопрос/боль, на которую наш опыт отвечает ПО СУЩЕСТВУ — не «мы тоже про
агентов». Тест: можем процитировать строку автора, на которую отвечаем.
- У нас есть АРТЕФАКТ с датой: репозиторий, замер, строка Breakage-Journal, код. Совет без
артефакта = не наш жанр, скип.
- Мы в этом треде ещё не писали. ⚠️ У лаборатории НЕСКОЛЬКО личностей на GitHub — проверять
ВСЕ (замер 25.08: гейт смотрел только
tonydzi и чуть не дал дубль): tonydzi ·
Palo-Alto-AI-Research-Lab · secondbrainstarter. Одной командой:
gh api repos/<r>/issues/<n>/comments --jq '[.[]|select(.user.login|test("tonydzi|Palo-Alto-AI-Research-Lab|secondbrainstarter"))|"\(.user.login)@\(.created_at[:10])"]'
Токен для ответа берётся НЕ из hosts.yml, а из store: gh_env.ensure_gh_token() → tonydzi.
⚠️ Считать НЕ только «писали ли», но и СКОЛЬКО: ≥3 наших комментария в одном треде = стоп,
даже если каждый по отдельности гейт проходил. Замер 08.09: в claude-code#91188 накопилось
11 наших комментариев за 01.09–07.09 — это тот же веер, только растянутый во времени, и
ежедневная рутина сама его и намотала. Порог считать той же командой: длина массива OURS.
- Ответ не дублирует уже данный кем-то ответ — если наш пуант уже сказан, скип или лайк.
Нарушен любой пункт → тред в скип-лог с причиной, НЕ отвечать. Квоты СВЕРХУ нет
(no-publication-limits), гейт только по качеству.
Шаг 3 — ОТВЕТ (рецепт эталона #84410)
- Язык = язык треда (грабли 11.08: русский комментарий в англ. тред, пришлось переписывать).
- Первая строка — раскрытие Майкрофта с юмором (§3.3): "hi, this is Mycroft, Anton's
synthetic cofounder — ..." Один раз на тред.
- Скелет: (а) чем наш случай совпадает и чем ОТЛИЧАЕТСЯ от авторского — честно; (б) наш
опыт фактами с датами/цифрами/ссылками; (в) рабочий кусок (команда/сниппет), который
читатель может применить за минуту; (г) ссылка на наш артефакт — ОДНА, по делу;
(д) последняя строка = встречный вопрос автору (тред живёт вопросами).
3-бис. ⚠️ ПРОГОНИ СВОЙ АРТЕФАКТ ПЕРЕД ТЕМ, КАК ДАТЬ НА НЕГО ССЫЛКУ. Замер 20.09: писал
в
claude-code#38335 (859 комментов) с цифрами из llm-spend-audit/session_tax.py и
запустил его для свежего замера — инструмент упал IndexError на живом корпусе (сторож
искал <scheduled-task name=, сплит требовал ещё и кавычку; scan зовётся в одном цикле
по всем файлам, поэтому ОДИН такой транскрипт убивал замер целиком). Ссылка ушла бы на
падающий код к 74 авторам. Правило: даёшь ссылку на исполняемый артефакт → в том же
заходе клонируй его С GITHUB (не свою локальную копию) и прогони; упал → чини и пуши
ДО отправки, а падение назови в комментарии — честность про свой же баг сильнее
умолчания. Класс guard-and-split-use-different-literals (журнал 1/3), фикс 200884a.
- Цифры = только правда (§5.4 fake-it-граница); «не поймано у нас с артефактами» пишем
вслух — честность про границу доказанного РАБОТАЕТ на репутацию, см. #84410.
⚠️ СТАТУС НАШЕГО ФИКСА — ТОЖЕ ЦИФРА. Промах 14.09 (пойман на самопроверке перед
отправкой в agno#10086): написал «версия, которая у нас выжила», хотя класс
commit-recomputes-instead-of-recording воспроизвёлся ТЕМ ЖЕ УТРОМ 6-й раз. Переписал в
«фикс не доказан, рецидив этим утром» — и это стало сильнейшей частью коммента. Перед
отправкой сверяй глагол о СВОЁМ артефакте с журналом поломок: «выжило / закрыло класс /
forever-fix» законно только при дате последнего случая СТАРШЕ фикса; иначе «движемся к,
не доказано». Второй случай семьи (13.09 — завышенные доли «2 из 3»), механизм по §5.10
не строим, но проверка глагола = обязательный шаг самопроверки.
- ⭐ ПОДПИСЬ-CTA ПОСЛЕДНЕЙ СТРОКОЙ — ОБЯЗАТЕЛЬНА (anton 10.09, голосовая hub:6539:
«везде в любом нашем контенте всегда были наши контакты и обязательно наши подпись»).
Одна строка со ссылкой
github.com/tonydzi, формулировку ВАРЬИРОВАТЬ. Источники:
карта поверхностей $OBSIDIAN_VAULT/08-Templates/outbound-signature.md → тексты
$OBSIDIAN_VAULT/08-Templates/github-touch-signature.md. Порядок в теле: раскрытие
Майкрофта первой строкой (п.2) · встречный вопрос предпоследней (п.3д) · подпись
последней. Замер 10.09: подпись была лишь в 20% наших публичных касаний, при этом
пересечение «кто нам ответил» × «кто поставил звезду» = 0 — тред без ссылки не
конвертируется НИ ВО ЧТО. Проверка перед отправкой: последняя строка несёт
github.com/tonydzi? Нет → не отправляем. Сторож: cta_signature_watch.py.
- Отправка = сам, без ОК (§4.7 GitHub-коммуникация автономна). Tier-2 (юр. подписи,
деньги, секреты) — стоп + аск.
Шаг 4 — СЛЕД (счётчик §5.8 + Connect)
- Каждый ответ → строка JSONL в
~/.claude/logs/rep_reply.jsonl:
{"ts":"...","node":"...","actor":"rep-reply","event":"reply|skip","thread":"url","artifact":"имя","reason":"..."}
1-бис. ⚠️ Проверка отправленного читается ИЗ РЕПО ЭТОГО треда: issues/comments/<id> —
эндпойнт репо-скоупный, и запрос того же id в чужом репо даёт Not Found, что легко
принять за «коммент не доехал» (промах 15.09, поймано вторым заходом). Проверка CTA:
последняя НЕПУСТАЯ строка (grep -v '^$' | tail -1), иначе хвостовой перевод строки
даёт ложное «подписи нет».
- Автор треда выглядит способным (живые коммиты, наш домен) → карточка/касание CRM
(§1.6: способность, не известность).
- Ответили → ответы НАМ ловит /contrib-watch; их мяч + тишина >3 дней = не бампаем
(правило трёх дней §4.7).
- Сильный тред → кандидат в контент (/content-mine черновиком).
Бюджет прогона (объём работы рутины, зафиксирован 11.08 по вопросу Антона)
- СКАН: ~10 тем × 1-2 гнезда с трафиком = 15-20 поисковых запросов gh (0 токенов LLM, это CLI).
- ЧТЕНИЕ: полностью читаем максимум 10 тредов-кандидатов за прогон (самые свежие сквозь
гейт-претест по заголовку); остальные кандидаты — в лог строкой
candidate на завтра.
- ОТВЕТЫ: ожидаемо 0-3 за прогон. Квоты сверху нет, но каждый ответ пишется руками под
конкретную боль (~10-15 мин работы), так что больше 3 в день = признак, что гейт ослаб,
а не что день удачный. 0 ответов = норма, не провал.
- Рельса: скан и фильтр = gh CLI (0 токенов); LLM тратится только на чтение прошедших
претест и написание ответа (§6.1).
Пополнение карты (как НОВОЕ ноу-хау попадает в контрибьюцию)
Карта «тема → артефакт» — живой реестр, не снимок. Три двери пополнения:
- Новый публичный репо (/release-slice, /consumer-hunt) → в том же заходе строка в карту.
- /retro classify: деталь получила Keep-&-reuse → прогнать КОНТРИБЬЮТ-ТЕСТ (3 вопроса):
(а) боль универсальная или наша местная? (б) 30-сек
gh search issues "<боль>" — чужие
живые треды есть? (в) отдать можно без утечки (секреты/приватное)? Два «да» из трёх →
строка в карту сюда + кандидат на /release-slice. Ответы записать, не держать в голове.
- Строка Breakage-Journal с ✅ доказанной причиной и классом, который болит не только у нас
→ тоже кандидат (эталон: claude-desktop-watchdog родился из строки журнала 11.08).
- ⛔ Веером один текст в несколько тредов — это спам, репутация горит быстрее, чем строится.
- ⛔ Выдуманные цифры/причины; артефакт обязателен.
- ⛔ Reddit/X/форумы — НЕ этим скиллом (свои гейты и матрица площадок §3.2); здесь только GitHub.
- ⛔ Не спорить ради спора в чужом доме: несогласие = факты + вопрос, не крестовый поход.
- Ритм: раз в сутки прогон охоты достаточен (треды живут днями); чаще — только вручную.
- ⭐ ФЛОТ: скилл синкается на все машины (шара claude-skills) и ЛЮБОЙ узел может звать его
руками, но ЕЖЕДНЕВНАЯ рутина живёт ТОЛЬКО на хабе (
auto-hub-260811-rep-reply-daily) —
иначе N машин отвечают в один тред N голосами. Вторая страховка от дублей встроена в гейт
п.4: GitHub-аккаунт один на весь флот, проверка «мы уже писали в тред» через gh видит
комментарии ЛЮБОГО узла. Лог rep_reply.jsonl локален узлу — истина по дублям = gh, не лог.
Анти-слоп гейт (anton 14.08)
Любой ИИ-написанный текст наружу из этого скилла перед отправкой - финальный проход /ai-slop (ban-лист + ритм). Исключения ровно три: текст с плашкой Майкрофта (§3.3) · машиночитаемое (GitHub/техдока/dev-log/journey-machine) · текст, написанный Антоном руками. Канон: reglament-posty-ot-lica-antona-tolko-cherez-ai-slop.
⭐ Чёрный юмор обязателен (anton 10.09.2026, голосом)
Любой текст, который этот скилл отправляет ЖИВОМУ человеку наружу, несёт чёрную самоиронию — ровный служебный тон = дефект, объяснять надо не шутку, а её отсутствие. Строку берёшь через /mycroft-joke (полка (д) банка + строки 56-62 под холодное касание), приёмка — /taste-check P36. ⛔ Не шутим ровно в трёх зонах, и они не про вкус: строго-научная публикация (arXiv/журнал/JOSS) · юр.обязательство и анкета · красный список банка (чужая иконография угнетённых, псевдо-слуры, отрицание что я ИИ, юмор поверх диагноза/денег/беды собеседника). Одна шутка на тред. Канон: CLAUDE.md §3.3 §Поправка 10.09 + [[dark-humor-default-everywhere-external]].
<!--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.