[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-sentry-linear-sdk-telemetry-labeler":3,"mdc-vuwsrz-key":38,"related-org-sentry-linear-sdk-telemetry-labeler":937,"related-repo-sentry-linear-sdk-telemetry-labeler":1117},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":27,"repoUrl":28,"updatedAt":29,"license":30,"forks":31,"topics":32,"repo":34,"sourceUrl":36,"mdContent":37},"linear-sdk-telemetry-labeler","classify and label Linear issues with telemetry data","Classify and apply SDK Telemetry labels to Linear issues based on their title and description. Use when triaging issues related to SDK telemetry signals: errors, traces, spans, profiles, replays, logs, metrics, cron checks, client reports, user feedbacks, or attachments. Triggers: \"sdk telemetry label\", \"telemetry labeler\", \"label telemetry issues\", \"tag telemetry\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"sentry","Sentry","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fsentry.png","getsentry",[13,17,20,23,26],{"name":14,"slug":15,"type":16},"Observability","observability","tag",{"name":18,"slug":19,"type":16},"Linear","linear",{"name":21,"slug":22,"type":16},"Triage","triage",{"name":24,"slug":25,"type":16},"SDK","sdk",{"name":9,"slug":8,"type":16},2,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fsdk-skills","2026-04-06T18:15:00.931727",null,0,[33],"tag-production",{"repoUrl":28,"stars":27,"forks":31,"topics":35,"description":30},[33],"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fsdk-skills\u002Ftree\u002FHEAD\u002Fplugins\u002Fsentry-sdk-skills\u002Fskills\u002Flinear-sdk-telemetry-labeler","---\nname: linear-sdk-telemetry-labeler\ndescription: >\n  Classify and apply SDK Telemetry labels to Linear issues based on their title and description.\n  Use when triaging issues related to SDK telemetry signals: errors, traces, spans, profiles,\n  replays, logs, metrics, cron checks, client reports, user feedbacks, or attachments.\n  Triggers: \"sdk telemetry label\", \"telemetry labeler\", \"label telemetry issues\", \"tag telemetry\".\nallowed-tools: mcp__linear-server__query_data mcp__linear-server__get_issue mcp__linear-server__save_issue AskUserQuestion\ncompatibility: Requires the Linear MCP server to be configured.\n---\n\n# Linear SDK Telemetry Labeler\n\nClassifies Linear issues and applies an **SDK Telemetry** label from the Sentry workspace's label\ntaxonomy based on the content of each issue's title and description.\n\n## Requirements\n\nThis skill requires the [Linear MCP server](https:\u002F\u002Fgithub.com\u002Flinear\u002Flinear-mcp) to be configured.\n\n## SDK Telemetry Label Reference\n\nSDK Telemetry labels in the Sentry workspace (workspace-level, not per-team):\n\n| Label | When to use |\n|---|---|\n| **Errors** | Error events, exception capture, crash reporting, error grouping, `captureException`, `captureMessage`, error payloads, fingerprinting |\n| **Traces** | Distributed tracing, trace context propagation, trace sampling, `sentry-trace` header, W3C `traceparent`\u002Fbaggage |\n| **Spans** | Span creation, span attributes\u002Ftags, auto-instrumentation producing spans, `startSpan`, span operations, OTel span APIs |\n| **Profiles** | Profiling, continuous profiling, function-level profiling, profiler lifecycle, profile envelope item |\n| **Replays** | Session replay, replay recording\u002Fcapture, `replayId`, rrweb integration, replay worker, replay envelope item |\n| **Logs** | Structured log capture, `sentry.logger`, `logger.info\u002Fwarn\u002Ferror`, log envelope item |\n| **Metrics** | Custom metrics, counters, gauges, histograms, distributions, `metrics.increment`, `metrics.gauge`, `metrics.distribution` |\n| **Checks** | Cron monitors, check-ins, `captureCheckIn`, monitor slugs, scheduled task tracking |\n| **Client Reports** | Client reports, discarded events reporting, envelope items for client reports, `sendClientReports` |\n| **User Feedbacks** | User feedback widget, feedback form, `captureFeedback`, crash reporter UI, `showReportDialog` |\n| **Attachments** | Attachments, file uploads, `addAttachment`, screenshot capture, view hierarchy dumps |\n\n## Workflow\n\n### Step 1 — Identify issues to process\n\nTwo modes:\n\n**A — List of Linear IDs provided** (e.g. `SDK-123, SDK-456`):\n- Fetch each issue by ID using `get_issue`. Skip the team-fetch step entirely.\n\n**B — No IDs provided**:\n- Infer the team: (1) current GitHub repository name — for the `getsentry` org the repo name\n  matches the Linear team name, (2) explicitly stated by the user, (3) if still ambiguous, ask.\n- Use `query_data` to list issues for the team, **including each issue's label IDs**.\n  Paginate (limit 50, use `cursor`) until done.\n\n### Step 2 — Fetch label IDs\n\nUse `query_data` to fetch workspace-level labels and build a UUID map:\n\n```\nquery_data: fetch all labels whose parent label name is \"SDK Telemetry\"\n→ build a map: { \"Errors\": \"\u003Cuuid>\", \"Spans\": \"\u003Cuuid>\", ... }\n```\n\nIf the workspace has no \"SDK Telemetry\" label group, surface that to the user before proceeding.\n\n### Step 3 — Filter candidates\n\nFilter issues client-side: keep only issues where none of the issue's label IDs appear in the\nStep 2 UUID map values (i.e., no SDK Telemetry label assigned yet).\n\nAnnounce the total candidate count before continuing. If there are more than 25 candidates,\nprocess in chunks of 25, confirming each chunk before the next.\n\n### Step 4 — Classify each issue\n\nFor each candidate issue, read its **title** and **description**. Apply heuristics in **priority\norder** — stop at the first match:\n\n1. Title or description mentions \"replay\", \"session replay\", \"rrweb\", \"replay recording\",\n   \"replay capture\" → **Replays**\n2. Title or description mentions \"profile\", \"profiling\", \"profiler\", \"continuous profil\" → **Profiles**\n3. Title or description mentions \"cron\", \"check-in\", \"checkin\", \"captureCheckIn\", \"monitor slug\",\n   \"scheduled task\" → **Checks**\n4. Title or description mentions \"client report\", \"discarded event\", \"sendClientReports\" → **Client Reports**\n5. Title or description mentions \"feedback\", \"showReportDialog\", \"captureFeedback\",\n   \"feedback widget\", \"crash reporter UI\" → **User Feedbacks**\n6. Title or description mentions \"attachment\", \"addAttachment\", \"screenshot capture\",\n   \"view hierarchy\" → **Attachments**\n7. Title or description mentions \"metric\", \"counter\", \"gauge\", \"histogram\", \"distribution\",\n   \"metrics.increment\", \"metrics.gauge\" → **Metrics**\n8. Title or description mentions \"log\", \"logger\", \"structured log\", \"sentry.logger\",\n   \"log envelope\" → **Logs**\n9. Title or description mentions \"span\", \"startSpan\", \"auto-instrument\", \"OTel span\",\n   \"span attribute\", \"span operation\" → **Spans**\n10. Title or description mentions \"trace\", \"tracing\", \"traceparent\", \"baggage\", \"sentry-trace\",\n    \"distributed trac\", \"trace propagat\", \"trace sampl\" → **Traces**\n11. Title or description mentions \"error\", \"exception\", \"crash\", \"captureException\",\n    \"captureMessage\", \"error group\", \"fingerprint\" → **Errors**\n\nWhen ambiguous between **Spans** and **Traces**: spans are individual units of work; traces are\nthe propagation\u002Fsampling\u002Fcontext layer. An issue about instrumenting a library → Spans. An issue\nabout `sentry-trace` header or sampling → Traces.\n\nWhen ambiguous between **Logs** and **Errors**: structured log capture → Logs. Error\u002Fexception\ncapture → Errors.\n\nAssign exactly one SDK Telemetry label. Mark confidence:\n- **High** — clear signal in title or description\n- **Low** — genuinely ambiguous; flag for human review, don't guess\n\n### Step 5 — Present the plan\n\nShow a summary table before writing anything:\n\n```\n| Issue   | Title                          | Proposed Label | Confidence          |\n|---------|--------------------------------|----------------|---------------------|\n| SDK-123 | Add span for DB queries        | Spans          | High                |\n| SDK-456 | Fix trace propagation in Fetch | Traces         | High                |\n| SDK-789 | Improve SDK startup            | —              | Low — please review |\n```\n\nAsk: *\"Should I apply these labels? Reply with any corrections (e.g. 'SDK-789 → Logs') and I'll\nupdate the plan before applying.\"*\n\nIf the user provides corrections, update the table and show the revised plan before proceeding.\n\n### Step 6 — Apply labels\n\nFor each approved classification:\n\n1. Call `get_issue` to fetch the issue's **current** label IDs immediately before writing\n2. Append the SDK Telemetry label UUID from the Step 2 map\n3. Call `save_issue` with the full combined label set\n\n> **Always re-fetch and always pass the full combined set.** Linear replaces labels on\n> update — labels added between Step 3 and now would be silently stripped if you use\n> the cached label list.\n\nReport as you go: \"SDK-123 → Spans\", \"SDK-456 → Traces\".\n\n## Edge Cases\n\n- **Issue already has an SDK Telemetry label:** Skip it; don't overwrite human classifications.\n- **Issue could belong to multiple signals:** Pick the most specific one (e.g., an issue about\n  replay span instrumentation → Replays, not Spans).\n- **Very short title, no description:** Flag as low-confidence; surface for human review.\n- **No clear telemetry signal:** Do not apply any label; flag for human review.\n",{"data":39,"body":42},{"name":4,"description":6,"allowed-tools":40,"compatibility":41},"mcp__linear-server__query_data mcp__linear-server__get_issue mcp__linear-server__save_issue AskUserQuestion","Requires the Linear MCP server to be configured.",{"type":43,"children":44},"root",[45,53,67,74,90,96,101,425,431,438,443,461,479,489,532,538,549,561,566,572,577,582,588,614,717,740,755,760,783,789,794,803,814,819,825,830,869,883,888,894],{"type":46,"tag":47,"props":48,"children":49},"element","h1",{"id":4},[50],{"type":51,"value":52},"text","Linear SDK Telemetry Labeler",{"type":46,"tag":54,"props":55,"children":56},"p",{},[57,59,65],{"type":51,"value":58},"Classifies Linear issues and applies an ",{"type":46,"tag":60,"props":61,"children":62},"strong",{},[63],{"type":51,"value":64},"SDK Telemetry",{"type":51,"value":66}," label from the Sentry workspace's label\ntaxonomy based on the content of each issue's title and description.",{"type":46,"tag":68,"props":69,"children":71},"h2",{"id":70},"requirements",[72],{"type":51,"value":73},"Requirements",{"type":46,"tag":54,"props":75,"children":76},{},[77,79,88],{"type":51,"value":78},"This skill requires the ",{"type":46,"tag":80,"props":81,"children":85},"a",{"href":82,"rel":83},"https:\u002F\u002Fgithub.com\u002Flinear\u002Flinear-mcp",[84],"nofollow",[86],{"type":51,"value":87},"Linear MCP server",{"type":51,"value":89}," to be configured.",{"type":46,"tag":68,"props":91,"children":93},{"id":92},"sdk-telemetry-label-reference",[94],{"type":51,"value":95},"SDK Telemetry Label Reference",{"type":46,"tag":54,"props":97,"children":98},{},[99],{"type":51,"value":100},"SDK Telemetry labels in the Sentry workspace (workspace-level, not per-team):",{"type":46,"tag":102,"props":103,"children":104},"table",{},[105,124],{"type":46,"tag":106,"props":107,"children":108},"thead",{},[109],{"type":46,"tag":110,"props":111,"children":112},"tr",{},[113,119],{"type":46,"tag":114,"props":115,"children":116},"th",{},[117],{"type":51,"value":118},"Label",{"type":46,"tag":114,"props":120,"children":121},{},[122],{"type":51,"value":123},"When to use",{"type":46,"tag":125,"props":126,"children":127},"tbody",{},[128,162,194,218,234,258,289,325,349,371,401],{"type":46,"tag":110,"props":129,"children":130},{},[131,140],{"type":46,"tag":132,"props":133,"children":134},"td",{},[135],{"type":46,"tag":60,"props":136,"children":137},{},[138],{"type":51,"value":139},"Errors",{"type":46,"tag":132,"props":141,"children":142},{},[143,145,152,154,160],{"type":51,"value":144},"Error events, exception capture, crash reporting, error grouping, ",{"type":46,"tag":146,"props":147,"children":149},"code",{"className":148},[],[150],{"type":51,"value":151},"captureException",{"type":51,"value":153},", ",{"type":46,"tag":146,"props":155,"children":157},{"className":156},[],[158],{"type":51,"value":159},"captureMessage",{"type":51,"value":161},", error payloads, fingerprinting",{"type":46,"tag":110,"props":163,"children":164},{},[165,173],{"type":46,"tag":132,"props":166,"children":167},{},[168],{"type":46,"tag":60,"props":169,"children":170},{},[171],{"type":51,"value":172},"Traces",{"type":46,"tag":132,"props":174,"children":175},{},[176,178,184,186,192],{"type":51,"value":177},"Distributed tracing, trace context propagation, trace sampling, ",{"type":46,"tag":146,"props":179,"children":181},{"className":180},[],[182],{"type":51,"value":183},"sentry-trace",{"type":51,"value":185}," header, W3C ",{"type":46,"tag":146,"props":187,"children":189},{"className":188},[],[190],{"type":51,"value":191},"traceparent",{"type":51,"value":193},"\u002Fbaggage",{"type":46,"tag":110,"props":195,"children":196},{},[197,205],{"type":46,"tag":132,"props":198,"children":199},{},[200],{"type":46,"tag":60,"props":201,"children":202},{},[203],{"type":51,"value":204},"Spans",{"type":46,"tag":132,"props":206,"children":207},{},[208,210,216],{"type":51,"value":209},"Span creation, span attributes\u002Ftags, auto-instrumentation producing spans, ",{"type":46,"tag":146,"props":211,"children":213},{"className":212},[],[214],{"type":51,"value":215},"startSpan",{"type":51,"value":217},", span operations, OTel span APIs",{"type":46,"tag":110,"props":219,"children":220},{},[221,229],{"type":46,"tag":132,"props":222,"children":223},{},[224],{"type":46,"tag":60,"props":225,"children":226},{},[227],{"type":51,"value":228},"Profiles",{"type":46,"tag":132,"props":230,"children":231},{},[232],{"type":51,"value":233},"Profiling, continuous profiling, function-level profiling, profiler lifecycle, profile envelope item",{"type":46,"tag":110,"props":235,"children":236},{},[237,245],{"type":46,"tag":132,"props":238,"children":239},{},[240],{"type":46,"tag":60,"props":241,"children":242},{},[243],{"type":51,"value":244},"Replays",{"type":46,"tag":132,"props":246,"children":247},{},[248,250,256],{"type":51,"value":249},"Session replay, replay recording\u002Fcapture, ",{"type":46,"tag":146,"props":251,"children":253},{"className":252},[],[254],{"type":51,"value":255},"replayId",{"type":51,"value":257},", rrweb integration, replay worker, replay envelope item",{"type":46,"tag":110,"props":259,"children":260},{},[261,269],{"type":46,"tag":132,"props":262,"children":263},{},[264],{"type":46,"tag":60,"props":265,"children":266},{},[267],{"type":51,"value":268},"Logs",{"type":46,"tag":132,"props":270,"children":271},{},[272,274,280,281,287],{"type":51,"value":273},"Structured log capture, ",{"type":46,"tag":146,"props":275,"children":277},{"className":276},[],[278],{"type":51,"value":279},"sentry.logger",{"type":51,"value":153},{"type":46,"tag":146,"props":282,"children":284},{"className":283},[],[285],{"type":51,"value":286},"logger.info\u002Fwarn\u002Ferror",{"type":51,"value":288},", log envelope item",{"type":46,"tag":110,"props":290,"children":291},{},[292,300],{"type":46,"tag":132,"props":293,"children":294},{},[295],{"type":46,"tag":60,"props":296,"children":297},{},[298],{"type":51,"value":299},"Metrics",{"type":46,"tag":132,"props":301,"children":302},{},[303,305,311,312,318,319],{"type":51,"value":304},"Custom metrics, counters, gauges, histograms, distributions, ",{"type":46,"tag":146,"props":306,"children":308},{"className":307},[],[309],{"type":51,"value":310},"metrics.increment",{"type":51,"value":153},{"type":46,"tag":146,"props":313,"children":315},{"className":314},[],[316],{"type":51,"value":317},"metrics.gauge",{"type":51,"value":153},{"type":46,"tag":146,"props":320,"children":322},{"className":321},[],[323],{"type":51,"value":324},"metrics.distribution",{"type":46,"tag":110,"props":326,"children":327},{},[328,336],{"type":46,"tag":132,"props":329,"children":330},{},[331],{"type":46,"tag":60,"props":332,"children":333},{},[334],{"type":51,"value":335},"Checks",{"type":46,"tag":132,"props":337,"children":338},{},[339,341,347],{"type":51,"value":340},"Cron monitors, check-ins, ",{"type":46,"tag":146,"props":342,"children":344},{"className":343},[],[345],{"type":51,"value":346},"captureCheckIn",{"type":51,"value":348},", monitor slugs, scheduled task tracking",{"type":46,"tag":110,"props":350,"children":351},{},[352,360],{"type":46,"tag":132,"props":353,"children":354},{},[355],{"type":46,"tag":60,"props":356,"children":357},{},[358],{"type":51,"value":359},"Client Reports",{"type":46,"tag":132,"props":361,"children":362},{},[363,365],{"type":51,"value":364},"Client reports, discarded events reporting, envelope items for client reports, ",{"type":46,"tag":146,"props":366,"children":368},{"className":367},[],[369],{"type":51,"value":370},"sendClientReports",{"type":46,"tag":110,"props":372,"children":373},{},[374,382],{"type":46,"tag":132,"props":375,"children":376},{},[377],{"type":46,"tag":60,"props":378,"children":379},{},[380],{"type":51,"value":381},"User Feedbacks",{"type":46,"tag":132,"props":383,"children":384},{},[385,387,393,395],{"type":51,"value":386},"User feedback widget, feedback form, ",{"type":46,"tag":146,"props":388,"children":390},{"className":389},[],[391],{"type":51,"value":392},"captureFeedback",{"type":51,"value":394},", crash reporter UI, ",{"type":46,"tag":146,"props":396,"children":398},{"className":397},[],[399],{"type":51,"value":400},"showReportDialog",{"type":46,"tag":110,"props":402,"children":403},{},[404,412],{"type":46,"tag":132,"props":405,"children":406},{},[407],{"type":46,"tag":60,"props":408,"children":409},{},[410],{"type":51,"value":411},"Attachments",{"type":46,"tag":132,"props":413,"children":414},{},[415,417,423],{"type":51,"value":416},"Attachments, file uploads, ",{"type":46,"tag":146,"props":418,"children":420},{"className":419},[],[421],{"type":51,"value":422},"addAttachment",{"type":51,"value":424},", screenshot capture, view hierarchy dumps",{"type":46,"tag":68,"props":426,"children":428},{"id":427},"workflow",[429],{"type":51,"value":430},"Workflow",{"type":46,"tag":432,"props":433,"children":435},"h3",{"id":434},"step-1-identify-issues-to-process",[436],{"type":51,"value":437},"Step 1 — Identify issues to process",{"type":46,"tag":54,"props":439,"children":440},{},[441],{"type":51,"value":442},"Two modes:",{"type":46,"tag":54,"props":444,"children":445},{},[446,451,453,459],{"type":46,"tag":60,"props":447,"children":448},{},[449],{"type":51,"value":450},"A — List of Linear IDs provided",{"type":51,"value":452}," (e.g. ",{"type":46,"tag":146,"props":454,"children":456},{"className":455},[],[457],{"type":51,"value":458},"SDK-123, SDK-456",{"type":51,"value":460},"):",{"type":46,"tag":462,"props":463,"children":464},"ul",{},[465],{"type":46,"tag":466,"props":467,"children":468},"li",{},[469,471,477],{"type":51,"value":470},"Fetch each issue by ID using ",{"type":46,"tag":146,"props":472,"children":474},{"className":473},[],[475],{"type":51,"value":476},"get_issue",{"type":51,"value":478},". Skip the team-fetch step entirely.",{"type":46,"tag":54,"props":480,"children":481},{},[482,487],{"type":46,"tag":60,"props":483,"children":484},{},[485],{"type":51,"value":486},"B — No IDs provided",{"type":51,"value":488},":",{"type":46,"tag":462,"props":490,"children":491},{},[492,504],{"type":46,"tag":466,"props":493,"children":494},{},[495,497,502],{"type":51,"value":496},"Infer the team: (1) current GitHub repository name — for the ",{"type":46,"tag":146,"props":498,"children":500},{"className":499},[],[501],{"type":51,"value":11},{"type":51,"value":503}," org the repo name\nmatches the Linear team name, (2) explicitly stated by the user, (3) if still ambiguous, ask.",{"type":46,"tag":466,"props":505,"children":506},{},[507,509,515,517,522,524,530],{"type":51,"value":508},"Use ",{"type":46,"tag":146,"props":510,"children":512},{"className":511},[],[513],{"type":51,"value":514},"query_data",{"type":51,"value":516}," to list issues for the team, ",{"type":46,"tag":60,"props":518,"children":519},{},[520],{"type":51,"value":521},"including each issue's label IDs",{"type":51,"value":523},".\nPaginate (limit 50, use ",{"type":46,"tag":146,"props":525,"children":527},{"className":526},[],[528],{"type":51,"value":529},"cursor",{"type":51,"value":531},") until done.",{"type":46,"tag":432,"props":533,"children":535},{"id":534},"step-2-fetch-label-ids",[536],{"type":51,"value":537},"Step 2 — Fetch label IDs",{"type":46,"tag":54,"props":539,"children":540},{},[541,542,547],{"type":51,"value":508},{"type":46,"tag":146,"props":543,"children":545},{"className":544},[],[546],{"type":51,"value":514},{"type":51,"value":548}," to fetch workspace-level labels and build a UUID map:",{"type":46,"tag":550,"props":551,"children":555},"pre",{"className":552,"code":554,"language":51},[553],"language-text","query_data: fetch all labels whose parent label name is \"SDK Telemetry\"\n→ build a map: { \"Errors\": \"\u003Cuuid>\", \"Spans\": \"\u003Cuuid>\", ... }\n",[556],{"type":46,"tag":146,"props":557,"children":559},{"__ignoreMap":558},"",[560],{"type":51,"value":554},{"type":46,"tag":54,"props":562,"children":563},{},[564],{"type":51,"value":565},"If the workspace has no \"SDK Telemetry\" label group, surface that to the user before proceeding.",{"type":46,"tag":432,"props":567,"children":569},{"id":568},"step-3-filter-candidates",[570],{"type":51,"value":571},"Step 3 — Filter candidates",{"type":46,"tag":54,"props":573,"children":574},{},[575],{"type":51,"value":576},"Filter issues client-side: keep only issues where none of the issue's label IDs appear in the\nStep 2 UUID map values (i.e., no SDK Telemetry label assigned yet).",{"type":46,"tag":54,"props":578,"children":579},{},[580],{"type":51,"value":581},"Announce the total candidate count before continuing. If there are more than 25 candidates,\nprocess in chunks of 25, confirming each chunk before the next.",{"type":46,"tag":432,"props":583,"children":585},{"id":584},"step-4-classify-each-issue",[586],{"type":51,"value":587},"Step 4 — Classify each issue",{"type":46,"tag":54,"props":589,"children":590},{},[591,593,598,600,605,607,612],{"type":51,"value":592},"For each candidate issue, read its ",{"type":46,"tag":60,"props":594,"children":595},{},[596],{"type":51,"value":597},"title",{"type":51,"value":599}," and ",{"type":46,"tag":60,"props":601,"children":602},{},[603],{"type":51,"value":604},"description",{"type":51,"value":606},". Apply heuristics in ",{"type":46,"tag":60,"props":608,"children":609},{},[610],{"type":51,"value":611},"priority\norder",{"type":51,"value":613}," — stop at the first match:",{"type":46,"tag":615,"props":616,"children":617},"ol",{},[618,627,636,645,654,663,672,681,690,699,708],{"type":46,"tag":466,"props":619,"children":620},{},[621,623],{"type":51,"value":622},"Title or description mentions \"replay\", \"session replay\", \"rrweb\", \"replay recording\",\n\"replay capture\" → ",{"type":46,"tag":60,"props":624,"children":625},{},[626],{"type":51,"value":244},{"type":46,"tag":466,"props":628,"children":629},{},[630,632],{"type":51,"value":631},"Title or description mentions \"profile\", \"profiling\", \"profiler\", \"continuous profil\" → ",{"type":46,"tag":60,"props":633,"children":634},{},[635],{"type":51,"value":228},{"type":46,"tag":466,"props":637,"children":638},{},[639,641],{"type":51,"value":640},"Title or description mentions \"cron\", \"check-in\", \"checkin\", \"captureCheckIn\", \"monitor slug\",\n\"scheduled task\" → ",{"type":46,"tag":60,"props":642,"children":643},{},[644],{"type":51,"value":335},{"type":46,"tag":466,"props":646,"children":647},{},[648,650],{"type":51,"value":649},"Title or description mentions \"client report\", \"discarded event\", \"sendClientReports\" → ",{"type":46,"tag":60,"props":651,"children":652},{},[653],{"type":51,"value":359},{"type":46,"tag":466,"props":655,"children":656},{},[657,659],{"type":51,"value":658},"Title or description mentions \"feedback\", \"showReportDialog\", \"captureFeedback\",\n\"feedback widget\", \"crash reporter UI\" → ",{"type":46,"tag":60,"props":660,"children":661},{},[662],{"type":51,"value":381},{"type":46,"tag":466,"props":664,"children":665},{},[666,668],{"type":51,"value":667},"Title or description mentions \"attachment\", \"addAttachment\", \"screenshot capture\",\n\"view hierarchy\" → ",{"type":46,"tag":60,"props":669,"children":670},{},[671],{"type":51,"value":411},{"type":46,"tag":466,"props":673,"children":674},{},[675,677],{"type":51,"value":676},"Title or description mentions \"metric\", \"counter\", \"gauge\", \"histogram\", \"distribution\",\n\"metrics.increment\", \"metrics.gauge\" → ",{"type":46,"tag":60,"props":678,"children":679},{},[680],{"type":51,"value":299},{"type":46,"tag":466,"props":682,"children":683},{},[684,686],{"type":51,"value":685},"Title or description mentions \"log\", \"logger\", \"structured log\", \"sentry.logger\",\n\"log envelope\" → ",{"type":46,"tag":60,"props":687,"children":688},{},[689],{"type":51,"value":268},{"type":46,"tag":466,"props":691,"children":692},{},[693,695],{"type":51,"value":694},"Title or description mentions \"span\", \"startSpan\", \"auto-instrument\", \"OTel span\",\n\"span attribute\", \"span operation\" → ",{"type":46,"tag":60,"props":696,"children":697},{},[698],{"type":51,"value":204},{"type":46,"tag":466,"props":700,"children":701},{},[702,704],{"type":51,"value":703},"Title or description mentions \"trace\", \"tracing\", \"traceparent\", \"baggage\", \"sentry-trace\",\n\"distributed trac\", \"trace propagat\", \"trace sampl\" → ",{"type":46,"tag":60,"props":705,"children":706},{},[707],{"type":51,"value":172},{"type":46,"tag":466,"props":709,"children":710},{},[711,713],{"type":51,"value":712},"Title or description mentions \"error\", \"exception\", \"crash\", \"captureException\",\n\"captureMessage\", \"error group\", \"fingerprint\" → ",{"type":46,"tag":60,"props":714,"children":715},{},[716],{"type":51,"value":139},{"type":46,"tag":54,"props":718,"children":719},{},[720,722,726,727,731,733,738],{"type":51,"value":721},"When ambiguous between ",{"type":46,"tag":60,"props":723,"children":724},{},[725],{"type":51,"value":204},{"type":51,"value":599},{"type":46,"tag":60,"props":728,"children":729},{},[730],{"type":51,"value":172},{"type":51,"value":732},": spans are individual units of work; traces are\nthe propagation\u002Fsampling\u002Fcontext layer. An issue about instrumenting a library → Spans. An issue\nabout ",{"type":46,"tag":146,"props":734,"children":736},{"className":735},[],[737],{"type":51,"value":183},{"type":51,"value":739}," header or sampling → Traces.",{"type":46,"tag":54,"props":741,"children":742},{},[743,744,748,749,753],{"type":51,"value":721},{"type":46,"tag":60,"props":745,"children":746},{},[747],{"type":51,"value":268},{"type":51,"value":599},{"type":46,"tag":60,"props":750,"children":751},{},[752],{"type":51,"value":139},{"type":51,"value":754},": structured log capture → Logs. Error\u002Fexception\ncapture → Errors.",{"type":46,"tag":54,"props":756,"children":757},{},[758],{"type":51,"value":759},"Assign exactly one SDK Telemetry label. Mark confidence:",{"type":46,"tag":462,"props":761,"children":762},{},[763,773],{"type":46,"tag":466,"props":764,"children":765},{},[766,771],{"type":46,"tag":60,"props":767,"children":768},{},[769],{"type":51,"value":770},"High",{"type":51,"value":772}," — clear signal in title or description",{"type":46,"tag":466,"props":774,"children":775},{},[776,781],{"type":46,"tag":60,"props":777,"children":778},{},[779],{"type":51,"value":780},"Low",{"type":51,"value":782}," — genuinely ambiguous; flag for human review, don't guess",{"type":46,"tag":432,"props":784,"children":786},{"id":785},"step-5-present-the-plan",[787],{"type":51,"value":788},"Step 5 — Present the plan",{"type":46,"tag":54,"props":790,"children":791},{},[792],{"type":51,"value":793},"Show a summary table before writing anything:",{"type":46,"tag":550,"props":795,"children":798},{"className":796,"code":797,"language":51},[553],"| Issue   | Title                          | Proposed Label | Confidence          |\n|---------|--------------------------------|----------------|---------------------|\n| SDK-123 | Add span for DB queries        | Spans          | High                |\n| SDK-456 | Fix trace propagation in Fetch | Traces         | High                |\n| SDK-789 | Improve SDK startup            | —              | Low — please review |\n",[799],{"type":46,"tag":146,"props":800,"children":801},{"__ignoreMap":558},[802],{"type":51,"value":797},{"type":46,"tag":54,"props":804,"children":805},{},[806,808],{"type":51,"value":807},"Ask: ",{"type":46,"tag":809,"props":810,"children":811},"em",{},[812],{"type":51,"value":813},"\"Should I apply these labels? Reply with any corrections (e.g. 'SDK-789 → Logs') and I'll\nupdate the plan before applying.\"",{"type":46,"tag":54,"props":815,"children":816},{},[817],{"type":51,"value":818},"If the user provides corrections, update the table and show the revised plan before proceeding.",{"type":46,"tag":432,"props":820,"children":822},{"id":821},"step-6-apply-labels",[823],{"type":51,"value":824},"Step 6 — Apply labels",{"type":46,"tag":54,"props":826,"children":827},{},[828],{"type":51,"value":829},"For each approved classification:",{"type":46,"tag":615,"props":831,"children":832},{},[833,852,857],{"type":46,"tag":466,"props":834,"children":835},{},[836,838,843,845,850],{"type":51,"value":837},"Call ",{"type":46,"tag":146,"props":839,"children":841},{"className":840},[],[842],{"type":51,"value":476},{"type":51,"value":844}," to fetch the issue's ",{"type":46,"tag":60,"props":846,"children":847},{},[848],{"type":51,"value":849},"current",{"type":51,"value":851}," label IDs immediately before writing",{"type":46,"tag":466,"props":853,"children":854},{},[855],{"type":51,"value":856},"Append the SDK Telemetry label UUID from the Step 2 map",{"type":46,"tag":466,"props":858,"children":859},{},[860,861,867],{"type":51,"value":837},{"type":46,"tag":146,"props":862,"children":864},{"className":863},[],[865],{"type":51,"value":866},"save_issue",{"type":51,"value":868}," with the full combined label set",{"type":46,"tag":870,"props":871,"children":872},"blockquote",{},[873],{"type":46,"tag":54,"props":874,"children":875},{},[876,881],{"type":46,"tag":60,"props":877,"children":878},{},[879],{"type":51,"value":880},"Always re-fetch and always pass the full combined set.",{"type":51,"value":882}," Linear replaces labels on\nupdate — labels added between Step 3 and now would be silently stripped if you use\nthe cached label list.",{"type":46,"tag":54,"props":884,"children":885},{},[886],{"type":51,"value":887},"Report as you go: \"SDK-123 → Spans\", \"SDK-456 → Traces\".",{"type":46,"tag":68,"props":889,"children":891},{"id":890},"edge-cases",[892],{"type":51,"value":893},"Edge Cases",{"type":46,"tag":462,"props":895,"children":896},{},[897,907,917,927],{"type":46,"tag":466,"props":898,"children":899},{},[900,905],{"type":46,"tag":60,"props":901,"children":902},{},[903],{"type":51,"value":904},"Issue already has an SDK Telemetry label:",{"type":51,"value":906}," Skip it; don't overwrite human classifications.",{"type":46,"tag":466,"props":908,"children":909},{},[910,915],{"type":46,"tag":60,"props":911,"children":912},{},[913],{"type":51,"value":914},"Issue could belong to multiple signals:",{"type":51,"value":916}," Pick the most specific one (e.g., an issue about\nreplay span instrumentation → Replays, not Spans).",{"type":46,"tag":466,"props":918,"children":919},{},[920,925],{"type":46,"tag":60,"props":921,"children":922},{},[923],{"type":51,"value":924},"Very short title, no description:",{"type":51,"value":926}," Flag as low-confidence; surface for human review.",{"type":46,"tag":466,"props":928,"children":929},{},[930,935],{"type":46,"tag":60,"props":931,"children":932},{},[933],{"type":51,"value":934},"No clear telemetry signal:",{"type":51,"value":936}," Do not apply any label; flag for human review.",{"items":938,"total":1116},[939,964,978,993,1007,1024,1040,1054,1064,1075,1085,1103],{"slug":940,"name":940,"fn":941,"description":942,"org":943,"tags":944,"stars":961,"repoUrl":962,"updatedAt":963},"xcodebuildmcp","build and test Apple apps with XcodeBuildMCP","Official skill for XcodeBuildMCP. Use when doing iOS\u002FmacOS\u002FwatchOS\u002FtvOS\u002FvisionOS work (build, test, run, debug, log, UI automation).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[945,948,951,954,955,958],{"name":946,"slug":947,"type":16},"Debugging","debugging",{"name":949,"slug":950,"type":16},"iOS","ios",{"name":952,"slug":953,"type":16},"macOS","macos",{"name":9,"slug":8,"type":16},{"name":956,"slug":957,"type":16},"Testing","testing",{"name":959,"slug":960,"type":16},"Xcode","xcode",6176,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002FXcodeBuildMCP","2026-04-06T18:13:34.8719",{"slug":965,"name":965,"fn":966,"description":967,"org":968,"tags":969,"stars":961,"repoUrl":962,"updatedAt":977},"xcodebuildmcp-cli","build and test Apple apps via CLI","Official skill for the XcodeBuildMCP CLI. Use when doing iOS\u002FmacOS\u002FwatchOS\u002FtvOS\u002FvisionOS work (build, test, run, debug, log, UI automation).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[970,973,974,975,976],{"name":971,"slug":972,"type":16},"CLI","cli",{"name":949,"slug":950,"type":16},{"name":952,"slug":953,"type":16},{"name":956,"slug":957,"type":16},{"name":959,"slug":960,"type":16},"2026-04-06T18:13:36.13414",{"slug":979,"name":979,"fn":980,"description":981,"org":982,"tags":983,"stars":990,"repoUrl":991,"updatedAt":992},"agents-md","maintain project instruction files","Creates and maintains concise AGENTS.md and CLAUDE.md project instruction files. Use when asked to create AGENTS.md, update AGENTS.md, maintain agent docs, set up CLAUDE.md, document repository agent conventions, or keep coding-agent instructions minimal and reference-backed.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[984,987],{"name":985,"slug":986,"type":16},"Documentation","documentation",{"name":988,"slug":989,"type":16},"Engineering","engineering",861,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills","2026-05-15T06:16:29.695991",{"slug":994,"name":994,"fn":995,"description":996,"org":997,"tags":998,"stars":990,"repoUrl":991,"updatedAt":1006},"blog-writing-guide","write and review engineering blog posts","Write, review, and improve blog posts for the Sentry engineering blog following Sentry's specific writing standards, voice, and quality bar. Use this skill whenever someone asks to write a blog post, draft a technical article, review blog content, improve a draft, write a product announcement, create an engineering deep-dive, or produce any written content destined for the Sentry blog or developer audience. Also trigger when the user mentions \"blog post,\" \"blog draft,\" \"write-up,\" \"announcement post,\" \"engineering post,\" \"deep dive,\" \"postmortem,\" or asks for help with technical writing for Sentry. Even if the user just says \"help me write about [feature\u002Ftopic]\" — if it sounds like it could become a Sentry blog post, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[999,1002,1003],{"name":1000,"slug":1001,"type":16},"Communications","communications",{"name":9,"slug":8,"type":16},{"name":1004,"slug":1005,"type":16},"Technical Writing","technical-writing","2026-05-15T06:16:33.38217",{"slug":1008,"name":1008,"fn":1009,"description":1010,"org":1011,"tags":1012,"stars":990,"repoUrl":991,"updatedAt":1023},"brand-guidelines","write copy following Sentry brand guidelines","Write copy following Sentry brand guidelines. Use when writing UI text, error messages, empty states, onboarding flows, 404 pages, documentation, marketing copy, or any user-facing content. Covers both Plain Speech (default) and Sentry Voice tones.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1013,1016,1019,1020],{"name":1014,"slug":1015,"type":16},"Branding","branding",{"name":1017,"slug":1018,"type":16},"Content Creation","content-creation",{"name":9,"slug":8,"type":16},{"name":1021,"slug":1022,"type":16},"UX Copy","ux-copy","2026-05-15T06:16:22.395707",{"slug":1025,"name":1025,"fn":1026,"description":1027,"org":1028,"tags":1029,"stars":990,"repoUrl":991,"updatedAt":1039},"claude-settings-audit","generate Claude Code settings permissions","Analyze a repository to generate recommended Claude Code settings.json permissions. Use when setting up a new project, auditing existing settings, or determining which read-only bash commands to allow. Detects tech stack, build tools, and monorepo structure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1030,1033,1036],{"name":1031,"slug":1032,"type":16},"Claude Code","claude-code",{"name":1034,"slug":1035,"type":16},"Configuration","configuration",{"name":1037,"slug":1038,"type":16},"Security","security","2026-05-15T06:16:44.335977",{"slug":1041,"name":1041,"fn":1042,"description":1043,"org":1044,"tags":1045,"stars":990,"repoUrl":991,"updatedAt":1053},"code-review","perform code reviews for Sentry projects","Perform code reviews following Sentry engineering practices. Use when reviewing pull requests, examining code changes, or providing feedback on code quality. Covers security, performance, testing, and design review.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1046,1048,1049,1052],{"name":1047,"slug":1041,"type":16},"Code Review",{"name":988,"slug":989,"type":16},{"name":1050,"slug":1051,"type":16},"Performance","performance",{"name":1037,"slug":1038,"type":16},"2026-05-15T06:16:35.824864",{"slug":1055,"name":1055,"fn":1056,"description":1057,"org":1058,"tags":1059,"stars":990,"repoUrl":991,"updatedAt":1063},"code-simplifier","simplify and refine source code","Simplifies and refines code for clarity, consistency, and maintainability while preserving all functionality. Use when asked to \"simplify code\", \"clean up code\", \"refactor for clarity\", \"improve readability\", or review recently modified code for elegance. Focuses on project-specific best practices.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1060],{"name":1061,"slug":1062,"type":16},"Code Analysis","code-analysis","2026-05-15T06:16:32.127981",{"slug":1065,"name":1065,"fn":1066,"description":1067,"org":1068,"tags":1069,"stars":990,"repoUrl":991,"updatedAt":1074},"commit","create commits with Sentry conventions","Use for every request to commit changes or draft a commit message. Creates Sentry-style conventional commits with issue references.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1070,1073],{"name":1071,"slug":1072,"type":16},"Git","git",{"name":9,"slug":8,"type":16},"2026-07-18T05:15:10.723937",{"slug":1076,"name":1076,"fn":1077,"description":1078,"org":1079,"tags":1080,"stars":990,"repoUrl":991,"updatedAt":1084},"create-branch","create git branches for Sentry workflows","Create a git branch following Sentry naming conventions. Use when asked to \"create a branch\", \"new branch\", \"start a branch\", \"make a branch\", \"switch to a new branch\", or when starting new work on the default branch.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1081,1082,1083],{"name":988,"slug":989,"type":16},{"name":1071,"slug":1072,"type":16},{"name":9,"slug":8,"type":16},"2026-05-15T06:16:39.458431",{"slug":1086,"name":1086,"fn":1087,"description":1088,"org":1089,"tags":1090,"stars":990,"repoUrl":991,"updatedAt":1102},"django-access-review","review Django access control and IDOR","Django access control and IDOR security review. Use when reviewing Django views, DRF viewsets, ORM queries, or any Python\u002FDjango code handling user authorization. Trigger keywords: \"IDOR\", \"access control\", \"authorization\", \"Django permissions\", \"object permissions\", \"tenant isolation\", \"broken access\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1091,1094,1095,1098,1101],{"name":1092,"slug":1093,"type":16},"Access Control","access-control",{"name":1061,"slug":1062,"type":16},{"name":1096,"slug":1097,"type":16},"Django","django",{"name":1099,"slug":1100,"type":16},"Python","python",{"name":1037,"slug":1038,"type":16},"2026-05-15T06:16:43.098698",{"slug":1104,"name":1104,"fn":1105,"description":1106,"org":1107,"tags":1108,"stars":990,"repoUrl":991,"updatedAt":1115},"django-perf-review","review and optimize Django performance","Django performance code review. Use when asked to \"review Django performance\", \"find N+1 queries\", \"optimize Django\", \"check queryset performance\", \"database performance\", \"Django ORM issues\", or audit Django code for performance problems.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1109,1110,1113,1114],{"name":1047,"slug":1041,"type":16},{"name":1111,"slug":1112,"type":16},"Database","database",{"name":1096,"slug":1097,"type":16},{"name":1050,"slug":1051,"type":16},"2026-05-15T06:16:24.832813",88,{"items":1118,"total":1210},[1119,1132,1147,1162,1170,1181,1194],{"slug":1120,"name":1120,"fn":1121,"description":1122,"org":1123,"tags":1124,"stars":27,"repoUrl":28,"updatedAt":1131},"contributing-md","generate standardized CONTRIBUTING.md files","Generate or align a CONTRIBUTING.md for a Sentry SDK repository with the develop.sentry.dev standard template. Use when asked to \"create contributing.md\", \"update contributing.md\", \"align contributing docs\", \"standardize contributor docs\", or when the contributing guide is outdated, missing sections, or does not exist.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1125,1126,1129,1130],{"name":985,"slug":986,"type":16},{"name":1127,"slug":1128,"type":16},"GitHub","github",{"name":9,"slug":8,"type":16},{"name":1004,"slug":1005,"type":16},"2026-04-06T18:14:57.157686",{"slug":1133,"name":1133,"fn":1134,"description":1135,"org":1136,"tags":1137,"stars":27,"repoUrl":28,"updatedAt":1146},"daily-update","generate async daily standup updates","Generate a formatted async daily standup message for the Sentry SDK team channel. Use when asked to create a \"daily update\", \"async daily\", \"standup update\", or \"async team update\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1138,1139,1142,1143],{"name":1000,"slug":1001,"type":16},{"name":1140,"slug":1141,"type":16},"Productivity","productivity",{"name":9,"slug":8,"type":16},{"name":1144,"slug":1145,"type":16},"Standup","standup","2026-04-06T18:14:53.472546",{"slug":1148,"name":1148,"fn":1149,"description":1150,"org":1151,"tags":1152,"stars":27,"repoUrl":28,"updatedAt":1161},"linear-initiative","create Linear projects from initiatives","Creates Linear projects for SDK repositories based on a Linear initiative. Use when rolling out a feature across multiple SDKs, creating SDK projects from initiative, or setting up cross-SDK alignment work.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1153,1156,1159,1160],{"name":1154,"slug":1155,"type":16},"Operations","operations",{"name":1157,"slug":1158,"type":16},"Product Management","product-management",{"name":24,"slug":25,"type":16},{"name":9,"slug":8,"type":16},"2026-04-06T18:14:54.704594",{"slug":4,"name":4,"fn":5,"description":6,"org":1163,"tags":1164,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1165,1166,1167,1168,1169],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},{"slug":1171,"name":1171,"fn":1172,"description":1173,"org":1174,"tags":1175,"stars":27,"repoUrl":28,"updatedAt":1180},"linear-type-labeler","classify and label Linear issues","Classify and apply Type labels to Linear issues based on their title and description.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1176,1177,1178,1179],{"name":1154,"slug":1155,"type":16},{"name":1140,"slug":1141,"type":16},{"name":9,"slug":8,"type":16},{"name":21,"slug":22,"type":16},"2026-04-06T18:14:58.40989",{"slug":1182,"name":1182,"fn":1183,"description":1184,"org":1185,"tags":1186,"stars":27,"repoUrl":28,"updatedAt":1193},"sdk-feature-implementation","implement features across Sentry SDKs","Implement a feature across Sentry SDK repositories by spawning parallel agents. Use when you have Linear initiatives\u002Fprojects\u002Fissues and want to create draft PRs. Triggers on \"implement across SDKs\", \"spawn SDK agents\", \"SDK implementation\", \"parallel SDK implementation\", \"continue SDK rollout\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1187,1188,1191,1192],{"name":1154,"slug":1155,"type":16},{"name":1189,"slug":1190,"type":16},"Pull Requests","pull-requests",{"name":24,"slug":25,"type":16},{"name":9,"slug":8,"type":16},"2026-04-06T18:14:55.930879",{"slug":1195,"name":1195,"fn":1196,"description":1197,"org":1198,"tags":1199,"stars":27,"repoUrl":28,"updatedAt":1209},"span-convention-review","review OTel tracing span changes","Review OpenTelemetry tracing span changes in SDK repositories for conformance to Sentry Conventions and OTel Semantic Conventions. Use when reviewing span instrumentation, \"review spans\", \"check span conventions\", \"span review\", \"OTel span check\", \"tracing convention review\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1200,1201,1202,1205,1206],{"name":1047,"slug":1041,"type":16},{"name":14,"slug":15,"type":16},{"name":1203,"slug":1204,"type":16},"OpenTelemetry","opentelemetry",{"name":9,"slug":8,"type":16},{"name":1207,"slug":1208,"type":16},"Tracing","tracing","2026-04-06T18:14:59.655998",7]