Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Review a project's PRs to check for issues detected in code review by Seer Bug Prediction. Use when asked to review or fix issues identified by Sentry in PR comments, or to find recent PRs with Sentry feedback.
.claude/skills/kunanonj-cursor-plugin-sentry-sentry-pr-code-review/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -22% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 1% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -25% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 20% | 0% |
> All Skills > Workflow > PR Code Review
Review and fix issues identified by Seer (by Sentry) in GitHub PR comments.
gh CLI installed and authenticatedImportant: The comment format parsed below is based on Seer's current output. This is not an API contract and may change. Always verify the actual comment structure.
bashgh api repos/{owner}/{repo}/pulls/{PR_NUMBER}/comments --paginate \ --jq '.[] | select(.user.login == "seer-by-sentry[bot]") | {file: .path, line: .line, body: .body}'
The bot login is seer-by-sentry[bot] — not sentry[bot] or sentry-io[bot].
If no PR number is given, find recent PRs with Seer comments:
bashgh pr list --state open --json number,title --limit 20 | \ jq -r '.[].number' | while read pr; do count=$(gh api "repos/{owner}/{repo}/pulls/$pr/comments" --paginate \ --jq '[.[] | select(.user.login == "seer-by-sentry[bot]")] | length') [ "$count" -gt 0 ] && echo "PR #$pr: $count Seer comments" done
Extract from the markdown body:
**Bug:**<sub>Severity: X | Confidence: X.XX</sub><summary>🔍 <b>Detailed Analysis</b></summary> block<summary>💡 <b>Suggested Fix</b></summary> block<summary>🤖 <b>Prompt for AI Agent</b></summary> blockFor each issue:
markdown## Seer Review: PR #[number] ### Resolved | File:Line | Issue | Severity | Fix Applied | |-----------|-------|----------|-------------| | path:123 | desc | HIGH | what done | ### Skipped (false positive or already fixed) | File:Line | Issue | Reason | |-----------|-------|--------| **Summary:** X resolved, Y skipped
| Trigger | When | |---------|------| | PR set to "Ready for Review" | Automatic error prediction | | Commit pushed while PR is ready | Re-runs prediction | | @sentry review comment | Manual trigger for full review + suggestions | | Draft PR | Skipped — no review until marked ready |
| Issue | Solution | |-------|----------| | No Seer comments found | Verify the Seer GitHub App is installed on the repo | | Bot name mismatch | The login is seer-by-sentry[bot], not sentry[bot] | | Comments not appearing on new PRs | PR must be "Ready for Review" (not draft) | | gh api returns partial results | Ensure --paginate flag is included |
| Category | Examples | |----------|----------| | Type Safety | Missing null checks, unsafe type assertions | | Error Handling | Swallowed errors, missing boundaries | | Validation | Permissive inputs, missing sanitization | | Config | Missing env vars, incorrect paths |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 3,281 | 3,730 | +14% | 1 | 1 | 0% | 533 | 1,157 | +117% | 0 | 0 | — |
case-02 | fail→fail | 3,578 | 4,810 | +34% | 1 | 1 | 0% | 625 | 1,351 | +116% | 0 | 0 | — |
case-03 | fail→fail | 4,727 | 4,404 | -7% | 1 | 1 | 0% | 852 | 1,226 | +44% | 0 | 0 | — |
case-04 | fail→pass | 9,217 | 2,023 | -78% | 1 | 1 | 0% | 1,781 | 1,388 | -22% | 0 | 0 | — |
case-05 | pass→pass | 4,615 | 1,520 | -67% | 1 | 1 | 0% | 848 | 1,232 | +45% | 0 | 0 | — |
case-06 | pass→pass | 10,751 | 3,973 | -63% | 1 | 1 | 0% | 1,724 | 1,705 | -1% | 0 | 0 | — |
case-07 | fail→pass | 11,387 | 6,022 | -47% | 1 | 1 | 0% | 2,290 | 2,310 | +1% | 0 | 0 | — |
case-08 | fail→pass | 9,432 | 1,334 | -86% | 1 | 1 | 0% | 1,552 | 1,164 | -25% | 0 | 0 | — |
case-09 | fail→pass | 8,786 | 1,515 | -83% | 1 | 1 | 0% | 1,450 | 1,238 | -15% | 0 | 0 | — |
case-10 | pass→pass | 7,428 | 1,257 | -83% | 1 | 1 | 0% | 1,320 | 1,201 | -9% | 0 | 0 | — |
case-11 | fail→pass | 6,183 | 1,550 | -75% | 1 | 1 | 0% | 1,037 | 1,243 | +20% | 0 | 0 | — |
case-12 | pass→pass | 5,461 | 1,503 | -72% | 1 | 1 | 0% | 927 | 1,259 | +36% | 0 | 0 | — |
case-13 | fail→pass | 5,529 | 2,131 | -61% | 1 | 1 | 0% | 933 | 1,387 | +49% | 0 | 0 | — |
case-14 | fail→fail | 11,748 | 6,263 | -47% | 1 | 1 | 0% | 1,901 | 2,025 | +7% | 0 | 0 | — |
case-15 | fail→pass | 9,028 | 2,116 | -77% | 1 | 1 | 0% | 1,585 | 1,346 | -15% | 0 | 0 | — |
case-16 | fail→pass | 3,517 | 1,726 | -51% | 1 | 1 | 0% | 599 | 1,304 | +118% | 0 | 0 | — |
case-17 | pass→pass | 9,730 | 1,944 | -80% | 1 | 1 | 0% | 1,567 | 1,320 | -16% | 0 | 0 | — |
case-18 | pass→pass | 10,209 | 5,201 | -49% | 1 | 1 | 0% | 1,802 | 2,009 | +11% | 0 | 0 | — |
case-19 | fail→pass | 13,227 | 3,108 | -77% | 1 | 1 | 0% | 2,317 | 1,608 | -31% | 0 | 0 | — |
case-20 | pass→pass | 12,261 | 5,836 | -52% | 1 | 1 | 0% | 2,523 | 2,139 | -15% | 0 | 0 | — |
case-21 | pass→pass | 13,965 | 8,512 | -39% | 1 | 1 | 0% | 2,884 | 2,437 | -15% | 0 | 0 | — |
case-22 | pass→pass | 11,146 | 7,667 | -31% | 1 | 1 | 0% | 2,031 | 2,323 | +14% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +41 percentage points is the difference between those two pass rates over the 19 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.