From sentry-pack
Implements reliable Sentry integrations with graceful degradation, circuit breakers, and offline queuing for fault-tolerant error tracking and surviving outages.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin sentry-packThis skill is limited to using the following tools:
Build Sentry integrations that never take your application down via three pillars: safe initialization with graceful degradation, a circuit breaker that stops hammering Sentry when unreachable, and an offline event queue that buffers errors during outages. Every pattern prioritizes application uptime over telemetry completeness.
Identifies and fixes 10 Sentry SDK anti-patterns like hardcoded DSNs and 100% sample rates causing data loss, costs, and missed alerts. For auditing configs and debugging missing events.
Initializes and configures Sentry SDKs with tracing, replays, and integrations for JavaScript/TypeScript (Browser, Node, React, Next.js), Python/Django, and Go.
Sets up full Sentry SDK in Next.js 13+ apps with App and Pages Router support. Configures error monitoring, tracing, session replay, logging, profiling, AI monitoring, and crons across browser, Node.js server, and Edge runtimes.
Share bugs, ideas, or general feedback.
Build Sentry integrations that never take your application down via three pillars: safe initialization with graceful degradation, a circuit breaker that stops hammering Sentry when unreachable, and an offline event queue that buffers errors during outages. Every pattern prioritizes application uptime over telemetry completeness.
@sentry/node v8+ (TypeScript) or sentry-sdk v2+ (Python)sentry.ioWrap Sentry.init() in try/catch so an invalid DSN, network error, or SDK bug never crashes the app. Track initialization state with a boolean flag. Protect beforeSend callbacks with their own error boundary.
Create lib/sentry-safe.ts with initSentrySafe() and captureError(). See graceful-degradation.md for full implementation.
Key rules:
Sentry.init() crash the process — wrap in try/catch, set sentryAvailable = false on failureSentry.getClient() — invalid DSNs silently produce no clientbeforeSend hooks in nested try/catch — return raw event on hook failureWhen Sentry is unreachable, continued attempts waste resources and add latency. Track consecutive failures and trip open after a threshold. After cooldown, enter half-open state and send a single probe.
Implement SentryCircuitBreaker class with closed/open/half-open states. See circuit-breaker-pattern.md for full implementation. Expose state via health-checks.md endpoint.
Key rules:
getStatus() for health check endpoints and monitoring dashboardsBuffer events when network is unavailable and replay on reconnect. Use bounded file-based queue to survive restarts. Pair with signal handlers that flush via Sentry.close() before process exit.
Implement three modules:
lib/sentry-offline-queue.ts — enqueueEvent() and drainQueue(). See network-failure-handling.mdlib/sentry-transport.ts — Custom transport with exponential backoff retry. See timeout-handling.mdlib/sentry-shutdown.ts — SIGTERM/SIGINT handlers calling Sentry.close(2000). See timeout-handling.mdKey rules:
Sentry.close(timeout) before process.exit() — without it, in-flight events are silently droppedPromise.allSettledcaptureError() with automatic fallback to local logging| Error | Cause | Solution |
|---|---|---|
App crashes on Sentry.init() | Invalid DSN or SDK bug | Wrap in try/catch via initSentrySafe() |
Events lost on SIGTERM | No Sentry.close() before exit | Register signal handlers with Sentry.close(2000) |
| Sentry outage cascades latency | Every error path hits Sentry HTTP | Circuit breaker trips after 5 failures |
| Events lost during network blip | SDK drops events silently | Retry transport + offline queue |
| Silent event loss | SDK fails without throwing | Health check probes with captureMessage + flush |
| Queue grows unbounded | Never drained, Sentry permanently down | Cap at 1000 events, drain on startup |
beforeSend crashes pipeline | User hook throws | Nested try/catch, return raw event |
See errors.md for extended troubleshooting.
See examples.md for complete TypeScript and Python integration examples including full-stack wiring of all three patterns.
beforeSend, sampleRate, init optionsSentry.close() and Sentry.flush()sentry_sdk.init(), flush(), scope managementdrainQueue() via setInterval (Node) or cron (Python) instead of startup-onlysentry_sdk.init(transport=...) parameterbeforeSend to verify circuit breaker behavior