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

triage-frontend-issues — скилл для Claude Code: разбор очереди Sentry

Скилл разбирает новые issue в проекте sentry/javascript: архивирует шум и оставляет настоящие баги человеку.

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

Что делает triage-frontend-issues

Скилл работает с очередью issue проекта sentry/javascript в Sentry. Он ищет неразобранные обращения, читает стек-фреймы и решает, что из этого шум: ошибки в сторонних библиотеках, расширениях браузера, чужом окружении. Всё, что похоже на реальный баг в коде проекта, скилл не трогает.

Единственное изменение статуса, которое он делает, — status=ignored с режимом ignoreMode=untilEscalating. Resolve, назначение и удаление запрещены. У каждого архива есть короткая причина с названием категории из references/archive-criteria.md. Перед любым изменением скилл строит таблицу-план и ждёт подтверждения: одна команда apply закрывает только показанный план, для новой партии нужно новое подтверждение.

Для работы нужен Sentry MCP, авторизованный через mcp.sentry.dev, и три инструмента: search_issues, get_sentry_resource, update_issue. Без update_issue скилл останавливается и просит авторизовать сервер. Вход — ссылка на issue, короткий ID вида JAVASCRIPT-…, поисковый запрос с двоеточием или пустое значение для очереди по умолчанию.

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

  • разобрать новые issue в проекте sentry/javascript
  • отсеять шум от сторонних библиотек и расширений браузера
  • отделить реальные баги от ошибок в окружении заказчика
  • показать план архивации до внесения изменений
  • пометить спорные issue для ручной проверки

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

  • Разбери очередь issue в sentry/javascript за последние сутки
  • Проверь JAVASCRIPT-1234 и скажи, стоит ли его архивировать
  • Собери план по запросу is:unresolved is:unassigned firstSeen:-7d

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

1Через Skills CLI (Vercel)

npx skills add getsentry/skills --skill triage-frontend-issues -a claude-code

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

~/.claude/skills/triage-frontend-issues/SKILL.md

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

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

Вопросы о triage-frontend-issues

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

Выполните npx skills add getsentry/skills --skill triage-frontend-issues -a claude-code, затем проверьте ~/.claude/skills/triage-frontend-issues/SKILL.md.

Что делает triage-frontend-issues?

Разбирает новые issue в проекте sentry/javascript и архивирует неактуальный шум через status=ignored с ignoreMode=untilEscalating. Настоящие баги он не закрывает.

Что нужно для работы скилла?

Sentry MCP, авторизованный через mcp.sentry.dev, с доступом к search_issues, get_sentry_resource и update_issue. Без последнего инструмента скилл останавливается.

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

SKILL.md · Apache-2.0
---
name: triage-frontend-issues
description: Triage new issues in the Sentry `javascript` project by archiving non-actionable noise. Use when asked to "triage issues", "triage the javascript project", "archive non-actionable issues", "triage new frontend issues", or "clean up the sentry/javascript queue". Operates only on the sentry/javascript project, only archives (never resolves), and always archives with `untilEscalating`.
allowed-tools: Read mcp__sentry__search_issues mcp__sentry__get_sentry_resource mcp__sentry__update_issue
---

# Triage Frontend Issues

Archive non-actionable noise from the `sentry/javascript` issue queue: only archive, always `untilEscalating`, always with a stated reason. Issues that look actionable in our code, or that you cannot confidently classify, must be skipped.

## Hard Rules

These rules override anything else. Do not relax them.

1. **Project scope.** Only operate on `organizationSlug=sentry`, project slug `javascript`. If asked to triage a different project, stop and ask the user to confirm.
2. **Archive only.** The only status mutation permitted is `status=ignored`. Never resolve, never unresolve, never assign, never delete, never bulk-update fields other than status.
3. **Always `untilEscalating`.** Use `ignoreMode=untilEscalating`. Never use `forever`, `forDuration`, `untilOccurrenceCount`, or `untilUserCount`. If the user asks for a different mode, stop and have them archive that issue manually — this skill does not perform non-escalating archives.
4. **Always include a `reason`.** The `reason` must be a short, factual sentence naming the category from `references/archive-criteria.md` (e.g., "Third-party library noise — echarts internals; not actionable in our code").
5. **Never touch issues outside the unresolved queue.** Skip anything with `status` of `resolved`, `ignored`, or `reprocessing`.
6. **Never archive without confirmation.** Build a full plan, show it to the user, wait for explicit approval before calling `update_issue`. A single approval covers the displayed plan only; new batches need new approval.
7. **When in doubt, skip.** If an issue could plausibly be a real bug in our code, do not archive it. Surface it as `needs-human` in the plan with a one-line note.

## Prerequisites

- Sentry MCP authenticated via `mcp.sentry.dev`. Required tools: `search_issues`, `get_sentry_resource`, `update_issue`.
- If `update_issue` is not available, stop and ask the user to authenticate the Sentry MCP server.

## Inputs

`$ARGUMENTS` is one of:

| Input shape | Meaning |
|-------------|---------|
| Sentry issue URL (`https://sentry.sentry.io/issues/JAVASCRIPT-…`) | Triage that single issue. |
| Issue short ID (`JAVASCRIPT-…`) | Triage that single issue. |
| Sentry issue query (contains a colon, e.g. `is:unresolved firstSeen:-24h`) | Use as the search query. |
| Empty | Use the default triage queue: `is:unresolved is:unassigned firstSeen:-7d`, sort `new`, limit `50`. |

If `$ARGUMENTS` is ambiguous, ask the user to clarify before searching.

## Workflow

### 1. Load the queue

For single-issue input:
- Call `get_sentry_resource(url=<issue-url>)` or `get_sentry_resource(resourceType='issue', organizationSlug='sentry', resourceId=<shortId>)`.
- Confirm `Project` is the javascript frontend project. If not, stop.

For query/default input:
- Call `search_issues(organizationSlug='sentry', projectSlugOrId='javascript', query=<query>, sort='new', limit=50)`.
- Then call `get_sentry_resource` for each result in parallel to get culprit, substatus, assignee, and stack-frame hints (the search response omits some fields).

Skip immediately if any of these are true on an issue:

- `status` is not `unresolved` (already archived, resolved, or in reprocessing).
- `assignedTo` is set to a human (someone is already owning it).
- `assignedTo` is set to a team other than `frontend`/`issues` and the issue looks team-specific (let the owning team triage).

### 2. Classify each issue

Read `references/archive-criteria.md` for the category taxonomy with recognition heuristics and examples. For each candidate issue, produce one of:

| Decision | Meaning |
|----------|---------|
| `archive` | Matches a documented category; include the category name in the reason. |
| `skip` | Could be a real bug in our code, or insufficient evidence; do not archive. |
| `needs-human` | Looks like noise but doesn't cleanly fit a category, or volume is unusually high; flag for user review. |

When evaluating, weight these signals (in this order):

1. **Top non-Sentry-SDK frame.** If the top in-app frame is in `node_modules/`, `chrome-extension://`, a third-party host, or `<unknown>`, this is a strong archive signal.
2. **Title pattern.** Many archives are recognizable from the title alone (see criteria reference).
3. **Volume is not a veto.** Some high-volume issues (10k+ events, thousands of users) are still archive-worthy if the top frame is third-party. Volume alone never forces archive either.
4. **Recency.** Single-event issues older than 30 days with no recurrence are usually noise.
5. **Customer org spread.** If events come from one customer subdomain only (check `customerDomain.subdomain` tag), it is likely customer-environment noise.

### 3. Build the plan

Output one Markdown table to the user, in this exact shape:

```
## Triage plan — sentry/javascript (<N> candidates)

| # | Issue | Title | Volume | Decision | Category | Reason |
|---|-------|-------|--------|----------|----------|--------|
| 1 | [JAVASCRIPT-XXXX](url) | TypeError: ... | 12e/3u | archive | browser-api-noise | Browser clipboard permission denied; not actionable. |
| 2 | [JAVASCRIPT-YYYY](url) | <unknown> | 4945e/123u | needs-human | — | High volume, no title — please review before archiving. |
| 3 | [JAVASCRIPT-ZZZZ](url) | ZodError: ... | 360e/132u | skip | — | Schema validation failure in our code; looks actionable. |
```

Then summarize counts: `N archive / M skip / K needs-human`. End with:

```
Reply `apply` to archive the N issues marked `archive`, `apply N,M,...` to archive a subset, or `cancel` to take no action.
```

### 4. Apply on approval

When the user replies `apply` (or `apply <subset>`):

For each issue in the approved set, call:

```
update_issue(
  organizationSlug='sentry',
  issueId=<shortId>,
  status='ignored',
  ignoreMode='untilEscalating',
  reason=<category-tagged reason from the plan>,
)
```

Run these sequentially (not in parallel). If a call fails, log the failure, continue with the remaining issues, and report the failed IDs in step 5.

If the user replies `cancel` or asks to modify the plan, do NOT call `update_issue`. If they reply with edits ("change row 2 to skip"), rebuild the plan and re-confirm.

### 5. Report

After applying, output:

```
## Triage report

- Archived: N
- Skipped: M
- Needs human review: K
- Failures: F (with issue IDs)

<details><summary>Archived issues</summary>

- JAVASCRIPT-XXXX — <reason>
- ...

</details>
```

## Recovery

- If `update_issue` fails on one item, log the failure and continue with the rest. Report failed IDs at the end.
- If the user notices a wrong archive, the user can unarchive it themselves in Sentry. The skill never reverses its own actions automatically.
- If the user asks "redo the plan with these tweaks" mid-flow, regenerate the plan from scratch — do not assume the previous plan still applies.

## Example reasons (use this voice)

- `Third-party library noise — echarts tooltip; not actionable in our code.`
- `Browser API permission noise — Clipboard writeText denied by user agent.`
- `Customer-environment proxy interference — 200 response treated as error (HTML body from corporate proxy).`
- `Transient backend 5xx — InternalServerError on /api/0/organizations/.../events-meta/; backend transient.`
- `Test/synthetic event — smoke test or security probe, not production traffic.`
- `Wrong project — Prisma/Python error mis-routed to frontend project.`
- `Single-event fluke — 1 event, 1 user, no recurrence in 30+ days.`
- `Browser extension noise — ReferenceError for extension-injected global (DarkReader/WeixinJSBridge).`

© getsentry · Apache-2.0 · getsentry/skills

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

Все скиллы по теме «Настройка агента: память, контекст, субагенты» →
setup-matt-pocock-skills Matt Pocock Скилл настраивает репозиторий для инженерных скиллов Matt Pocock: задаёт трекер задач, метки триажа и расположение доменной документации. Запустите его перед первым использованием остальных скиллов. 1 052 851установок ask-matt Matt Pocock Помогает выбрать подходящий скилл или рабочий поток из набора Matt Pocock. Пригодится, когда непонятно, с чего начать задачу: от идеи до разбора бага. 766 587установок to-tickets Matt Pocock Разбивает план, спецификацию или переписку на небольшие сквозные задачи и отмечает, какие из них блокируют остальные. Пригодится, когда нужно согласовать порядок работы до публикации задач в трекере. 711 230установок writing-plans Jesse Vincent Скилл превращает требования к многошаговой задаче в подробный план реализации до начала работы с кодом. Пригодится, когда исполнителю нужно зафиксировать файлы, интерфейсы и проверки. CX Codex 282 859установок caveman-review JuliusBrussee Пишет замечания к коду одной строкой: место, проблема, исправление. Пригодится, когда ревью диффа или PR надо пройти быстро и без воды. CX Codex +1 411 800установок caveman-compress JuliusBrussee Сжимает CLAUDE.md, списки задач и другие текстовые файлы в краткий формат, сохраняя читаемую резервную копию. CX Codex +1 411 500установок

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

brand-guidelines Задаёт правила редактуры интерфейса и текстов в стиле Sentry: от лаконичных кнопок до ироничных пустых экранов. Пригодится при оформлении UI, ошибок и документации. CX Codex +1 2 500установок skill-writer Помогает проектировать, собирать и улучшать скиллы для ИИ-агентов по спецификации Agent Skills. Пригодится при оформлении новых навыков или рефакторинге старых промптов. CX Codex +1 2 500установок prompt-optimizer Скилл переписывает системные и агентские промпты, опираясь на набор тестовых случаев, а не на вкус. Пригодится, когда промпт уже есть, но ведёт себя нестабильно. CX Codex +1 2 300установок sred-project-organizer Структурирует годовой отчёт по проектам для программы SRED и создаёт карточки с подтверждениями в Notion. CX Codex +1 2 100установок sred-work-summary Собирает PR, документы Notion и задачи Linear за рабочий период, группирует ссылки по проектам и создаёт приватный документ Notion. Пригодится для подготовки сводки SRED. CX Codex +1 2 100установок typing-exclusion-worker Скилл убирает модули Python из списка исключений mypy в pyproject.toml, чинит типы и проверяет код тестами. Пригодится при параллельном закрытии долга по типизации. CX Codex +1 1 600установок document-api-endpoint Документирует и типизирует эндпоинты Sentry через drf-spectacular. Помогает устранить расхождения между схемой OpenAPI и реальным ответом API. CX Codex +1 1 200установок pr-link-issue Добавляет к описанию текущего PR ссылку на GitHub issue и связанный тикет Linear. Пригодится, когда нужно связать задачу с уже открытым PR. CX Codex +1 1 200установок

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

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