Loading...
Loading...
Sentry error monitoring and issue tracking skill for retrieving issues, events, and project health data. Use when working with error tracking, exceptions, crashes, debugging production issues, or analyzing error patterns.
npx skill4agent add jakenuts/agent-skills sentryjelly-dotenvskills/jelly-dotenv/SKILL.mdSENTRY_AUTH_TOKENSENTRY_ORGSENTRY_ORGANIZATIONSENTRY_PROJECTSENTRY_REGIONSENTRY_TIMEOUTskills/jelly-dotenv/.env/.env# ✅ Standard naming (recommended)
SENTRY_AUTH_TOKEN=sntrys_your_token_here
SENTRY_ORG=my-organization
SENTRY_PROJECT=my-project
# ✅ Alternative naming
SENTRY_ORGANIZATION=my-organization
SENTRY_TOKEN=sntrys_your_token_here
# ✅ Wildcard patterns (auto-detected)
PROD_SENTRY_TOKEN=sntrys_your_token_here
PROD_SENTRY_ORG=my-organization
# ✅ Optional settings
SENTRY_REGION=us # us (default), de
SENTRY_TIMEOUT=30000 # Request timeout in ms# US (default)
SENTRY_REGION=us
# Base URL: https://sentry.io/api/0/
# Germany/EU
SENTRY_REGION=de
# Base URL: https://de.sentry.io/api/0/GET /api/0/organizations/GET /api/0/organizations/{org}/GET /api/0/organizations/{org}/projects/GET /api/0/organizations/{org}/issues/GET /api/0/projects/{org}/{project}/issues/GET /api/0/organizations/{org}/issues/{issue_id}/PUT /api/0/organizations/{org}/issues/{issue_id}/DELETE /api/0/organizations/{org}/issues/{issue_id}/GET /api/0/organizations/{org}/issues/{issue_id}/events/GET /api/0/projects/{org}/{project}/events/GET /api/0/projects/{org}/{project}/events/{event_id}/GET /api/0/organizations/{org}/issues/{issue_id}/tags/GET /api/0/organizations/{org}/issues/{issue_id}/tags/{tag}/values/# Load environment variables
source skills/jelly-dotenv/load-env.sh
# Build API URL
SENTRY_BASE_URL="${SENTRY_REGION:-us}"
if [ "$SENTRY_BASE_URL" = "de" ]; then
SENTRY_BASE_URL="https://de.sentry.io"
else
SENTRY_BASE_URL="https://sentry.io"
fi
# List unresolved issues
curl -s \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}" \
"${SENTRY_BASE_URL}/api/0/organizations/${SENTRY_ORG}/issues/?query=is:unresolved" | jq .curl -s \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}" \
"${SENTRY_BASE_URL}/api/0/organizations/${SENTRY_ORG}/issues/123456/" | jq .curl -s \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}" \
"${SENTRY_BASE_URL}/api/0/organizations/${SENTRY_ORG}/issues/123456/events/?limit=10" | jq .curl -s \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}" \
"${SENTRY_BASE_URL}/api/0/organizations/${SENTRY_ORG}/issues/?query=NullPointerException" | jq .curl -s \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}" \
"${SENTRY_BASE_URL}/api/0/projects/${SENTRY_ORG}/my-project/events/" | jq .curl -s -X PUT \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"status": "resolved"}' \
"${SENTRY_BASE_URL}/api/0/organizations/${SENTRY_ORG}/issues/123456/" | jq .curl -s \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}" \
"${SENTRY_BASE_URL}/api/0/organizations/${SENTRY_ORG}/projects/" | jq .# Load environment variables from jelly-dotenv (with fallback to project root)
source skills/jelly-dotenv/load-env.sh
# Determine base URL
if [ "${SENTRY_REGION:-us}" = "de" ]; then
SENTRY_BASE_URL="https://de.sentry.io"
else
SENTRY_BASE_URL="https://sentry.io"
fi
# Sentry API curl helper
sentry-curl() {
local endpoint="$1"
shift
curl -s \
-H "Authorization: Bearer ${SENTRY_AUTH_TOKEN}" \
-H "Content-Type: application/json" \
"$@" \
"${SENTRY_BASE_URL}/api/0${endpoint}" | jq .
}
# List unresolved issues
sentry-issues() {
local query="${1:-is:unresolved}"
sentry-curl "/organizations/${SENTRY_ORG}/issues/?query=${query}"
}
# Get issue details
sentry-issue() {
local issue_id="$1"
sentry-curl "/organizations/${SENTRY_ORG}/issues/${issue_id}/"
}
# List issue events
sentry-events() {
local issue_id="$1"
local limit="${2:-10}"
sentry-curl "/organizations/${SENTRY_ORG}/issues/${issue_id}/events/?limit=${limit}"
}
# List projects
sentry-projects() {
sentry-curl "/organizations/${SENTRY_ORG}/projects/"
}
# Resolve issue
sentry-resolve() {
local issue_id="$1"
sentry-curl "/organizations/${SENTRY_ORG}/issues/${issue_id}/" \
-X PUT -d '{"status": "resolved"}'
}
# Ignore issue
sentry-ignore() {
local issue_id="$1"
sentry-curl "/organizations/${SENTRY_ORG}/issues/${issue_id}/" \
-X PUT -d '{"status": "ignored"}'
}~/.bashrc~/.zshrc# Sentry quick commands
alias sentry-unresolved='sentry-issues "is:unresolved"'
alias sentry-new='sentry-issues "is:unresolved firstSeen:-24h"'
alias sentry-critical='sentry-issues "is:unresolved level:fatal"'# List unresolved issues
sentry-issues
# Get specific issue
sentry-issue 123456
# List events for issue
sentry-events 123456 20
# List projects
sentry-projects
# Resolve an issue
sentry-resolve 123456
# Search for specific errors
sentry-issues "TypeError is:unresolved"is:unresolvedis:resolvedis:ignoredfirstSeen:-24hlastSeen:-1wage:-30dlevel:errorlevel:fatallevel:warningis:assignedis:unassignedassigned:me# Critical unresolved issues from today
sentry-issues "is:unresolved level:fatal firstSeen:-24h"
# Unassigned errors from past week
sentry-issues "is:unresolved is:unassigned lastSeen:-1w"SENTRY_AUTH_TOKEN=sntrys_your_token_here
SENTRY_ORG=my-organization