Skip to main content
OpenSRE queries Sentry to retrieve recent issues, error events, and stack traces — correlating application errors with infrastructure alerts to identify root causes faster.

Prerequisites

  • Sentry account with at least one organization
  • Auth token with event:read scope (Issues lookup)
  • For uptime watching: also alerts:read (or org:read) so opensre sentry uptime can list monitors

Setup

Option 1: Interactive CLI

Select Sentry when prompted and provide your organization slug and auth token.

Option 2: Environment variables

Add to your .env:
A search returns up to 100 issues per query (Sentry’s maximum page size) within the SENTRY_STATS_PERIOD window. Widen the window (e.g. SENTRY_STATS_PERIOD=14d) to surface older issues. If you expect more issues than appear, the cause is almost always the time window or a SENTRY_PROJECT_SLUG scope — not a cap of one.

Option 3: Persistent store

Creating an auth token

Recommended: Organization Token
  1. In Sentry, go to SettingsDeveloper SettingsOrganization Tokens
  2. Click Create New Token
  3. Enable the event:read scope (and alerts:read if you use uptime watch)
  4. Copy the token
Alternative: Internal Integration For broader access, create an Internal Integration under SettingsDeveloper SettingsInternal Integrations.
The organization slug appears in your Sentry URL: https://sentry.io/organizations/<slug>/

Verify

Expected output:

Morning digest (scheduled)

Deliver a daily unresolved-issues summary to Slack, Telegram, or Rocket.Chat. This uses the headless sentry-summary skill path (tools + LLM answer via the gateway), not the investigation pipeline or generic opensre cron kinds. When an uptime watch schedule is running, the skill also calls get_sentry_uptime_digest to include downtime/recovery context in the digest. Example — weekdays at 08:00 London time to Telegram:
Example — same schedule to a Slack channel (C… member/channel id):
Example — same schedule to a Rocket.Chat channel (requires token credentials — see Rocket.Chat, an incoming webhook alone cannot target an explicit --chat-id):
Optional --project my-service scopes the digest to one Sentry project. When an uptime watch schedule is running, the sentry-summary skill automatically includes an Uptime / downtime (last 24h) section with monitors that are still down or recovered in the window. If no uptime watch history exists, the digest stays Issues-only. The gateway daemon picks up scheduled digests automatically when it is running. If the LLM is unavailable, the run fails with an error.
The count reflects issues seen in the last 7 days (capped at 100, shown as 100+ when it saturates). Use a search (e.g. search_sentry_issues during an investigation) to enumerate the full issue set over a custom window.

Uptime watch (downtime notifications)

Poll Sentry uptime monitors (Alerts / Uptime — not the Issues digest) and ping Slack, Telegram, or Rocket.Chat only when a monitor transitions to down or recovered. Quiet polls deliver nothing. This is separate from the morning Issues digest (sentry-summary / Feature #10). Example — poll every 5 minutes and ping Slack on transitions:
Requires alerts:read (or equivalent) on the Sentry token. The agent tool list_sentry_uptime_alerts exposes the same monitor list in chat/investigation. Schedule an uptime watch alongside the morning digest so the sentry-summary skill can include yesterday’s downtime summary via get_sentry_uptime_digest; the watch records DOWN/RECOVERED transitions locally for that rollup. Follow-ups (not in v1): inbound Sentry webhooks and auto-remediation attempts.

Telemetry knobs

Verify Error Reporting

Send one test event to confirm OpenSRE can report runtime errors:
For a custom or self-hosted project, set the DSN first:
The event is synthetic and tagged debug=true. If telemetry is disabled, the command exits non-zero without sending anything.

Troubleshooting

Security best practices

  • Use an Organization Token with only event:read — do not use admin tokens.
  • Store the token in .env, not in source code.
  • Rotate tokens periodically.