[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-sentry-span-convention-review":3,"mdc-cri81v-key":38,"related-org-sentry-span-convention-review":1079,"related-repo-sentry-span-convention-review":1256},{"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},"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},"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},"Tracing","tracing","tag",{"name":18,"slug":19,"type":16},"Observability","observability",{"name":21,"slug":22,"type":16},"Code Review","code-review",{"name":24,"slug":25,"type":16},"OpenTelemetry","opentelemetry",{"name":9,"slug":8,"type":16},2,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fsdk-skills","2026-04-06T18:14:59.655998",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\u002Fspan-convention-review","---\nname: span-convention-review\ndescription: 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\".\nmodel: opus\nallowed-tools: Read Grep Glob Bash WebFetch\n---\n\n# Span Convention Review\n\nReview changes in SDK repositories that involve OpenTelemetry tracing spans to ensure they conform to Sentry Conventions and, where Sentry conventions are underspecified, to OpenTelemetry Semantic Conventions.\n\n## Step 1: Identify Span Changes\n\nFind all span-related changes in the current branch compared to the base branch:\n\n```bash\ngit diff main...HEAD\n```\n\nLook for patterns indicating span creation or modification:\n- `start_span`, `start_child`, `startSpan`, `StartSpan`\n- `op=`, `op:`, setting span operation names\n- `set_data`, `set_attribute`, `setAttribute`, `SetAttribute`\n- `description=`, `name=`, span naming\n- `SPANDATA.`, `SpanData.`, span data constants\n- `OP.`, span operation constants\n- References to `gen_ai.`, `db.`, `http.`, `cache.`, `queue.`, `messaging.`, `resource.`, `ui.`\n\nIf no diff is available, ask the user which files or changes to review.\n\n## Step 2: Classify Spans by Module\n\nDetermine which Sentry Insights Module each span belongs to based on its operation prefix. Use this mapping to identify the relevant convention URLs:\n\n| Op Prefix \u002F Pattern | Sentry Module | Sentry Convention URL | OTel Semconv URL |\n|---|---|---|---|\n| `gen_ai.*` | AI Agents | https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fai-agents\u002F | https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fgen-ai\u002F |\n| `db.*`, `db.sql.*` | Queries | https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fqueries\u002F | https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fdatabase\u002F |\n| `http.client` | Requests | https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Frequests\u002F | https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fhttp\u002Fhttp-spans\u002F |\n| `cache.*` | Caches | https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fcaches\u002F | N\u002FA |\n| `queue.*` | Queues | https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fqueues\u002F | https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fmessaging\u002F |\n| `resource.script`, `resource.css`, `resource.img` | Assets | https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fassets\u002F | N\u002FA |\n| `app.start.*` | App Starts | https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fapp-starts\u002F | N\u002FA |\n| `ui.load*` | Screen Loads | https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fscreen-loads\u002F | N\u002FA |\n| `ui.interaction.*` | Web Vitals | https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fweb-vitals\u002F | N\u002FA |\n\n## Step 3: Fetch Current Conventions\n\nFor each module identified in Step 2, use `WebFetch` to retrieve the **Sentry Convention page** from the URL in the table above. Sentry conventions are the primary authority.\n\nIf the Sentry convention page is underspecified for a particular attribute, span name format, or operation pattern, also fetch the corresponding **OTel Semantic Conventions page** for supplementary guidance.\n\n**Do not assume or hardcode convention details.** Always fetch the live documentation to ensure you are reviewing against the latest version.\n\n## Step 4: Review Each Span\n\nFor each span change, verify conformance against the fetched conventions for its module. Check the following categories:\n\n### 4a. Span Operation (`op`)\nVerify the `op` value matches the expected pattern defined in the fetched Sentry convention for the module.\n\n### 4b. Span Name \u002F Description\nVerify the span name follows the format specified in the fetched convention.\n\n### 4c. Required Attributes\nVerify all required span data attributes listed in the fetched convention are set.\n\n### 4d. Optional\u002FRecommended Attributes\nFlag if commonly expected optional attributes (listed in the fetched convention) are missing. These are \"should have\" not blockers.\n\n### 4e. Data Sensitivity\nCheck that spans do not leak sensitive data:\n- Database queries must have user-supplied values scrubbed\u002Fparameterized\n- AI spans: input\u002Foutput messages and system instructions should only be set when explicitly opted in (e.g., via a \"send default PII\" or \"send prompts\" setting)\n- HTTP spans should redact sensitive URL parameters\n- Cache keys should not contain raw user identifiers unless expected\n\n### 4f. Attribute Types\nVerify attributes use correct types as specified in the conventions:\n- Complex data (messages, tool definitions) must be stringified JSON, not raw objects\n- Boolean attributes must be actual booleans\n- Numeric attributes must be integers\u002Fnumbers, not strings\n- Array attributes must be arrays\n\n## Step 5: Report Findings\n\nPresent findings grouped by severity:\n\n### Required Fixes (convention violations)\nIssues that MUST be fixed — missing required attributes, wrong op format, incorrect span name patterns.\n\n### Recommended Improvements\nIssues that SHOULD be addressed — missing recommended attributes, suboptimal naming.\n\n### Notes\nInformational observations — things that look correct, edge cases to be aware of, or areas where conventions are ambiguous.\n\nFor each finding, include:\n1. **File and line** where the issue occurs\n2. **What's wrong** — the specific convention being violated\n3. **Expected** — what the convention requires\n4. **Actual** — what the code currently does\n5. **Convention source** — link to the specific Sentry or OTel convention page\n\n### Output Format\n\n```\n## Span Convention Review\n\n### Required Fixes\n\n1. **[file:line]** Missing required attribute `gen_ai.operation.name`\n   - Convention: All AI agent spans MUST set `gen_ai.operation.name`\n   - Source: https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fai-agents\u002F\n\n2. **[file:line]** Incorrect span name format\n   - Expected: `\"chat {model}\"` (e.g., `\"chat gpt-4\"`)\n   - Actual: `\"OpenAI chat completion\"`\n   - Source: https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fai-agents\u002F\n\n### Recommended Improvements\n\n1. **[file:line]** Missing recommended attribute `gen_ai.response.finish_reasons`\n   - This attribute helps with debugging incomplete responses\n   - Source: https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fai-agents\u002F\n\n### Notes\n\n- All cache spans correctly implement the `cache.hit` attribute\n- Queue span naming follows OTel convention (Sentry convention is underspecified here)\n```\n\n## Handling Edge Cases\n\n- **Unknown module**: If a span op doesn't match any known module, flag it and check if there's a new or updated convention page. If no convention exists, fall back to general OTel semantic conventions.\n- **Multiple modules**: Some integrations produce spans for multiple modules (e.g., Redis creates both `cache.*` and `db.redis` spans). Review each span type against its respective module convention.\n- **SDK-specific patterns**: Different SDKs use different APIs to create spans (Python uses `start_span(op=..., name=...)`, JavaScript uses `startSpan({op: ..., name: ...})`, etc.). Focus on the semantic correctness of op, name, and attributes regardless of the API surface.\n- **Origin attribute**: While not part of module conventions, verify that `origin` is set on auto-instrumented spans (pattern: `auto.{category}.{integration}`). This is a general Sentry SDK convention.\n",{"data":39,"body":42},{"name":4,"description":6,"model":40,"allowed-tools":41},"opus","Read Grep Glob Bash WebFetch",{"type":43,"children":44},"root",[45,53,59,66,71,106,111,302,307,313,318,670,676,697,709,719,725,730,745,757,763,768,774,779,785,790,796,801,824,830,835,858,864,869,875,880,886,891,897,902,907,961,967,977,983,1073],{"type":46,"tag":47,"props":48,"children":49},"element","h1",{"id":4},[50],{"type":51,"value":52},"text","Span Convention Review",{"type":46,"tag":54,"props":55,"children":56},"p",{},[57],{"type":51,"value":58},"Review changes in SDK repositories that involve OpenTelemetry tracing spans to ensure they conform to Sentry Conventions and, where Sentry conventions are underspecified, to OpenTelemetry Semantic Conventions.",{"type":46,"tag":60,"props":61,"children":63},"h2",{"id":62},"step-1-identify-span-changes",[64],{"type":51,"value":65},"Step 1: Identify Span Changes",{"type":46,"tag":54,"props":67,"children":68},{},[69],{"type":51,"value":70},"Find all span-related changes in the current branch compared to the base branch:",{"type":46,"tag":72,"props":73,"children":78},"pre",{"className":74,"code":75,"language":76,"meta":77,"style":77},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git diff main...HEAD\n","bash","",[79],{"type":46,"tag":80,"props":81,"children":82},"code",{"__ignoreMap":77},[83],{"type":46,"tag":84,"props":85,"children":88},"span",{"class":86,"line":87},"line",1,[89,95,101],{"type":46,"tag":84,"props":90,"children":92},{"style":91},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[93],{"type":51,"value":94},"git",{"type":46,"tag":84,"props":96,"children":98},{"style":97},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[99],{"type":51,"value":100}," diff",{"type":46,"tag":84,"props":102,"children":103},{"style":97},[104],{"type":51,"value":105}," main...HEAD\n",{"type":46,"tag":54,"props":107,"children":108},{},[109],{"type":51,"value":110},"Look for patterns indicating span creation or modification:",{"type":46,"tag":112,"props":113,"children":114},"ul",{},[115,147,165,195,213,231,242],{"type":46,"tag":116,"props":117,"children":118},"li",{},[119,125,127,133,134,140,141],{"type":46,"tag":80,"props":120,"children":122},{"className":121},[],[123],{"type":51,"value":124},"start_span",{"type":51,"value":126},", ",{"type":46,"tag":80,"props":128,"children":130},{"className":129},[],[131],{"type":51,"value":132},"start_child",{"type":51,"value":126},{"type":46,"tag":80,"props":135,"children":137},{"className":136},[],[138],{"type":51,"value":139},"startSpan",{"type":51,"value":126},{"type":46,"tag":80,"props":142,"children":144},{"className":143},[],[145],{"type":51,"value":146},"StartSpan",{"type":46,"tag":116,"props":148,"children":149},{},[150,156,157,163],{"type":46,"tag":80,"props":151,"children":153},{"className":152},[],[154],{"type":51,"value":155},"op=",{"type":51,"value":126},{"type":46,"tag":80,"props":158,"children":160},{"className":159},[],[161],{"type":51,"value":162},"op:",{"type":51,"value":164},", setting span operation names",{"type":46,"tag":116,"props":166,"children":167},{},[168,174,175,181,182,188,189],{"type":46,"tag":80,"props":169,"children":171},{"className":170},[],[172],{"type":51,"value":173},"set_data",{"type":51,"value":126},{"type":46,"tag":80,"props":176,"children":178},{"className":177},[],[179],{"type":51,"value":180},"set_attribute",{"type":51,"value":126},{"type":46,"tag":80,"props":183,"children":185},{"className":184},[],[186],{"type":51,"value":187},"setAttribute",{"type":51,"value":126},{"type":46,"tag":80,"props":190,"children":192},{"className":191},[],[193],{"type":51,"value":194},"SetAttribute",{"type":46,"tag":116,"props":196,"children":197},{},[198,204,205,211],{"type":46,"tag":80,"props":199,"children":201},{"className":200},[],[202],{"type":51,"value":203},"description=",{"type":51,"value":126},{"type":46,"tag":80,"props":206,"children":208},{"className":207},[],[209],{"type":51,"value":210},"name=",{"type":51,"value":212},", span naming",{"type":46,"tag":116,"props":214,"children":215},{},[216,222,223,229],{"type":46,"tag":80,"props":217,"children":219},{"className":218},[],[220],{"type":51,"value":221},"SPANDATA.",{"type":51,"value":126},{"type":46,"tag":80,"props":224,"children":226},{"className":225},[],[227],{"type":51,"value":228},"SpanData.",{"type":51,"value":230},", span data constants",{"type":46,"tag":116,"props":232,"children":233},{},[234,240],{"type":46,"tag":80,"props":235,"children":237},{"className":236},[],[238],{"type":51,"value":239},"OP.",{"type":51,"value":241},", span operation constants",{"type":46,"tag":116,"props":243,"children":244},{},[245,247,253,254,260,261,267,268,274,275,281,282,288,289,295,296],{"type":51,"value":246},"References to ",{"type":46,"tag":80,"props":248,"children":250},{"className":249},[],[251],{"type":51,"value":252},"gen_ai.",{"type":51,"value":126},{"type":46,"tag":80,"props":255,"children":257},{"className":256},[],[258],{"type":51,"value":259},"db.",{"type":51,"value":126},{"type":46,"tag":80,"props":262,"children":264},{"className":263},[],[265],{"type":51,"value":266},"http.",{"type":51,"value":126},{"type":46,"tag":80,"props":269,"children":271},{"className":270},[],[272],{"type":51,"value":273},"cache.",{"type":51,"value":126},{"type":46,"tag":80,"props":276,"children":278},{"className":277},[],[279],{"type":51,"value":280},"queue.",{"type":51,"value":126},{"type":46,"tag":80,"props":283,"children":285},{"className":284},[],[286],{"type":51,"value":287},"messaging.",{"type":51,"value":126},{"type":46,"tag":80,"props":290,"children":292},{"className":291},[],[293],{"type":51,"value":294},"resource.",{"type":51,"value":126},{"type":46,"tag":80,"props":297,"children":299},{"className":298},[],[300],{"type":51,"value":301},"ui.",{"type":46,"tag":54,"props":303,"children":304},{},[305],{"type":51,"value":306},"If no diff is available, ask the user which files or changes to review.",{"type":46,"tag":60,"props":308,"children":310},{"id":309},"step-2-classify-spans-by-module",[311],{"type":51,"value":312},"Step 2: Classify Spans by Module",{"type":46,"tag":54,"props":314,"children":315},{},[316],{"type":51,"value":317},"Determine which Sentry Insights Module each span belongs to based on its operation prefix. Use this mapping to identify the relevant convention URLs:",{"type":46,"tag":319,"props":320,"children":321},"table",{},[322,351],{"type":46,"tag":323,"props":324,"children":325},"thead",{},[326],{"type":46,"tag":327,"props":328,"children":329},"tr",{},[330,336,341,346],{"type":46,"tag":331,"props":332,"children":333},"th",{},[334],{"type":51,"value":335},"Op Prefix \u002F Pattern",{"type":46,"tag":331,"props":337,"children":338},{},[339],{"type":51,"value":340},"Sentry Module",{"type":46,"tag":331,"props":342,"children":343},{},[344],{"type":51,"value":345},"Sentry Convention URL",{"type":46,"tag":331,"props":347,"children":348},{},[349],{"type":51,"value":350},"OTel Semconv URL",{"type":46,"tag":352,"props":353,"children":354},"tbody",{},[355,393,435,470,501,536,580,610,640],{"type":46,"tag":327,"props":356,"children":357},{},[358,368,373,384],{"type":46,"tag":359,"props":360,"children":361},"td",{},[362],{"type":46,"tag":80,"props":363,"children":365},{"className":364},[],[366],{"type":51,"value":367},"gen_ai.*",{"type":46,"tag":359,"props":369,"children":370},{},[371],{"type":51,"value":372},"AI Agents",{"type":46,"tag":359,"props":374,"children":375},{},[376],{"type":46,"tag":377,"props":378,"children":382},"a",{"href":379,"rel":380},"https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fai-agents\u002F",[381],"nofollow",[383],{"type":51,"value":379},{"type":46,"tag":359,"props":385,"children":386},{},[387],{"type":46,"tag":377,"props":388,"children":391},{"href":389,"rel":390},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fgen-ai\u002F",[381],[392],{"type":51,"value":389},{"type":46,"tag":327,"props":394,"children":395},{},[396,412,417,426],{"type":46,"tag":359,"props":397,"children":398},{},[399,405,406],{"type":46,"tag":80,"props":400,"children":402},{"className":401},[],[403],{"type":51,"value":404},"db.*",{"type":51,"value":126},{"type":46,"tag":80,"props":407,"children":409},{"className":408},[],[410],{"type":51,"value":411},"db.sql.*",{"type":46,"tag":359,"props":413,"children":414},{},[415],{"type":51,"value":416},"Queries",{"type":46,"tag":359,"props":418,"children":419},{},[420],{"type":46,"tag":377,"props":421,"children":424},{"href":422,"rel":423},"https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fqueries\u002F",[381],[425],{"type":51,"value":422},{"type":46,"tag":359,"props":427,"children":428},{},[429],{"type":46,"tag":377,"props":430,"children":433},{"href":431,"rel":432},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fdatabase\u002F",[381],[434],{"type":51,"value":431},{"type":46,"tag":327,"props":436,"children":437},{},[438,447,452,461],{"type":46,"tag":359,"props":439,"children":440},{},[441],{"type":46,"tag":80,"props":442,"children":444},{"className":443},[],[445],{"type":51,"value":446},"http.client",{"type":46,"tag":359,"props":448,"children":449},{},[450],{"type":51,"value":451},"Requests",{"type":46,"tag":359,"props":453,"children":454},{},[455],{"type":46,"tag":377,"props":456,"children":459},{"href":457,"rel":458},"https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Frequests\u002F",[381],[460],{"type":51,"value":457},{"type":46,"tag":359,"props":462,"children":463},{},[464],{"type":46,"tag":377,"props":465,"children":468},{"href":466,"rel":467},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fhttp\u002Fhttp-spans\u002F",[381],[469],{"type":51,"value":466},{"type":46,"tag":327,"props":471,"children":472},{},[473,482,487,496],{"type":46,"tag":359,"props":474,"children":475},{},[476],{"type":46,"tag":80,"props":477,"children":479},{"className":478},[],[480],{"type":51,"value":481},"cache.*",{"type":46,"tag":359,"props":483,"children":484},{},[485],{"type":51,"value":486},"Caches",{"type":46,"tag":359,"props":488,"children":489},{},[490],{"type":46,"tag":377,"props":491,"children":494},{"href":492,"rel":493},"https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fcaches\u002F",[381],[495],{"type":51,"value":492},{"type":46,"tag":359,"props":497,"children":498},{},[499],{"type":51,"value":500},"N\u002FA",{"type":46,"tag":327,"props":502,"children":503},{},[504,513,518,527],{"type":46,"tag":359,"props":505,"children":506},{},[507],{"type":46,"tag":80,"props":508,"children":510},{"className":509},[],[511],{"type":51,"value":512},"queue.*",{"type":46,"tag":359,"props":514,"children":515},{},[516],{"type":51,"value":517},"Queues",{"type":46,"tag":359,"props":519,"children":520},{},[521],{"type":46,"tag":377,"props":522,"children":525},{"href":523,"rel":524},"https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fqueues\u002F",[381],[526],{"type":51,"value":523},{"type":46,"tag":359,"props":528,"children":529},{},[530],{"type":46,"tag":377,"props":531,"children":534},{"href":532,"rel":533},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002Fmessaging\u002F",[381],[535],{"type":51,"value":532},{"type":46,"tag":327,"props":537,"children":538},{},[539,562,567,576],{"type":46,"tag":359,"props":540,"children":541},{},[542,548,549,555,556],{"type":46,"tag":80,"props":543,"children":545},{"className":544},[],[546],{"type":51,"value":547},"resource.script",{"type":51,"value":126},{"type":46,"tag":80,"props":550,"children":552},{"className":551},[],[553],{"type":51,"value":554},"resource.css",{"type":51,"value":126},{"type":46,"tag":80,"props":557,"children":559},{"className":558},[],[560],{"type":51,"value":561},"resource.img",{"type":46,"tag":359,"props":563,"children":564},{},[565],{"type":51,"value":566},"Assets",{"type":46,"tag":359,"props":568,"children":569},{},[570],{"type":46,"tag":377,"props":571,"children":574},{"href":572,"rel":573},"https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fassets\u002F",[381],[575],{"type":51,"value":572},{"type":46,"tag":359,"props":577,"children":578},{},[579],{"type":51,"value":500},{"type":46,"tag":327,"props":581,"children":582},{},[583,592,597,606],{"type":46,"tag":359,"props":584,"children":585},{},[586],{"type":46,"tag":80,"props":587,"children":589},{"className":588},[],[590],{"type":51,"value":591},"app.start.*",{"type":46,"tag":359,"props":593,"children":594},{},[595],{"type":51,"value":596},"App Starts",{"type":46,"tag":359,"props":598,"children":599},{},[600],{"type":46,"tag":377,"props":601,"children":604},{"href":602,"rel":603},"https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fapp-starts\u002F",[381],[605],{"type":51,"value":602},{"type":46,"tag":359,"props":607,"children":608},{},[609],{"type":51,"value":500},{"type":46,"tag":327,"props":611,"children":612},{},[613,622,627,636],{"type":46,"tag":359,"props":614,"children":615},{},[616],{"type":46,"tag":80,"props":617,"children":619},{"className":618},[],[620],{"type":51,"value":621},"ui.load*",{"type":46,"tag":359,"props":623,"children":624},{},[625],{"type":51,"value":626},"Screen Loads",{"type":46,"tag":359,"props":628,"children":629},{},[630],{"type":46,"tag":377,"props":631,"children":634},{"href":632,"rel":633},"https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fscreen-loads\u002F",[381],[635],{"type":51,"value":632},{"type":46,"tag":359,"props":637,"children":638},{},[639],{"type":51,"value":500},{"type":46,"tag":327,"props":641,"children":642},{},[643,652,657,666],{"type":46,"tag":359,"props":644,"children":645},{},[646],{"type":46,"tag":80,"props":647,"children":649},{"className":648},[],[650],{"type":51,"value":651},"ui.interaction.*",{"type":46,"tag":359,"props":653,"children":654},{},[655],{"type":51,"value":656},"Web Vitals",{"type":46,"tag":359,"props":658,"children":659},{},[660],{"type":46,"tag":377,"props":661,"children":664},{"href":662,"rel":663},"https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fweb-vitals\u002F",[381],[665],{"type":51,"value":662},{"type":46,"tag":359,"props":667,"children":668},{},[669],{"type":51,"value":500},{"type":46,"tag":60,"props":671,"children":673},{"id":672},"step-3-fetch-current-conventions",[674],{"type":51,"value":675},"Step 3: Fetch Current Conventions",{"type":46,"tag":54,"props":677,"children":678},{},[679,681,687,689,695],{"type":51,"value":680},"For each module identified in Step 2, use ",{"type":46,"tag":80,"props":682,"children":684},{"className":683},[],[685],{"type":51,"value":686},"WebFetch",{"type":51,"value":688}," to retrieve the ",{"type":46,"tag":690,"props":691,"children":692},"strong",{},[693],{"type":51,"value":694},"Sentry Convention page",{"type":51,"value":696}," from the URL in the table above. Sentry conventions are the primary authority.",{"type":46,"tag":54,"props":698,"children":699},{},[700,702,707],{"type":51,"value":701},"If the Sentry convention page is underspecified for a particular attribute, span name format, or operation pattern, also fetch the corresponding ",{"type":46,"tag":690,"props":703,"children":704},{},[705],{"type":51,"value":706},"OTel Semantic Conventions page",{"type":51,"value":708}," for supplementary guidance.",{"type":46,"tag":54,"props":710,"children":711},{},[712,717],{"type":46,"tag":690,"props":713,"children":714},{},[715],{"type":51,"value":716},"Do not assume or hardcode convention details.",{"type":51,"value":718}," Always fetch the live documentation to ensure you are reviewing against the latest version.",{"type":46,"tag":60,"props":720,"children":722},{"id":721},"step-4-review-each-span",[723],{"type":51,"value":724},"Step 4: Review Each Span",{"type":46,"tag":54,"props":726,"children":727},{},[728],{"type":51,"value":729},"For each span change, verify conformance against the fetched conventions for its module. Check the following categories:",{"type":46,"tag":731,"props":732,"children":734},"h3",{"id":733},"_4a-span-operation-op",[735,737,743],{"type":51,"value":736},"4a. Span Operation (",{"type":46,"tag":80,"props":738,"children":740},{"className":739},[],[741],{"type":51,"value":742},"op",{"type":51,"value":744},")",{"type":46,"tag":54,"props":746,"children":747},{},[748,750,755],{"type":51,"value":749},"Verify the ",{"type":46,"tag":80,"props":751,"children":753},{"className":752},[],[754],{"type":51,"value":742},{"type":51,"value":756}," value matches the expected pattern defined in the fetched Sentry convention for the module.",{"type":46,"tag":731,"props":758,"children":760},{"id":759},"_4b-span-name-description",[761],{"type":51,"value":762},"4b. Span Name \u002F Description",{"type":46,"tag":54,"props":764,"children":765},{},[766],{"type":51,"value":767},"Verify the span name follows the format specified in the fetched convention.",{"type":46,"tag":731,"props":769,"children":771},{"id":770},"_4c-required-attributes",[772],{"type":51,"value":773},"4c. Required Attributes",{"type":46,"tag":54,"props":775,"children":776},{},[777],{"type":51,"value":778},"Verify all required span data attributes listed in the fetched convention are set.",{"type":46,"tag":731,"props":780,"children":782},{"id":781},"_4d-optionalrecommended-attributes",[783],{"type":51,"value":784},"4d. Optional\u002FRecommended Attributes",{"type":46,"tag":54,"props":786,"children":787},{},[788],{"type":51,"value":789},"Flag if commonly expected optional attributes (listed in the fetched convention) are missing. These are \"should have\" not blockers.",{"type":46,"tag":731,"props":791,"children":793},{"id":792},"_4e-data-sensitivity",[794],{"type":51,"value":795},"4e. Data Sensitivity",{"type":46,"tag":54,"props":797,"children":798},{},[799],{"type":51,"value":800},"Check that spans do not leak sensitive data:",{"type":46,"tag":112,"props":802,"children":803},{},[804,809,814,819],{"type":46,"tag":116,"props":805,"children":806},{},[807],{"type":51,"value":808},"Database queries must have user-supplied values scrubbed\u002Fparameterized",{"type":46,"tag":116,"props":810,"children":811},{},[812],{"type":51,"value":813},"AI spans: input\u002Foutput messages and system instructions should only be set when explicitly opted in (e.g., via a \"send default PII\" or \"send prompts\" setting)",{"type":46,"tag":116,"props":815,"children":816},{},[817],{"type":51,"value":818},"HTTP spans should redact sensitive URL parameters",{"type":46,"tag":116,"props":820,"children":821},{},[822],{"type":51,"value":823},"Cache keys should not contain raw user identifiers unless expected",{"type":46,"tag":731,"props":825,"children":827},{"id":826},"_4f-attribute-types",[828],{"type":51,"value":829},"4f. Attribute Types",{"type":46,"tag":54,"props":831,"children":832},{},[833],{"type":51,"value":834},"Verify attributes use correct types as specified in the conventions:",{"type":46,"tag":112,"props":836,"children":837},{},[838,843,848,853],{"type":46,"tag":116,"props":839,"children":840},{},[841],{"type":51,"value":842},"Complex data (messages, tool definitions) must be stringified JSON, not raw objects",{"type":46,"tag":116,"props":844,"children":845},{},[846],{"type":51,"value":847},"Boolean attributes must be actual booleans",{"type":46,"tag":116,"props":849,"children":850},{},[851],{"type":51,"value":852},"Numeric attributes must be integers\u002Fnumbers, not strings",{"type":46,"tag":116,"props":854,"children":855},{},[856],{"type":51,"value":857},"Array attributes must be arrays",{"type":46,"tag":60,"props":859,"children":861},{"id":860},"step-5-report-findings",[862],{"type":51,"value":863},"Step 5: Report Findings",{"type":46,"tag":54,"props":865,"children":866},{},[867],{"type":51,"value":868},"Present findings grouped by severity:",{"type":46,"tag":731,"props":870,"children":872},{"id":871},"required-fixes-convention-violations",[873],{"type":51,"value":874},"Required Fixes (convention violations)",{"type":46,"tag":54,"props":876,"children":877},{},[878],{"type":51,"value":879},"Issues that MUST be fixed — missing required attributes, wrong op format, incorrect span name patterns.",{"type":46,"tag":731,"props":881,"children":883},{"id":882},"recommended-improvements",[884],{"type":51,"value":885},"Recommended Improvements",{"type":46,"tag":54,"props":887,"children":888},{},[889],{"type":51,"value":890},"Issues that SHOULD be addressed — missing recommended attributes, suboptimal naming.",{"type":46,"tag":731,"props":892,"children":894},{"id":893},"notes",[895],{"type":51,"value":896},"Notes",{"type":46,"tag":54,"props":898,"children":899},{},[900],{"type":51,"value":901},"Informational observations — things that look correct, edge cases to be aware of, or areas where conventions are ambiguous.",{"type":46,"tag":54,"props":903,"children":904},{},[905],{"type":51,"value":906},"For each finding, include:",{"type":46,"tag":908,"props":909,"children":910},"ol",{},[911,921,931,941,951],{"type":46,"tag":116,"props":912,"children":913},{},[914,919],{"type":46,"tag":690,"props":915,"children":916},{},[917],{"type":51,"value":918},"File and line",{"type":51,"value":920}," where the issue occurs",{"type":46,"tag":116,"props":922,"children":923},{},[924,929],{"type":46,"tag":690,"props":925,"children":926},{},[927],{"type":51,"value":928},"What's wrong",{"type":51,"value":930}," — the specific convention being violated",{"type":46,"tag":116,"props":932,"children":933},{},[934,939],{"type":46,"tag":690,"props":935,"children":936},{},[937],{"type":51,"value":938},"Expected",{"type":51,"value":940}," — what the convention requires",{"type":46,"tag":116,"props":942,"children":943},{},[944,949],{"type":46,"tag":690,"props":945,"children":946},{},[947],{"type":51,"value":948},"Actual",{"type":51,"value":950}," — what the code currently does",{"type":46,"tag":116,"props":952,"children":953},{},[954,959],{"type":46,"tag":690,"props":955,"children":956},{},[957],{"type":51,"value":958},"Convention source",{"type":51,"value":960}," — link to the specific Sentry or OTel convention page",{"type":46,"tag":731,"props":962,"children":964},{"id":963},"output-format",[965],{"type":51,"value":966},"Output Format",{"type":46,"tag":72,"props":968,"children":972},{"className":969,"code":971,"language":51},[970],"language-text","## Span Convention Review\n\n### Required Fixes\n\n1. **[file:line]** Missing required attribute `gen_ai.operation.name`\n   - Convention: All AI agent spans MUST set `gen_ai.operation.name`\n   - Source: https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fai-agents\u002F\n\n2. **[file:line]** Incorrect span name format\n   - Expected: `\"chat {model}\"` (e.g., `\"chat gpt-4\"`)\n   - Actual: `\"OpenAI chat completion\"`\n   - Source: https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fai-agents\u002F\n\n### Recommended Improvements\n\n1. **[file:line]** Missing recommended attribute `gen_ai.response.finish_reasons`\n   - This attribute helps with debugging incomplete responses\n   - Source: https:\u002F\u002Fdevelop.sentry.dev\u002Fsdk\u002Ftelemetry\u002Ftraces\u002Fmodules\u002Fai-agents\u002F\n\n### Notes\n\n- All cache spans correctly implement the `cache.hit` attribute\n- Queue span naming follows OTel convention (Sentry convention is underspecified here)\n",[973],{"type":46,"tag":80,"props":974,"children":975},{"__ignoreMap":77},[976],{"type":51,"value":971},{"type":46,"tag":60,"props":978,"children":980},{"id":979},"handling-edge-cases",[981],{"type":51,"value":982},"Handling Edge Cases",{"type":46,"tag":112,"props":984,"children":985},{},[986,996,1021,1047],{"type":46,"tag":116,"props":987,"children":988},{},[989,994],{"type":46,"tag":690,"props":990,"children":991},{},[992],{"type":51,"value":993},"Unknown module",{"type":51,"value":995},": If a span op doesn't match any known module, flag it and check if there's a new or updated convention page. If no convention exists, fall back to general OTel semantic conventions.",{"type":46,"tag":116,"props":997,"children":998},{},[999,1004,1006,1011,1013,1019],{"type":46,"tag":690,"props":1000,"children":1001},{},[1002],{"type":51,"value":1003},"Multiple modules",{"type":51,"value":1005},": Some integrations produce spans for multiple modules (e.g., Redis creates both ",{"type":46,"tag":80,"props":1007,"children":1009},{"className":1008},[],[1010],{"type":51,"value":481},{"type":51,"value":1012}," and ",{"type":46,"tag":80,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":51,"value":1018},"db.redis",{"type":51,"value":1020}," spans). Review each span type against its respective module convention.",{"type":46,"tag":116,"props":1022,"children":1023},{},[1024,1029,1031,1037,1039,1045],{"type":46,"tag":690,"props":1025,"children":1026},{},[1027],{"type":51,"value":1028},"SDK-specific patterns",{"type":51,"value":1030},": Different SDKs use different APIs to create spans (Python uses ",{"type":46,"tag":80,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":51,"value":1036},"start_span(op=..., name=...)",{"type":51,"value":1038},", JavaScript uses ",{"type":46,"tag":80,"props":1040,"children":1042},{"className":1041},[],[1043],{"type":51,"value":1044},"startSpan({op: ..., name: ...})",{"type":51,"value":1046},", etc.). Focus on the semantic correctness of op, name, and attributes regardless of the API surface.",{"type":46,"tag":116,"props":1048,"children":1049},{},[1050,1055,1057,1063,1065,1071],{"type":46,"tag":690,"props":1051,"children":1052},{},[1053],{"type":51,"value":1054},"Origin attribute",{"type":51,"value":1056},": While not part of module conventions, verify that ",{"type":46,"tag":80,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":51,"value":1062},"origin",{"type":51,"value":1064}," is set on auto-instrumented spans (pattern: ",{"type":46,"tag":80,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":51,"value":1070},"auto.{category}.{integration}",{"type":51,"value":1072},"). This is a general Sentry SDK convention.",{"type":46,"tag":1074,"props":1075,"children":1076},"style",{},[1077],{"type":51,"value":1078},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1080,"total":1255},[1081,1106,1120,1135,1149,1166,1182,1194,1204,1214,1224,1242],{"slug":1082,"name":1082,"fn":1083,"description":1084,"org":1085,"tags":1086,"stars":1103,"repoUrl":1104,"updatedAt":1105},"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},[1087,1090,1093,1096,1097,1100],{"name":1088,"slug":1089,"type":16},"Debugging","debugging",{"name":1091,"slug":1092,"type":16},"iOS","ios",{"name":1094,"slug":1095,"type":16},"macOS","macos",{"name":9,"slug":8,"type":16},{"name":1098,"slug":1099,"type":16},"Testing","testing",{"name":1101,"slug":1102,"type":16},"Xcode","xcode",6176,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002FXcodeBuildMCP","2026-04-06T18:13:34.8719",{"slug":1107,"name":1107,"fn":1108,"description":1109,"org":1110,"tags":1111,"stars":1103,"repoUrl":1104,"updatedAt":1119},"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},[1112,1115,1116,1117,1118],{"name":1113,"slug":1114,"type":16},"CLI","cli",{"name":1091,"slug":1092,"type":16},{"name":1094,"slug":1095,"type":16},{"name":1098,"slug":1099,"type":16},{"name":1101,"slug":1102,"type":16},"2026-04-06T18:13:36.13414",{"slug":1121,"name":1121,"fn":1122,"description":1123,"org":1124,"tags":1125,"stars":1132,"repoUrl":1133,"updatedAt":1134},"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},[1126,1129],{"name":1127,"slug":1128,"type":16},"Documentation","documentation",{"name":1130,"slug":1131,"type":16},"Engineering","engineering",861,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills","2026-05-15T06:16:29.695991",{"slug":1136,"name":1136,"fn":1137,"description":1138,"org":1139,"tags":1140,"stars":1132,"repoUrl":1133,"updatedAt":1148},"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},[1141,1144,1145],{"name":1142,"slug":1143,"type":16},"Communications","communications",{"name":9,"slug":8,"type":16},{"name":1146,"slug":1147,"type":16},"Technical Writing","technical-writing","2026-05-15T06:16:33.38217",{"slug":1150,"name":1150,"fn":1151,"description":1152,"org":1153,"tags":1154,"stars":1132,"repoUrl":1133,"updatedAt":1165},"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},[1155,1158,1161,1162],{"name":1156,"slug":1157,"type":16},"Branding","branding",{"name":1159,"slug":1160,"type":16},"Content Creation","content-creation",{"name":9,"slug":8,"type":16},{"name":1163,"slug":1164,"type":16},"UX Copy","ux-copy","2026-05-15T06:16:22.395707",{"slug":1167,"name":1167,"fn":1168,"description":1169,"org":1170,"tags":1171,"stars":1132,"repoUrl":1133,"updatedAt":1181},"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},[1172,1175,1178],{"name":1173,"slug":1174,"type":16},"Claude Code","claude-code",{"name":1176,"slug":1177,"type":16},"Configuration","configuration",{"name":1179,"slug":1180,"type":16},"Security","security","2026-05-15T06:16:44.335977",{"slug":22,"name":22,"fn":1183,"description":1184,"org":1185,"tags":1186,"stars":1132,"repoUrl":1133,"updatedAt":1193},"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},[1187,1188,1189,1192],{"name":21,"slug":22,"type":16},{"name":1130,"slug":1131,"type":16},{"name":1190,"slug":1191,"type":16},"Performance","performance",{"name":1179,"slug":1180,"type":16},"2026-05-15T06:16:35.824864",{"slug":1195,"name":1195,"fn":1196,"description":1197,"org":1198,"tags":1199,"stars":1132,"repoUrl":1133,"updatedAt":1203},"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},[1200],{"name":1201,"slug":1202,"type":16},"Code Analysis","code-analysis","2026-05-15T06:16:32.127981",{"slug":1205,"name":1205,"fn":1206,"description":1207,"org":1208,"tags":1209,"stars":1132,"repoUrl":1133,"updatedAt":1213},"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},[1210,1212],{"name":1211,"slug":94,"type":16},"Git",{"name":9,"slug":8,"type":16},"2026-07-18T05:15:10.723937",{"slug":1215,"name":1215,"fn":1216,"description":1217,"org":1218,"tags":1219,"stars":1132,"repoUrl":1133,"updatedAt":1223},"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},[1220,1221,1222],{"name":1130,"slug":1131,"type":16},{"name":1211,"slug":94,"type":16},{"name":9,"slug":8,"type":16},"2026-05-15T06:16:39.458431",{"slug":1225,"name":1225,"fn":1226,"description":1227,"org":1228,"tags":1229,"stars":1132,"repoUrl":1133,"updatedAt":1241},"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},[1230,1233,1234,1237,1240],{"name":1231,"slug":1232,"type":16},"Access Control","access-control",{"name":1201,"slug":1202,"type":16},{"name":1235,"slug":1236,"type":16},"Django","django",{"name":1238,"slug":1239,"type":16},"Python","python",{"name":1179,"slug":1180,"type":16},"2026-05-15T06:16:43.098698",{"slug":1243,"name":1243,"fn":1244,"description":1245,"org":1246,"tags":1247,"stars":1132,"repoUrl":1133,"updatedAt":1254},"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},[1248,1249,1252,1253],{"name":21,"slug":22,"type":16},{"name":1250,"slug":1251,"type":16},"Database","database",{"name":1235,"slug":1236,"type":16},{"name":1190,"slug":1191,"type":16},"2026-05-15T06:16:24.832813",88,{"items":1257,"total":1351},[1258,1271,1286,1303,1319,1330,1343],{"slug":1259,"name":1259,"fn":1260,"description":1261,"org":1262,"tags":1263,"stars":27,"repoUrl":28,"updatedAt":1270},"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},[1264,1265,1268,1269],{"name":1127,"slug":1128,"type":16},{"name":1266,"slug":1267,"type":16},"GitHub","github",{"name":9,"slug":8,"type":16},{"name":1146,"slug":1147,"type":16},"2026-04-06T18:14:57.157686",{"slug":1272,"name":1272,"fn":1273,"description":1274,"org":1275,"tags":1276,"stars":27,"repoUrl":28,"updatedAt":1285},"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},[1277,1278,1281,1282],{"name":1142,"slug":1143,"type":16},{"name":1279,"slug":1280,"type":16},"Productivity","productivity",{"name":9,"slug":8,"type":16},{"name":1283,"slug":1284,"type":16},"Standup","standup","2026-04-06T18:14:53.472546",{"slug":1287,"name":1287,"fn":1288,"description":1289,"org":1290,"tags":1291,"stars":27,"repoUrl":28,"updatedAt":1302},"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},[1292,1295,1298,1301],{"name":1293,"slug":1294,"type":16},"Operations","operations",{"name":1296,"slug":1297,"type":16},"Product Management","product-management",{"name":1299,"slug":1300,"type":16},"SDK","sdk",{"name":9,"slug":8,"type":16},"2026-04-06T18:14:54.704594",{"slug":1304,"name":1304,"fn":1305,"description":1306,"org":1307,"tags":1308,"stars":27,"repoUrl":28,"updatedAt":1318},"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},[1309,1312,1313,1314,1315],{"name":1310,"slug":1311,"type":16},"Linear","linear",{"name":18,"slug":19,"type":16},{"name":1299,"slug":1300,"type":16},{"name":9,"slug":8,"type":16},{"name":1316,"slug":1317,"type":16},"Triage","triage","2026-04-06T18:15:00.931727",{"slug":1320,"name":1320,"fn":1321,"description":1322,"org":1323,"tags":1324,"stars":27,"repoUrl":28,"updatedAt":1329},"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},[1325,1326,1327,1328],{"name":1293,"slug":1294,"type":16},{"name":1279,"slug":1280,"type":16},{"name":9,"slug":8,"type":16},{"name":1316,"slug":1317,"type":16},"2026-04-06T18:14:58.40989",{"slug":1331,"name":1331,"fn":1332,"description":1333,"org":1334,"tags":1335,"stars":27,"repoUrl":28,"updatedAt":1342},"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},[1336,1337,1340,1341],{"name":1293,"slug":1294,"type":16},{"name":1338,"slug":1339,"type":16},"Pull Requests","pull-requests",{"name":1299,"slug":1300,"type":16},{"name":9,"slug":8,"type":16},"2026-04-06T18:14:55.930879",{"slug":4,"name":4,"fn":5,"description":6,"org":1344,"tags":1345,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1346,1347,1348,1349,1350],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":24,"slug":25,"type":16},{"name":9,"slug":8,"type":16},{"name":14,"slug":15,"type":16},7]