[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-sentry-typing-exclusion-worker":3,"mdc-b1tt9f-key":38,"related-org-sentry-typing-exclusion-worker":957,"related-repo-sentry-typing-exclusion-worker":1127},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":33,"sourceUrl":36,"mdContent":37},"typing-exclusion-worker","fix Python typing exclusion issues","Python typing exclusion worker: remove assigned mypy exclusion modules in small scoped batches, fix typing issues, run validation, and produce a structured completion summary. Use when running parallel typing-debt workers or when asked to remove modules from pyproject mypy exclusion overrides.",{"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],{"name":14,"slug":15,"type":16},"Python","python","tag",{"name":18,"slug":19,"type":16},"Engineering","engineering",{"name":21,"slug":22,"type":16},"Code Analysis","code-analysis",{"name":24,"slug":25,"type":16},"Debugging","debugging",861,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills","2026-05-15T06:16:27.238416",null,45,[32],"tag-production",{"repoUrl":27,"stars":26,"forks":30,"topics":34,"description":35},[32],"Agent Skills used by the Sentry team for development.","https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Ftyping-exclusion-worker","---\nname: typing-exclusion-worker\ndescription: \"Python typing exclusion worker: remove assigned mypy exclusion modules in small scoped batches, fix typing issues, run validation, and produce a structured completion summary. Use when running parallel typing-debt workers or when asked to remove modules from pyproject mypy exclusion overrides.\"\n---\n\n# Typing Exclusion Worker\n\n## Purpose\n\nExecute one assigned typing batch safely and predictably:\n\n- remove only assigned modules from mypy exclusions,\n- fix surfaced typing issues in scope,\n- run required checks,\n- return a consistent summary for the manager\u002Forchestrator.\n\n## Inputs Required\n\nBefore starting, confirm these inputs exist in the task prompt:\n\n- worktree\u002Fbranch name,\n- exact module list to remove from exclusion,\n- ownership\u002Fdomain boundary,\n- expected validation commands (if customized).\n\nIf any are missing, ask for them before editing.\n\n## Scope Rules (Hard Constraints)\n\n1. Only remove assigned module entries from the mypy exclusion list in `pyproject.toml`.\n2. Keep code changes in assigned scope unless a direct dependency is required to pass typing\u002Ftests.\n3. Do not expand to cross-team modules unless explicitly approved by the manager.\n4. Avoid blanket `# type: ignore`; if unavoidable, use narrow `ignore[code]` with a short reason.\n\n## Execution Workflow\n\n1. **Apply exclusion change**\n\n   - Remove assigned modules from the exclusion override in `pyproject.toml`.\n\n2. **Run mypy on assigned scope**\n\n   - Prefer targeted paths first for fast feedback.\n   - Fix errors using explicit typing patterns (`isinstance` narrowing, accurate return types, typed class attrs, relation-safe model access).\n\n3. **Run tests for touched area**\n\n   - Execute targeted pytest for modified modules\u002Ftests.\n   - Fix regressions before continuing.\n\n4. **Run pre-commit on changed files**\n\n   - Run `pre-commit run --files \u003Cchanged files>`.\n   - If hooks auto-fix files, rerun until clean.\n\n5. **Final verification**\n   - Re-run targeted mypy and tests after final edits.\n   - Ensure no unrelated files were changed.\n\n## Python Typing Best Practices\n\n- Prefer precise types over `Any`.\n- Use type narrowing on unions before attribute access.\n- Keep method overrides signature-compatible with base classes.\n- Annotate class attributes in tests\u002Fhelpers when inference is weak.\n- Use relation objects (`obj.related`) when stubs do not expose raw `*_id` attributes.\n\n## Required Output Template\n\nReturn this exact structure at the end of each batch:\n\n```markdown\n## Batch Summary\n\n- Branch\u002Fworktree: `\u003Cname>`\n- Ownership\u002Fdomain: `\u003Cteam-or-domain>`\n\n### Modules Removed From Exclusion\n\n- `\u003Cmodule.path.one>`\n- `\u003Cmodule.path.two>`\n\n### Files Changed\n\n- `\u003Cpath>`\n- `\u003Cpath>`\n\n### Key Typing Fixes\n\n- `\u003Cshort rationale + fix>`\n- `\u003Cshort rationale + fix>`\n\n### Validation\n\n- `mypy`: `\u003Cpass\u002Ffail + scope>`\n- `pre-commit --files`: `\u003Cpass\u002Ffail>`\n- `pytest`: `\u003Cpass\u002Ffail + scope>`\n\n### Notes\n\n- Remaining blockers: `\u003Cnone or details>`\n- Any new ignore entries: `\u003Cnone or file + ignore code + reason>`\n```\n\n## Stop Conditions (Escalate to Manager)\n\nStop and report instead of widening scope when:\n\n- fixes require touching another team\u002Fdomain,\n- exclusion conflicts in `pyproject.toml` cannot be resolved safely,\n- error volume indicates batch is too large and should be split.\n",{"data":39,"body":40},{"name":4,"description":6},{"type":41,"children":42},"root",[43,51,58,64,89,95,100,123,128,134,183,189,314,320,371,377,382,915,921,926,951],{"type":44,"tag":45,"props":46,"children":47},"element","h1",{"id":4},[48],{"type":49,"value":50},"text","Typing Exclusion Worker",{"type":44,"tag":52,"props":53,"children":55},"h2",{"id":54},"purpose",[56],{"type":49,"value":57},"Purpose",{"type":44,"tag":59,"props":60,"children":61},"p",{},[62],{"type":49,"value":63},"Execute one assigned typing batch safely and predictably:",{"type":44,"tag":65,"props":66,"children":67},"ul",{},[68,74,79,84],{"type":44,"tag":69,"props":70,"children":71},"li",{},[72],{"type":49,"value":73},"remove only assigned modules from mypy exclusions,",{"type":44,"tag":69,"props":75,"children":76},{},[77],{"type":49,"value":78},"fix surfaced typing issues in scope,",{"type":44,"tag":69,"props":80,"children":81},{},[82],{"type":49,"value":83},"run required checks,",{"type":44,"tag":69,"props":85,"children":86},{},[87],{"type":49,"value":88},"return a consistent summary for the manager\u002Forchestrator.",{"type":44,"tag":52,"props":90,"children":92},{"id":91},"inputs-required",[93],{"type":49,"value":94},"Inputs Required",{"type":44,"tag":59,"props":96,"children":97},{},[98],{"type":49,"value":99},"Before starting, confirm these inputs exist in the task prompt:",{"type":44,"tag":65,"props":101,"children":102},{},[103,108,113,118],{"type":44,"tag":69,"props":104,"children":105},{},[106],{"type":49,"value":107},"worktree\u002Fbranch name,",{"type":44,"tag":69,"props":109,"children":110},{},[111],{"type":49,"value":112},"exact module list to remove from exclusion,",{"type":44,"tag":69,"props":114,"children":115},{},[116],{"type":49,"value":117},"ownership\u002Fdomain boundary,",{"type":44,"tag":69,"props":119,"children":120},{},[121],{"type":49,"value":122},"expected validation commands (if customized).",{"type":44,"tag":59,"props":124,"children":125},{},[126],{"type":49,"value":127},"If any are missing, ask for them before editing.",{"type":44,"tag":52,"props":129,"children":131},{"id":130},"scope-rules-hard-constraints",[132],{"type":49,"value":133},"Scope Rules (Hard Constraints)",{"type":44,"tag":135,"props":136,"children":137},"ol",{},[138,152,157,162],{"type":44,"tag":69,"props":139,"children":140},{},[141,143,150],{"type":49,"value":142},"Only remove assigned module entries from the mypy exclusion list in ",{"type":44,"tag":144,"props":145,"children":147},"code",{"className":146},[],[148],{"type":49,"value":149},"pyproject.toml",{"type":49,"value":151},".",{"type":44,"tag":69,"props":153,"children":154},{},[155],{"type":49,"value":156},"Keep code changes in assigned scope unless a direct dependency is required to pass typing\u002Ftests.",{"type":44,"tag":69,"props":158,"children":159},{},[160],{"type":49,"value":161},"Do not expand to cross-team modules unless explicitly approved by the manager.",{"type":44,"tag":69,"props":163,"children":164},{},[165,167,173,175,181],{"type":49,"value":166},"Avoid blanket ",{"type":44,"tag":144,"props":168,"children":170},{"className":169},[],[171],{"type":49,"value":172},"# type: ignore",{"type":49,"value":174},"; if unavoidable, use narrow ",{"type":44,"tag":144,"props":176,"children":178},{"className":177},[],[179],{"type":49,"value":180},"ignore[code]",{"type":49,"value":182}," with a short reason.",{"type":44,"tag":52,"props":184,"children":186},{"id":185},"execution-workflow",[187],{"type":49,"value":188},"Execution Workflow",{"type":44,"tag":135,"props":190,"children":191},{},[192,215,244,265,293],{"type":44,"tag":69,"props":193,"children":194},{},[195,201],{"type":44,"tag":196,"props":197,"children":198},"strong",{},[199],{"type":49,"value":200},"Apply exclusion change",{"type":44,"tag":65,"props":202,"children":203},{},[204],{"type":44,"tag":69,"props":205,"children":206},{},[207,209,214],{"type":49,"value":208},"Remove assigned modules from the exclusion override in ",{"type":44,"tag":144,"props":210,"children":212},{"className":211},[],[213],{"type":49,"value":149},{"type":49,"value":151},{"type":44,"tag":69,"props":216,"children":217},{},[218,223],{"type":44,"tag":196,"props":219,"children":220},{},[221],{"type":49,"value":222},"Run mypy on assigned scope",{"type":44,"tag":65,"props":224,"children":225},{},[226,231],{"type":44,"tag":69,"props":227,"children":228},{},[229],{"type":49,"value":230},"Prefer targeted paths first for fast feedback.",{"type":44,"tag":69,"props":232,"children":233},{},[234,236,242],{"type":49,"value":235},"Fix errors using explicit typing patterns (",{"type":44,"tag":144,"props":237,"children":239},{"className":238},[],[240],{"type":49,"value":241},"isinstance",{"type":49,"value":243}," narrowing, accurate return types, typed class attrs, relation-safe model access).",{"type":44,"tag":69,"props":245,"children":246},{},[247,252],{"type":44,"tag":196,"props":248,"children":249},{},[250],{"type":49,"value":251},"Run tests for touched area",{"type":44,"tag":65,"props":253,"children":254},{},[255,260],{"type":44,"tag":69,"props":256,"children":257},{},[258],{"type":49,"value":259},"Execute targeted pytest for modified modules\u002Ftests.",{"type":44,"tag":69,"props":261,"children":262},{},[263],{"type":49,"value":264},"Fix regressions before continuing.",{"type":44,"tag":69,"props":266,"children":267},{},[268,273],{"type":44,"tag":196,"props":269,"children":270},{},[271],{"type":49,"value":272},"Run pre-commit on changed files",{"type":44,"tag":65,"props":274,"children":275},{},[276,288],{"type":44,"tag":69,"props":277,"children":278},{},[279,281,287],{"type":49,"value":280},"Run ",{"type":44,"tag":144,"props":282,"children":284},{"className":283},[],[285],{"type":49,"value":286},"pre-commit run --files \u003Cchanged files>",{"type":49,"value":151},{"type":44,"tag":69,"props":289,"children":290},{},[291],{"type":49,"value":292},"If hooks auto-fix files, rerun until clean.",{"type":44,"tag":69,"props":294,"children":295},{},[296,301],{"type":44,"tag":196,"props":297,"children":298},{},[299],{"type":49,"value":300},"Final verification",{"type":44,"tag":65,"props":302,"children":303},{},[304,309],{"type":44,"tag":69,"props":305,"children":306},{},[307],{"type":49,"value":308},"Re-run targeted mypy and tests after final edits.",{"type":44,"tag":69,"props":310,"children":311},{},[312],{"type":49,"value":313},"Ensure no unrelated files were changed.",{"type":44,"tag":52,"props":315,"children":317},{"id":316},"python-typing-best-practices",[318],{"type":49,"value":319},"Python Typing Best Practices",{"type":44,"tag":65,"props":321,"children":322},{},[323,335,340,345,350],{"type":44,"tag":69,"props":324,"children":325},{},[326,328,334],{"type":49,"value":327},"Prefer precise types over ",{"type":44,"tag":144,"props":329,"children":331},{"className":330},[],[332],{"type":49,"value":333},"Any",{"type":49,"value":151},{"type":44,"tag":69,"props":336,"children":337},{},[338],{"type":49,"value":339},"Use type narrowing on unions before attribute access.",{"type":44,"tag":69,"props":341,"children":342},{},[343],{"type":49,"value":344},"Keep method overrides signature-compatible with base classes.",{"type":44,"tag":69,"props":346,"children":347},{},[348],{"type":49,"value":349},"Annotate class attributes in tests\u002Fhelpers when inference is weak.",{"type":44,"tag":69,"props":351,"children":352},{},[353,355,361,363,369],{"type":49,"value":354},"Use relation objects (",{"type":44,"tag":144,"props":356,"children":358},{"className":357},[],[359],{"type":49,"value":360},"obj.related",{"type":49,"value":362},") when stubs do not expose raw ",{"type":44,"tag":144,"props":364,"children":366},{"className":365},[],[367],{"type":49,"value":368},"*_id",{"type":49,"value":370}," attributes.",{"type":44,"tag":52,"props":372,"children":374},{"id":373},"required-output-template",[375],{"type":49,"value":376},"Required Output Template",{"type":44,"tag":59,"props":378,"children":379},{},[380],{"type":49,"value":381},"Return this exact structure at the end of each batch:",{"type":44,"tag":383,"props":384,"children":389},"pre",{"className":385,"code":386,"language":387,"meta":388,"style":388},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","## Batch Summary\n\n- Branch\u002Fworktree: `\u003Cname>`\n- Ownership\u002Fdomain: `\u003Cteam-or-domain>`\n\n### Modules Removed From Exclusion\n\n- `\u003Cmodule.path.one>`\n- `\u003Cmodule.path.two>`\n\n### Files Changed\n\n- `\u003Cpath>`\n- `\u003Cpath>`\n\n### Key Typing Fixes\n\n- `\u003Cshort rationale + fix>`\n- `\u003Cshort rationale + fix>`\n\n### Validation\n\n- `mypy`: `\u003Cpass\u002Ffail + scope>`\n- `pre-commit --files`: `\u003Cpass\u002Ffail>`\n- `pytest`: `\u003Cpass\u002Ffail + scope>`\n\n### Notes\n\n- Remaining blockers: `\u003Cnone or details>`\n- Any new ignore entries: `\u003Cnone or file + ignore code + reason>`\n","markdown","",[390],{"type":44,"tag":144,"props":391,"children":392},{"__ignoreMap":388},[393,411,421,452,478,486,500,508,530,551,559,572,580,601,621,629,642,650,671,691,699,712,720,759,797,834,842,855,863,889],{"type":44,"tag":394,"props":395,"children":398},"span",{"class":396,"line":397},"line",1,[399,405],{"type":44,"tag":394,"props":400,"children":402},{"style":401},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[403],{"type":49,"value":404},"## ",{"type":44,"tag":394,"props":406,"children":408},{"style":407},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[409],{"type":49,"value":410},"Batch Summary\n",{"type":44,"tag":394,"props":412,"children":414},{"class":396,"line":413},2,[415],{"type":44,"tag":394,"props":416,"children":418},{"emptyLinePlaceholder":417},true,[419],{"type":49,"value":420},"\n",{"type":44,"tag":394,"props":422,"children":424},{"class":396,"line":423},3,[425,430,436,441,447],{"type":44,"tag":394,"props":426,"children":427},{"style":401},[428],{"type":49,"value":429},"-",{"type":44,"tag":394,"props":431,"children":433},{"style":432},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[434],{"type":49,"value":435}," Branch\u002Fworktree: ",{"type":44,"tag":394,"props":437,"children":438},{"style":401},[439],{"type":49,"value":440},"`",{"type":44,"tag":394,"props":442,"children":444},{"style":443},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[445],{"type":49,"value":446},"\u003Cname>",{"type":44,"tag":394,"props":448,"children":449},{"style":401},[450],{"type":49,"value":451},"`\n",{"type":44,"tag":394,"props":453,"children":455},{"class":396,"line":454},4,[456,460,465,469,474],{"type":44,"tag":394,"props":457,"children":458},{"style":401},[459],{"type":49,"value":429},{"type":44,"tag":394,"props":461,"children":462},{"style":432},[463],{"type":49,"value":464}," Ownership\u002Fdomain: ",{"type":44,"tag":394,"props":466,"children":467},{"style":401},[468],{"type":49,"value":440},{"type":44,"tag":394,"props":470,"children":471},{"style":443},[472],{"type":49,"value":473},"\u003Cteam-or-domain>",{"type":44,"tag":394,"props":475,"children":476},{"style":401},[477],{"type":49,"value":451},{"type":44,"tag":394,"props":479,"children":481},{"class":396,"line":480},5,[482],{"type":44,"tag":394,"props":483,"children":484},{"emptyLinePlaceholder":417},[485],{"type":49,"value":420},{"type":44,"tag":394,"props":487,"children":489},{"class":396,"line":488},6,[490,495],{"type":44,"tag":394,"props":491,"children":492},{"style":401},[493],{"type":49,"value":494},"### ",{"type":44,"tag":394,"props":496,"children":497},{"style":407},[498],{"type":49,"value":499},"Modules Removed From Exclusion\n",{"type":44,"tag":394,"props":501,"children":503},{"class":396,"line":502},7,[504],{"type":44,"tag":394,"props":505,"children":506},{"emptyLinePlaceholder":417},[507],{"type":49,"value":420},{"type":44,"tag":394,"props":509,"children":511},{"class":396,"line":510},8,[512,516,521,526],{"type":44,"tag":394,"props":513,"children":514},{"style":401},[515],{"type":49,"value":429},{"type":44,"tag":394,"props":517,"children":518},{"style":401},[519],{"type":49,"value":520}," `",{"type":44,"tag":394,"props":522,"children":523},{"style":443},[524],{"type":49,"value":525},"\u003Cmodule.path.one>",{"type":44,"tag":394,"props":527,"children":528},{"style":401},[529],{"type":49,"value":451},{"type":44,"tag":394,"props":531,"children":533},{"class":396,"line":532},9,[534,538,542,547],{"type":44,"tag":394,"props":535,"children":536},{"style":401},[537],{"type":49,"value":429},{"type":44,"tag":394,"props":539,"children":540},{"style":401},[541],{"type":49,"value":520},{"type":44,"tag":394,"props":543,"children":544},{"style":443},[545],{"type":49,"value":546},"\u003Cmodule.path.two>",{"type":44,"tag":394,"props":548,"children":549},{"style":401},[550],{"type":49,"value":451},{"type":44,"tag":394,"props":552,"children":554},{"class":396,"line":553},10,[555],{"type":44,"tag":394,"props":556,"children":557},{"emptyLinePlaceholder":417},[558],{"type":49,"value":420},{"type":44,"tag":394,"props":560,"children":562},{"class":396,"line":561},11,[563,567],{"type":44,"tag":394,"props":564,"children":565},{"style":401},[566],{"type":49,"value":494},{"type":44,"tag":394,"props":568,"children":569},{"style":407},[570],{"type":49,"value":571},"Files Changed\n",{"type":44,"tag":394,"props":573,"children":575},{"class":396,"line":574},12,[576],{"type":44,"tag":394,"props":577,"children":578},{"emptyLinePlaceholder":417},[579],{"type":49,"value":420},{"type":44,"tag":394,"props":581,"children":583},{"class":396,"line":582},13,[584,588,592,597],{"type":44,"tag":394,"props":585,"children":586},{"style":401},[587],{"type":49,"value":429},{"type":44,"tag":394,"props":589,"children":590},{"style":401},[591],{"type":49,"value":520},{"type":44,"tag":394,"props":593,"children":594},{"style":443},[595],{"type":49,"value":596},"\u003Cpath>",{"type":44,"tag":394,"props":598,"children":599},{"style":401},[600],{"type":49,"value":451},{"type":44,"tag":394,"props":602,"children":604},{"class":396,"line":603},14,[605,609,613,617],{"type":44,"tag":394,"props":606,"children":607},{"style":401},[608],{"type":49,"value":429},{"type":44,"tag":394,"props":610,"children":611},{"style":401},[612],{"type":49,"value":520},{"type":44,"tag":394,"props":614,"children":615},{"style":443},[616],{"type":49,"value":596},{"type":44,"tag":394,"props":618,"children":619},{"style":401},[620],{"type":49,"value":451},{"type":44,"tag":394,"props":622,"children":624},{"class":396,"line":623},15,[625],{"type":44,"tag":394,"props":626,"children":627},{"emptyLinePlaceholder":417},[628],{"type":49,"value":420},{"type":44,"tag":394,"props":630,"children":632},{"class":396,"line":631},16,[633,637],{"type":44,"tag":394,"props":634,"children":635},{"style":401},[636],{"type":49,"value":494},{"type":44,"tag":394,"props":638,"children":639},{"style":407},[640],{"type":49,"value":641},"Key Typing Fixes\n",{"type":44,"tag":394,"props":643,"children":645},{"class":396,"line":644},17,[646],{"type":44,"tag":394,"props":647,"children":648},{"emptyLinePlaceholder":417},[649],{"type":49,"value":420},{"type":44,"tag":394,"props":651,"children":653},{"class":396,"line":652},18,[654,658,662,667],{"type":44,"tag":394,"props":655,"children":656},{"style":401},[657],{"type":49,"value":429},{"type":44,"tag":394,"props":659,"children":660},{"style":401},[661],{"type":49,"value":520},{"type":44,"tag":394,"props":663,"children":664},{"style":443},[665],{"type":49,"value":666},"\u003Cshort rationale + fix>",{"type":44,"tag":394,"props":668,"children":669},{"style":401},[670],{"type":49,"value":451},{"type":44,"tag":394,"props":672,"children":674},{"class":396,"line":673},19,[675,679,683,687],{"type":44,"tag":394,"props":676,"children":677},{"style":401},[678],{"type":49,"value":429},{"type":44,"tag":394,"props":680,"children":681},{"style":401},[682],{"type":49,"value":520},{"type":44,"tag":394,"props":684,"children":685},{"style":443},[686],{"type":49,"value":666},{"type":44,"tag":394,"props":688,"children":689},{"style":401},[690],{"type":49,"value":451},{"type":44,"tag":394,"props":692,"children":694},{"class":396,"line":693},20,[695],{"type":44,"tag":394,"props":696,"children":697},{"emptyLinePlaceholder":417},[698],{"type":49,"value":420},{"type":44,"tag":394,"props":700,"children":702},{"class":396,"line":701},21,[703,707],{"type":44,"tag":394,"props":704,"children":705},{"style":401},[706],{"type":49,"value":494},{"type":44,"tag":394,"props":708,"children":709},{"style":407},[710],{"type":49,"value":711},"Validation\n",{"type":44,"tag":394,"props":713,"children":715},{"class":396,"line":714},22,[716],{"type":44,"tag":394,"props":717,"children":718},{"emptyLinePlaceholder":417},[719],{"type":49,"value":420},{"type":44,"tag":394,"props":721,"children":723},{"class":396,"line":722},23,[724,728,732,737,741,746,750,755],{"type":44,"tag":394,"props":725,"children":726},{"style":401},[727],{"type":49,"value":429},{"type":44,"tag":394,"props":729,"children":730},{"style":401},[731],{"type":49,"value":520},{"type":44,"tag":394,"props":733,"children":734},{"style":443},[735],{"type":49,"value":736},"mypy",{"type":44,"tag":394,"props":738,"children":739},{"style":401},[740],{"type":49,"value":440},{"type":44,"tag":394,"props":742,"children":743},{"style":432},[744],{"type":49,"value":745},": ",{"type":44,"tag":394,"props":747,"children":748},{"style":401},[749],{"type":49,"value":440},{"type":44,"tag":394,"props":751,"children":752},{"style":443},[753],{"type":49,"value":754},"\u003Cpass\u002Ffail + scope>",{"type":44,"tag":394,"props":756,"children":757},{"style":401},[758],{"type":49,"value":451},{"type":44,"tag":394,"props":760,"children":762},{"class":396,"line":761},24,[763,767,771,776,780,784,788,793],{"type":44,"tag":394,"props":764,"children":765},{"style":401},[766],{"type":49,"value":429},{"type":44,"tag":394,"props":768,"children":769},{"style":401},[770],{"type":49,"value":520},{"type":44,"tag":394,"props":772,"children":773},{"style":443},[774],{"type":49,"value":775},"pre-commit --files",{"type":44,"tag":394,"props":777,"children":778},{"style":401},[779],{"type":49,"value":440},{"type":44,"tag":394,"props":781,"children":782},{"style":432},[783],{"type":49,"value":745},{"type":44,"tag":394,"props":785,"children":786},{"style":401},[787],{"type":49,"value":440},{"type":44,"tag":394,"props":789,"children":790},{"style":443},[791],{"type":49,"value":792},"\u003Cpass\u002Ffail>",{"type":44,"tag":394,"props":794,"children":795},{"style":401},[796],{"type":49,"value":451},{"type":44,"tag":394,"props":798,"children":800},{"class":396,"line":799},25,[801,805,809,814,818,822,826,830],{"type":44,"tag":394,"props":802,"children":803},{"style":401},[804],{"type":49,"value":429},{"type":44,"tag":394,"props":806,"children":807},{"style":401},[808],{"type":49,"value":520},{"type":44,"tag":394,"props":810,"children":811},{"style":443},[812],{"type":49,"value":813},"pytest",{"type":44,"tag":394,"props":815,"children":816},{"style":401},[817],{"type":49,"value":440},{"type":44,"tag":394,"props":819,"children":820},{"style":432},[821],{"type":49,"value":745},{"type":44,"tag":394,"props":823,"children":824},{"style":401},[825],{"type":49,"value":440},{"type":44,"tag":394,"props":827,"children":828},{"style":443},[829],{"type":49,"value":754},{"type":44,"tag":394,"props":831,"children":832},{"style":401},[833],{"type":49,"value":451},{"type":44,"tag":394,"props":835,"children":837},{"class":396,"line":836},26,[838],{"type":44,"tag":394,"props":839,"children":840},{"emptyLinePlaceholder":417},[841],{"type":49,"value":420},{"type":44,"tag":394,"props":843,"children":845},{"class":396,"line":844},27,[846,850],{"type":44,"tag":394,"props":847,"children":848},{"style":401},[849],{"type":49,"value":494},{"type":44,"tag":394,"props":851,"children":852},{"style":407},[853],{"type":49,"value":854},"Notes\n",{"type":44,"tag":394,"props":856,"children":858},{"class":396,"line":857},28,[859],{"type":44,"tag":394,"props":860,"children":861},{"emptyLinePlaceholder":417},[862],{"type":49,"value":420},{"type":44,"tag":394,"props":864,"children":866},{"class":396,"line":865},29,[867,871,876,880,885],{"type":44,"tag":394,"props":868,"children":869},{"style":401},[870],{"type":49,"value":429},{"type":44,"tag":394,"props":872,"children":873},{"style":432},[874],{"type":49,"value":875}," Remaining blockers: ",{"type":44,"tag":394,"props":877,"children":878},{"style":401},[879],{"type":49,"value":440},{"type":44,"tag":394,"props":881,"children":882},{"style":443},[883],{"type":49,"value":884},"\u003Cnone or details>",{"type":44,"tag":394,"props":886,"children":887},{"style":401},[888],{"type":49,"value":451},{"type":44,"tag":394,"props":890,"children":892},{"class":396,"line":891},30,[893,897,902,906,911],{"type":44,"tag":394,"props":894,"children":895},{"style":401},[896],{"type":49,"value":429},{"type":44,"tag":394,"props":898,"children":899},{"style":432},[900],{"type":49,"value":901}," Any new ignore entries: ",{"type":44,"tag":394,"props":903,"children":904},{"style":401},[905],{"type":49,"value":440},{"type":44,"tag":394,"props":907,"children":908},{"style":443},[909],{"type":49,"value":910},"\u003Cnone or file + ignore code + reason>",{"type":44,"tag":394,"props":912,"children":913},{"style":401},[914],{"type":49,"value":451},{"type":44,"tag":52,"props":916,"children":918},{"id":917},"stop-conditions-escalate-to-manager",[919],{"type":49,"value":920},"Stop Conditions (Escalate to Manager)",{"type":44,"tag":59,"props":922,"children":923},{},[924],{"type":49,"value":925},"Stop and report instead of widening scope when:",{"type":44,"tag":65,"props":927,"children":928},{},[929,934,946],{"type":44,"tag":69,"props":930,"children":931},{},[932],{"type":49,"value":933},"fixes require touching another team\u002Fdomain,",{"type":44,"tag":69,"props":935,"children":936},{},[937,939,944],{"type":49,"value":938},"exclusion conflicts in ",{"type":44,"tag":144,"props":940,"children":942},{"className":941},[],[943],{"type":49,"value":149},{"type":49,"value":945}," cannot be resolved safely,",{"type":44,"tag":69,"props":947,"children":948},{},[949],{"type":49,"value":950},"error volume indicates batch is too large and should be split.",{"type":44,"tag":952,"props":953,"children":954},"style",{},[955],{"type":49,"value":956},"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":958,"total":1126},[959,982,996,1007,1021,1038,1054,1068,1076,1087,1097,1113],{"slug":960,"name":960,"fn":961,"description":962,"org":963,"tags":964,"stars":979,"repoUrl":980,"updatedAt":981},"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},[965,966,969,972,973,976],{"name":24,"slug":25,"type":16},{"name":967,"slug":968,"type":16},"iOS","ios",{"name":970,"slug":971,"type":16},"macOS","macos",{"name":9,"slug":8,"type":16},{"name":974,"slug":975,"type":16},"Testing","testing",{"name":977,"slug":978,"type":16},"Xcode","xcode",6176,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002FXcodeBuildMCP","2026-04-06T18:13:34.8719",{"slug":983,"name":983,"fn":984,"description":985,"org":986,"tags":987,"stars":979,"repoUrl":980,"updatedAt":995},"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},[988,991,992,993,994],{"name":989,"slug":990,"type":16},"CLI","cli",{"name":967,"slug":968,"type":16},{"name":970,"slug":971,"type":16},{"name":974,"slug":975,"type":16},{"name":977,"slug":978,"type":16},"2026-04-06T18:13:36.13414",{"slug":997,"name":997,"fn":998,"description":999,"org":1000,"tags":1001,"stars":26,"repoUrl":27,"updatedAt":1006},"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},[1002,1005],{"name":1003,"slug":1004,"type":16},"Documentation","documentation",{"name":18,"slug":19,"type":16},"2026-05-15T06:16:29.695991",{"slug":1008,"name":1008,"fn":1009,"description":1010,"org":1011,"tags":1012,"stars":26,"repoUrl":27,"updatedAt":1020},"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},[1013,1016,1017],{"name":1014,"slug":1015,"type":16},"Communications","communications",{"name":9,"slug":8,"type":16},{"name":1018,"slug":1019,"type":16},"Technical Writing","technical-writing","2026-05-15T06:16:33.38217",{"slug":1022,"name":1022,"fn":1023,"description":1024,"org":1025,"tags":1026,"stars":26,"repoUrl":27,"updatedAt":1037},"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},[1027,1030,1033,1034],{"name":1028,"slug":1029,"type":16},"Branding","branding",{"name":1031,"slug":1032,"type":16},"Content Creation","content-creation",{"name":9,"slug":8,"type":16},{"name":1035,"slug":1036,"type":16},"UX Copy","ux-copy","2026-05-15T06:16:22.395707",{"slug":1039,"name":1039,"fn":1040,"description":1041,"org":1042,"tags":1043,"stars":26,"repoUrl":27,"updatedAt":1053},"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},[1044,1047,1050],{"name":1045,"slug":1046,"type":16},"Claude Code","claude-code",{"name":1048,"slug":1049,"type":16},"Configuration","configuration",{"name":1051,"slug":1052,"type":16},"Security","security","2026-05-15T06:16:44.335977",{"slug":1055,"name":1055,"fn":1056,"description":1057,"org":1058,"tags":1059,"stars":26,"repoUrl":27,"updatedAt":1067},"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},[1060,1062,1063,1066],{"name":1061,"slug":1055,"type":16},"Code Review",{"name":18,"slug":19,"type":16},{"name":1064,"slug":1065,"type":16},"Performance","performance",{"name":1051,"slug":1052,"type":16},"2026-05-15T06:16:35.824864",{"slug":1069,"name":1069,"fn":1070,"description":1071,"org":1072,"tags":1073,"stars":26,"repoUrl":27,"updatedAt":1075},"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},[1074],{"name":21,"slug":22,"type":16},"2026-05-15T06:16:32.127981",{"slug":1077,"name":1077,"fn":1078,"description":1079,"org":1080,"tags":1081,"stars":26,"repoUrl":27,"updatedAt":1086},"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},[1082,1085],{"name":1083,"slug":1084,"type":16},"Git","git",{"name":9,"slug":8,"type":16},"2026-07-18T05:15:10.723937",{"slug":1088,"name":1088,"fn":1089,"description":1090,"org":1091,"tags":1092,"stars":26,"repoUrl":27,"updatedAt":1096},"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},[1093,1094,1095],{"name":18,"slug":19,"type":16},{"name":1083,"slug":1084,"type":16},{"name":9,"slug":8,"type":16},"2026-05-15T06:16:39.458431",{"slug":1098,"name":1098,"fn":1099,"description":1100,"org":1101,"tags":1102,"stars":26,"repoUrl":27,"updatedAt":1112},"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},[1103,1106,1107,1110,1111],{"name":1104,"slug":1105,"type":16},"Access Control","access-control",{"name":21,"slug":22,"type":16},{"name":1108,"slug":1109,"type":16},"Django","django",{"name":14,"slug":15,"type":16},{"name":1051,"slug":1052,"type":16},"2026-05-15T06:16:43.098698",{"slug":1114,"name":1114,"fn":1115,"description":1116,"org":1117,"tags":1118,"stars":26,"repoUrl":27,"updatedAt":1125},"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},[1119,1120,1123,1124],{"name":1061,"slug":1055,"type":16},{"name":1121,"slug":1122,"type":16},"Database","database",{"name":1108,"slug":1109,"type":16},{"name":1064,"slug":1065,"type":16},"2026-05-15T06:16:24.832813",88,{"items":1128,"total":857},[1129,1134,1140,1147,1153,1160,1164],{"slug":997,"name":997,"fn":998,"description":999,"org":1130,"tags":1131,"stars":26,"repoUrl":27,"updatedAt":1006},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1132,1133],{"name":1003,"slug":1004,"type":16},{"name":18,"slug":19,"type":16},{"slug":1008,"name":1008,"fn":1009,"description":1010,"org":1135,"tags":1136,"stars":26,"repoUrl":27,"updatedAt":1020},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1137,1138,1139],{"name":1014,"slug":1015,"type":16},{"name":9,"slug":8,"type":16},{"name":1018,"slug":1019,"type":16},{"slug":1022,"name":1022,"fn":1023,"description":1024,"org":1141,"tags":1142,"stars":26,"repoUrl":27,"updatedAt":1037},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1143,1144,1145,1146],{"name":1028,"slug":1029,"type":16},{"name":1031,"slug":1032,"type":16},{"name":9,"slug":8,"type":16},{"name":1035,"slug":1036,"type":16},{"slug":1039,"name":1039,"fn":1040,"description":1041,"org":1148,"tags":1149,"stars":26,"repoUrl":27,"updatedAt":1053},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1150,1151,1152],{"name":1045,"slug":1046,"type":16},{"name":1048,"slug":1049,"type":16},{"name":1051,"slug":1052,"type":16},{"slug":1055,"name":1055,"fn":1056,"description":1057,"org":1154,"tags":1155,"stars":26,"repoUrl":27,"updatedAt":1067},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1156,1157,1158,1159],{"name":1061,"slug":1055,"type":16},{"name":18,"slug":19,"type":16},{"name":1064,"slug":1065,"type":16},{"name":1051,"slug":1052,"type":16},{"slug":1069,"name":1069,"fn":1070,"description":1071,"org":1161,"tags":1162,"stars":26,"repoUrl":27,"updatedAt":1075},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1163],{"name":21,"slug":22,"type":16},{"slug":1077,"name":1077,"fn":1078,"description":1079,"org":1165,"tags":1166,"stars":26,"repoUrl":27,"updatedAt":1086},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1167,1168],{"name":1083,"slug":1084,"type":16},{"name":9,"slug":8,"type":16}]