Use when the user shares a Sentry URL, says "check Sentry", or wants to investigate production errors. Uses Sentry MCP tools for deep analysis.
Scanned 6/5/2026
Install via CLI
openskills install event4u-app/agent-config---
model_tier: medium
name: sentry-integration
description: "Use when the user shares a Sentry URL, says "check Sentry", or wants to investigate production errors. Uses Sentry MCP tools for deep analysis."
domain: devops
workspaces:
- engineering
packs:
- engineering-base
---
# Sentry Skill
## When to use
Use this skill when:
- Investigating a Sentry error or issue URL
- Analyzing error patterns, frequency, or affected users
- Working with Sentry MCP tools for issue details
- Adding error reporting or breadcrumbs to code
- Configuring Sentry alerts or release tracking
## Available MCP tools
### Issue investigation
| Tool | Purpose |
|---|---|
| `get_issue_details` | Full issue details: stacktrace, tags, metadata |
| `get_issue_tag_values` | Distribution by tag (browser, URL, environment, user) |
| `search_issues` | Find issues by criteria (unresolved, critical, etc.) |
| `search_events` | Count/aggregate events, find individual error logs |
| `search_issue_events` | Filter events within a specific issue |
| `analyze_issue_with_seer` | AI root cause analysis with code fix suggestions |
### Context tools
| Tool | Purpose |
|---|---|
| `get_trace_details` | Trace overview for performance issues |
| `get_event_attachment` | Download screenshots, logs attached to events |
| `find_organizations` | Find org slug (needed for most queries) |
| `find_projects` | Find project slug |
| `find_releases` | Check recent releases and deploy timing |
## Procedure: Investigate a Sentry error
### 1. Get issue details
From a Sentry URL:
```
get_issue_details(issueUrl='https://sentry.io/issues/PROJECT-123/')
```
From an issue ID:
```
get_issue_details(organizationSlug='my-org', issueId='PROJECT-123')
```
### 2. Analyze the stacktrace
- **Top frame** = where it crashed
- **Bottom frame** = entry point (HTTP request, job, command)
- Read each file in the call chain using `codebase-retrieval`
- Identify where data becomes invalid or assumptions break
### 3. Check distribution
```
get_issue_tag_values(issueId='PROJECT-123', tagKey='environment')
get_issue_tag_values(issueId='PROJECT-123', tagKey='url')
get_issue_tag_values(issueId='PROJECT-123', tagKey='browser')
```
Useful tags: `environment`, `url`, `browser`, `os`, `release`, `user`, `device`
### 4. Check frequency and timing
```
search_events(organizationSlug='my-org', naturalLanguageQuery='count of errors for PROJECT-123 in last 7 days')
```
### 5. AI analysis (if needed)
```
analyze_issue_with_seer(issueUrl='https://sentry.io/issues/PROJECT-123/')
```
Only use when you cannot determine the root cause from the stacktrace alone.
## Error reporting in code
### MonitoringHelper (project convention)
Always use the project's `MonitoringHelper` — never the Sentry SDK directly:
```php
// ✅ Correct
MonitoringHelper::captureException($exception);
// ❌ Wrong
\Sentry\captureException($exception);
```
### Breadcrumbs
Use project enums for structured breadcrumbs:
```php
use App\Enums\Sentry\BreadcrumbType;
use App\Enums\Sentry\BreadcrumbLevel;
```
### Context
Check the project for Sentry context enums and the tenant switching service that sets context automatically.
## Common error patterns
| Pattern | Root cause | Fix approach |
|---|---|---|
| `TypeError: null passed to non-nullable` | Missing null check on optional DB column | Add null guard or make parameter nullable |
| `ModelNotFoundException` | Deleted or missing related record | Add `optional()` or existence check |
| `ConnectionException` | Multi-tenant DB switch failed | Check tenant switching service flow |
| `ValidationException` in jobs | Job data changed between dispatch and execution | Re-validate in `handle()` |
| `Undefined array key` | External API/import data missing expected field | Add `array_key_exists()` or null coalescing |
## Search patterns
### Find issues by criteria
```
search_issues(organizationSlug='my-org', naturalLanguageQuery='unresolved errors in production last 24h')
search_issues(organizationSlug='my-org', naturalLanguageQuery='errors affecting more than 100 users')
search_issues(organizationSlug='my-org', naturalLanguageQuery='issues assigned to me')
```
### Count events
```
search_events(organizationSlug='my-org', naturalLanguageQuery='how many errors today')
search_events(organizationSlug='my-org', naturalLanguageQuery='count of database failures this week')
```
## Related
- **Skill:** `logging-monitoring` — full monitoring stack (Sentry + Grafana + Loki)
- **Skill:** `bug-analyzer` — uses Sentry as input for bug investigation
- **Command:** `/bug-investigate` — fetches Sentry details automatically
- **Config:** `config/sentry.php` — Sentry DSN and configuration
## Output format
1. Sentry integration code with proper context and breadcrumbs
2. Error grouping configuration if needed
## Gotcha
- Sentry groups errors by stacktrace — different root → may appear as the same issue. Check multiple events.
- The model tends to analyze only the latest event — check the "Events" tab for patterns across time.
- Don't use Sentry MCP tools for simple lookups — use the Sentry web UI link instead (saves tokens).
## Do NOT
- Do NOT use Sentry SDK directly — use MonitoringHelper.
- Do NOT ignore Sentry errors without investigating root cause.
- Do NOT expose sensitive data in Sentry error context.
## Auto-trigger keywords
- Sentry
- error tracking
- issue investigation
- error reporting
No comments yet. Be the first to comment!