agentsclimarketplace

Sentry

Skill tuannv14/claude-team-toolkit/skills/sentry

Team-ready Claude Code skill pack: 15 multi-account integrations for Rails + React Native + e-commerce. Trello, Azure DevOps, Heroku, Shopify, Firebase, Sentry, Slack, Postgres, Maestro, Fastlane + 5 more. Real value: multi-account profiles, audit logging, safety gates, xlsx-testcases unique workflow.

Install
npx -y skills add tuannv14/claude-team-toolkit --skill sentry

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when user references Sentry, sentry.io URLs, *.sentry.io/issues/ links, error/exception/release alerts, pastes a stack trace for triage, or checks release health on cloud or self-hosted. Multi-org via SENTRY_PROFILE.

SKILL.md

6.2 KB, as published. Nobody here has run it

/sentry — error monitoring (multi-org)

REST against https://sentry.io/api/0/ (or self-hosted Sentry instance). Bearer auth with API token. Profiles isolate org/project pairs.

Arguments: $ARGUMENTS. Profile resolution: --profile <name>SENTRY_PROFILE~/.sentry/active_profile[default].

Overview

REST against https://sentry.io/api/0/ (or self-hosted). Bearer auth with API token. Profiles isolate org/project pairs. Default summary view (no PII) — opt-in --full for raw stacktraces.

When to Use

  • Investigating issues during incidents (latest unresolved, last 24h)
  • Resolving or assigning issues to teammates
  • Release health (new issues per release, commit count)
  • Self-hosted Sentry instances (api_url per profile)
  • Triaging error spikes across multiple projects in one org

When NOT to Use

  • Sending events to Sentry → use the SDK in your app, not this skill
  • Bulk operations on hundreds of issues → use Sentry's UI bulk actions
  • Sourcemap upload → use @sentry/cli or Webpack/Vite plugin
  • User management at scale → Sentry's admin UI

Dependencies

curl, jq.

Profile config

~/.sentry/credentials (mode 600):

[default]
api_url = https://sentry.io/api/0
auth_token = sntrys_xxxxxxxxxxxxxxxxxxxxxxxx
org = my-org-slug
project = backend

[work]
api_url = https://sentry.example.com/api/0    # self-hosted
auth_token = sntrys_xxxxxxxxxxxxxxxxxxxxxxxx
org = company-org
project = api

[client_a]
api_url = https://sentry.io/api/0
auth_token = sntrys_xxxxxxxxxxxxxxxxxxxxxxxx
org = client-a-org
project = mobile

Token scopes (least privilege):

OperationRequired scope
Read issues, eventsevent:read + project:read
Resolve / assign issuesevent:write + project:read
Read releasesproject:releases
Manage membersorg:read (avoid unless needed)

Get token: User Settings → Auth Tokens → Create New Token. Use org-scoped tokens (limits to one org) when possible.

Helpers

Shared profile/INI/ctt_* pattern reference: profiles-and-credentials.

source "$HOME/.claude-team-toolkit/lib/credentials.sh"
ctt_load_creds sentry "$PROFILE"

sentry_api() {
  local method="$1" path="$2"; shift 2
  curl -s -X "$method" \
    -H "Authorization: Bearer $CTT_AUTH_TOKEN" \
    -H "Content-Type: application/json" \
    "$@" \
    "$CTT_API_URL$path"
}

Dispatch

issues [--query <q>] [--limit N] — list issues

Q="${QUERY:-is:unresolved}"
sentry_api GET "/projects/$CTT_ORG/$CTT_PROJECT/issues/?query=$(printf %s "$Q" | jq -sRr @uri)&limit=${LIMIT:-25}" \
  | jq -r '.[] | "\(.shortId)\t\(.level)\t\(.count)\t\(.title)\n  \(.permalink)"'

Common queries:

  • is:unresolved — open issues
  • is:unresolved age:-24h — last 24h
  • level:error — errors only
  • release:1.2.3 — specific release
  • assigned:me — yours

issue <issueId> — full issue detail

sentry_api GET "/issues/$1/" | jq '{
  id: .shortId, title, level, status, count, userCount,
  firstSeen, lastSeen, assignedTo,
  release: .firstRelease.version,
  permalink
}'

events <issueId> [--limit N] — recent events for an issue

sentry_api GET "/issues/$1/events/?limit=${LIMIT:-10}" \
  | jq -r '.[] | "\(.eventID)\t\(.dateCreated)\t\(.user.email // "—")"'

event <eventId> — full event detail (stacktrace + context)

sentry_api GET "/projects/$CTT_ORG/$CTT_PROJECT/events/$1/" | jq '{
  id: .eventID, message, level, dateCreated,
  user, environment, release, dist,
  exception: (.entries[] | select(.type=="exception") | .data.values[0] | {type, value, frames: (.stacktrace.frames | map({function, filename, lineno}))})
}'

resolve <issueId> — mark resolved

source "$HOME/.claude-team-toolkit/lib/confirm.sh"
ctt_confirm "Resolve issue $1 on $CTT_PROFILE?" || return 1
sentry_api PUT "/issues/$1/" -d '{"status":"resolved"}'
ctt_audit_log sentry "resolved $1"

assign <issueId> <username>

BODY=$(jq -n --arg u "$2" '{assignedTo: $u}')
sentry_api PUT "/issues/$1/" -d "$BODY"
ctt_audit_log sentry "assigned $1 → $2"

releases [--limit N] — recent releases

sentry_api GET "/organizations/$CTT_ORG/releases/?per_page=${LIMIT:-20}" \
  | jq -r '.[] | "\(.version)\t\(.dateCreated)\t\(.newGroups // 0) new issues\t\(.commitCount) commits"'

release <version> — release detail + health

sentry_api GET "/organizations/$CTT_ORG/releases/$1/" | jq '{
  version, dateCreated,
  newGroups, commitCount,
  authors: [.authors[].name],
  projects: [.projects[].slug]
}'

projects — list projects in org

sentry_api GET "/organizations/$CTT_ORG/projects/" \
  | jq -r '.[] | "\(.slug)\t\(.platform)\t\(.id)"'

Safety

  • Issue/event content (stacktraces, user data, error messages) often contains PII — never paste raw output into public chats. The skill should default to summary view; --full flag opt-in for raw.
  • assignedTo field can be a user OR a team — confirm with user which.
  • Resolve is reversible (status:unresolved) but delete is not — there is intentionally NO delete command in this skill.
  • Self-hosted Sentry: api_url includes path /api/0. Don't forget.
  • 429 Too Many Requests: Sentry API rate limit (40 req/s default for free).

Common Mistakes

  • Self-hosted: forgetting /api/0 in api_url → 404 on every call
  • Pasting raw event output publicly → leaks PII (user IDs, request bodies)
  • Using user-scoped tokens → blast radius is all your orgs. Use org-scoped.
  • Resolving without root cause → issue re-opens on next event, frustration loop
  • 429 ignored → API gets temp-banned. Respect Retry-After.
  • Querying with is:resolved then surprised it includes old issues — add age:-Nd for recency

Token-saving tip

Use organization-scoped tokens. They're limited to one org which limits blast radius if leaked.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.