본문으로 건너뛰기
cccskills
무료GitHub에 공개

contrib-watch

Watch incoming feedback from outside engineers on your open-source repos: comments, reviews, issues, mentions. Use when you need to find who replied to your pull requests or issues, triage human versus bot responses, and answer within a day with evidence.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구TelegramGitHub
설치 방법 보기

포함된 파일(1)

  • SKILL.md32.5 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

/contrib-watch — кто пришёл к нам сам, и почему мы обязаны ответить сегодня

Закон

Молчание в живом треде = провал, а не осторожность (CLAUDE.md §4.7). Ответ на GitHub я даю САМ, без «+» Антона и без гейта Наташи. Мерж кода — по [[github-publish-autonomous]] + leak-scan.

Порог: 24 часа. Дольше — красное. Обоснование не теоретическое: 05.08 замерено, что четырёхдневное молчание случилось не из-за занятости, а из-за отсутствия прибора.

Шаг 1 — снять картину (0 токенов)

⚠️ ПЕРЕД ЛЮБЫМ СКАНОМ СВЕРЬ АККАУНТ ВЫЗОВОМ, А НЕ ЯРЛЫКОМ (замер 02.10.2026): gh auth status на этом узле печатает Logged in to github.com account Palo-Alto-AI-Research-Lab — ПРОТУХШЕЕ имя, закэшированное gh до переименования аккаунта. Токен при этом принадлежит tonydzi, что видно только живым вызовом gh api user --jq .login. Разница смертельна именно для сканов: репозитории берутся из /user/repos (активный аккаунт), а запрашиваются по пути /repos/tonydzi/<repo> — разойдись эти два, и каждый запрос вернул бы 404, то есть «долгов 0» на пустом месте. Ярлык — тоже claim ([[instrument-is-a-claim-too]]): судим по gh api user, не по строке status.

python ~/.claude/scripts/contrib_watch.py --html "$OBSIDIAN_VAULT/_Dashboards/Contrib-Inbox.html"

Обходит все наши non-fork репозитории — и публичные, И ПРИВАТНЫЕ, — находит треды, где ПОСЛЕДНИМ говорил внешний человек, считает часы ожидания, отмечает 🆕 тех, кого не видели ни разу. Exit 3 = есть просрочка.

⚠️ ПРИВАТНЫЕ СМОТРИМ ТОЖЕ (замер 24.09.2026, снят фильтр not r["private"]). Приватность — свойство ВИДИМОСТИ, а не признак «там нет чужих людей»: внешнего инженера туда приглашают руками, и обслуживать его надо ровно так же ≤24ч (§4.7). В тот день сторож и оба скана рутины показывали 53 репо из 60, а уведомление GitHub вынесло tonydzi/bridge-vdai-paloalto#1 — приватный мост с чужим пиром vasilevdasfo, невидимый ВООБЩЕ ни одним сканом. Второй приватный репо (PaloAlto-AI-Research-Lab-Knowledge) оказался куда крупнее: 13 тредов, 21 комментарий, 10 коллабораторов. Долгов там в тот день не нашлось, но прибор не имел права говорить «долгов 0» про поверхность, которую не смотрел ([[instrument-is-a-claim-too]]). ⛔ Отсюда же следствие для отчёта: «по N ПУБЛИЧНЫМ репо» больше не формулировка охвата — пиши «по N репо (публичных P + приватных Q)». Тест охвата: _test_contrib_watch_private.py (красный доказан на самом фильтре: охват был ['pub']).

⚠️ И ЕЩЁ ОДНА СЛЕПАЯ ЗОНА ТОГО ЖЕ КЛАССА: человек, живущий ТОЛЬКО в приватном контуре, невидим обоим поисковым селекторам Шага 2-ноль. У Kubalskiy (форк приватного репо) commenter: и involves: дают по 0 — по правилу «ноль по одному селектору = этим селектором не видно» хоронить контакт нельзя и при нуле по ОБОИМ: они оба ходят по публичной поверхности. Третий вопрос — список коллабораторов приватных репо (gh api /repos/tonydzi/<repo>/collaborators).

Шаг 1-кватер — ТРЕТЬЯ поверхность комментариев: inline-ревью живут в ДРУГОЙ ручке

⚠️ ЗАМЕР 29.09.2026 (Mac16, contrib-watch-daily): оба скана Шага 1 и Шаг 1-тер ходят по /issues/comments — это ленты треда. Построчные замечания ревьюера лежат в /pulls/comments и в НИХ НЕ ВХОДЯТ ВООБЩЕ. Инженер, оставивший пять [important] строк прямо в диффе и ни одной в ленте, для всех трёх сканов невидим. Заметка 27.09 упоминает «три скана», но снипета на третий нигде не было — прогон 29.09 писал его руками, и это ровно та боль, которую скилл обязан снимать.

python3 - <<'INNER'
import json,subprocess
def gh(p):
    r=subprocess.run(["gh","api","--paginate","--slurp",p],capture_output=True,text=True)
    if r.returncode!=0 or not r.stdout.strip(): return []
    d=json.loads(r.stdout)
    return d[0] if len(d)==1 and isinstance(d[0],dict) else [x for pg in d for x in (pg if isinstance(pg,list) else [pg])]
repos=[r["name"] for r in gh("/user/repos?per_page=100&affiliation=owner") if not r["fork"]]
hits=0
for name in repos:
    cs=gh(f"/repos/tonydzi/{name}/pulls/comments?per_page=100&sort=created&direction=desc")
    if not isinstance(cs,list) or not cs: continue
    th={}
    for c in cs: th.setdefault(c["pull_request_url"].rsplit("/",1)[-1],[]).append(c)
    for n,ch in th.items():
        ch.sort(key=lambda c:c["created_at"]); last=ch[-1]; lg=last["user"]["login"]; ts=last["created_at"]
        if lg.lower()!="tonydzi" and not lg.endswith("[bot]"):
            print(f"  C-inline {name}#{n} last={lg} @ {ts}"); hits+=1
print("inline-хитов:",hits)
INNER

⚠️ Приватные репо НЕ исключаем (та же грабля 24.09, что в Шаге 1). Замер 29.09: репо с inline- комментариями оказалось 1 из 60, хитов 0 — скан дешёвый, но «дёшево» это не «не нужен»: цена пропуска здесь = молчание в треде, где человек разобрал наш дифф построчно. ⛔ Ноль по этому скану закрывает ТОЛЬКО inline-поверхность; в отчёт Шага 4 охват пишется как «N репо × 4 скана», а не «всё проверено».

<!-- Шаг 1-кватер добавлен 29.09.2026 · прогон contrib-watch-daily, Mac16 · сторож снипета: `python3 ~/.claude/scripts/_test_contrib_watch_snippets.py` (охват расширен с файла рутины на ОБА дома и с литерала <<'PY' на любой heredoc-маркер; красный доказан мутациями в --selftest). Снипет прогнан ВЕРБАТИМ из этого файла: 60 репо, 1 репо с inline-комментариями, 0 хитов. Assisted-by: Claude Code Operator: robot:contrib-watch-daily -->

Шаг 1-бис — «последним сказал чужой» ≠ долг: разговор мог уехать в PR

Эвристика «последний говоривший в треде» ловит ДОЛГ и МИГРАЦИЮ одинаково, а это разные вещи. Нормальный цикл выглядит так: человек пишет в issue «claiming this» или «I opened PR #N» — и дальше по существу говорят уже в PR. В issue его строка так и остаётся последней НАВСЕГДА, даже когда мы разобрали, отревьюили и смержили. Долга там нет, мяч не наш.

Поэтому на КАЖДЫЙ хит спрашиваю ещё один вопрос, прежде чем идти отвечать:

gh api "/repos/tonydzi/<repo>/issues/<N>/timeline" --paginate --jq '.[]|select(.event=="cross-referenced")|.source.issue.number'
gh api "/repos/tonydzi/<repo>/issues/<PR>/comments" --paginate --jq '.[]|"\(.user.login) @ \(.created_at)"'
gh api "/repos/tonydzi/<repo>/pulls/<PR>/reviews"   --paginate --jq '.[]|"\(.state) \(.user.login) @ \(.submitted_at)"'

Наш ответ в связанном PR ПОЗЖЕ его последней строки в issue = касание обслужено, хит закрыт. ⚠️ ЗАМЕР 21.09.2026: скан дал 4 хита (sqlite-graph-memory #13 #9 #5 #4), и ВСЕ ЧЕТЫРЕ оказались миграцией: #13→PR #14, #9→PR #10, #5→PR #8, #4→PR #6, каждый смержен с письменным ревью Майкрофта ПОСЛЕ их последней реплики. Долгов было 0. Без этого шага рутина пошла бы писать четырём инженерам «извините за молчание» в треды, где мы им уже развёрнуто ответили, — то есть сама сломала бы репутацию, которую сторожит. ⛔ Обратное упрощение запрещено: «есть связанный PR» само по себе хит НЕ закрывает — закрывает именно НАШ ответ в нём с датой позже. Смерженный молча PR без единого нашего слова — это долг (§4.7: молчание в живом треде = провал), и он идёт в Шаг 4 как обычное касание.

Шаг 1-тер — ЗЕРКАЛЬНОЕ слепое пятно: долг бывает и там, где последними говорили МЫ

Оба скана Шага 1 спрашивают «кто сказал последним» и потому ловят ровно один вид долга — «нам написали, мы молчим». Второго вида они не видят ВООБЩЕ: мы пообещали и не сделали. В таком треде последняя строка наша, хит не возникает, прибор честно рапортует ноль — а человек ждёт.

⚠️ ЗАМЕР 27.09.2026, чем это стоило: три скана (комменты вкл. закрытые, чужие открытые, inline-ревью) по 60 репо дали 0 долгов, и это была правда. Параллельно в sqlite-graph-memory PR#8 висело наше обещание 15.09 — «the triage invite waits for Anton's click, you'll see it arrive from GitHub» — данное человеку, который согласился («I would gladly accept») через час после предложения ещё 13.09. Приглашение не пришло бы НИКОГДА: triage/maintain существуют только на репо ОРГАНИЗАЦИИ, а tonydzi — owner.type: User (проверено API, не предположено: 422 Cannot assign permission of triage). Человек ждал 12 дней и за это время прислал ещё два смерженных PR. Ни один скан его не видел.

Поэтому на каждом прогоне — третий вопрос, дешёвый, по НАШИМ строкам за 30 дней:

gh api "/repos/tonydzi/<repo>/issues/comments?per_page=100" --paginate --jq \
  '.[]|select(.user.login=="tonydzi")|select(.created_at > "'"$(date -v-30d +%F)"'")|
   select(.body|test("(?i)\\binvite\\b|will send|\\bi.?ll\\b (send|open|give|add|file|ship)|waits for|arriving|coming shortly"))|
   "\(.issue_url|split("/")|last) @ \(.created_at): \(.body[0:120])"'

⚠️ Границы слов обязательны: без \\b шаблон i.ll open ловит «still open» — замер 27.09, одно ложное попадание из трёх на первом же прогоне. Ложное срабатывание здесь дороже пропуска: оно гонит рутину извиняться за долг, которого нет.

Каждое попадание = обещание с датой. Обещанного факта нет на сервере (нет инвайта, нет PR, нет релиза) → это долг, и он СТАРШЕ входящих: молчание после «мы сделаем» дороже молчания после «спасибо». ⛔ Закрывать такой долг повторным обещанием запрещено. Закрывает либо сделанный факт, либо честный разбор «обещание было невыполнимым, вот почему, вот реальные варианты» — второе законно и работает, но только один раз на тред. ⚠️ И проверяй саму выполнимость ДО обещания: «прав нет / кнопка есть / доступ будет» — такой же CLAIM, как причина (§5.4). Один вызов API вместо уверенности сэкономил бы здесь 12 дней чужого ожидания.

Шаг 2-ноль — «наш он или нет» решается ДВУМЯ селекторами, а не одним

⛔ Прежде чем сказать «этот новый логин не наш, карточку не завожу» (так закрыли GALINA-KUKLEVA и dudididjdje-tech 13.09) — спроси GitHub ОБОИМИ вопросами:

gh api "search/issues?q=commenter:<login>+user:tonydzi" --jq '.total_count'   # он у нас ГОВОРИЛ
gh api "search/issues?q=involves:<login>+user:tonydzi"  --jq '.total_count'   # он у нас АВТОР/упомянут

⚠️ ЗАМЕР 21.09.2026: по commenter: оба новых логина дали 0 — вывод «не наши» был готов и был бы ЛОЖНЫМ. involves: дал по 1: FLiPPpro и b7n0de оказались АВТОРАМИ самоподач PR #4 и #5 в tonydzi/awesome-verified-agents. Автор PR, который не написал ни одного комментария, для commenter: невидим. Правило: ноль по одному селектору = «этим селектором не видно», а не «человека нет» (§5.4, [[check-all-places-not-one]]). Хоронить контакт можно только когда молчат ОБА.

⚠️ ЗАМЕР 08.10.2026 (hippoley): у обоих селекторов есть ТРЕТИЙ ответ, которого правило выше не покрывало, — 422, а не ноль. commenter:, involves: и author: все три вернули «The listed users cannot be searched either because the users do not exist or you do not have permission to view the users», при этом /users/hippoley отдавал живой профиль (type=User, не suspended), а user:tonydzi сам по себе отвечал 84. То есть сломан не наш запрос и не аккаунт, а видимость логина в search-индексе (обычный случай — недавнее переименование; тот же класс, что «старый логин 422-ит в search API» в шапке рутины). Разводи два исхода, они требуют разного:

  • 0 у обоих → «молчат оба», контакт можно хоронить;
  • 422 у обоих → прибор СЛЕП, вердикт о контакте запрещён вообще. Личность и касания проверяй обходом: /users/<login> + /repos/tonydzi/<repo>/issues/<n>/comments (issues API читает его нормально, поиск — нет). ⛔ 422 нельзя считать нулём: «не могу судить» и «его нет» — разные факты ([[instrument-must-not-be-blind]], §5.4). Диагноз делается ОДНИМ лишним вызовом — прогони селектор БЕЗ user:tonydzi: ответил 422 и там → виноват логин, а не наша половина запроса.

Шаг 2 — ПРОВЕРИТЬ МОТИВ, прежде чем радоваться

⛔ Самая дорогая ошибка этого скилла — принять массового контрибьютора за фаната. По каждому новому человеку обязательно:

curl -s -H "Authorization: Bearer $GITHUB_FLEET_FULL_PAT" \
  "https://api.github.com/users/<login>/events/public?per_page=100"

и посчитать: сколько PR за 90 дней, в сколько РАЗНЫХ репозиториев, повторяется ли один и тот же патч у всех адресатов. Три класса, и вести себя с ними надо по-разному:

КлассКак выглядитЧто это значитНаш ход
🟢 глубокиймало репо, много касаний в одномчеловек реально пользуетсятриаж-права, соавторство, звонок
🟡 массовый качественный40+ PR в 20 репо, но патчи настоящиеконвейер репутации, идёт вглубь ТУДА, ГДЕ ОТВЕЧАЮТответить в тот же день — скорость и есть весь рычаг
🔴 массовый агентский40+ PR, текст сгенерирован, факты не сходятсяпрогон чужого агента по случайным целямчестное «нет» с разбором + приглашение вернуться по существу

Мотив пишем в карточку СЛОВАМИ и с уликой. «Пришёл сам» ≠ «мы ему нравимся» ([[prichina-kak-claim]]: причина — такой же claim, как вывод).

⭐ Первый вопрос про КАЖДОГО — «мы туда стучались?» (правило external-signal-vs-reply-to-our-knock, замер 06.08). Три кучи, и они НЕ равны: (1) непрошеное — назвал нас в ЧУЖОМ треде, куда мы не приходили → настоящий сигнал; (2) подали-приняли — мы отправили PR/заявку, редактор согласился → считаем, но называем отдельно; (3) ⛔ ответ под НАШИМ собственным PR/issue → это отклик на наш стук, за входящий интерес НЕ засчитывать. Наша исходящая работа физически рождает ответы, и они попадают под тот же поиск, что органика — метрика внешней тяги ломается всегда вверх, в приятную сторону.

Шаг 3 — проверить ЗАЯВЛЕННОЕ, а не поверить

Патч утверждает цифры (звёзды, лицензия, бенчмарк, «чинит X») — проверяю каждую своим прибором до мержа. Мы лаборатория про проверяемость; смержить непроверенное утверждение о себе = сжечь собственный тезис. Тесты гоняю ЛОКАЛЬНО на объединённой ветке, не доверяя зелёному CI:

git fetch origin 'refs/pull/*/head:refs/remotes/pr/*'
git checkout -B try<N> master && git merge pr/<N> && pytest -q

⭐ Проверяю ТРИ вещи, а не одну (боль 13.09 + 15.09, оба раза на sqlite-graph-memory):

  1. патч — делает ли он то, что заявлено;
  2. тесты патча — мутацией: откатываю починку и смотрю, КРАСНЕЮТ ли его тесты. 13.09 все 12 остались зелёными на возвращённом баге: фикс был верный, тесты его НЕ держали. Мержу всё равно (двигать ворота после выполнения = обман), но свой красный тест дописываю сам;
  3. ⭐ не протух ли САМ ПАТЧ, пока лежал — репозиторий едет под ним. 15.09: PR#7 чинил строку «no tests», а за пять дней ожидания PR#6 добавил 42 теста в соседний модуль, и написанная автором строка стала ложной ровно в момент мержа. Третье поколение одного дефекта в одном абзаце. Правило: патч, пролежавший дольше суток, перечитывается против ТЕКУЩЕГО состояния репозитория, а не против того, каким оно было при его отправке.

Если протух — это не повод не мержить и не повод винить автора. Мержим его работу под его авторством, а дрейф чиним follow-up'ом сверху и НАЗЫВАЕМ его в треде: человек узнаёт то, чего не мог знать, и это самая ценная часть ответа.

Шаг 4 — ответить (голос Майкрофта, §3.3)

Первой строкой называюсь: «hi, this is Mycroft, Anton's synthetic co-founder». Один раз на тред. Строчными, без ваты. Структура ответа, которая работает:

  1. Извиниться за задержку конкретно и назвать причину — не «sorry for the delay», а что именно у нас не работало. Люди прощают поломку и не прощают отписку.
  2. Назвать, ЧТО ИМЕННО он поймал, своими словами и по существу — доказательство, что читали код.
  3. Вердикт: смержено / нужен ребейз с точной резолюцией конфликта / не берём и почему.
  4. Следующий шаг с датой и один открытый вопрос.
  5. ⭐ Подпись-CTA последней строкой (anton 10.09, голосовая hub:6539; supersedes прежнее «без подписи» в этом шаге). Одна строка со ссылкой github.com/tonydzi, формулировку варьировать. Источник текста — $OBSIDIAN_VAULT/08-Templates/github-touch-signature.md, карта поверхностей — $OBSIDIAN_VAULT/08-Templates/outbound-signature.md. Здесь это особенно дёшево и особенно окупается: человек УЖЕ пришёл к нам сам и уже читал наш код — это самый тёплый входящий, какой у нас бывает, а он уходил, не увидев, что рядом лежит ещё 60 репо. Carve-out против спама: одна подпись на тред — подписался, в следующих репликах того же треда можно без неё. Раскрытие Майкрофта = СВЕРХУ (первая строка), подпись = СНИЗУ; это разные блоки, один другого не заменяет.

Отказ пишу так же подробно, как согласие. Честное «нет» с разбором удерживает человека; молчание не удерживает никого.

Шаг 5 — завести в CRM в тот же заход

Каждый внешний человек:

  • строка в $OBSIDIAN_VAULT/_outreach/tracker.json → audience_A_engineers (поля: handle github:<login>, channel github, warmth с УЛИКОЙ мотива, what_they_did, our_answer_at, ladder, next_step);
  • карточка $OBSIDIAN_VAULT/07-People/person-<slug>.md с frontmatter context: github-contributor, origin: github, тегами [person, github-contributor, engineer-funnel] и обратными ссылками на артефакт (правило no-orphan).

Шаг 5-бис — если в треде был СОВЕТ, а не только патч → в реестр кредита

Человек написал, ЧТО нам стоит сделать (даже одной строкой, даже без кода) — это вклад идеей, и он обязан дожить до имени в CREDITS. Кладу строку сразу, не «потом»:

python ~/.claude/scripts/alpha_credit.py add --source gh \
  --author "<Имя или login>" --handle @<login> --url <ссылка на коммент> \
  --advice "<что посоветовал одной фразой>" --kind method|repo|tool|critique \
  --ref "gh:<owner/repo>#<номер>:<id коммента>"

--ref обязателен: этот скилл ходит по одному треду каждый день, без ключа один совет размножится копиями. Дальше цепочка живёт в /alpha-credit (судить → испытать → спасибо → имя).

Шаг 6 — контент

Входящий PR от постороннего = контентный момент по определению. Рефлекс [[content-miner-reflex]]:

python "$VAULT_IMPORTS/content-factory/content_miner.py" capture --title "<хук>" --note "<суть>" --tier medium

Сильная форма истории — не «нам прислали PR», а «что он поймал такого, чего не видели мы».

Шаг 7 — вердикт

⚠️ Красное у сторожа — это claim, а не приговор ([[instrument-is-a-claim-too]]). Перед ответом человеку сверь ДВЕ вещи, которых сторож не знает:

  • чей мяч по последнему касанию — с 14.09.2026 он читает и РЕВЬЮ (/pulls/N/reviews), а не только комментарии треда; до этого канонический ответ по §4.7 был для него молчанием, и он печатал ВОЗРАСТ самого PR как долг (PR#7: 90.1 ч при PR, созданном 10.09 10:46Z);
  • срок, который мы САМИ дали автору — этого сторож не знает вообще. Пообещали ждать правку до N-го числа — до N-го числа долга нет, и бампать нельзя, даже если строка красная.

✅ только когда: ноль просроченных долгов · мотив каждого нового человека проверен уликой · CRM пополнен · заявленные цифры перепроверены до мержа. ⚠️ если ответили, но не проверили мотив или не завели в CRM.

Рутина

Ночной прогон (окно 23:00-06:00 local time, §4.6) + дневной тик: сторож живёт ВНЕ сессии, молчит когда чисто, кричит только на просрочку с именем человека и ссылкой (§5.5).

Счётчик

Каждый прогон пишет строку в ~/.claude/logs/part_usage.jsonl (part: contrib_watch.py, event: scan, outcome: clean|overdue). Судьба детали решается на /retro по этому счётчику (§5.8).

⭐ Обратная половина: мы тоже просим (anton 21.09.2026)

Этот скилл ловит ВХОДЯЩЕЕ касание инженера. Входящего не будет, если у репо нет видимой просьбы: люди приходят по label:"help wanted", а не по README. Закрыл входящее и увидел, что у репо ноль своих просьб → завести их по /consumer-hunt Шаг 5-бис (дыры берутся из наших же секций What's intentionally missing / Honest limits / Roadmap, выдумывать ⛔). Реестр просьб: $OBSIDIAN_VAULT/_outreach/we_ask_registry.jsonl.

Связи

Док-паспорт: ~/.claude/scripts/docs/contrib-watch.md · канон: reglament-vhodyashchiy-fidbek-inzhenerov-otvechaem-v-sutki · память: [[github-inbound-watch]], [[github-communication-autonomous]], [[engineer-acquisition-enrichment-not-scraping]] · соседи: /consumer-hunt, /issue-match, /github-growth, /local-engineer-outreach

⭐ ПОПРАВКА 08.10.2026 — у детектора появился ИСПОЛНИТЕЛЬ: contrib_reply.py

Приказ Антона 23:33 («на маке ставь рутину на ответы всем контрибьюторам»). Детектор по-прежнему только смотрит; ответ в тред даёт python ~/.claude/scripts/contrib_reply.py (ack ≤1 ч первой строкой «Mycroft, synthetic AI co-founder», что проверено машиной, срок человека 48 ч, подпись-CTA; однострочные PR в awesome-* с живыми ссылками мержит сам, код НИКОГДА). Расписание: Windows-задача «Claude Contrib Reply» (HP17, 3 ч), Mac — посылка contrib-reply-20261008 (launchd ai.paloalto.contrib-reply). Журнал ~/.claude/contrib_reply_lane.jsonl. Живая сессия по этому скиллу теперь отвечает ПО СУЩЕСТВУ там, где робот уже подтвердил приём; дубль-ack не писать. Память: [[contrib-reply-routine-born]], [[review-field-is-submittedat-not-createdat]] (счёт «без ответа» сверять с contrib_watch.py --json, у ревью поле submittedAt).

<!--kit-footer-->

Like this skill? It is part of 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.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

03

무료

Run an autonomous consensus round between agent peers on several machines: they negotiate a decision over a shared channel and execute it without a human relaying messages. Use when multiple machines must agree on a change. Triggers: "/03", "work it out among yourselves", "find consensus". Wakes the human only for irreversible actions or a deadlock.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

tonydzi/second-brain-starter-kit92026년 10월 20일 업데이트

1

무료

Recover a session after a hard crash (app died, machine rebooted, context lost mid-work): replay the turn-state ledger for the last requests, files and decisions, run a green/red health ping over the system map, file sync and MCP connectors, then rebuild the previous session history for pickup. Triggers: "/1", "resume after crash", "wake".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

tonydzi/second-brain-starter-kit92026년 10월 20일 업데이트

agenda

무료

Show the operator's day: today's calendar plus what needs them personally (leads due, people awaiting a reply, deadlines), pulled from Calendar and Telegram and ranked. Read-only: sends and commits nothing. Triggers: "/agenda", "what's on today", "my agenda".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

tonydzi/second-brain-starter-kit92026년 10월 20일 업데이트

ai-slop

무료

Rewrite machine-written text so it reads like a busy human wrote it: cut 50-70%, break the even rhythm, drop AI-tell words and filler, keep facts and protected terms. Use before publishing any post, reply or email drafted by a model. Triggers: /ai-slop, /slop, humanize, anti-slop, make it shorter and alive.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

tonydzi/second-brain-starter-kit92026년 10월 20일 업데이트

Decision protocol for strategic work: recall the knowledge vault, run a gap analysis, emit a deep-research prompt for external tools, then synthesize the returned reports into a decision memo. Use before any new product, feature, market, pricing, GTM or architecture call, where local recall alone is not enough. Triggers: "/alfa-search-recall-deepresearch", "alpha protocol", "R+DR".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

tonydzi/second-brain-starter-kit92026년 10월 20일 업데이트

- КРЕДИТ АВТОРУ ИДЕИ: совет из комментария (TG @ClawRus / @ClawInga, комменты под постами Антона в FB, треды и issue на… Триггеры: “/alpha-credit“, “/credit“, “кто нам это посоветовал“, “запиши совет“, “поблагодари советчиков“, “кому мы должны спасибо“, “кредит автору“, “чей это был совет“, “credit the author“

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

tonydzi/second-brain-starter-kit92026년 10월 20일 업데이트

tonydzi의 스킬 모두 보기

이 스킬의 문제 신고