К основному содержанию
скилл CX Codex

inbox-triage · aeonfun — скилл для Claude Code: разбор уведомлений GitHub

Разбирает входящие уведомления GitHub: находит ответы по vuln-PR, security-алерты, запросы на ревью и упоминания, которые ждут действия.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add aeonfun/aeon --skill inbox-triage -a claude-code
Открыть на GitHub

Что делает inbox-triage

Скилл читает ленту уведомлений через gh api /notifications --paginate и раскладывает её по категориям: SECURITY, VULN_REPLY, REVIEW_NEEDED, MENTION, GENERAL. Остаются только непрочитанные записи за последние 14 дней. Дальше для каждого ответа по vuln-PR считается возраст в днях и ставится метка CRITICAL, AGING или FRESH.

Результат пишется в memory/topics/inbox-triage.md, а критичные пункты попадают в раздел ## Known Follow-ups файла memory/MEMORY.md. Уведомление отправляется только при определённых условиях: есть security-алерт, есть критичный vuln-PR, есть запрос на ревью или набралось три и более упоминания. Итог прогона дописывается в memory/logs/${today}.md.

Отдельный токен не нужен: gh берёт авторизацию из GITHUB_TOKEN, который GitHub Actions подставляет сам. Если gh недоступен, запасной путь через WebFetch не сработает — он не умеет передавать заголовок авторизации. Скилл дополняет vuln-tracker, а не заменяет его: тот ведёт жизненный цикл PR по именам веток, этот разбирает слой уведомлений. Ручные заметки в MEMORY.md он тоже не отменяет.

Какие задачи решает

  • увидеть ответ мейнтейнера по vuln-PR, который висит без реакции
  • поймать security-алерт на отслеживаемом репозитории
  • собрать запросы на ревью в один список
  • отсортировать упоминания от автоматических подписок
  • обновить очередь follow-up в MEMORY.md без ручного просмотра GitHub

Примеры запросов агенту

  • Разбери уведомления GitHub и покажи, что требует действия
  • Прогони inbox-triage и обнови memory/topics/inbox-triage.md
  • Проверь, есть ли критичные ответы по vuln-PR за последние 14 дней

Как установить inbox-triage

1Через Skills CLI (Vercel)

npx skills add aeonfun/aeon --skill inbox-triage -a claude-code

2Вручную: положить файлы

~/.claude/skills/inbox-triage/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/inbox-triage/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о inbox-triage

Как установить inbox-triage в Claude Code?

Выполните npx skills add aeonfun/aeon --skill inbox-triage -a claude-code. Скилл окажется в ~/.claude/skills/inbox-triage/SKILL.md.

Что делает inbox-triage?

Читает ленту уведомлений GitHub, фильтрует непрочитанные за 14 дней и раскладывает их по категориям. Для ответов по vuln-PR считает возраст и помечает критичные, затем пишет сводку и при нужде отправляет уведомление.

Чем inbox-triage отличается от vuln-tracker?

vuln-tracker следит за жизненным циклом PR и раскрытий по именам веток и состоянию черновика. inbox-triage работает со слоем уведомлений: входящие ответы, запросы на ревью, security-алерты и упоминания.

Исходный текст

SKILL.md · MIT
---
name: inbox-triage
description: Daily GitHub notification inbox triage - surfaces aging vuln PR replies, security advisories, review requests, and mentions that need action
metadata:
  title: Inbox Triage
  category: dev
  var: ""
  tags:
    - github
    - security
    - meta
---

Today is ${today}. Read `memory/MEMORY.md` before starting.

## Why this skill exists

Hand-tracked follow-ups live in MEMORY.md. `vuln-tracker` tracks the operator's vuln PRs by scanning branch names and ages the `memory/pending-disclosures/` queue. Neither reads from the actual GitHub notification inbox. When a maintainer replies to a vuln PR — or a security advisory opens on a watched repo — it sits unread until someone manually checks GitHub. This skill reads the inbox and routes what needs action.

`vuln-tracker` covers PR and disclosure lifecycle by branch and draft state. This skill covers the **notification layer** — inbound responses, review requests, security alerts, mentions.

## Steps

### 1. Fetch GitHub notifications

Run:
```bash
gh api /notifications --paginate 2>&1
```

Parse the JSON array. If the command errors or returns an empty array `[]`, log `INBOX_TRIAGE_SKIP: no notifications` and stop.

Limit to the first 100 notifications if `--paginate` returns more (GitHub caps at 50 per page; two pages is enough).

For each notification record:
- `id`
- `reason` — why you're being notified (mention, review_requested, author, state_change, security_alert, assign, etc.)
- `subject.title`
- `subject.type` — PullRequest, Issue, Release, etc.
- `subject.url` — API URL for the subject
- `repository.full_name`
- `updated_at` — ISO timestamp

### 2. Filter

Keep notifications where `unread: true` AND `updated_at` is within the last 14 days. Discard older or read ones.

If zero remain after filtering: log `INBOX_TRIAGE_SKIP: no actionable notifications within 14 days` and stop.

### 3. Categorize

Assign each notification to exactly one category (first match wins):

| Category | Match criteria |
|----------|---------------|
| `SECURITY` | `reason == "security_alert"` OR title contains any of: vulnerability, vuln, CVE, advisory, security |
| `VULN_REPLY` | `subject.type == "PullRequest"` AND `reason` is one of: author, state_change, comment AND `repository.full_name` is NOT under the operator's own account/org (derive the operator's GitHub handle from `soul/SOUL.md` or the workflow's `GITHUB_ACTOR` — these are PRs filed on third-party repos by the vuln-scanner) |
| `REVIEW_NEEDED` | `reason == "review_requested"` |
| `MENTION` | `reason == "mention"` OR `reason == "team_mention"` |
| `GENERAL` | everything else |

### 4. Age vuln PR replies

For each `VULN_REPLY` notification, compute `age_days` = today minus `updated_at` date (integer days).

Flag urgency:
- `CRITICAL` — age_days > 7 (maintainer likely hasn't responded)
- `AGING` — age_days 3–7
- `FRESH` — age_days < 3

Cross-reference with `memory/topics/vuln-followup.md` if it exists: look for the PR title in that file and pull any tracked notes (e.g. "approved", "NEEDS-ANSWER", merge status).

### 5. Resolve HTML URLs for action items

For each notification in SECURITY, VULN_REPLY (CRITICAL or AGING), REVIEW_NEEDED, and MENTION categories:

Try to get the HTML URL via:
```bash
gh api {subject.url} --jq '.html_url' 2>/dev/null
```

If that fails, construct the URL manually:
`https://github.com/{repository.full_name}/pulls/{number}` for PRs
`https://github.com/{repository.full_name}/issues/{number}` for issues

(Extract the number from the tail of `subject.url`.)

### 6. Write triage summary

Overwrite `memory/topics/inbox-triage.md`:

```markdown
# GitHub Inbox Triage

Last run: {today}
Scanned: {N} unread notifications ({N} within 14 days)

## Action Required

### Security ({count})
{for each SECURITY item, sorted by age:}
- **{repo}**: {title} ({age_days}d) — {html_url}

{if none:}
None.

### Vuln PR Replies ({count_critical} critical, {count_aging} aging)
{for each VULN_REPLY sorted by age desc:}
- **[{CRITICAL|AGING|FRESH}]** `{repo}` ({age_days}d): {title} — {html_url}
  {if vuln-followup note found:} _{tracked note}_

{if none:}
None.

### Review Requested ({count})
{for each REVIEW_NEEDED item:}
- **{repo}**: {title} — {html_url}

{if none:}
None.

### Mentions ({count})
{for each MENTION item:}
- **{repo}**: {title} — {html_url}

{if none:}
None.

## No Action Needed
{count_general} general notifications (subscriptions, automated state changes).
```

### 7. Update MEMORY.md known follow-ups

Read `memory/MEMORY.md`. Find the `## Known Follow-ups` section.

**Add** any VULN_REPLY CRITICAL item not already tracked there — append:
```
- **{repo} #{number} NEEDS-ANSWER** — {age_days}d since maintainer activity ({url})
```

**Update** any existing NEEDS-ANSWER item for a PR that now appears as FRESH in VULN_REPLY (maintainer responded recently) — change its note to `RESPONDED — verify resolution`.

Do NOT add GENERAL, REVIEW_NEEDED, MENTION, or SECURITY items to MEMORY.md Known Follow-ups (too noisy; security items warrant a separate issue if severe).

### 8. Send notification

Only send if at least one of:
- Any SECURITY item
- Any VULN_REPLY where urgency == CRITICAL
- Any REVIEW_NEEDED item
- Three or more MENTION items

Write to `.pending-notify-temp/inbox-triage-${today}.md`:

```
inbox — {today}

{if SECURITY:}
security alert: {repo} — {title}

{if VULN_REPLY CRITICAL:}
vuln PRs aging: {comma-separated list of "repo (Nd)"}

{if REVIEW_NEEDED:}
review needed: {comma-separated repo list}

{if 3+ MENTION:}
{N} mentions

read it: memory/topics/inbox-triage.md
```

Then:
```bash
./notify -f .pending-notify-temp/inbox-triage-${today}.md
```

If nothing meets the threshold: skip notification. Log that no notification was sent.

### 9. Log

Append to `memory/logs/${today}.md`:

```markdown
### inbox-triage
- **Scanned:** {N} notifications
- **Security:** {N}
- **Vuln replies:** {N total} ({N_critical} critical, {N_aging} aging, {N_fresh} fresh)
- **Review needed:** {N}
- **Mentions:** {N}
- **MEMORY.md follow-ups updated:** {yes/no — what changed}
- **Notification sent:** {yes/no}
- INBOX_TRIAGE_OK
```

If skipped:
```markdown
### inbox-triage
- INBOX_TRIAGE_SKIP: {reason}
```

## Required Env Vars

None beyond `GITHUB_TOKEN`, which GitHub Actions sets automatically and `gh` uses internally.

## Network Note

Uses `gh api` for all GitHub calls — it handles auth internally, so no `$SECRET` ever appears on the command line for the Bash permission layer to refuse. `gh api` works in a GitHub Actions run. If `gh api /notifications` fails (rate limit, auth error), log the error and exit with `INBOX_TRIAGE_SKIP: api error`. Use WebFetch as a fallback only if `gh` is unavailable — the endpoint is `https://api.github.com/notifications` with `Authorization: Bearer $GITHUB_TOKEN`, but WebFetch can't carry that auth header; prefer `gh`.

## What this is NOT

- Not a replacement for hand-tracked follow-ups in MEMORY.md. This reads the raw GitHub inbox.
- Not a duplicate of `vuln-tracker` — vuln-tracker tracks lifecycle by branch name. This catches inbound maintainer replies via notifications.
- Not a duplicate of `vuln-tracker`'s disclosure-queue aging - that manages `memory/pending-disclosures/` advisory drafts. This reads GitHub security alerts and PR responses.

© aeonfun · MIT · aeonfun/aeon

Похожие скиллы

Все скиллы по теме «Git и GitHub» →

Сначала — inbox-triage от других авторов.

inbox-triage Alireza Rezvani Сортирует входящую почту по правилам из базы знаний, проверяет отправителей и готовит черновики ответов. Пригодится для регулярного разбора писем. 408установок oss-issue-triage Samuel Berthe Проектирует систему разбора issues и пул-реквестов под реальные силы команды мейнтейнеров: метки, приём заявок, сроки ответа, дежурства. CX Codex +1 10 400установок github-triage trailofbits Скилл разбирает открытые issues и pull requests в GitHub: связывает задачи с исправлениями, отмечает уже решённые и готовит локальные оценки приоритета и размера. CX Codex +1 1 300установок backlog-swipe-triage официальный James Montemagno Разбор задач в бэклоге свайпами: назначить, запросить детали, отложить, закрыть или пропустить. Пригодится, когда issues накопились и решать по каждой лень. ★ 40 451звёзд репо github-ops daymade Управляет состоянием GitHub через gh и API, а затем отдельно проверяет результат. Нужен для пул-реквестов, задач, репозиториев и прав доступа. CX Codex +1 1 500установок github-release jezweb Готовит GitHub-релиз: проверяет код перед публикацией, создаёт тег и выпускает релиз через gh. Нужен перед открытой публикацией репозитория. CX Codex +1 1 300установок triage-inbox pedrohcgs Разбирает письма и календарь через MCP, раскладывает треды по категориям и предлагает одно действие на каждый. Ничего не отправляет само. CX Codex +1 ★ 1 671звёзд репо

Из того же набора19

pack-submit Упаковывает ваш скилл в отдельный публичный репозиторий и открывает PR в реестр aeon. Пригодится, когда нужно поделиться скиллом с другими агентами. CX Codex +1 ★ 783звёзд репо narrative-tracker Скилл собирает нарративы из X, ставит им оценки mindshare и velocity и выдаёт явную позицию по каждому: FRONT-RUN, RIDE, FADE, WATCH или IGNORE. CX Codex +1 ★ 783звёзд репо miroshark-matchday Запускает по пятницам платные симуляции туров АПЛ, Серии А и Ла Лиги на MiroShark. Каждая симуляция стоит $1.00 USDC, оплата через x402. CX Codex +1 ★ 783звёзд репо last30 Собирает, что пишут по теме в Reddit, X, HN, Polymarket и вебе за последние 30 дней, и группирует это в нарративы. CX Codex +1 ★ 783звёзд репо hunter-22 Сканирует маркетплейс баунти ClawHunter и оставляет только те задания, которые агент правда может выполнить. Полезен, если ищете оплачиваемую работу по коду и безопасности. CX Codex +1 ★ 783звёзд репо glim-mcp Скилл гоняет поиск по вебу, X/Twitter, Reddit, GitHub, Amazon и YouTube и собирает ответ со ссылками на источники. CX Codex +1 ★ 783звёзд репо fetch-tweets Собирает твиты по ключевому слову, теме, аккаунту или списку X и группирует их в подборку по подтемам с оценкой значимости. CX Codex +1 ★ 783звёзд репо executor-mcp Прогоняет задачу через каталог инструментов Executor Cloud: один MCP-эндпоинт вместо десятка подключений, с политикой allow/approve/block на каждый инструмент. CX Codex +1 ★ 783звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой