[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M795MM34054PC7G0WFJSGY2B":3,"skill-same:01M795MM34054PC7G0WFJSGY2B":59},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":6,"ownerHtmlUrl":41,"ownerBlogUrl":42,"ownerDescription":43,"updatedAt":44,"install":45,"resources":58},"01M795MM34054PC7G0WFJSGY2B","sentry-cost-tuning",null,"Optimize Sentry costs, reduce event volume, and manage quota spend.\nUse when analyzing Sentry billing, reducing error\u002Ftransaction volume,\nconfiguring sampling rates, or preventing overage charges.\nTrigger: \"reduce sentry costs\", \"sentry billing optimization\",\n\"sentry quota management\", \"optimize sentry spend\", \"sentry sampling\".","jukeyman\u002Fjukeyman-skills","jukeyman","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F142960420?v=4","01M78FR4Y3DHMMCBCC0GXXNB3F","RICK JEFFERSON","01M78FR4Z8RVQRAD31Y5J7V6EB",1,"MIT","https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsaas-packs--sentry-pack--sentry-cost-tuning\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: sentry-cost-tuning\ndescription: |\n  Optimize Sentry costs, reduce event volume, and manage quota spend.\n  Use when analyzing Sentry billing, reducing error\u002Ftransaction volume,\n  configuring sampling rates, or preventing overage charges.\n  Trigger: \"reduce sentry costs\", \"sentry billing optimization\",\n  \"sentry quota management\", \"optimize sentry spend\", \"sentry sampling\".\nallowed-tools: Read, Write, Edit, Grep, Glob, Bash(curl:*), Bash(node:*), Bash(npx:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\ntags: [saas, sentry, cost-optimization, billing, quotas, sampling]\n---\n\n# Sentry Cost Tuning\n\nReduce Sentry spend by 60-95% through SDK-level sampling, server-side inbound filters, `beforeSend` event dropping, and quota management — without losing visibility into production errors that matter.\n\n## Prerequisites\n\n- Active Sentry account with `org:read` and `project:read` scopes on an auth token\n- Access to the project's `Sentry.init()` configuration (typically `sentry.client.config.ts` or `instrument.ts`)\n- Current plan tier identified: Developer (free, 5K errors\u002Fmo), Team ($26\u002Fmo, 50K errors + 100K transactions), or Business ($80\u002Fmo, 100K errors + 500K transactions)\n- `SENTRY_AUTH_TOKEN` and `SENTRY_ORG` environment variables set for API calls\n- `@sentry\u002Fnode` >= 8.0 or `@sentry\u002Fbrowser` >= 8.0 installed\n\n## Instructions\n\n### Step 1 — Audit Current Usage via the Stats API\n\nQuery the Sentry Usage Stats API to understand where volume comes from before making changes. This endpoint returns event counts grouped by category over any time period.\n\n```bash\n# Pull 30-day usage breakdown by category\ncurl -s -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Forganizations\u002F$SENTRY_ORG\u002Fstats\u002Fusage\u002F?statsPeriod=30d&groupBy=category&field=sum(quantity)&interval=1d\" \\\n  | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nprint('=== 30-Day Usage by Category ===')\nfor group in data.get('groups', []):\n    cat = group['by']['category']\n    total = sum(interval[1] for interval in group.get('series', {}).get('sum(quantity)', []))\n    print(f'  {cat}: {total:,} events')\n\"\n```\n\n```bash\n# Identify top error-producing projects\ncurl -s -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Forganizations\u002F$SENTRY_ORG\u002Fstats\u002Fusage\u002F?statsPeriod=30d&groupBy=project&category=error&field=sum(quantity)\" \\\n  | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nprojects = []\nfor group in data.get('groups', []):\n    proj = group['by']['project']\n    total = sum(interval[1] for interval in group.get('series', {}).get('sum(quantity)', []))\n    projects.append((proj, total))\nprojects.sort(key=lambda x: -x[1])\nprint('=== Top Error-Producing Projects ===')\nfor name, count in projects[:10]:\n    print(f'  {name}: {count:,}')\n\"\n```\n\nRecord the baseline numbers. You need these to measure savings after optimization.\n\n### Step 2 — Configure Error Sampling with `sampleRate`\n\nThe `sampleRate` option in `Sentry.init()` controls the percentage of error events sent to Sentry. Setting it to `0.1` means only 10% of errors are sent, yielding a 90% cost reduction on the error category.\n\n```typescript\nimport * as Sentry from '@sentry\u002Fnode';\n\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n\n  \u002F\u002F 10% of errors sent = 90% cost reduction\n  \u002F\u002F Sentry extrapolates counts in the Issues dashboard\n  sampleRate: 0.1,\n});\n```\n\n**Trade-off:** Low-frequency errors (\u003C 10 occurrences\u002Fday) may be missed entirely. Mitigate this by using `beforeSend` to always send errors with specific severity or tags rather than relying on blanket sampling.\n\n### Step 3 — Configure Performance Sampling with `tracesSampleRate` and `tracesSampler`\n\nPerformance monitoring (transactions\u002Fspans) is typically the largest cost driver. A `tracesSampleRate` of `0.05` sends only 5% of traces, cutting performance costs by 95%.\n\n```typescript\nimport * as Sentry from '@sentry\u002Fnode';\n\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n\n  \u002F\u002F Static: 5% of all traces (95% cost reduction)\n  tracesSampleRate: 0.05,\n\n  \u002F\u002F Dynamic: per-endpoint sampling for fine-grained control\n  \u002F\u002F When tracesSampler is defined, it overrides tracesSampleRate\n  tracesSampler: (samplingContext) => {\n    const { name, attributes } = samplingContext;\n\n    \u002F\u002F Never trace health checks, readiness probes, static assets\n    if (name?.match(\u002F\\\u002F(health|healthz|ready|livez|ping|robots\\.txt|favicon)\u002F)) {\n      return 0;\n    }\n    if (name?.match(\u002F\\.(js|css|png|jpg|svg|woff2?|ico)$\u002F)) {\n      return 0;\n    }\n\n    \u002F\u002F High-value: payment and auth flows get 50% sampling\n    if (name?.includes('\u002Fcheckout') || name?.includes('\u002Fpayment')) {\n      return 0.5;\n    }\n    if (name?.includes('\u002Fauth') || name?.includes('\u002Flogin')) {\n      return 0.25;\n    }\n\n    \u002F\u002F API routes: 5%\n    if (name?.includes('\u002Fapi\u002F')) {\n      return 0.05;\n    }\n\n    \u002F\u002F Everything else: 1%\n    return 0.01;\n  },\n});\n```\n\nThe `tracesSampler` function receives a `samplingContext` with the transaction `name` (usually the route) and `attributes`. Return a number between `0` (drop) and `1` (always send), or `true`\u002F`false`.\n\n### Step 4 — Drop Noisy Events with `beforeSend`\n\nThe `beforeSend` hook fires for every error event before it is sent to Sentry. Returning `null` drops the event entirely — it never counts against quota.\n\n```typescript\nimport * as Sentry from '@sentry\u002Fnode';\n\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n\n  beforeSend(event, hint) {\n    const error = hint?.originalException;\n    const message = typeof error === 'string' ? error : error?.message || '';\n\n    \u002F\u002F Drop ResizeObserver noise (Chrome fires this constantly, never actionable)\n    if (message.includes('ResizeObserver loop')) return null;\n\n    \u002F\u002F Drop network errors from flaky client connections\n    if (\u002F^(Failed to fetch|NetworkError|Load failed|AbortError)$\u002Fi.test(message)) {\n      return null;\n    }\n\n    \u002F\u002F Drop cancelled navigation (user clicked away)\n    if (message.includes('cancelled') || message.includes('AbortError')) {\n      return null;\n    }\n\n    \u002F\u002F Drop browser extension errors by checking stack frames\n    const frames = event.exception?.values?.[0]?.stacktrace?.frames || [];\n    if (frames.some(f => f.filename?.match(\u002Fextensions?\\\u002F\u002Fi) || f.filename?.match(\u002F^(chrome|moz)-extension:\\\u002F\\\u002F\u002F))) {\n      return null;\n    }\n\n    \u002F\u002F Always send critical errors regardless of sampleRate\n    \u002F\u002F Re-enable any that were sampled out\n    if (event.level === 'fatal' || event.tags?.critical === 'true') {\n      return event;\n    }\n\n    return event;\n  },\n\n  \u002F\u002F Complementary: block errors from known noisy patterns\n  ignoreErrors: [\n    'ResizeObserver loop completed with undelivered notifications',\n    'ResizeObserver loop limit exceeded',\n    'Non-Error promise rejection captured',\n    \u002FLoading chunk \\d+ failed\u002F,\n    \u002FUnexpected token '\u003C'\u002F,       \u002F\u002F HTML returned instead of JS (CDN issue)\n    \u002F^Script error\\.?$\u002F,          \u002F\u002F Cross-origin script with no details\n  ],\n\n  \u002F\u002F Block events from third-party scripts\n  denyUrls: [\n    \u002Fextensions\\\u002F\u002Fi,\n    \u002F^chrome:\\\u002F\\\u002F\u002Fi,\n    \u002F^chrome-extension:\\\u002F\\\u002F\u002Fi,\n    \u002F^moz-extension:\\\u002F\\\u002F\u002Fi,\n    \u002Fhotjar\\.com\u002F,\n    \u002Fintercom\\.io\u002F,\n    \u002Fgoogle-analytics\\.com\u002F,\n    \u002Fgoogletagmanager\\.com\u002F,\n    \u002Fcdn\\.segment\\.com\u002F,\n  ],\n});\n```\n\n### Step 5 — Enable Server-Side Inbound Data Filters (Free)\n\nInbound data filters drop events at Sentry's edge before they are ingested and counted against quota. They cost nothing to enable.\n\nNavigate to **Project Settings > Inbound Filters** (or use the API) and enable:\n\n| Filter | What it drops | Impact |\n|--------|--------------|--------|\n| Browser Extensions | Errors from Chrome\u002FFirefox extensions | 5-15% of frontend errors |\n| Legacy Browsers | IE 11, old Safari\u002FChrome versions | 2-10% depending on audience |\n| Localhost Events | Errors from `localhost` and `127.0.0.1` | Dev noise (variable) |\n| Web Crawlers | Bot-triggered errors (Googlebot, Bingbot) | 1-5% of frontend errors |\n| Filtered Transactions | Health checks, static asset requests | 10-40% of transactions |\n\n```bash\n# Enable inbound filters via API\nfor filter in browser-extensions legacy-browsers localhost-events web-crawlers; do\n  curl -s -X PUT \\\n    -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n    -H \"Content-Type: application\u002Fjson\" \\\n    -d '{\"active\": true}' \\\n    \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Fprojects\u002F$SENTRY_ORG\u002F$SENTRY_PROJECT\u002Ffilters\u002F$filter\u002F\"\n  echo \" -> Enabled: $filter\"\ndone\n```\n\nAdd custom error message filters for project-specific noise:\n\n```bash\n# Add custom inbound filter for error messages\ncurl -s -X PUT \\\n  -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"active\": true, \"subfilters\": [\"ResizeObserver\", \"ChunkLoadError\", \"Script error\"]}' \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Fprojects\u002F$SENTRY_ORG\u002F$SENTRY_PROJECT\u002Ffilters\u002Fcustom-error-messages\u002F\"\n```\n\n### Step 6 — Configure Spike Protection and Per-Key Rate Limits\n\n**Spike protection** is auto-enabled on all Sentry plans and caps burst events during sudden spikes (deploy bugs, infinite loops). Verify it is active under **Organization Settings > Spike Protection**.\n\n**Per-key rate limits** restrict events per DSN key per time window. Set these in **Project Settings > Client Keys (DSN) > Rate Limiting** or via the API:\n\n```bash\n# Set rate limit: 1000 errors per hour per DSN key\ncurl -s -X PUT \\\n  -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"rateLimit\": {\"window\": 3600, \"count\": 1000}}' \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Fprojects\u002F$SENTRY_ORG\u002F$SENTRY_PROJECT\u002Fkeys\u002F$KEY_ID\u002F\"\n```\n\n**Spend allocations** (Team and Business plans): Set per-category budgets under **Settings > Subscription > Spend Allocations** to cap on-demand spending per billing period.\n\n### Step 7 — Optimize Reserved vs On-Demand Volume\n\nSentry offers two pricing models for volume above the plan's included quota:\n\n| Model | Rate (errors) | Best for |\n|-------|--------------|----------|\n| Reserved volume | ~$0.000180\u002Fevent (pre-paid blocks) | Predictable workloads |\n| On-demand volume | ~$0.000290\u002Fevent (pay-as-you-go) | Spiky\u002Fseasonal traffic |\n\nReserved volume is approximately 38% cheaper per event than on-demand. If your 30-day audit shows consistent volume, purchase reserved blocks to match the P90 usage. Let spikes overflow into on-demand.\n\n```\nExample calculation:\n  Average monthly errors:  120,000\n  Plan included:            50,000  (Team plan)\n  Overage:                  70,000\n\n  On-demand cost:  70,000 x $0.000290 = $20.30\u002Fmonth\n  Reserved cost:   70,000 x $0.000180 = $12.60\u002Fmonth\n  Monthly savings: $7.70 ($92.40\u002Fyear)\n```\n\n### Step 8 — Reduce Event Payload Size\n\nSmaller payloads mean lower bandwidth costs and faster event processing. These settings do not reduce event count but lower overall resource consumption.\n\n```typescript\nimport * as Sentry from '@sentry\u002Fnode';\n\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n\n  \u002F\u002F Reduce breadcrumbs from default 100 to 20\n  maxBreadcrumbs: 20,\n\n  \u002F\u002F Truncate long string values (default 250)\n  maxValueLength: 500,\n\n  \u002F\u002F Disable features you are not actively using\n  replaysSessionSampleRate: 0,    \u002F\u002F Session replays off\n  replaysOnErrorSampleRate: 0,    \u002F\u002F Error replays off\n  profilesSampleRate: 0,          \u002F\u002F Profiling off\n\n  beforeSend(event) {\n    \u002F\u002F Truncate large request bodies\n    if (event.request?.data && typeof event.request.data === 'string') {\n      if (event.request.data.length > 2000) {\n        event.request.data = event.request.data.substring(0, 2000) + '...[truncated]';\n      }\n    }\n\n    \u002F\u002F Strip unnecessary headers\n    if (event.request?.headers) {\n      const keep = ['content-type', 'user-agent', 'referer', 'accept-language'];\n      event.request.headers = Object.fromEntries(\n        Object.entries(event.request.headers)\n          .filter(([k]) => keep.includes(k.toLowerCase()))\n      );\n    }\n\n    return event;\n  },\n});\n```\n\n### Step 9 — Verify Savings\n\nAfter deploying changes, wait 48-72 hours and re-run the usage audit from Step 1 to measure actual savings.\n\n```bash\n# Compare current period vs previous period\ncurl -s -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Forganizations\u002F$SENTRY_ORG\u002Fstats\u002Fusage\u002F?statsPeriod=7d&groupBy=category&field=sum(quantity)&interval=1d\" \\\n  | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nprint('=== Post-Optimization 7-Day Usage ===')\nfor group in data.get('groups', []):\n    cat = group['by']['category']\n    total = sum(interval[1] for interval in group.get('series', {}).get('sum(quantity)', []))\n    print(f'  {cat}: {total:,} events')\nprint()\nprint('Compare against your Step 1 baseline to calculate % reduction.')\n\"\n```\n\n## Output\n\nAfter completing this skill:\n\n- SDK sampling configured: `sampleRate` for errors, `tracesSampler` for performance traces\n- `beforeSend` hook dropping non-actionable errors (ResizeObserver, network failures, browser extensions)\n- `ignoreErrors` and `denyUrls` blocking known noisy patterns\n- Server-side inbound data filters enabled (browser extensions, legacy browsers, localhost, crawlers)\n- Spike protection verified and per-key rate limits set\n- Unused features disabled (replays, profiling) to eliminate wasted quota\n- Cost projection completed with reserved vs on-demand volume comparison\n- Spend allocations configured to prevent overage surprises\n\n## Error Handling\n\n| Problem | Cause | Fix |\n|---------|-------|-----|\n| Critical errors missing from Sentry | `sampleRate` too low | Add `beforeSend` logic that always sends `level: 'fatal'` events regardless of sampling |\n| Zero performance data | `tracesSampleRate: 0` or `tracesSampler` returning `0` for all routes | Set minimum `0.01` baseline in the `tracesSampler` default return |\n| Unexpected overage charges | No rate limits or spend allocations | Set per-key rate limits (Step 6) and spend allocations in billing settings |\n| Spike consuming entire monthly quota | Spike protection disabled or infinite error loop | Verify spike protection is active; add circuit breaker in `beforeSend` |\n| Usage API returns 403 | Auth token missing `org:read` scope | Generate new token at sentry.io\u002Fsettings\u002Fauth-tokens with `org:read` + `project:read` |\n| `beforeSend` drops too aggressively | Overly broad regex patterns | Test patterns against recent events in Sentry's Discover tab before deploying |\n| Inbound filters not reducing volume | Filters enabled after events ingested | Filters are prospective only; wait for new events to see impact |\n\n## Examples\n\n### Example 1 — Startup on Team Plan ($26\u002Fmo) with 800K Monthly Transactions\n\n```\nBefore: 45K errors + 800K transactions\n  Included: 50K errors + 100K transactions\n  Overage: 700K transactions x $0.000025 = $17.50\u002Fmonth\n\nAfter optimization:\n  tracesSampler → 800K reduced to 40K (95% drop)\n  ignoreErrors + beforeSend → 45K reduced to 28K (38% drop)\n  Inbound filters → additional 5% reduction\n\n  New monthly overage: $0\n  Annual savings: $210\n```\n\n### Example 2 — Business Plan ($80\u002Fmo) with High Frontend Error Volume\n\n```\nBefore: 450K errors + 200K transactions + 5K replays\n  Included: 100K errors + 500K transactions + 5K replays\n  Overage: 350K errors x $0.000290 = $101.50\u002Fmonth\n\nAfter optimization:\n  sampleRate 0.25 → 450K reduced to 112K\n  beforeSend filtering → 112K reduced to 85K\n  Inbound filters → 85K reduced to 72K\n\n  New monthly overage: $0 (72K \u003C 100K included)\n  Annual savings: $1,218\n```\n\n### Example 3 — Dynamic Sampling for Microservices\n\n```typescript\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n  tracesSampler: (samplingContext) => {\n    const { name } = samplingContext;\n\n    \u002F\u002F Internal services: minimal sampling\n    if (name?.startsWith('internal.')) return 0.001;\n\n    \u002F\u002F Customer-facing API: moderate sampling\n    if (name?.startsWith('api.')) return 0.05;\n\n    \u002F\u002F Background jobs: low sampling\n    if (name?.includes('worker') || name?.includes('cron')) return 0.01;\n\n    return 0.01;\n  },\n});\n```\n\n## Resources\n\n- [Sentry Quota Management](https:\u002F\u002Fdocs.sentry.io\u002Fpricing\u002Fquotas\u002F) — official guide to managing event quotas\n- [Manage Your Error Quota](https:\u002F\u002Fdocs.sentry.io\u002Fpricing\u002Fquotas\u002Fmanage-event-stream-guide\u002F) — step-by-step error volume reduction\n- [Sentry Pricing](https:\u002F\u002Fsentry.io\u002Fpricing\u002F) — current plan tiers and per-category rates\n- [SDK Filtering Configuration](https:\u002F\u002Fdocs.sentry.io\u002Fplatforms\u002Fjavascript\u002Fconfiguration\u002Ffiltering\u002F) — `beforeSend`, `ignoreErrors`, `denyUrls`\n- [Dynamic Sampling](https:\u002F\u002Fdocs.sentry.io\u002Fplatforms\u002Fjavascript\u002Fconfiguration\u002Fsampling\u002F) — `tracesSampler` reference\n- [Inbound Data Filters](https:\u002F\u002Fdocs.sentry.io\u002Fconcepts\u002Fdata-management\u002Ffiltering\u002F) — server-side filter configuration\n- [Usage Stats API](https:\u002F\u002Fdocs.sentry.io\u002Fapi\u002Forganizations\u002Fretrieve-event-counts-for-an-organization-v2\u002F) — `GET \u002Fapi\u002F0\u002Forganizations\u002F{org}\u002Fstats\u002Fusage\u002F`\n- [Spike Protection](https:\u002F\u002Fdocs.sentry.io\u002Fpricing\u002Fquotas\u002Fspike-protection\u002F) — automatic burst event capping\n\n## Next Steps\n\n1. Run the Step 1 usage audit to establish a baseline before making any changes\n2. Deploy SDK sampling changes (`sampleRate`, `tracesSampler`, `beforeSend`) to a staging environment first\n3. Enable all free inbound data filters immediately — zero risk, immediate savings\n4. Monitor the Sentry Stats page for 72 hours post-deployment to verify reduction targets\n5. Set spend allocations and rate limits as guardrails against future spikes\n6. Evaluate reserved volume blocks if monthly overage exceeds $15 consistently\n7. Schedule quarterly reviews of `beforeSend` filters against new error patterns in Discover\n","# Sentry Cost Tuning\n\nReduce Sentry spend by 60-95% through SDK-level sampling, server-side inbound filters, `beforeSend` event dropping, and quota management — without losing visibility into production errors that matter.\n\n## Prerequisites\n\n- Active Sentry account with `org:read` and `project:read` scopes on an auth token\n- Access to the project's `Sentry.init()` configuration (typically `sentry.client.config.ts` or `instrument.ts`)\n- Current plan tier identified: Developer (free, 5K errors\u002Fmo), Team ($26\u002Fmo, 50K errors + 100K transactions), or Business ($80\u002Fmo, 100K errors + 500K transactions)\n- `SENTRY_AUTH_TOKEN` and `SENTRY_ORG` environment variables set for API calls\n- `@sentry\u002Fnode` >= 8.0 or `@sentry\u002Fbrowser` >= 8.0 installed\n\n## Instructions\n\n### Step 1 — Audit Current Usage via the Stats API\n\nQuery the Sentry Usage Stats API to understand where volume comes from before making changes. This endpoint returns event counts grouped by category over any time period.\n\n```bash\n# Pull 30-day usage breakdown by category\ncurl -s -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Forganizations\u002F$SENTRY_ORG\u002Fstats\u002Fusage\u002F?statsPeriod=30d&groupBy=category&field=sum(quantity)&interval=1d\" \\\n  | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nprint('=== 30-Day Usage by Category ===')\nfor group in data.get('groups', []):\n    cat = group['by']['category']\n    total = sum(interval[1] for interval in group.get('series', {}).get('sum(quantity)', []))\n    print(f'  {cat}: {total:,} events')\n\"\n```\n\n```bash\n# Identify top error-producing projects\ncurl -s -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Forganizations\u002F$SENTRY_ORG\u002Fstats\u002Fusage\u002F?statsPeriod=30d&groupBy=project&category=error&field=sum(quantity)\" \\\n  | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nprojects = []\nfor group in data.get('groups', []):\n    proj = group['by']['project']\n    total = sum(interval[1] for interval in group.get('series', {}).get('sum(quantity)', []))\n    projects.append((proj, total))\nprojects.sort(key=lambda x: -x[1])\nprint('=== Top Error-Producing Projects ===')\nfor name, count in projects[:10]:\n    print(f'  {name}: {count:,}')\n\"\n```\n\nRecord the baseline numbers. You need these to measure savings after optimization.\n\n### Step 2 — Configure Error Sampling with `sampleRate`\n\nThe `sampleRate` option in `Sentry.init()` controls the percentage of error events sent to Sentry. Setting it to `0.1` means only 10% of errors are sent, yielding a 90% cost reduction on the error category.\n\n```typescript\nimport * as Sentry from '@sentry\u002Fnode';\n\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n\n  \u002F\u002F 10% of errors sent = 90% cost reduction\n  \u002F\u002F Sentry extrapolates counts in the Issues dashboard\n  sampleRate: 0.1,\n});\n```\n\n**Trade-off:** Low-frequency errors (\u003C 10 occurrences\u002Fday) may be missed entirely. Mitigate this by using `beforeSend` to always send errors with specific severity or tags rather than relying on blanket sampling.\n\n### Step 3 — Configure Performance Sampling with `tracesSampleRate` and `tracesSampler`\n\nPerformance monitoring (transactions\u002Fspans) is typically the largest cost driver. A `tracesSampleRate` of `0.05` sends only 5% of traces, cutting performance costs by 95%.\n\n```typescript\nimport * as Sentry from '@sentry\u002Fnode';\n\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n\n  \u002F\u002F Static: 5% of all traces (95% cost reduction)\n  tracesSampleRate: 0.05,\n\n  \u002F\u002F Dynamic: per-endpoint sampling for fine-grained control\n  \u002F\u002F When tracesSampler is defined, it overrides tracesSampleRate\n  tracesSampler: (samplingContext) => {\n    const { name, attributes } = samplingContext;\n\n    \u002F\u002F Never trace health checks, readiness probes, static assets\n    if (name?.match(\u002F\\\u002F(health|healthz|ready|livez|ping|robots\\.txt|favicon)\u002F)) {\n      return 0;\n    }\n    if (name?.match(\u002F\\.(js|css|png|jpg|svg|woff2?|ico)$\u002F)) {\n      return 0;\n    }\n\n    \u002F\u002F High-value: payment and auth flows get 50% sampling\n    if (name?.includes('\u002Fcheckout') || name?.includes('\u002Fpayment')) {\n      return 0.5;\n    }\n    if (name?.includes('\u002Fauth') || name?.includes('\u002Flogin')) {\n      return 0.25;\n    }\n\n    \u002F\u002F API routes: 5%\n    if (name?.includes('\u002Fapi\u002F')) {\n      return 0.05;\n    }\n\n    \u002F\u002F Everything else: 1%\n    return 0.01;\n  },\n});\n```\n\nThe `tracesSampler` function receives a `samplingContext` with the transaction `name` (usually the route) and `attributes`. Return a number between `0` (drop) and `1` (always send), or `true`\u002F`false`.\n\n### Step 4 — Drop Noisy Events with `beforeSend`\n\nThe `beforeSend` hook fires for every error event before it is sent to Sentry. Returning `null` drops the event entirely — it never counts against quota.\n\n```typescript\nimport * as Sentry from '@sentry\u002Fnode';\n\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n\n  beforeSend(event, hint) {\n    const error = hint?.originalException;\n    const message = typeof error === 'string' ? error : error?.message || '';\n\n    \u002F\u002F Drop ResizeObserver noise (Chrome fires this constantly, never actionable)\n    if (message.includes('ResizeObserver loop')) return null;\n\n    \u002F\u002F Drop network errors from flaky client connections\n    if (\u002F^(Failed to fetch|NetworkError|Load failed|AbortError)$\u002Fi.test(message)) {\n      return null;\n    }\n\n    \u002F\u002F Drop cancelled navigation (user clicked away)\n    if (message.includes('cancelled') || message.includes('AbortError')) {\n      return null;\n    }\n\n    \u002F\u002F Drop browser extension errors by checking stack frames\n    const frames = event.exception?.values?.[0]?.stacktrace?.frames || [];\n    if (frames.some(f => f.filename?.match(\u002Fextensions?\\\u002F\u002Fi) || f.filename?.match(\u002F^(chrome|moz)-extension:\\\u002F\\\u002F\u002F))) {\n      return null;\n    }\n\n    \u002F\u002F Always send critical errors regardless of sampleRate\n    \u002F\u002F Re-enable any that were sampled out\n    if (event.level === 'fatal' || event.tags?.critical === 'true') {\n      return event;\n    }\n\n    return event;\n  },\n\n  \u002F\u002F Complementary: block errors from known noisy patterns\n  ignoreErrors: [\n    'ResizeObserver loop completed with undelivered notifications',\n    'ResizeObserver loop limit exceeded',\n    'Non-Error promise rejection captured',\n    \u002FLoading chunk \\d+ failed\u002F,\n    \u002FUnexpected token '\u003C'\u002F,       \u002F\u002F HTML returned instead of JS (CDN issue)\n    \u002F^Script error\\.?$\u002F,          \u002F\u002F Cross-origin script with no details\n  ],\n\n  \u002F\u002F Block events from third-party scripts\n  denyUrls: [\n    \u002Fextensions\\\u002F\u002Fi,\n    \u002F^chrome:\\\u002F\\\u002F\u002Fi,\n    \u002F^chrome-extension:\\\u002F\\\u002F\u002Fi,\n    \u002F^moz-extension:\\\u002F\\\u002F\u002Fi,\n    \u002Fhotjar\\.com\u002F,\n    \u002Fintercom\\.io\u002F,\n    \u002Fgoogle-analytics\\.com\u002F,\n    \u002Fgoogletagmanager\\.com\u002F,\n    \u002Fcdn\\.segment\\.com\u002F,\n  ],\n});\n```\n\n### Step 5 — Enable Server-Side Inbound Data Filters (Free)\n\nInbound data filters drop events at Sentry's edge before they are ingested and counted against quota. They cost nothing to enable.\n\nNavigate to **Project Settings > Inbound Filters** (or use the API) and enable:\n\n| Filter | What it drops | Impact |\n|--------|--------------|--------|\n| Browser Extensions | Errors from Chrome\u002FFirefox extensions | 5-15% of frontend errors |\n| Legacy Browsers | IE 11, old Safari\u002FChrome versions | 2-10% depending on audience |\n| Localhost Events | Errors from `localhost` and `127.0.0.1` | Dev noise (variable) |\n| Web Crawlers | Bot-triggered errors (Googlebot, Bingbot) | 1-5% of frontend errors |\n| Filtered Transactions | Health checks, static asset requests | 10-40% of transactions |\n\n```bash\n# Enable inbound filters via API\nfor filter in browser-extensions legacy-browsers localhost-events web-crawlers; do\n  curl -s -X PUT \\\n    -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n    -H \"Content-Type: application\u002Fjson\" \\\n    -d '{\"active\": true}' \\\n    \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Fprojects\u002F$SENTRY_ORG\u002F$SENTRY_PROJECT\u002Ffilters\u002F$filter\u002F\"\n  echo \" -> Enabled: $filter\"\ndone\n```\n\nAdd custom error message filters for project-specific noise:\n\n```bash\n# Add custom inbound filter for error messages\ncurl -s -X PUT \\\n  -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"active\": true, \"subfilters\": [\"ResizeObserver\", \"ChunkLoadError\", \"Script error\"]}' \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Fprojects\u002F$SENTRY_ORG\u002F$SENTRY_PROJECT\u002Ffilters\u002Fcustom-error-messages\u002F\"\n```\n\n### Step 6 — Configure Spike Protection and Per-Key Rate Limits\n\n**Spike protection** is auto-enabled on all Sentry plans and caps burst events during sudden spikes (deploy bugs, infinite loops). Verify it is active under **Organization Settings > Spike Protection**.\n\n**Per-key rate limits** restrict events per DSN key per time window. Set these in **Project Settings > Client Keys (DSN) > Rate Limiting** or via the API:\n\n```bash\n# Set rate limit: 1000 errors per hour per DSN key\ncurl -s -X PUT \\\n  -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"rateLimit\": {\"window\": 3600, \"count\": 1000}}' \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Fprojects\u002F$SENTRY_ORG\u002F$SENTRY_PROJECT\u002Fkeys\u002F$KEY_ID\u002F\"\n```\n\n**Spend allocations** (Team and Business plans): Set per-category budgets under **Settings > Subscription > Spend Allocations** to cap on-demand spending per billing period.\n\n### Step 7 — Optimize Reserved vs On-Demand Volume\n\nSentry offers two pricing models for volume above the plan's included quota:\n\n| Model | Rate (errors) | Best for |\n|-------|--------------|----------|\n| Reserved volume | ~$0.000180\u002Fevent (pre-paid blocks) | Predictable workloads |\n| On-demand volume | ~$0.000290\u002Fevent (pay-as-you-go) | Spiky\u002Fseasonal traffic |\n\nReserved volume is approximately 38% cheaper per event than on-demand. If your 30-day audit shows consistent volume, purchase reserved blocks to match the P90 usage. Let spikes overflow into on-demand.\n\n```\nExample calculation:\n  Average monthly errors:  120,000\n  Plan included:            50,000  (Team plan)\n  Overage:                  70,000\n\n  On-demand cost:  70,000 x $0.000290 = $20.30\u002Fmonth\n  Reserved cost:   70,000 x $0.000180 = $12.60\u002Fmonth\n  Monthly savings: $7.70 ($92.40\u002Fyear)\n```\n\n### Step 8 — Reduce Event Payload Size\n\nSmaller payloads mean lower bandwidth costs and faster event processing. These settings do not reduce event count but lower overall resource consumption.\n\n```typescript\nimport * as Sentry from '@sentry\u002Fnode';\n\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n\n  \u002F\u002F Reduce breadcrumbs from default 100 to 20\n  maxBreadcrumbs: 20,\n\n  \u002F\u002F Truncate long string values (default 250)\n  maxValueLength: 500,\n\n  \u002F\u002F Disable features you are not actively using\n  replaysSessionSampleRate: 0,    \u002F\u002F Session replays off\n  replaysOnErrorSampleRate: 0,    \u002F\u002F Error replays off\n  profilesSampleRate: 0,          \u002F\u002F Profiling off\n\n  beforeSend(event) {\n    \u002F\u002F Truncate large request bodies\n    if (event.request?.data && typeof event.request.data === 'string') {\n      if (event.request.data.length > 2000) {\n        event.request.data = event.request.data.substring(0, 2000) + '...[truncated]';\n      }\n    }\n\n    \u002F\u002F Strip unnecessary headers\n    if (event.request?.headers) {\n      const keep = ['content-type', 'user-agent', 'referer', 'accept-language'];\n      event.request.headers = Object.fromEntries(\n        Object.entries(event.request.headers)\n          .filter(([k]) => keep.includes(k.toLowerCase()))\n      );\n    }\n\n    return event;\n  },\n});\n```\n\n### Step 9 — Verify Savings\n\nAfter deploying changes, wait 48-72 hours and re-run the usage audit from Step 1 to measure actual savings.\n\n```bash\n# Compare current period vs previous period\ncurl -s -H \"Authorization: Bearer $SENTRY_AUTH_TOKEN\" \\\n  \"https:\u002F\u002Fsentry.io\u002Fapi\u002F0\u002Forganizations\u002F$SENTRY_ORG\u002Fstats\u002Fusage\u002F?statsPeriod=7d&groupBy=category&field=sum(quantity)&interval=1d\" \\\n  | python3 -c \"\nimport json, sys\ndata = json.load(sys.stdin)\nprint('=== Post-Optimization 7-Day Usage ===')\nfor group in data.get('groups', []):\n    cat = group['by']['category']\n    total = sum(interval[1] for interval in group.get('series', {}).get('sum(quantity)', []))\n    print(f'  {cat}: {total:,} events')\nprint()\nprint('Compare against your Step 1 baseline to calculate % reduction.')\n\"\n```\n\n## Output\n\nAfter completing this skill:\n\n- SDK sampling configured: `sampleRate` for errors, `tracesSampler` for performance traces\n- `beforeSend` hook dropping non-actionable errors (ResizeObserver, network failures, browser extensions)\n- `ignoreErrors` and `denyUrls` blocking known noisy patterns\n- Server-side inbound data filters enabled (browser extensions, legacy browsers, localhost, crawlers)\n- Spike protection verified and per-key rate limits set\n- Unused features disabled (replays, profiling) to eliminate wasted quota\n- Cost projection completed with reserved vs on-demand volume comparison\n- Spend allocations configured to prevent overage surprises\n\n## Error Handling\n\n| Problem | Cause | Fix |\n|---------|-------|-----|\n| Critical errors missing from Sentry | `sampleRate` too low | Add `beforeSend` logic that always sends `level: 'fatal'` events regardless of sampling |\n| Zero performance data | `tracesSampleRate: 0` or `tracesSampler` returning `0` for all routes | Set minimum `0.01` baseline in the `tracesSampler` default return |\n| Unexpected overage charges | No rate limits or spend allocations | Set per-key rate limits (Step 6) and spend allocations in billing settings |\n| Spike consuming entire monthly quota | Spike protection disabled or infinite error loop | Verify spike protection is active; add circuit breaker in `beforeSend` |\n| Usage API returns 403 | Auth token missing `org:read` scope | Generate new token at sentry.io\u002Fsettings\u002Fauth-tokens with `org:read` + `project:read` |\n| `beforeSend` drops too aggressively | Overly broad regex patterns | Test patterns against recent events in Sentry's Discover tab before deploying |\n| Inbound filters not reducing volume | Filters enabled after events ingested | Filters are prospective only; wait for new events to see impact |\n\n## Examples\n\n### Example 1 — Startup on Team Plan ($26\u002Fmo) with 800K Monthly Transactions\n\n```\nBefore: 45K errors + 800K transactions\n  Included: 50K errors + 100K transactions\n  Overage: 700K transactions x $0.000025 = $17.50\u002Fmonth\n\nAfter optimization:\n  tracesSampler → 800K reduced to 40K (95% drop)\n  ignoreErrors + beforeSend → 45K reduced to 28K (38% drop)\n  Inbound filters → additional 5% reduction\n\n  New monthly overage: $0\n  Annual savings: $210\n```\n\n### Example 2 — Business Plan ($80\u002Fmo) with High Frontend Error Volume\n\n```\nBefore: 450K errors + 200K transactions + 5K replays\n  Included: 100K errors + 500K transactions + 5K replays\n  Overage: 350K errors x $0.000290 = $101.50\u002Fmonth\n\nAfter optimization:\n  sampleRate 0.25 → 450K reduced to 112K\n  beforeSend filtering → 112K reduced to 85K\n  Inbound filters → 85K reduced to 72K\n\n  New monthly overage: $0 (72K \u003C 100K included)\n  Annual savings: $1,218\n```\n\n### Example 3 — Dynamic Sampling for Microservices\n\n```typescript\nSentry.init({\n  dsn: process.env.SENTRY_DSN,\n  tracesSampler: (samplingContext) => {\n    const { name } = samplingContext;\n\n    \u002F\u002F Internal services: minimal sampling\n    if (name?.startsWith('internal.')) return 0.001;\n\n    \u002F\u002F Customer-facing API: moderate sampling\n    if (name?.startsWith('api.')) return 0.05;\n\n    \u002F\u002F Background jobs: low sampling\n    if (name?.includes('worker') || name?.includes('cron')) return 0.01;\n\n    return 0.01;\n  },\n});\n```\n\n## Resources\n\n- [Sentry Quota Management](https:\u002F\u002Fdocs.sentry.io\u002Fpricing\u002Fquotas\u002F) — official guide to managing event quotas\n- [Manage Your Error Quota](https:\u002F\u002Fdocs.sentry.io\u002Fpricing\u002Fquotas\u002Fmanage-event-stream-guide\u002F) — step-by-step error volume reduction\n- [Sentry Pricing](https:\u002F\u002Fsentry.io\u002Fpricing\u002F) — current plan tiers and per-category rates\n- [SDK Filtering Configuration](https:\u002F\u002Fdocs.sentry.io\u002Fplatforms\u002Fjavascript\u002Fconfiguration\u002Ffiltering\u002F) — `beforeSend`, `ignoreErrors`, `denyUrls`\n- [Dynamic Sampling](https:\u002F\u002Fdocs.sentry.io\u002Fplatforms\u002Fjavascript\u002Fconfiguration\u002Fsampling\u002F) — `tracesSampler` reference\n- [Inbound Data Filters](https:\u002F\u002Fdocs.sentry.io\u002Fconcepts\u002Fdata-management\u002Ffiltering\u002F) — server-side filter configuration\n- [Usage Stats API](https:\u002F\u002Fdocs.sentry.io\u002Fapi\u002Forganizations\u002Fretrieve-event-counts-for-an-organization-v2\u002F) — `GET \u002Fapi\u002F0\u002Forganizations\u002F{org}\u002Fstats\u002Fusage\u002F`\n- [Spike Protection](https:\u002F\u002Fdocs.sentry.io\u002Fpricing\u002Fquotas\u002Fspike-protection\u002F) — automatic burst event capping\n\n## Next Steps\n\n1. Run the Step 1 usage audit to establish a baseline before making any changes\n2. Deploy SDK sampling changes (`sampleRate`, `tracesSampler`, `beforeSend`) to a staging environment first\n3. Enable all free inbound data filters immediately — zero risk, immediate savings\n4. Monitor the Sentry Stats page for 72 hours post-deployment to verify reduction targets\n5. Set spend allocations and rate limits as guardrails against future spikes\n6. Evaluate reserved volume blocks if monthly overage exceeds $15 consistently\n7. Schedule quarterly reviews of `beforeSend` filters against new error patterns in Discover\n",{"name":5,"tags":24,"author":31,"license":15,"version":32,"description":33,"allowed-tools":34,"compatible-with":35},[25,26,27,28,29,30],"saas","sentry","cost-optimization","billing","quotas","sampling","Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Optimize Sentry costs, reduce event volume, and manage quota spend.\nUse when analyzing Sentry billing, reducing error\u002Ftransaction volume,\nconfiguring sampling rates, or preventing overage charges.\nTrigger: \"reduce sentry costs\", \"sentry billing optimization\",\n\"sentry quota management\", \"optimize sentry spend\", \"sentry sampling\".\n","Read, Write, Edit, Grep, Glob, Bash(curl:*), Bash(node:*), Bash(npx:*)","claude-code, codex, openclaw","main","99825ad3f3bcc6597ddcc7294a14e6e922f2b67b","skills\u002Fsaas-packs--sentry-pack--sentry-cost-tuning",0,"https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills","https:\u002F\u002Fgithub.com\u002Fjukeyman","https:\u002F\u002FRJBUSINESSSOLUTIONS.ORG","Credit and Finance Expert | Developer\r\n\r\nI'm Rick Jefferson, a seasoned credit and finance expert with over a decade of experience in financial literacy,","2026-07-13 07:03:29",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add jukeyman\u002Fjukeyman-skills --skill sentry-cost-tuning",{"tool":51,"command":52},"bunx","bunx skills add jukeyman\u002Fjukeyman-skills --skill sentry-cost-tuning",{"tool":54,"command":55},"pnpm","pnpm dlx skills add jukeyman\u002Fjukeyman-skills --skill sentry-cost-tuning","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsaas-packs--sentry-pack--sentry-cost-tuning\u002FSKILL.md",true,[],[60,67,74,81,88,96],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M79ANS2SM329NEP5ZCX106RR","zustand-store-creator","Create zustand store creator operations. Auto-activating skill for Frontend Development.\nTriggers on: zustand store creator, zustand store creator\nPart of the Frontend Development skill category. Use when working with zustand store creator functionality. Trigger with phrases like \"zustand store creator\", \"zustand creator\", \"zustand\".","https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fzustand-store-creator\u002FSKILL.md",[],[],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":19},"01M79AMZKP4YDEZ7EHG1Y7PP74","zero-trust-config-helper","Configure with zero trust config helper operations. Auto-activating skill for Security Advanced.\nTriggers on: zero trust config helper, zero trust config helper\nPart of the Security Advanced skill category. Use when configuring systems or services. Trigger with phrases like \"zero trust config helper\", \"zero helper\", \"zero\".","https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fzero-trust-config-helper\u002FSKILL.md",[],[],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":19},"01M79AMJSBCEJQNBTYNAHYN5HM","zapier-integration-helper","Assist with zapier integration helper operations. Auto-activating skill for Business Automation.\nTriggers on: zapier integration helper, zapier integration helper\nPart of the Business Automation skill category. Use when working with APIs or building integrations. Trigger with phrases like \"zapier integration helper\", \"zapier helper\", \"zapier\".","https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fzapier-integration-helper\u002FSKILL.md",[],[],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":19},"01M79AHJZGVMARS13VFQYRR1MP","yaml-config-validator","Validate yaml config validator operations. Auto-activating skill for DevOps Basics.\nTriggers on: yaml config validator, yaml config validator\nPart of the DevOps Basics skill category. Use when configuring systems or services. Trigger with phrases like \"yaml config validator\", \"yaml validator\", \"yaml\".","https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fyaml-config-validator\u002FSKILL.md",[],[],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":92,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":19},"01M79AHGDZRN0020RDQSQDPAM8","xvary-stock-research","Thesis-driven equity analysis from public SEC EDGAR and market data; \u002Fanalyze, \u002Fscore, \u002Fcompare workflows with bundled Python tools (Claude Code, Cursor, Codex).","https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fxvary-stock-research\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fxvary-stock-research\u002FSKILL.md",[],[],{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":19},"01M79AHCYJ9FV9RMHQ24HDRN33","xss-vulnerability-scanner","Scan xss vulnerability scanner operations. Auto-activating skill for Security Fundamentals.\nTriggers on: xss vulnerability scanner, xss vulnerability scanner\nPart of the Security Fundamentals skill category. Use when working with xss vulnerability scanner functionality. Trigger with phrases like \"xss vulnerability scanner\", \"xss scanner\", \"xss\".","https:\u002F\u002Fgithub.com\u002Fjukeyman\u002Fjukeyman-skills\u002Fblob\u002Fmain\u002Fskills\u002Fxss-vulnerability-scanner\u002FSKILL.md",[],[]]