[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-sentry-sentry-snapshots-cocoa":3,"mdc-39q8l1-key":39,"related-org-sentry-sentry-snapshots-cocoa":1214,"related-repo-sentry-sentry-snapshots-cocoa":1390},{"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":37,"mdContent":38},"sentry-snapshots-cocoa","setup Sentry snapshot testing for Apple projects","Full Sentry Snapshots setup for Apple\u002FCocoa projects. Use when asked to \"setup SnapshotPreviews\", \"setup Apple snapshot testing\", \"upload Apple snapshots to Sentry\", \"setup Apple snapshot GitHub Actions\", or \"setup Apple selective snapshot testing\".",{"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,21,24],{"name":14,"slug":15,"type":16},"GitHub Actions","github-actions","tag",{"name":18,"slug":19,"type":16},"Apple","apple",{"name":9,"slug":8,"type":16},{"name":22,"slug":23,"type":16},"Testing","testing",{"name":25,"slug":26,"type":16},"Debugging","debugging",1,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fagent-plugin","2026-08-10T04:45:54.017997","Apache-2.0",0,[33],"tag-production",{"repoUrl":28,"stars":27,"forks":31,"topics":35,"description":36},[33],"Official Sentry Agent Plugin. Why click buttons to debug errors and trace performance issues, when your agent can?","https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fagent-plugin\u002Ftree\u002FHEAD\u002Fskills\u002Fsentry-snapshots-cocoa","---\nname: sentry-snapshots-cocoa\ndescription: Full Sentry Snapshots setup for Apple\u002FCocoa projects. Use when asked to \"setup SnapshotPreviews\", \"setup Apple snapshot testing\", \"upload Apple snapshots to Sentry\", \"setup Apple snapshot GitHub Actions\", or \"setup Apple selective snapshot testing\".\nlicense: Apache-2.0\n---\n# Sentry Snapshots for Apple\u002FCocoa\n\n## Scope\n\n- Goal: generate Apple snapshot images and upload them to Sentry Snapshots.\n- Detect existing snapshot generation first, including Point-Free\n  `swift-snapshot-testing`; preserve it when it already emits or can emit PNGs or JPEGs.\n- Use the Sentry Wizard `appleSnapshots` flow only when setting up Sentry’s first-party\n  SnapshotPreviews solution.\n- Use manual setup only if the wizard is unavailable, cannot resolve targets\n  non-interactively after disambiguation, or fails after explicit disambiguation.\n- Package-only SwiftPM: stop and ask for the host app\u002Ftest target; standalone\n  `swift test` rendering is not supported.\n\n## Detect\n\nDo only enough detection to route before calling the wizard:\n\n```bash\n# SnapshotPreviews (Sentry first-party) -> prefer wizard \u002F SnapshotPreviews routing\nfind . \\( -name Package.swift -o -name Package.resolved -o -path '*\u002Fproject.pbxproj' \\) -print0 2>\u002Fdev\u002Fnull | xargs -0 grep -lE \"SnapshotPreviews\" 2>\u002Fdev\u002Fnull\n\n# Point-Free swift-snapshot-testing -> preserve generator, swift-snapshot-testing CI path\nfind . \\( -name Package.swift -o -name Package.resolved -o -path '*\u002Fproject.pbxproj' \\) -print0 2>\u002Fdev\u002Fnull | xargs -0 grep -lE \"swift-snapshot-testing|SnapshotTesting|assertSnapshot|__Snapshots__|TEST_RUNNER_SNAPSHOT_TESTING_RECORD\" 2>\u002Fdev\u002Fnull\n\n# Required wizard input\nfind . -name '*.xcodeproj' -print 2>\u002Fdev\u002Fnull | head -20\n\n# Workflow shape\nls fastlane\u002FFastfile Gemfile 2>\u002Fdev\u002Fnull\n\n# Sentry auth presence only -> never print secret values\n[ -n \"$SENTRY_AUTH_TOKEN\" ] && echo \"SENTRY_AUTH_TOKEN=set\" || echo \"SENTRY_AUTH_TOKEN=unset\"\n[ -n \"$SENTRY_ORG\" ] && echo \"SENTRY_ORG=set\" || echo \"SENTRY_ORG=unset\"\n[ -n \"$SENTRY_PROJECT\" ] && echo \"SENTRY_PROJECT=set\" || echo \"SENTRY_PROJECT=unset\"\n```\n\nRecord: existing SnapshotPreviews setup, existing snapshot generator\u002Flibrary, output\ndirectory if known, Xcode project directory, CI provider, Fastlane, and Sentry auth.\nFor each `.xcodeproj` match, record the containing directory for `--xcode-project-dir`;\nif `find` prints `.\u002FMyApp\u002FMyApp.xcodeproj`, pass `.\u002FMyApp`, not the bundle path.\nLet the wizard detect app targets, hosted XCTest targets, and Swift previews only when\nno existing generator is present.\n\n## Route\n\nResolve routing in this order; setup is the primary path and CI is optional follow-up.\n\n1. Select or create the image generator:\n   - named generator wins;\n   - multiple existing generators with no user choice -> ask;\n   - existing non-SnapshotPreviews generator -> preserve it;\n   - existing SnapshotPreviews -> use it;\n   - no existing generator -> set up SnapshotPreviews by default for Sentry Snapshots or\n     Apple snapshot testing.\n2. For SnapshotPreviews, stop before setup\u002Fverification\u002FCI if there is no `.xcodeproj`\n   host app or no hosted XCTest target.\n   These stops do not apply when preserving another generator.\n3. For setup or verification:\n   - existing non-SnapshotPreviews generator -> read `references\u002Fsnapshots.md`;\n   - existing SnapshotPreviews -> read `references\u002Fsnapshot-previews.md` and\n     `references\u002Fsnapshots.md`;\n   - new SnapshotPreviews setup -> read `references\u002Fwizard-setup.md`;\n   - wizard reports no Swift previews -> ask before adding previews or choosing another\n     generator.\n4. For GitHub Actions\u002FCI only after an image generator exists:\n   - Point-Free `swift-snapshot-testing` -> read\n     `references\u002Fgithub-actions-swift-snapshot-testing.md` and\n     `references\u002Fsnapshots.md`;\n   - other non-SnapshotPreviews generator -> read `references\u002Fsnapshots.md` and adapt\n     existing CI\u002Fupload;\n   - SnapshotPreviews, one simulator only, no matrix\u002Ffanout\u002Fselective CI -> read\n     `references\u002Fgithub-actions-simple.md`;\n   - SnapshotPreviews with multiple simulators, device families, matrix, or any\n     selective CI -> read `references\u002Fgithub-actions-fanout.md` and\n     `references\u002Fsnapshot-previews.md`.\n\n## Optional References\n\n| Need | Read |\n| --- | --- |\n| First-party SnapshotPreviews setup, disambiguation, or manual fallback | `references\u002Fwizard-setup.md` |\n| SnapshotPreviews metadata, rendering preferences, selective rendering, or SnapshotPreviews-specific troubleshooting | `references\u002Fsnapshot-previews.md` |\n| Upload any generated snapshot images to Sentry with Fastlane, `sentry-cli`, manifests, CI notes, or upload troubleshooting | `references\u002Fsnapshots.md` |\n| One-destination GitHub Actions workflow | `references\u002Fgithub-actions-simple.md` |\n| Multi-destination\u002Ffan-out GitHub Actions workflow | `references\u002Fgithub-actions-fanout.md` |\n| Point-Free `swift-snapshot-testing` GitHub Actions workflow | `references\u002Fgithub-actions-swift-snapshot-testing.md` |\n\n## Completion Checks\n\n- The selected snapshot image generator is documented and preserved or configured\n  according to the route above.\n- Snapshot generation appears in the relevant local or CI test logs.\n- Export directory contains `.png` files and any generated `.json` sidecars.\n- Upload succeeds and prints a Sentry URL or snapshot id.\n- Base branch upload is full; selective PR upload includes the full image-name manifest.\n",{"data":40,"body":41},{"name":4,"description":6,"license":30},{"type":42,"children":43},"root",[44,53,60,115,121,127,777,821,827,832,1014,1020,1158,1164,1208],{"type":45,"tag":46,"props":47,"children":49},"element","h1",{"id":48},"sentry-snapshots-for-applecocoa",[50],{"type":51,"value":52},"text","Sentry Snapshots for Apple\u002FCocoa",{"type":45,"tag":54,"props":55,"children":57},"h2",{"id":56},"scope",[58],{"type":51,"value":59},"Scope",{"type":45,"tag":61,"props":62,"children":63},"ul",{},[64,70,84,97,102],{"type":45,"tag":65,"props":66,"children":67},"li",{},[68],{"type":51,"value":69},"Goal: generate Apple snapshot images and upload them to Sentry Snapshots.",{"type":45,"tag":65,"props":71,"children":72},{},[73,75,82],{"type":51,"value":74},"Detect existing snapshot generation first, including Point-Free\n",{"type":45,"tag":76,"props":77,"children":79},"code",{"className":78},[],[80],{"type":51,"value":81},"swift-snapshot-testing",{"type":51,"value":83},"; preserve it when it already emits or can emit PNGs or JPEGs.",{"type":45,"tag":65,"props":85,"children":86},{},[87,89,95],{"type":51,"value":88},"Use the Sentry Wizard ",{"type":45,"tag":76,"props":90,"children":92},{"className":91},[],[93],{"type":51,"value":94},"appleSnapshots",{"type":51,"value":96}," flow only when setting up Sentry’s first-party\nSnapshotPreviews solution.",{"type":45,"tag":65,"props":98,"children":99},{},[100],{"type":51,"value":101},"Use manual setup only if the wizard is unavailable, cannot resolve targets\nnon-interactively after disambiguation, or fails after explicit disambiguation.",{"type":45,"tag":65,"props":103,"children":104},{},[105,107,113],{"type":51,"value":106},"Package-only SwiftPM: stop and ask for the host app\u002Ftest target; standalone\n",{"type":45,"tag":76,"props":108,"children":110},{"className":109},[],[111],{"type":51,"value":112},"swift test",{"type":51,"value":114}," rendering is not supported.",{"type":45,"tag":54,"props":116,"children":118},{"id":117},"detect",[119],{"type":51,"value":120},"Detect",{"type":45,"tag":122,"props":123,"children":124},"p",{},[125],{"type":51,"value":126},"Do only enough detection to route before calling the wizard:",{"type":45,"tag":128,"props":129,"children":134},"pre",{"className":130,"code":131,"language":132,"meta":133,"style":133},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# SnapshotPreviews (Sentry first-party) -> prefer wizard \u002F SnapshotPreviews routing\nfind . \\( -name Package.swift -o -name Package.resolved -o -path '*\u002Fproject.pbxproj' \\) -print0 2>\u002Fdev\u002Fnull | xargs -0 grep -lE \"SnapshotPreviews\" 2>\u002Fdev\u002Fnull\n\n# Point-Free swift-snapshot-testing -> preserve generator, swift-snapshot-testing CI path\nfind . \\( -name Package.swift -o -name Package.resolved -o -path '*\u002Fproject.pbxproj' \\) -print0 2>\u002Fdev\u002Fnull | xargs -0 grep -lE \"swift-snapshot-testing|SnapshotTesting|assertSnapshot|__Snapshots__|TEST_RUNNER_SNAPSHOT_TESTING_RECORD\" 2>\u002Fdev\u002Fnull\n\n# Required wizard input\nfind . -name '*.xcodeproj' -print 2>\u002Fdev\u002Fnull | head -20\n\n# Workflow shape\nls fastlane\u002FFastfile Gemfile 2>\u002Fdev\u002Fnull\n\n# Sentry auth presence only -> never print secret values\n[ -n \"$SENTRY_AUTH_TOKEN\" ] && echo \"SENTRY_AUTH_TOKEN=set\" || echo \"SENTRY_AUTH_TOKEN=unset\"\n[ -n \"$SENTRY_ORG\" ] && echo \"SENTRY_ORG=set\" || echo \"SENTRY_ORG=unset\"\n[ -n \"$SENTRY_PROJECT\" ] && echo \"SENTRY_PROJECT=set\" || echo \"SENTRY_PROJECT=unset\"\n","bash","",[135],{"type":45,"tag":76,"props":136,"children":137},{"__ignoreMap":133},[138,149,290,300,309,422,430,439,495,503,512,539,547,556,635,706],{"type":45,"tag":139,"props":140,"children":142},"span",{"class":141,"line":27},"line",[143],{"type":45,"tag":139,"props":144,"children":146},{"style":145},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[147],{"type":51,"value":148},"# SnapshotPreviews (Sentry first-party) -> prefer wizard \u002F SnapshotPreviews routing\n",{"type":45,"tag":139,"props":150,"children":152},{"class":141,"line":151},2,[153,159,165,171,176,181,186,191,196,200,205,211,216,221,226,231,236,241,246,251,256,261,266,271,276,281,285],{"type":45,"tag":139,"props":154,"children":156},{"style":155},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[157],{"type":51,"value":158},"find",{"type":45,"tag":139,"props":160,"children":162},{"style":161},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[163],{"type":51,"value":164}," .",{"type":45,"tag":139,"props":166,"children":168},{"style":167},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[169],{"type":51,"value":170}," \\( ",{"type":45,"tag":139,"props":172,"children":173},{"style":161},[174],{"type":51,"value":175},"-name",{"type":45,"tag":139,"props":177,"children":178},{"style":161},[179],{"type":51,"value":180}," Package.swift",{"type":45,"tag":139,"props":182,"children":183},{"style":161},[184],{"type":51,"value":185}," -o",{"type":45,"tag":139,"props":187,"children":188},{"style":161},[189],{"type":51,"value":190}," -name",{"type":45,"tag":139,"props":192,"children":193},{"style":161},[194],{"type":51,"value":195}," Package.resolved",{"type":45,"tag":139,"props":197,"children":198},{"style":161},[199],{"type":51,"value":185},{"type":45,"tag":139,"props":201,"children":202},{"style":161},[203],{"type":51,"value":204}," -path",{"type":45,"tag":139,"props":206,"children":208},{"style":207},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[209],{"type":51,"value":210}," '",{"type":45,"tag":139,"props":212,"children":213},{"style":161},[214],{"type":51,"value":215},"*\u002Fproject.pbxproj",{"type":45,"tag":139,"props":217,"children":218},{"style":207},[219],{"type":51,"value":220},"'",{"type":45,"tag":139,"props":222,"children":223},{"style":167},[224],{"type":51,"value":225}," \\) ",{"type":45,"tag":139,"props":227,"children":228},{"style":161},[229],{"type":51,"value":230},"-print0",{"type":45,"tag":139,"props":232,"children":233},{"style":207},[234],{"type":51,"value":235}," 2>",{"type":45,"tag":139,"props":237,"children":238},{"style":161},[239],{"type":51,"value":240},"\u002Fdev\u002Fnull",{"type":45,"tag":139,"props":242,"children":243},{"style":207},[244],{"type":51,"value":245}," |",{"type":45,"tag":139,"props":247,"children":248},{"style":155},[249],{"type":51,"value":250}," xargs",{"type":45,"tag":139,"props":252,"children":253},{"style":161},[254],{"type":51,"value":255}," -0",{"type":45,"tag":139,"props":257,"children":258},{"style":161},[259],{"type":51,"value":260}," grep",{"type":45,"tag":139,"props":262,"children":263},{"style":161},[264],{"type":51,"value":265}," -lE",{"type":45,"tag":139,"props":267,"children":268},{"style":207},[269],{"type":51,"value":270}," \"",{"type":45,"tag":139,"props":272,"children":273},{"style":161},[274],{"type":51,"value":275},"SnapshotPreviews",{"type":45,"tag":139,"props":277,"children":278},{"style":207},[279],{"type":51,"value":280},"\"",{"type":45,"tag":139,"props":282,"children":283},{"style":207},[284],{"type":51,"value":235},{"type":45,"tag":139,"props":286,"children":287},{"style":161},[288],{"type":51,"value":289},"\u002Fdev\u002Fnull\n",{"type":45,"tag":139,"props":291,"children":293},{"class":141,"line":292},3,[294],{"type":45,"tag":139,"props":295,"children":297},{"emptyLinePlaceholder":296},true,[298],{"type":51,"value":299},"\n",{"type":45,"tag":139,"props":301,"children":303},{"class":141,"line":302},4,[304],{"type":45,"tag":139,"props":305,"children":306},{"style":145},[307],{"type":51,"value":308},"# Point-Free swift-snapshot-testing -> preserve generator, swift-snapshot-testing CI path\n",{"type":45,"tag":139,"props":310,"children":312},{"class":141,"line":311},5,[313,317,321,325,329,333,337,341,345,349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,410,414,418],{"type":45,"tag":139,"props":314,"children":315},{"style":155},[316],{"type":51,"value":158},{"type":45,"tag":139,"props":318,"children":319},{"style":161},[320],{"type":51,"value":164},{"type":45,"tag":139,"props":322,"children":323},{"style":167},[324],{"type":51,"value":170},{"type":45,"tag":139,"props":326,"children":327},{"style":161},[328],{"type":51,"value":175},{"type":45,"tag":139,"props":330,"children":331},{"style":161},[332],{"type":51,"value":180},{"type":45,"tag":139,"props":334,"children":335},{"style":161},[336],{"type":51,"value":185},{"type":45,"tag":139,"props":338,"children":339},{"style":161},[340],{"type":51,"value":190},{"type":45,"tag":139,"props":342,"children":343},{"style":161},[344],{"type":51,"value":195},{"type":45,"tag":139,"props":346,"children":347},{"style":161},[348],{"type":51,"value":185},{"type":45,"tag":139,"props":350,"children":351},{"style":161},[352],{"type":51,"value":204},{"type":45,"tag":139,"props":354,"children":355},{"style":207},[356],{"type":51,"value":210},{"type":45,"tag":139,"props":358,"children":359},{"style":161},[360],{"type":51,"value":215},{"type":45,"tag":139,"props":362,"children":363},{"style":207},[364],{"type":51,"value":220},{"type":45,"tag":139,"props":366,"children":367},{"style":167},[368],{"type":51,"value":225},{"type":45,"tag":139,"props":370,"children":371},{"style":161},[372],{"type":51,"value":230},{"type":45,"tag":139,"props":374,"children":375},{"style":207},[376],{"type":51,"value":235},{"type":45,"tag":139,"props":378,"children":379},{"style":161},[380],{"type":51,"value":240},{"type":45,"tag":139,"props":382,"children":383},{"style":207},[384],{"type":51,"value":245},{"type":45,"tag":139,"props":386,"children":387},{"style":155},[388],{"type":51,"value":250},{"type":45,"tag":139,"props":390,"children":391},{"style":161},[392],{"type":51,"value":255},{"type":45,"tag":139,"props":394,"children":395},{"style":161},[396],{"type":51,"value":260},{"type":45,"tag":139,"props":398,"children":399},{"style":161},[400],{"type":51,"value":265},{"type":45,"tag":139,"props":402,"children":403},{"style":207},[404],{"type":51,"value":270},{"type":45,"tag":139,"props":406,"children":407},{"style":161},[408],{"type":51,"value":409},"swift-snapshot-testing|SnapshotTesting|assertSnapshot|__Snapshots__|TEST_RUNNER_SNAPSHOT_TESTING_RECORD",{"type":45,"tag":139,"props":411,"children":412},{"style":207},[413],{"type":51,"value":280},{"type":45,"tag":139,"props":415,"children":416},{"style":207},[417],{"type":51,"value":235},{"type":45,"tag":139,"props":419,"children":420},{"style":161},[421],{"type":51,"value":289},{"type":45,"tag":139,"props":423,"children":425},{"class":141,"line":424},6,[426],{"type":45,"tag":139,"props":427,"children":428},{"emptyLinePlaceholder":296},[429],{"type":51,"value":299},{"type":45,"tag":139,"props":431,"children":433},{"class":141,"line":432},7,[434],{"type":45,"tag":139,"props":435,"children":436},{"style":145},[437],{"type":51,"value":438},"# Required wizard input\n",{"type":45,"tag":139,"props":440,"children":442},{"class":141,"line":441},8,[443,447,451,455,459,464,468,473,477,481,485,490],{"type":45,"tag":139,"props":444,"children":445},{"style":155},[446],{"type":51,"value":158},{"type":45,"tag":139,"props":448,"children":449},{"style":161},[450],{"type":51,"value":164},{"type":45,"tag":139,"props":452,"children":453},{"style":161},[454],{"type":51,"value":190},{"type":45,"tag":139,"props":456,"children":457},{"style":207},[458],{"type":51,"value":210},{"type":45,"tag":139,"props":460,"children":461},{"style":161},[462],{"type":51,"value":463},"*.xcodeproj",{"type":45,"tag":139,"props":465,"children":466},{"style":207},[467],{"type":51,"value":220},{"type":45,"tag":139,"props":469,"children":470},{"style":161},[471],{"type":51,"value":472}," -print",{"type":45,"tag":139,"props":474,"children":475},{"style":207},[476],{"type":51,"value":235},{"type":45,"tag":139,"props":478,"children":479},{"style":161},[480],{"type":51,"value":240},{"type":45,"tag":139,"props":482,"children":483},{"style":207},[484],{"type":51,"value":245},{"type":45,"tag":139,"props":486,"children":487},{"style":155},[488],{"type":51,"value":489}," head",{"type":45,"tag":139,"props":491,"children":492},{"style":161},[493],{"type":51,"value":494}," -20\n",{"type":45,"tag":139,"props":496,"children":498},{"class":141,"line":497},9,[499],{"type":45,"tag":139,"props":500,"children":501},{"emptyLinePlaceholder":296},[502],{"type":51,"value":299},{"type":45,"tag":139,"props":504,"children":506},{"class":141,"line":505},10,[507],{"type":45,"tag":139,"props":508,"children":509},{"style":145},[510],{"type":51,"value":511},"# Workflow shape\n",{"type":45,"tag":139,"props":513,"children":515},{"class":141,"line":514},11,[516,521,526,531,535],{"type":45,"tag":139,"props":517,"children":518},{"style":155},[519],{"type":51,"value":520},"ls",{"type":45,"tag":139,"props":522,"children":523},{"style":161},[524],{"type":51,"value":525}," fastlane\u002FFastfile",{"type":45,"tag":139,"props":527,"children":528},{"style":161},[529],{"type":51,"value":530}," Gemfile",{"type":45,"tag":139,"props":532,"children":533},{"style":207},[534],{"type":51,"value":235},{"type":45,"tag":139,"props":536,"children":537},{"style":161},[538],{"type":51,"value":289},{"type":45,"tag":139,"props":540,"children":542},{"class":141,"line":541},12,[543],{"type":45,"tag":139,"props":544,"children":545},{"emptyLinePlaceholder":296},[546],{"type":51,"value":299},{"type":45,"tag":139,"props":548,"children":550},{"class":141,"line":549},13,[551],{"type":45,"tag":139,"props":552,"children":553},{"style":145},[554],{"type":51,"value":555},"# Sentry auth presence only -> never print secret values\n",{"type":45,"tag":139,"props":557,"children":559},{"class":141,"line":558},14,[560,565,570,574,579,583,588,593,599,603,608,612,617,621,625,630],{"type":45,"tag":139,"props":561,"children":562},{"style":207},[563],{"type":51,"value":564},"[",{"type":45,"tag":139,"props":566,"children":567},{"style":207},[568],{"type":51,"value":569}," -n",{"type":45,"tag":139,"props":571,"children":572},{"style":207},[573],{"type":51,"value":270},{"type":45,"tag":139,"props":575,"children":576},{"style":167},[577],{"type":51,"value":578},"$SENTRY_AUTH_TOKEN",{"type":45,"tag":139,"props":580,"children":581},{"style":207},[582],{"type":51,"value":280},{"type":45,"tag":139,"props":584,"children":585},{"style":207},[586],{"type":51,"value":587}," ]",{"type":45,"tag":139,"props":589,"children":590},{"style":207},[591],{"type":51,"value":592}," &&",{"type":45,"tag":139,"props":594,"children":596},{"style":595},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[597],{"type":51,"value":598}," echo",{"type":45,"tag":139,"props":600,"children":601},{"style":207},[602],{"type":51,"value":270},{"type":45,"tag":139,"props":604,"children":605},{"style":161},[606],{"type":51,"value":607},"SENTRY_AUTH_TOKEN=set",{"type":45,"tag":139,"props":609,"children":610},{"style":207},[611],{"type":51,"value":280},{"type":45,"tag":139,"props":613,"children":614},{"style":207},[615],{"type":51,"value":616}," ||",{"type":45,"tag":139,"props":618,"children":619},{"style":595},[620],{"type":51,"value":598},{"type":45,"tag":139,"props":622,"children":623},{"style":207},[624],{"type":51,"value":270},{"type":45,"tag":139,"props":626,"children":627},{"style":161},[628],{"type":51,"value":629},"SENTRY_AUTH_TOKEN=unset",{"type":45,"tag":139,"props":631,"children":632},{"style":207},[633],{"type":51,"value":634},"\"\n",{"type":45,"tag":139,"props":636,"children":638},{"class":141,"line":637},15,[639,643,647,651,656,660,664,668,672,676,681,685,689,693,697,702],{"type":45,"tag":139,"props":640,"children":641},{"style":207},[642],{"type":51,"value":564},{"type":45,"tag":139,"props":644,"children":645},{"style":207},[646],{"type":51,"value":569},{"type":45,"tag":139,"props":648,"children":649},{"style":207},[650],{"type":51,"value":270},{"type":45,"tag":139,"props":652,"children":653},{"style":167},[654],{"type":51,"value":655},"$SENTRY_ORG",{"type":45,"tag":139,"props":657,"children":658},{"style":207},[659],{"type":51,"value":280},{"type":45,"tag":139,"props":661,"children":662},{"style":207},[663],{"type":51,"value":587},{"type":45,"tag":139,"props":665,"children":666},{"style":207},[667],{"type":51,"value":592},{"type":45,"tag":139,"props":669,"children":670},{"style":595},[671],{"type":51,"value":598},{"type":45,"tag":139,"props":673,"children":674},{"style":207},[675],{"type":51,"value":270},{"type":45,"tag":139,"props":677,"children":678},{"style":161},[679],{"type":51,"value":680},"SENTRY_ORG=set",{"type":45,"tag":139,"props":682,"children":683},{"style":207},[684],{"type":51,"value":280},{"type":45,"tag":139,"props":686,"children":687},{"style":207},[688],{"type":51,"value":616},{"type":45,"tag":139,"props":690,"children":691},{"style":595},[692],{"type":51,"value":598},{"type":45,"tag":139,"props":694,"children":695},{"style":207},[696],{"type":51,"value":270},{"type":45,"tag":139,"props":698,"children":699},{"style":161},[700],{"type":51,"value":701},"SENTRY_ORG=unset",{"type":45,"tag":139,"props":703,"children":704},{"style":207},[705],{"type":51,"value":634},{"type":45,"tag":139,"props":707,"children":709},{"class":141,"line":708},16,[710,714,718,722,727,731,735,739,743,747,752,756,760,764,768,773],{"type":45,"tag":139,"props":711,"children":712},{"style":207},[713],{"type":51,"value":564},{"type":45,"tag":139,"props":715,"children":716},{"style":207},[717],{"type":51,"value":569},{"type":45,"tag":139,"props":719,"children":720},{"style":207},[721],{"type":51,"value":270},{"type":45,"tag":139,"props":723,"children":724},{"style":167},[725],{"type":51,"value":726},"$SENTRY_PROJECT",{"type":45,"tag":139,"props":728,"children":729},{"style":207},[730],{"type":51,"value":280},{"type":45,"tag":139,"props":732,"children":733},{"style":207},[734],{"type":51,"value":587},{"type":45,"tag":139,"props":736,"children":737},{"style":207},[738],{"type":51,"value":592},{"type":45,"tag":139,"props":740,"children":741},{"style":595},[742],{"type":51,"value":598},{"type":45,"tag":139,"props":744,"children":745},{"style":207},[746],{"type":51,"value":270},{"type":45,"tag":139,"props":748,"children":749},{"style":161},[750],{"type":51,"value":751},"SENTRY_PROJECT=set",{"type":45,"tag":139,"props":753,"children":754},{"style":207},[755],{"type":51,"value":280},{"type":45,"tag":139,"props":757,"children":758},{"style":207},[759],{"type":51,"value":616},{"type":45,"tag":139,"props":761,"children":762},{"style":595},[763],{"type":51,"value":598},{"type":45,"tag":139,"props":765,"children":766},{"style":207},[767],{"type":51,"value":270},{"type":45,"tag":139,"props":769,"children":770},{"style":161},[771],{"type":51,"value":772},"SENTRY_PROJECT=unset",{"type":45,"tag":139,"props":774,"children":775},{"style":207},[776],{"type":51,"value":634},{"type":45,"tag":122,"props":778,"children":779},{},[780,782,788,790,796,798,803,805,811,813,819],{"type":51,"value":781},"Record: existing SnapshotPreviews setup, existing snapshot generator\u002Flibrary, output\ndirectory if known, Xcode project directory, CI provider, Fastlane, and Sentry auth.\nFor each ",{"type":45,"tag":76,"props":783,"children":785},{"className":784},[],[786],{"type":51,"value":787},".xcodeproj",{"type":51,"value":789}," match, record the containing directory for ",{"type":45,"tag":76,"props":791,"children":793},{"className":792},[],[794],{"type":51,"value":795},"--xcode-project-dir",{"type":51,"value":797},";\nif ",{"type":45,"tag":76,"props":799,"children":801},{"className":800},[],[802],{"type":51,"value":158},{"type":51,"value":804}," prints ",{"type":45,"tag":76,"props":806,"children":808},{"className":807},[],[809],{"type":51,"value":810},".\u002FMyApp\u002FMyApp.xcodeproj",{"type":51,"value":812},", pass ",{"type":45,"tag":76,"props":814,"children":816},{"className":815},[],[817],{"type":51,"value":818},".\u002FMyApp",{"type":51,"value":820},", not the bundle path.\nLet the wizard detect app targets, hosted XCTest targets, and Swift previews only when\nno existing generator is present.",{"type":45,"tag":54,"props":822,"children":824},{"id":823},"route",[825],{"type":51,"value":826},"Route",{"type":45,"tag":122,"props":828,"children":829},{},[830],{"type":51,"value":831},"Resolve routing in this order; setup is the primary path and CI is optional follow-up.",{"type":45,"tag":833,"props":834,"children":835},"ol",{},[836,869,881,938],{"type":45,"tag":65,"props":837,"children":838},{},[839,841],{"type":51,"value":840},"Select or create the image generator:\n",{"type":45,"tag":61,"props":842,"children":843},{},[844,849,854,859,864],{"type":45,"tag":65,"props":845,"children":846},{},[847],{"type":51,"value":848},"named generator wins;",{"type":45,"tag":65,"props":850,"children":851},{},[852],{"type":51,"value":853},"multiple existing generators with no user choice -> ask;",{"type":45,"tag":65,"props":855,"children":856},{},[857],{"type":51,"value":858},"existing non-SnapshotPreviews generator -> preserve it;",{"type":45,"tag":65,"props":860,"children":861},{},[862],{"type":51,"value":863},"existing SnapshotPreviews -> use it;",{"type":45,"tag":65,"props":865,"children":866},{},[867],{"type":51,"value":868},"no existing generator -> set up SnapshotPreviews by default for Sentry Snapshots or\nApple snapshot testing.",{"type":45,"tag":65,"props":870,"children":871},{},[872,874,879],{"type":51,"value":873},"For SnapshotPreviews, stop before setup\u002Fverification\u002FCI if there is no ",{"type":45,"tag":76,"props":875,"children":877},{"className":876},[],[878],{"type":51,"value":787},{"type":51,"value":880},"\nhost app or no hosted XCTest target.\nThese stops do not apply when preserving another generator.",{"type":45,"tag":65,"props":882,"children":883},{},[884,886],{"type":51,"value":885},"For setup or verification:\n",{"type":45,"tag":61,"props":887,"children":888},{},[889,902,921,933],{"type":45,"tag":65,"props":890,"children":891},{},[892,894,900],{"type":51,"value":893},"existing non-SnapshotPreviews generator -> read ",{"type":45,"tag":76,"props":895,"children":897},{"className":896},[],[898],{"type":51,"value":899},"references\u002Fsnapshots.md",{"type":51,"value":901},";",{"type":45,"tag":65,"props":903,"children":904},{},[905,907,913,915,920],{"type":51,"value":906},"existing SnapshotPreviews -> read ",{"type":45,"tag":76,"props":908,"children":910},{"className":909},[],[911],{"type":51,"value":912},"references\u002Fsnapshot-previews.md",{"type":51,"value":914}," and\n",{"type":45,"tag":76,"props":916,"children":918},{"className":917},[],[919],{"type":51,"value":899},{"type":51,"value":901},{"type":45,"tag":65,"props":922,"children":923},{},[924,926,932],{"type":51,"value":925},"new SnapshotPreviews setup -> read ",{"type":45,"tag":76,"props":927,"children":929},{"className":928},[],[930],{"type":51,"value":931},"references\u002Fwizard-setup.md",{"type":51,"value":901},{"type":45,"tag":65,"props":934,"children":935},{},[936],{"type":51,"value":937},"wizard reports no Swift previews -> ask before adding previews or choosing another\ngenerator.",{"type":45,"tag":65,"props":939,"children":940},{},[941,943],{"type":51,"value":942},"For GitHub Actions\u002FCI only after an image generator exists:\n",{"type":45,"tag":61,"props":944,"children":945},{},[946,971,983,995],{"type":45,"tag":65,"props":947,"children":948},{},[949,951,956,958,964,965,970],{"type":51,"value":950},"Point-Free ",{"type":45,"tag":76,"props":952,"children":954},{"className":953},[],[955],{"type":51,"value":81},{"type":51,"value":957}," -> read\n",{"type":45,"tag":76,"props":959,"children":961},{"className":960},[],[962],{"type":51,"value":963},"references\u002Fgithub-actions-swift-snapshot-testing.md",{"type":51,"value":914},{"type":45,"tag":76,"props":966,"children":968},{"className":967},[],[969],{"type":51,"value":899},{"type":51,"value":901},{"type":45,"tag":65,"props":972,"children":973},{},[974,976,981],{"type":51,"value":975},"other non-SnapshotPreviews generator -> read ",{"type":45,"tag":76,"props":977,"children":979},{"className":978},[],[980],{"type":51,"value":899},{"type":51,"value":982}," and adapt\nexisting CI\u002Fupload;",{"type":45,"tag":65,"props":984,"children":985},{},[986,988,994],{"type":51,"value":987},"SnapshotPreviews, one simulator only, no matrix\u002Ffanout\u002Fselective CI -> read\n",{"type":45,"tag":76,"props":989,"children":991},{"className":990},[],[992],{"type":51,"value":993},"references\u002Fgithub-actions-simple.md",{"type":51,"value":901},{"type":45,"tag":65,"props":996,"children":997},{},[998,1000,1006,1007,1012],{"type":51,"value":999},"SnapshotPreviews with multiple simulators, device families, matrix, or any\nselective CI -> read ",{"type":45,"tag":76,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":51,"value":1005},"references\u002Fgithub-actions-fanout.md",{"type":51,"value":914},{"type":45,"tag":76,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":51,"value":912},{"type":51,"value":1013},".",{"type":45,"tag":54,"props":1015,"children":1017},{"id":1016},"optional-references",[1018],{"type":51,"value":1019},"Optional References",{"type":45,"tag":1021,"props":1022,"children":1023},"table",{},[1024,1043],{"type":45,"tag":1025,"props":1026,"children":1027},"thead",{},[1028],{"type":45,"tag":1029,"props":1030,"children":1031},"tr",{},[1032,1038],{"type":45,"tag":1033,"props":1034,"children":1035},"th",{},[1036],{"type":51,"value":1037},"Need",{"type":45,"tag":1033,"props":1039,"children":1040},{},[1041],{"type":51,"value":1042},"Read",{"type":45,"tag":1044,"props":1045,"children":1046},"tbody",{},[1047,1064,1080,1104,1120,1136],{"type":45,"tag":1029,"props":1048,"children":1049},{},[1050,1056],{"type":45,"tag":1051,"props":1052,"children":1053},"td",{},[1054],{"type":51,"value":1055},"First-party SnapshotPreviews setup, disambiguation, or manual fallback",{"type":45,"tag":1051,"props":1057,"children":1058},{},[1059],{"type":45,"tag":76,"props":1060,"children":1062},{"className":1061},[],[1063],{"type":51,"value":931},{"type":45,"tag":1029,"props":1065,"children":1066},{},[1067,1072],{"type":45,"tag":1051,"props":1068,"children":1069},{},[1070],{"type":51,"value":1071},"SnapshotPreviews metadata, rendering preferences, selective rendering, or SnapshotPreviews-specific troubleshooting",{"type":45,"tag":1051,"props":1073,"children":1074},{},[1075],{"type":45,"tag":76,"props":1076,"children":1078},{"className":1077},[],[1079],{"type":51,"value":912},{"type":45,"tag":1029,"props":1081,"children":1082},{},[1083,1096],{"type":45,"tag":1051,"props":1084,"children":1085},{},[1086,1088,1094],{"type":51,"value":1087},"Upload any generated snapshot images to Sentry with Fastlane, ",{"type":45,"tag":76,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":51,"value":1093},"sentry-cli",{"type":51,"value":1095},", manifests, CI notes, or upload troubleshooting",{"type":45,"tag":1051,"props":1097,"children":1098},{},[1099],{"type":45,"tag":76,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":51,"value":899},{"type":45,"tag":1029,"props":1105,"children":1106},{},[1107,1112],{"type":45,"tag":1051,"props":1108,"children":1109},{},[1110],{"type":51,"value":1111},"One-destination GitHub Actions workflow",{"type":45,"tag":1051,"props":1113,"children":1114},{},[1115],{"type":45,"tag":76,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":51,"value":993},{"type":45,"tag":1029,"props":1121,"children":1122},{},[1123,1128],{"type":45,"tag":1051,"props":1124,"children":1125},{},[1126],{"type":51,"value":1127},"Multi-destination\u002Ffan-out GitHub Actions workflow",{"type":45,"tag":1051,"props":1129,"children":1130},{},[1131],{"type":45,"tag":76,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":51,"value":1005},{"type":45,"tag":1029,"props":1137,"children":1138},{},[1139,1150],{"type":45,"tag":1051,"props":1140,"children":1141},{},[1142,1143,1148],{"type":51,"value":950},{"type":45,"tag":76,"props":1144,"children":1146},{"className":1145},[],[1147],{"type":51,"value":81},{"type":51,"value":1149}," GitHub Actions workflow",{"type":45,"tag":1051,"props":1151,"children":1152},{},[1153],{"type":45,"tag":76,"props":1154,"children":1156},{"className":1155},[],[1157],{"type":51,"value":963},{"type":45,"tag":54,"props":1159,"children":1161},{"id":1160},"completion-checks",[1162],{"type":51,"value":1163},"Completion Checks",{"type":45,"tag":61,"props":1165,"children":1166},{},[1167,1172,1177,1198,1203],{"type":45,"tag":65,"props":1168,"children":1169},{},[1170],{"type":51,"value":1171},"The selected snapshot image generator is documented and preserved or configured\naccording to the route above.",{"type":45,"tag":65,"props":1173,"children":1174},{},[1175],{"type":51,"value":1176},"Snapshot generation appears in the relevant local or CI test logs.",{"type":45,"tag":65,"props":1178,"children":1179},{},[1180,1182,1188,1190,1196],{"type":51,"value":1181},"Export directory contains ",{"type":45,"tag":76,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":51,"value":1187},".png",{"type":51,"value":1189}," files and any generated ",{"type":45,"tag":76,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":51,"value":1195},".json",{"type":51,"value":1197}," sidecars.",{"type":45,"tag":65,"props":1199,"children":1200},{},[1201],{"type":51,"value":1202},"Upload succeeds and prints a Sentry URL or snapshot id.",{"type":45,"tag":65,"props":1204,"children":1205},{},[1206],{"type":51,"value":1207},"Base branch upload is full; selective PR upload includes the full image-name manifest.",{"type":45,"tag":1209,"props":1210,"children":1211},"style",{},[1212],{"type":51,"value":1213},"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":1215,"total":1389},[1216,1237,1251,1266,1280,1297,1313,1327,1337,1348,1358,1376],{"slug":1217,"name":1217,"fn":1218,"description":1219,"org":1220,"tags":1221,"stars":1234,"repoUrl":1235,"updatedAt":1236},"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},[1222,1223,1226,1229,1230,1231],{"name":25,"slug":26,"type":16},{"name":1224,"slug":1225,"type":16},"iOS","ios",{"name":1227,"slug":1228,"type":16},"macOS","macos",{"name":9,"slug":8,"type":16},{"name":22,"slug":23,"type":16},{"name":1232,"slug":1233,"type":16},"Xcode","xcode",6176,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002FXcodeBuildMCP","2026-04-06T18:13:34.8719",{"slug":1238,"name":1238,"fn":1239,"description":1240,"org":1241,"tags":1242,"stars":1234,"repoUrl":1235,"updatedAt":1250},"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},[1243,1246,1247,1248,1249],{"name":1244,"slug":1245,"type":16},"CLI","cli",{"name":1224,"slug":1225,"type":16},{"name":1227,"slug":1228,"type":16},{"name":22,"slug":23,"type":16},{"name":1232,"slug":1233,"type":16},"2026-04-06T18:13:36.13414",{"slug":1252,"name":1252,"fn":1253,"description":1254,"org":1255,"tags":1256,"stars":1263,"repoUrl":1264,"updatedAt":1265},"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},[1257,1260],{"name":1258,"slug":1259,"type":16},"Documentation","documentation",{"name":1261,"slug":1262,"type":16},"Engineering","engineering",861,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills","2026-05-15T06:16:29.695991",{"slug":1267,"name":1267,"fn":1268,"description":1269,"org":1270,"tags":1271,"stars":1263,"repoUrl":1264,"updatedAt":1279},"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},[1272,1275,1276],{"name":1273,"slug":1274,"type":16},"Communications","communications",{"name":9,"slug":8,"type":16},{"name":1277,"slug":1278,"type":16},"Technical Writing","technical-writing","2026-05-15T06:16:33.38217",{"slug":1281,"name":1281,"fn":1282,"description":1283,"org":1284,"tags":1285,"stars":1263,"repoUrl":1264,"updatedAt":1296},"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},[1286,1289,1292,1293],{"name":1287,"slug":1288,"type":16},"Branding","branding",{"name":1290,"slug":1291,"type":16},"Content Creation","content-creation",{"name":9,"slug":8,"type":16},{"name":1294,"slug":1295,"type":16},"UX Copy","ux-copy","2026-05-15T06:16:22.395707",{"slug":1298,"name":1298,"fn":1299,"description":1300,"org":1301,"tags":1302,"stars":1263,"repoUrl":1264,"updatedAt":1312},"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},[1303,1306,1309],{"name":1304,"slug":1305,"type":16},"Claude Code","claude-code",{"name":1307,"slug":1308,"type":16},"Configuration","configuration",{"name":1310,"slug":1311,"type":16},"Security","security","2026-05-15T06:16:44.335977",{"slug":1314,"name":1314,"fn":1315,"description":1316,"org":1317,"tags":1318,"stars":1263,"repoUrl":1264,"updatedAt":1326},"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},[1319,1321,1322,1325],{"name":1320,"slug":1314,"type":16},"Code Review",{"name":1261,"slug":1262,"type":16},{"name":1323,"slug":1324,"type":16},"Performance","performance",{"name":1310,"slug":1311,"type":16},"2026-05-15T06:16:35.824864",{"slug":1328,"name":1328,"fn":1329,"description":1330,"org":1331,"tags":1332,"stars":1263,"repoUrl":1264,"updatedAt":1336},"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},[1333],{"name":1334,"slug":1335,"type":16},"Code Analysis","code-analysis","2026-05-15T06:16:32.127981",{"slug":1338,"name":1338,"fn":1339,"description":1340,"org":1341,"tags":1342,"stars":1263,"repoUrl":1264,"updatedAt":1347},"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},[1343,1346],{"name":1344,"slug":1345,"type":16},"Git","git",{"name":9,"slug":8,"type":16},"2026-07-18T05:15:10.723937",{"slug":1349,"name":1349,"fn":1350,"description":1351,"org":1352,"tags":1353,"stars":1263,"repoUrl":1264,"updatedAt":1357},"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},[1354,1355,1356],{"name":1261,"slug":1262,"type":16},{"name":1344,"slug":1345,"type":16},{"name":9,"slug":8,"type":16},"2026-05-15T06:16:39.458431",{"slug":1359,"name":1359,"fn":1360,"description":1361,"org":1362,"tags":1363,"stars":1263,"repoUrl":1264,"updatedAt":1375},"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},[1364,1367,1368,1371,1374],{"name":1365,"slug":1366,"type":16},"Access Control","access-control",{"name":1334,"slug":1335,"type":16},{"name":1369,"slug":1370,"type":16},"Django","django",{"name":1372,"slug":1373,"type":16},"Python","python",{"name":1310,"slug":1311,"type":16},"2026-05-15T06:16:43.098698",{"slug":1377,"name":1377,"fn":1378,"description":1379,"org":1380,"tags":1381,"stars":1263,"repoUrl":1264,"updatedAt":1388},"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},[1382,1383,1386,1387],{"name":1320,"slug":1314,"type":16},{"name":1384,"slug":1385,"type":16},"Database","database",{"name":1369,"slug":1370,"type":16},{"name":1323,"slug":1324,"type":16},"2026-05-15T06:16:24.832813",91,{"items":1391,"total":424},[1392,1405,1416,1429,1442,1457],{"slug":1393,"name":1393,"fn":1394,"description":1395,"org":1396,"tags":1397,"stars":27,"repoUrl":28,"updatedAt":1404},"sentry-debug-issue","debug and resolve Sentry issues","Debug and fix a Sentry issue — find it (by link, ID, or search), pull full context (stack trace, breadcrumbs, trace, logs), optionally run Seer root-cause \u002F autofix, apply the code fix, and resolve it via a `Fixes PROJECT-NAME-12A` commit\u002FPR. Use when working a known error or hunting one down to fix.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1398,1399,1400,1403],{"name":1320,"slug":1314,"type":16},{"name":25,"slug":26,"type":16},{"name":1401,"slug":1402,"type":16},"Observability","observability",{"name":9,"slug":8,"type":16},"2026-08-10T04:45:50.384011",{"slug":1406,"name":1406,"fn":1407,"description":1408,"org":1409,"tags":1410,"stars":27,"repoUrl":28,"updatedAt":1415},"sentry-fix-stack-traces","upload source maps to Sentry","Make Sentry stack traces readable — upload source maps for JavaScript\u002FTypeScript, or debug files for native and mobile (dSYM, ProGuard\u002FR8, NDK symbols, Dart obfuscation maps, .NET PDBs). Use when frames in Sentry show minified names, bundled paths, hex addresses, \"unknown\", or method names with no file\u002Fline, instead of your original source.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1411,1412,1413,1414],{"name":25,"slug":26,"type":16},{"name":1401,"slug":1402,"type":16},{"name":1323,"slug":1324,"type":16},{"name":9,"slug":8,"type":16},"2026-08-10T04:45:53.296097",{"slug":1417,"name":1417,"fn":1418,"description":1419,"org":1420,"tags":1421,"stars":27,"repoUrl":28,"updatedAt":1428},"sentry-get-started","set up Sentry monitoring for projects","Guided entry point for using Sentry through your agent. Orients you to your current setup and, for a new project, sets up Sentry end to end with sane defaults — provision a project, install the SDK (errors, tracing, and whatever it enables by default), and confirm real telemetry reaches Sentry. Routes other intents (adding more signals, fixing issues) to the right skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1422,1423,1426,1427],{"name":1307,"slug":1308,"type":16},{"name":1424,"slug":1425,"type":16},"Monitoring","monitoring",{"name":1401,"slug":1402,"type":16},{"name":9,"slug":8,"type":16},"2026-08-10T04:45:52.923558",{"slug":1430,"name":1430,"fn":1431,"description":1432,"org":1433,"tags":1434,"stars":27,"repoUrl":28,"updatedAt":1441},"sentry-instrument","instrument applications with Sentry SDK","Instrument an application with Sentry — detect the platform, install and initialize the SDK if needed, and wire up any signal — error monitoring, tracing\u002Fperformance, logging, metrics, profiling, session replay, user feedback, cron check-ins, and AI\u002FLLM monitoring (agent runs, token cost, and conversations for OpenAI, Anthropic, Vercel AI, LangChain, Google GenAI, Pydantic AI, and Laravel AI). Use to add Sentry to a project or to capture more than errors.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1435,1438,1439,1440],{"name":1436,"slug":1437,"type":16},"Instrumentation","instrumentation",{"name":1424,"slug":1425,"type":16},{"name":1401,"slug":1402,"type":16},{"name":9,"slug":8,"type":16},"2026-08-10T04:45:53.653601",{"slug":1443,"name":1443,"fn":1444,"description":1445,"org":1446,"tags":1447,"stars":27,"repoUrl":28,"updatedAt":1456},"sentry-setup-releases","track releases and deployments in Sentry","Set up Sentry releases and deploy tracking — tag events with a version and environment, create the release in CI with its commits, and wire up suspect commits and code mappings, so Sentry can show which release introduced an issue, which commit is responsible, and release health. Use when asked to set up releases, track deploys, see what changed, or when issues show an unknown release or no suspect commit.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1448,1451,1454,1455],{"name":1449,"slug":1450,"type":16},"CI\u002FCD","ci-cd",{"name":1452,"slug":1453,"type":16},"Deployment","deployment",{"name":1401,"slug":1402,"type":16},{"name":9,"slug":8,"type":16},"2026-08-10T04:45:49.660381",{"slug":4,"name":4,"fn":5,"description":6,"org":1458,"tags":1459,"stars":27,"repoUrl":28,"updatedAt":29},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1460,1461,1462,1463,1464],{"name":18,"slug":19,"type":16},{"name":25,"slug":26,"type":16},{"name":14,"slug":15,"type":16},{"name":9,"slug":8,"type":16},{"name":22,"slug":23,"type":16}]