Catch new Sentry errors from the last 24 hours before users report them

Every morning: unresolved Sentry issues first seen in the last 24 hours, ranked by users and events, with the release and code they started in.

Runs
Every day at 8:00
Uses
Sentry
Posts
Report card

What lands on your board

acme-webSentry new errors digest · Claude Code

6 new errors since yesterday, 2 need a look

ACME-WEB-4F2 hit 212 users after release 2026.10.15-2. Four of the six new issues arrived with that release.

IssueEventsUsersRelease
ACME-WEB-4F2 TypeError: Cannot read properties of undefined (reading 'plan')1,8402122026.10.15-2
ACME-WEB-4F7 ChunkLoadError: Loading chunk 812 failed6551482026.10.15-2
ACME-WEB-4F5 RangeError: Invalid time value4192026.10.15-2
ACME-WEB-4F8 Error: Stripe.js failed to load1272026.10.15-2
ACME-WEB-4F9 AbortError: The user aborted a request3862026.10.15-1
ACME-WEB-4F3 SyntaxError: Unexpected token '<'422026.10.14-3
Top frame of 4F2
app/billing/PlanBadge.tsx:18 in PlanBadge
First seen
Oct 15, 16:42 UTC
ResolveFailed
An example with made-up numbers. Your agent posts your real ones.

What it does

New issues are the most useful thing Sentry knows and the easiest to miss once its alerts go to a channel everyone muted. Something that never happened before started happening, usually right after a deploy, and the earlier someone looks, the smaller the fix.

Every morning the agent asks Sentry for issues first seen in the last day, ranks them by users affected, and adds the release they arrived with and the top in-app stack frame. A quiet night gives a short green card; a bad one lands in Needs you.

How it works

  1. 1Query new issues

    GET /api/0/organizations/{org}/issues/?query=is:unresolved firstSeen:-24h&statsPeriod=24h&sort=user&limit=25, with project set to the project IDs you care about. With the Sentry MCP server, search issues with the same query.

  2. 2Read the details

    Keep shortId, title, culprit, level, count, userCount, firstSeen and permalink. For the top 5, read GET /api/0/organizations/{org}/issues/{issue_id}/events/latest/ for the release and the top in-app stack frame.

  3. 3

    3Tie them to releases

    Group new issues by the release they first appeared in, so a bad deploy shows up as one release with several new issues rather than as unrelated errors.

  4. 4

    4Rank and post

    Rank by users, then events. An issue needs a look at 10 or more users or 100 or more events. Post with work_state: failed when any new issue crosses that line, and done otherwise.

  5. Post it to the board

    With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.

What you get

  • New issues in the last 24 hours, and how many need a look.
  • For each: short ID, title, events, users, level, first release and the top in-app frame.
  • By release: releases that brought more than one new issue.
  • The issue to open first, with its link.

Install and run it

Pick your agent, where the data comes from and how to schedule it; the commands below follow.

Agent
Data
Schedule
  1. Install the skill

    One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.

    shellcurl -fsSL https://briefkin.dev/skills/sentry-new-errors-digest/install | sh
  2. Run it

    Ask Claude Code:

    promptRun the sentry-new-errors-digest skill

    Or paste the prompt instead of installing:

    promptUsing the Sentry API (GET /api/0/organizations/{org}/issues/) or the Sentry MCP server, find unresolved issues first seen in the last 24 hours (query is:unresolved firstSeen:-24h, statsPeriod=24h, sorted by users). For each, give the short ID, title, level, event count, users affected and the release it first appeared in; for the top five, add the top in-app stack frame from the latest event. Group them by first release and say if one release brought several. Mark any issue with 10 or more users or 100 or more events as needing a look, and end with the one to open first and its link.
  3. Put it on a schedule

    Every day at 8:00, from cron on any machine where Claude Code is signed in:

    crontab0 8 * * * claude -p "Run the sentry-new-errors-digest skill"

    Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.

  4. Send it to your board

    Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works

View the SKILL.mdRaw file
SKILL.md---
name: sentry-new-errors-digest
description: "Every morning: unresolved Sentry issues first seen in the last 24 hours, ranked by users and events, with the release and code they started in. Use when the user asks for this, or when it runs on a schedule."
---

# Sentry new errors digest

Every morning: unresolved Sentry issues first seen in the last 24 hours, ranked by users and events, with the release and code they started in.

New issues are the most useful thing Sentry knows and the easiest to miss once its alerts go to a channel everyone muted. Something that never happened before started happening, usually right after a deploy, and the earlier someone looks, the smaller the fix.

Every morning the agent asks Sentry for issues first seen in the last day, ranks them by users affected, and adds the release they arrived with and the top in-app stack frame. A quiet night gives a short green card; a bad one lands in Needs you.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- A Sentry auth token with `event:read` and `project:read` (from an internal integration or your user settings) in `SENTRY_AUTH_TOKEN`, plus the org slug.
- Or the Sentry MCP server or connector, signed in to the organization.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Query new issues** (Sentry): `GET /api/0/organizations/{org}/issues/?query=is:unresolved firstSeen:-24h&statsPeriod=24h&sort=user&limit=25`, with `project` set to the project IDs you care about. With the Sentry MCP server, search issues with the same query.
2. **Read the details** (Sentry): Keep `shortId`, `title`, `culprit`, `level`, `count`, `userCount`, `firstSeen` and `permalink`. For the top 5, read `GET /api/0/organizations/{org}/issues/{issue_id}/events/latest/` for the release and the top in-app stack frame.
3. **Tie them to releases**: Group new issues by the release they first appeared in, so a bad deploy shows up as one release with several new issues rather than as unrelated errors.
4. **Rank and post**: Rank by users, then events. An issue needs a look at 10 or more users or 100 or more events. Post with `work_state: failed` when any new issue crosses that line, and `done` otherwise.

## Route B: the browser

### What you need

- Signed in to Sentry as a member of the organization with at least the Member role on those projects; SSO-only organizations need the SSO session done first.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://sentry.io/issues/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open Issues for the right projects**: The URL opens the Issues page of your last organization; switch with the organization menu in the top left if needed. In the project selector at the top, pick the projects you care about, and set the time range picker to **24H**.
2. **Search for new issues**: Replace the search bar contents with `is:unresolved firstSeen:-24h` and press Enter. Set **Sort** to `Users`. The list now shows only issues that first appeared in the last day, biggest first.
3. **Read the top of the list**: For each row note the short ID, title, level, and the **Events** and **Users** columns. Anything with 10 or more users or 100 or more events needs a look.
4. **Open the top five**: Click each of the top five. On the issue page read **Release** in the tags block and the first in-app frame in the stack trace (toggle **Most Relevant** or **App Only** if the full trace shows). Copy the issue URL from the address bar.
5. **Group by release and judge**: Note which releases brought more than one new issue. Write the digest ranked by users, say which release each issue arrived in, and end with the issue to open first.

Note: The Issues list pages 25 at a time; a very bad night may need the next page. User counts depend on your SDK setting a user; without it, Sentry falls back to IP addresses or shows zero.

## The report

- **New issues** in the last 24 hours, and how many need a look.
- For each: short ID, title, events, users, level, first release and the top in-app frame.
- **By release**: releases that brought more than one new issue.
- The issue to open first, with its link.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "sentry-new-errors-digest/<date of this run, e.g. 2026-10-16>",
  "item_key": "sentry-new-errors-digest",
  "project": "acme-web",
  "source": "Sentry new errors digest skill",
  "kind": "update",
  "title": "6 new errors since yesterday, 2 need a look",
  "summary": "**ACME-WEB-4F2** hit 212 users after release `2026.10.15-2`. Four of the six new issues arrived with that release.",
  "work_state": "failed",
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Issue",
          "Events",
          "Users",
          "Release"
        ],
        "align": [
          "left",
          "right",
          "right",
          "left"
        ],
        "rows": [
          [
            "ACME-WEB-4F2 TypeError: Cannot read properties of undefined (reading 'plan')",
            1840,
            212,
            "2026.10.15-2"
          ],
          [
            "ACME-WEB-4F7 ChunkLoadError: Loading chunk 812 failed",
            655,
            148,
            "2026.10.15-2"
          ],
          [
            "ACME-WEB-4F5 RangeError: Invalid time value",
            41,
            9,
            "2026.10.15-2"
          ],
          [
            "ACME-WEB-4F8 Error: Stripe.js failed to load",
            12,
            7,
            "2026.10.15-2"
          ],
          [
            "ACME-WEB-4F9 AbortError: The user aborted a request",
            38,
            6,
            "2026.10.15-1"
          ],
          [
            "ACME-WEB-4F3 SyntaxError: Unexpected token '<'",
            4,
            2,
            "2026.10.14-3"
          ]
        ]
      }
    },
    {
      "type": "KeyValue",
      "props": {
        "items": [
          {
            "key": "Top frame of 4F2",
            "value": "app/billing/PlanBadge.tsx:18 in PlanBadge"
          },
          {
            "key": "First seen",
            "value": "Oct 15, 16:42 UTC"
          }
        ]
      }
    },
    {
      "type": "Links",
      "props": {
        "items": [
          {
            "label": "ACME-WEB-4F2 in Sentry",
            "url": "https://acme.sentry.io/issues/5123456789/"
          }
        ]
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Every day at 8:00 (`0 8 * * *`). From cron, with the agent signed in on that machine:

```bash
0 8 * * * claude -p "Run the sentry-new-errors-digest skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/sentry-new-errors-digest#schedule

Source: https://briefkin.dev/skills/sentry-new-errors-digest

What your agent needs

  • A Sentry auth token with event:read and project:read (from an internal integration or your user settings) in SENTRY_AUTH_TOKEN, plus the org slug.

  • Or the Sentry MCP server or connector, signed in to the organization.

Connecting Sentry

  1. Sentry MCP server, Sentry's official remote server at https://mcp.sentry.dev/mcp, signed in with OAuth. Add Sentry from Claude's connector directory, or run claude mcp add --transport http sentry https://mcp.sentry.dev/mcp. It searches issues and events and pulls stack traces.
  2. sentry-cli. Mostly a release and source map tool, but sentry-cli issues list --project <slug> lists issues when a quick terminal check is enough.
  3. API with an auth token. Create an organization or personal token, store it in SENTRY_AUTH_TOKEN with SENTRY_ORG, and grant org:read, project:read and event:read.

Those three read scopes cover every report here; leave out event:write, which lets a token resolve and assign issues.

Questions

Does a regression count as new?

No. firstSeen:-24h only matches issues that never happened before. A resolved issue that came back is a regression; add a second query for is:regressed and list those in their own section if you want both.

Can it skip noisy browser errors?

Yes. Add negative terms to the query, such as !message:"ResizeObserver loop" or !message:"Script error.". Better still, set inbound filters in the project settings, so that noise never reaches Sentry and never counts against your quota.

Do I need Briefkin to use the Sentry new errors digest skill?

No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.

Which agents can run it?

Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.

Can it work without an API or MCP server, from my browser?

Yes. Switch the data source to "Your browser" and the steps change to the Sentry pages themselves: the agent opens sentry.io/issues in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.

Read this report on your board, not in a chat log

Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.

Free during the open beta. No card.