[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-sentry-triage-frontend-issues":3,"mdc--wukjw4-key":33,"related-org-sentry-triage-frontend-issues":1069,"related-repo-sentry-triage-frontend-issues":1247},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":21,"repoUrl":22,"updatedAt":23,"license":24,"forks":25,"topics":26,"repo":28,"sourceUrl":31,"mdContent":32},"triage-frontend-issues","triage and archive Sentry frontend issues","Triage new issues in the Sentry `javascript` project by archiving non-actionable noise. Use when asked to \"triage issues\", \"triage the javascript project\", \"archive non-actionable issues\", \"triage new frontend issues\", or \"clean up the sentry\u002Fjavascript queue\". Operates only on the sentry\u002Fjavascript project, only archives (never resolves), and always archives with `untilEscalating`.",{"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,18],{"name":14,"slug":15,"type":16},"Triage","triage","tag",{"name":9,"slug":8,"type":16},{"name":19,"slug":20,"type":16},"Frontend","frontend",861,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills","2026-05-22T06:52:57.577379",null,45,[27],"tag-production",{"repoUrl":22,"stars":21,"forks":25,"topics":29,"description":30},[27],"Agent Skills used by the Sentry team for development.","https:\u002F\u002Fgithub.com\u002Fgetsentry\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Ftriage-frontend-issues","---\nname: triage-frontend-issues\ndescription: Triage new issues in the Sentry `javascript` project by archiving non-actionable noise. Use when asked to \"triage issues\", \"triage the javascript project\", \"archive non-actionable issues\", \"triage new frontend issues\", or \"clean up the sentry\u002Fjavascript queue\". Operates only on the sentry\u002Fjavascript project, only archives (never resolves), and always archives with `untilEscalating`.\nallowed-tools: Read, mcp__sentry__search_issues, mcp__sentry__get_sentry_resource, mcp__sentry__update_issue\n---\n\n# Triage Frontend Issues\n\nArchive non-actionable noise from the `sentry\u002Fjavascript` issue queue: only archive, always `untilEscalating`, always with a stated reason. Issues that look actionable in our code, or that you cannot confidently classify, must be skipped.\n\n## Hard Rules\n\nThese rules override anything else. Do not relax them.\n\n1. **Project scope.** Only operate on `organizationSlug=sentry`, project slug `javascript`. If asked to triage a different project, stop and ask the user to confirm.\n2. **Archive only.** The only status mutation permitted is `status=ignored`. Never resolve, never unresolve, never assign, never delete, never bulk-update fields other than status.\n3. **Always `untilEscalating`.** Use `ignoreMode=untilEscalating`. Never use `forever`, `forDuration`, `untilOccurrenceCount`, or `untilUserCount`. If the user asks for a different mode, stop and have them archive that issue manually — this skill does not perform non-escalating archives.\n4. **Always include a `reason`.** The `reason` must be a short, factual sentence naming the category from `references\u002Farchive-criteria.md` (e.g., \"Third-party library noise — echarts internals; not actionable in our code\").\n5. **Never touch issues outside the unresolved queue.** Skip anything with `status` of `resolved`, `ignored`, or `reprocessing`.\n6. **Never archive without confirmation.** Build a full plan, show it to the user, wait for explicit approval before calling `update_issue`. A single approval covers the displayed plan only; new batches need new approval.\n7. **When in doubt, skip.** If an issue could plausibly be a real bug in our code, do not archive it. Surface it as `needs-human` in the plan with a one-line note.\n\n## Prerequisites\n\n- Sentry MCP authenticated via `mcp.sentry.dev`. Required tools: `search_issues`, `get_sentry_resource`, `update_issue`.\n- If `update_issue` is not available, stop and ask the user to authenticate the Sentry MCP server.\n\n## Inputs\n\n`$ARGUMENTS` is one of:\n\n| Input shape | Meaning |\n|-------------|---------|\n| Sentry issue URL (`https:\u002F\u002Fsentry.sentry.io\u002Fissues\u002FJAVASCRIPT-…`) | Triage that single issue. |\n| Issue short ID (`JAVASCRIPT-…`) | Triage that single issue. |\n| Sentry issue query (contains a colon, e.g. `is:unresolved firstSeen:-24h`) | Use as the search query. |\n| Empty | Use the default triage queue: `is:unresolved is:unassigned firstSeen:-7d`, sort `new`, limit `50`. |\n\nIf `$ARGUMENTS` is ambiguous, ask the user to clarify before searching.\n\n## Workflow\n\n### 1. Load the queue\n\nFor single-issue input:\n- Call `get_sentry_resource(url=\u003Cissue-url>)` or `get_sentry_resource(resourceType='issue', organizationSlug='sentry', resourceId=\u003CshortId>)`.\n- Confirm `Project` is the javascript frontend project. If not, stop.\n\nFor query\u002Fdefault input:\n- Call `search_issues(organizationSlug='sentry', projectSlugOrId='javascript', query=\u003Cquery>, sort='new', limit=50)`.\n- Then call `get_sentry_resource` for each result in parallel to get culprit, substatus, assignee, and stack-frame hints (the search response omits some fields).\n\nSkip immediately if any of these are true on an issue:\n\n- `status` is not `unresolved` (already archived, resolved, or in reprocessing).\n- `assignedTo` is set to a human (someone is already owning it).\n- `assignedTo` is set to a team other than `frontend`\u002F`issues` and the issue looks team-specific (let the owning team triage).\n\n### 2. Classify each issue\n\nRead `references\u002Farchive-criteria.md` for the category taxonomy with recognition heuristics and examples. For each candidate issue, produce one of:\n\n| Decision | Meaning |\n|----------|---------|\n| `archive` | Matches a documented category; include the category name in the reason. |\n| `skip` | Could be a real bug in our code, or insufficient evidence; do not archive. |\n| `needs-human` | Looks like noise but doesn't cleanly fit a category, or volume is unusually high; flag for user review. |\n\nWhen evaluating, weight these signals (in this order):\n\n1. **Top non-Sentry-SDK frame.** If the top in-app frame is in `node_modules\u002F`, `chrome-extension:\u002F\u002F`, a third-party host, or `\u003Cunknown>`, this is a strong archive signal.\n2. **Title pattern.** Many archives are recognizable from the title alone (see criteria reference).\n3. **Volume is not a veto.** Some high-volume issues (10k+ events, thousands of users) are still archive-worthy if the top frame is third-party. Volume alone never forces archive either.\n4. **Recency.** Single-event issues older than 30 days with no recurrence are usually noise.\n5. **Customer org spread.** If events come from one customer subdomain only (check `customerDomain.subdomain` tag), it is likely customer-environment noise.\n\n### 3. Build the plan\n\nOutput one Markdown table to the user, in this exact shape:\n\n```\n## Triage plan — sentry\u002Fjavascript (\u003CN> candidates)\n\n| # | Issue | Title | Volume | Decision | Category | Reason |\n|---|-------|-------|--------|----------|----------|--------|\n| 1 | [JAVASCRIPT-XXXX](url) | TypeError: ... | 12e\u002F3u | archive | browser-api-noise | Browser clipboard permission denied; not actionable. |\n| 2 | [JAVASCRIPT-YYYY](url) | \u003Cunknown> | 4945e\u002F123u | needs-human | — | High volume, no title — please review before archiving. |\n| 3 | [JAVASCRIPT-ZZZZ](url) | ZodError: ... | 360e\u002F132u | skip | — | Schema validation failure in our code; looks actionable. |\n```\n\nThen summarize counts: `N archive \u002F M skip \u002F K needs-human`. End with:\n\n```\nReply `apply` to archive the N issues marked `archive`, `apply N,M,...` to archive a subset, or `cancel` to take no action.\n```\n\n### 4. Apply on approval\n\nWhen the user replies `apply` (or `apply \u003Csubset>`):\n\nFor each issue in the approved set, call:\n\n```\nupdate_issue(\n  organizationSlug='sentry',\n  issueId=\u003CshortId>,\n  status='ignored',\n  ignoreMode='untilEscalating',\n  reason=\u003Ccategory-tagged reason from the plan>,\n)\n```\n\nRun these sequentially (not in parallel). If a call fails, log the failure, continue with the remaining issues, and report the failed IDs in step 5.\n\nIf the user replies `cancel` or asks to modify the plan, do NOT call `update_issue`. If they reply with edits (\"change row 2 to skip\"), rebuild the plan and re-confirm.\n\n### 5. Report\n\nAfter applying, output:\n\n```\n## Triage report\n\n- Archived: N\n- Skipped: M\n- Needs human review: K\n- Failures: F (with issue IDs)\n\n\u003Cdetails>\u003Csummary>Archived issues\u003C\u002Fsummary>\n\n- JAVASCRIPT-XXXX — \u003Creason>\n- ...\n\n\u003C\u002Fdetails>\n```\n\n## Recovery\n\n- If `update_issue` fails on one item, log the failure and continue with the rest. Report failed IDs at the end.\n- If the user notices a wrong archive, the user can unarchive it themselves in Sentry. The skill never reverses its own actions automatically.\n- If the user asks \"redo the plan with these tweaks\" mid-flow, regenerate the plan from scratch — do not assume the previous plan still applies.\n\n## Example reasons (use this voice)\n\n- `Third-party library noise — echarts tooltip; not actionable in our code.`\n- `Browser API permission noise — Clipboard writeText denied by user agent.`\n- `Customer-environment proxy interference — 200 response treated as error (HTML body from corporate proxy).`\n- `Transient backend 5xx — InternalServerError on \u002Fapi\u002F0\u002Forganizations\u002F...\u002Fevents-meta\u002F; backend transient.`\n- `Test\u002Fsynthetic event — smoke test or security probe, not production traffic.`\n- `Wrong project — Prisma\u002FPython error mis-routed to frontend project.`\n- `Single-event fluke — 1 event, 1 user, no recurrence in 30+ days.`\n- `Browser extension noise — ReferenceError for extension-injected global (DarkReader\u002FWeixinJSBridge).`\n",{"data":34,"body":36},{"name":4,"description":6,"allowed-tools":35},"Read, mcp__sentry__search_issues, mcp__sentry__get_sentry_resource, mcp__sentry__update_issue",{"type":37,"children":38},"root",[39,47,70,77,82,295,301,350,356,367,491,502,508,515,520,556,561,587,592,649,655,667,738,743,827,833,838,850,863,872,878,899,904,913,918,938,944,949,958,964,988,994],{"type":40,"tag":41,"props":42,"children":43},"element","h1",{"id":4},[44],{"type":45,"value":46},"text","Triage Frontend Issues",{"type":40,"tag":48,"props":49,"children":50},"p",{},[51,53,60,62,68],{"type":45,"value":52},"Archive non-actionable noise from the ",{"type":40,"tag":54,"props":55,"children":57},"code",{"className":56},[],[58],{"type":45,"value":59},"sentry\u002Fjavascript",{"type":45,"value":61}," issue queue: only archive, always ",{"type":40,"tag":54,"props":63,"children":65},{"className":64},[],[66],{"type":45,"value":67},"untilEscalating",{"type":45,"value":69},", always with a stated reason. Issues that look actionable in our code, or that you cannot confidently classify, must be skipped.",{"type":40,"tag":71,"props":72,"children":74},"h2",{"id":73},"hard-rules",[75],{"type":45,"value":76},"Hard Rules",{"type":40,"tag":48,"props":78,"children":79},{},[80],{"type":45,"value":81},"These rules override anything else. Do not relax them.",{"type":40,"tag":83,"props":84,"children":85},"ol",{},[86,114,132,188,220,259,277],{"type":40,"tag":87,"props":88,"children":89},"li",{},[90,96,98,104,106,112],{"type":40,"tag":91,"props":92,"children":93},"strong",{},[94],{"type":45,"value":95},"Project scope.",{"type":45,"value":97}," Only operate on ",{"type":40,"tag":54,"props":99,"children":101},{"className":100},[],[102],{"type":45,"value":103},"organizationSlug=sentry",{"type":45,"value":105},", project slug ",{"type":40,"tag":54,"props":107,"children":109},{"className":108},[],[110],{"type":45,"value":111},"javascript",{"type":45,"value":113},". If asked to triage a different project, stop and ask the user to confirm.",{"type":40,"tag":87,"props":115,"children":116},{},[117,122,124,130],{"type":40,"tag":91,"props":118,"children":119},{},[120],{"type":45,"value":121},"Archive only.",{"type":45,"value":123}," The only status mutation permitted is ",{"type":40,"tag":54,"props":125,"children":127},{"className":126},[],[128],{"type":45,"value":129},"status=ignored",{"type":45,"value":131},". Never resolve, never unresolve, never assign, never delete, never bulk-update fields other than status.",{"type":40,"tag":87,"props":133,"children":134},{},[135,147,149,155,157,163,165,171,172,178,180,186],{"type":40,"tag":91,"props":136,"children":137},{},[138,140,145],{"type":45,"value":139},"Always ",{"type":40,"tag":54,"props":141,"children":143},{"className":142},[],[144],{"type":45,"value":67},{"type":45,"value":146},".",{"type":45,"value":148}," Use ",{"type":40,"tag":54,"props":150,"children":152},{"className":151},[],[153],{"type":45,"value":154},"ignoreMode=untilEscalating",{"type":45,"value":156},". Never use ",{"type":40,"tag":54,"props":158,"children":160},{"className":159},[],[161],{"type":45,"value":162},"forever",{"type":45,"value":164},", ",{"type":40,"tag":54,"props":166,"children":168},{"className":167},[],[169],{"type":45,"value":170},"forDuration",{"type":45,"value":164},{"type":40,"tag":54,"props":173,"children":175},{"className":174},[],[176],{"type":45,"value":177},"untilOccurrenceCount",{"type":45,"value":179},", or ",{"type":40,"tag":54,"props":181,"children":183},{"className":182},[],[184],{"type":45,"value":185},"untilUserCount",{"type":45,"value":187},". If the user asks for a different mode, stop and have them archive that issue manually — this skill does not perform non-escalating archives.",{"type":40,"tag":87,"props":189,"children":190},{},[191,203,205,210,212,218],{"type":40,"tag":91,"props":192,"children":193},{},[194,196,202],{"type":45,"value":195},"Always include a ",{"type":40,"tag":54,"props":197,"children":199},{"className":198},[],[200],{"type":45,"value":201},"reason",{"type":45,"value":146},{"type":45,"value":204}," The ",{"type":40,"tag":54,"props":206,"children":208},{"className":207},[],[209],{"type":45,"value":201},{"type":45,"value":211}," must be a short, factual sentence naming the category from ",{"type":40,"tag":54,"props":213,"children":215},{"className":214},[],[216],{"type":45,"value":217},"references\u002Farchive-criteria.md",{"type":45,"value":219}," (e.g., \"Third-party library noise — echarts internals; not actionable in our code\").",{"type":40,"tag":87,"props":221,"children":222},{},[223,228,230,236,238,244,245,251,252,258],{"type":40,"tag":91,"props":224,"children":225},{},[226],{"type":45,"value":227},"Never touch issues outside the unresolved queue.",{"type":45,"value":229}," Skip anything with ",{"type":40,"tag":54,"props":231,"children":233},{"className":232},[],[234],{"type":45,"value":235},"status",{"type":45,"value":237}," of ",{"type":40,"tag":54,"props":239,"children":241},{"className":240},[],[242],{"type":45,"value":243},"resolved",{"type":45,"value":164},{"type":40,"tag":54,"props":246,"children":248},{"className":247},[],[249],{"type":45,"value":250},"ignored",{"type":45,"value":179},{"type":40,"tag":54,"props":253,"children":255},{"className":254},[],[256],{"type":45,"value":257},"reprocessing",{"type":45,"value":146},{"type":40,"tag":87,"props":260,"children":261},{},[262,267,269,275],{"type":40,"tag":91,"props":263,"children":264},{},[265],{"type":45,"value":266},"Never archive without confirmation.",{"type":45,"value":268}," Build a full plan, show it to the user, wait for explicit approval before calling ",{"type":40,"tag":54,"props":270,"children":272},{"className":271},[],[273],{"type":45,"value":274},"update_issue",{"type":45,"value":276},". A single approval covers the displayed plan only; new batches need new approval.",{"type":40,"tag":87,"props":278,"children":279},{},[280,285,287,293],{"type":40,"tag":91,"props":281,"children":282},{},[283],{"type":45,"value":284},"When in doubt, skip.",{"type":45,"value":286}," If an issue could plausibly be a real bug in our code, do not archive it. Surface it as ",{"type":40,"tag":54,"props":288,"children":290},{"className":289},[],[291],{"type":45,"value":292},"needs-human",{"type":45,"value":294}," in the plan with a one-line note.",{"type":40,"tag":71,"props":296,"children":298},{"id":297},"prerequisites",[299],{"type":45,"value":300},"Prerequisites",{"type":40,"tag":302,"props":303,"children":304},"ul",{},[305,338],{"type":40,"tag":87,"props":306,"children":307},{},[308,310,316,318,324,325,331,332,337],{"type":45,"value":309},"Sentry MCP authenticated via ",{"type":40,"tag":54,"props":311,"children":313},{"className":312},[],[314],{"type":45,"value":315},"mcp.sentry.dev",{"type":45,"value":317},". Required tools: ",{"type":40,"tag":54,"props":319,"children":321},{"className":320},[],[322],{"type":45,"value":323},"search_issues",{"type":45,"value":164},{"type":40,"tag":54,"props":326,"children":328},{"className":327},[],[329],{"type":45,"value":330},"get_sentry_resource",{"type":45,"value":164},{"type":40,"tag":54,"props":333,"children":335},{"className":334},[],[336],{"type":45,"value":274},{"type":45,"value":146},{"type":40,"tag":87,"props":339,"children":340},{},[341,343,348],{"type":45,"value":342},"If ",{"type":40,"tag":54,"props":344,"children":346},{"className":345},[],[347],{"type":45,"value":274},{"type":45,"value":349}," is not available, stop and ask the user to authenticate the Sentry MCP server.",{"type":40,"tag":71,"props":351,"children":353},{"id":352},"inputs",[354],{"type":45,"value":355},"Inputs",{"type":40,"tag":48,"props":357,"children":358},{},[359,365],{"type":40,"tag":54,"props":360,"children":362},{"className":361},[],[363],{"type":45,"value":364},"$ARGUMENTS",{"type":45,"value":366}," is one of:",{"type":40,"tag":368,"props":369,"children":370},"table",{},[371,390],{"type":40,"tag":372,"props":373,"children":374},"thead",{},[375],{"type":40,"tag":376,"props":377,"children":378},"tr",{},[379,385],{"type":40,"tag":380,"props":381,"children":382},"th",{},[383],{"type":45,"value":384},"Input shape",{"type":40,"tag":380,"props":386,"children":387},{},[388],{"type":45,"value":389},"Meaning",{"type":40,"tag":391,"props":392,"children":393},"tbody",{},[394,416,435,455],{"type":40,"tag":376,"props":395,"children":396},{},[397,411],{"type":40,"tag":398,"props":399,"children":400},"td",{},[401,403,409],{"type":45,"value":402},"Sentry issue URL (",{"type":40,"tag":54,"props":404,"children":406},{"className":405},[],[407],{"type":45,"value":408},"https:\u002F\u002Fsentry.sentry.io\u002Fissues\u002FJAVASCRIPT-…",{"type":45,"value":410},")",{"type":40,"tag":398,"props":412,"children":413},{},[414],{"type":45,"value":415},"Triage that single issue.",{"type":40,"tag":376,"props":417,"children":418},{},[419,431],{"type":40,"tag":398,"props":420,"children":421},{},[422,424,430],{"type":45,"value":423},"Issue short ID (",{"type":40,"tag":54,"props":425,"children":427},{"className":426},[],[428],{"type":45,"value":429},"JAVASCRIPT-…",{"type":45,"value":410},{"type":40,"tag":398,"props":432,"children":433},{},[434],{"type":45,"value":415},{"type":40,"tag":376,"props":436,"children":437},{},[438,450],{"type":40,"tag":398,"props":439,"children":440},{},[441,443,449],{"type":45,"value":442},"Sentry issue query (contains a colon, e.g. ",{"type":40,"tag":54,"props":444,"children":446},{"className":445},[],[447],{"type":45,"value":448},"is:unresolved firstSeen:-24h",{"type":45,"value":410},{"type":40,"tag":398,"props":451,"children":452},{},[453],{"type":45,"value":454},"Use as the search query.",{"type":40,"tag":376,"props":456,"children":457},{},[458,463],{"type":40,"tag":398,"props":459,"children":460},{},[461],{"type":45,"value":462},"Empty",{"type":40,"tag":398,"props":464,"children":465},{},[466,468,474,476,482,484,490],{"type":45,"value":467},"Use the default triage queue: ",{"type":40,"tag":54,"props":469,"children":471},{"className":470},[],[472],{"type":45,"value":473},"is:unresolved is:unassigned firstSeen:-7d",{"type":45,"value":475},", sort ",{"type":40,"tag":54,"props":477,"children":479},{"className":478},[],[480],{"type":45,"value":481},"new",{"type":45,"value":483},", limit ",{"type":40,"tag":54,"props":485,"children":487},{"className":486},[],[488],{"type":45,"value":489},"50",{"type":45,"value":146},{"type":40,"tag":48,"props":492,"children":493},{},[494,495,500],{"type":45,"value":342},{"type":40,"tag":54,"props":496,"children":498},{"className":497},[],[499],{"type":45,"value":364},{"type":45,"value":501}," is ambiguous, ask the user to clarify before searching.",{"type":40,"tag":71,"props":503,"children":505},{"id":504},"workflow",[506],{"type":45,"value":507},"Workflow",{"type":40,"tag":509,"props":510,"children":512},"h3",{"id":511},"_1-load-the-queue",[513],{"type":45,"value":514},"1. Load the queue",{"type":40,"tag":48,"props":516,"children":517},{},[518],{"type":45,"value":519},"For single-issue input:",{"type":40,"tag":302,"props":521,"children":522},{},[523,543],{"type":40,"tag":87,"props":524,"children":525},{},[526,528,534,536,542],{"type":45,"value":527},"Call ",{"type":40,"tag":54,"props":529,"children":531},{"className":530},[],[532],{"type":45,"value":533},"get_sentry_resource(url=\u003Cissue-url>)",{"type":45,"value":535}," or ",{"type":40,"tag":54,"props":537,"children":539},{"className":538},[],[540],{"type":45,"value":541},"get_sentry_resource(resourceType='issue', organizationSlug='sentry', resourceId=\u003CshortId>)",{"type":45,"value":146},{"type":40,"tag":87,"props":544,"children":545},{},[546,548,554],{"type":45,"value":547},"Confirm ",{"type":40,"tag":54,"props":549,"children":551},{"className":550},[],[552],{"type":45,"value":553},"Project",{"type":45,"value":555}," is the javascript frontend project. If not, stop.",{"type":40,"tag":48,"props":557,"children":558},{},[559],{"type":45,"value":560},"For query\u002Fdefault input:",{"type":40,"tag":302,"props":562,"children":563},{},[564,575],{"type":40,"tag":87,"props":565,"children":566},{},[567,568,574],{"type":45,"value":527},{"type":40,"tag":54,"props":569,"children":571},{"className":570},[],[572],{"type":45,"value":573},"search_issues(organizationSlug='sentry', projectSlugOrId='javascript', query=\u003Cquery>, sort='new', limit=50)",{"type":45,"value":146},{"type":40,"tag":87,"props":576,"children":577},{},[578,580,585],{"type":45,"value":579},"Then call ",{"type":40,"tag":54,"props":581,"children":583},{"className":582},[],[584],{"type":45,"value":330},{"type":45,"value":586}," for each result in parallel to get culprit, substatus, assignee, and stack-frame hints (the search response omits some fields).",{"type":40,"tag":48,"props":588,"children":589},{},[590],{"type":45,"value":591},"Skip immediately if any of these are true on an issue:",{"type":40,"tag":302,"props":593,"children":594},{},[595,613,624],{"type":40,"tag":87,"props":596,"children":597},{},[598,603,605,611],{"type":40,"tag":54,"props":599,"children":601},{"className":600},[],[602],{"type":45,"value":235},{"type":45,"value":604}," is not ",{"type":40,"tag":54,"props":606,"children":608},{"className":607},[],[609],{"type":45,"value":610},"unresolved",{"type":45,"value":612}," (already archived, resolved, or in reprocessing).",{"type":40,"tag":87,"props":614,"children":615},{},[616,622],{"type":40,"tag":54,"props":617,"children":619},{"className":618},[],[620],{"type":45,"value":621},"assignedTo",{"type":45,"value":623}," is set to a human (someone is already owning it).",{"type":40,"tag":87,"props":625,"children":626},{},[627,632,634,639,641,647],{"type":40,"tag":54,"props":628,"children":630},{"className":629},[],[631],{"type":45,"value":621},{"type":45,"value":633}," is set to a team other than ",{"type":40,"tag":54,"props":635,"children":637},{"className":636},[],[638],{"type":45,"value":20},{"type":45,"value":640},"\u002F",{"type":40,"tag":54,"props":642,"children":644},{"className":643},[],[645],{"type":45,"value":646},"issues",{"type":45,"value":648}," and the issue looks team-specific (let the owning team triage).",{"type":40,"tag":509,"props":650,"children":652},{"id":651},"_2-classify-each-issue",[653],{"type":45,"value":654},"2. Classify each issue",{"type":40,"tag":48,"props":656,"children":657},{},[658,660,665],{"type":45,"value":659},"Read ",{"type":40,"tag":54,"props":661,"children":663},{"className":662},[],[664],{"type":45,"value":217},{"type":45,"value":666}," for the category taxonomy with recognition heuristics and examples. For each candidate issue, produce one of:",{"type":40,"tag":368,"props":668,"children":669},{},[670,685],{"type":40,"tag":372,"props":671,"children":672},{},[673],{"type":40,"tag":376,"props":674,"children":675},{},[676,681],{"type":40,"tag":380,"props":677,"children":678},{},[679],{"type":45,"value":680},"Decision",{"type":40,"tag":380,"props":682,"children":683},{},[684],{"type":45,"value":389},{"type":40,"tag":391,"props":686,"children":687},{},[688,705,722],{"type":40,"tag":376,"props":689,"children":690},{},[691,700],{"type":40,"tag":398,"props":692,"children":693},{},[694],{"type":40,"tag":54,"props":695,"children":697},{"className":696},[],[698],{"type":45,"value":699},"archive",{"type":40,"tag":398,"props":701,"children":702},{},[703],{"type":45,"value":704},"Matches a documented category; include the category name in the reason.",{"type":40,"tag":376,"props":706,"children":707},{},[708,717],{"type":40,"tag":398,"props":709,"children":710},{},[711],{"type":40,"tag":54,"props":712,"children":714},{"className":713},[],[715],{"type":45,"value":716},"skip",{"type":40,"tag":398,"props":718,"children":719},{},[720],{"type":45,"value":721},"Could be a real bug in our code, or insufficient evidence; do not archive.",{"type":40,"tag":376,"props":723,"children":724},{},[725,733],{"type":40,"tag":398,"props":726,"children":727},{},[728],{"type":40,"tag":54,"props":729,"children":731},{"className":730},[],[732],{"type":45,"value":292},{"type":40,"tag":398,"props":734,"children":735},{},[736],{"type":45,"value":737},"Looks like noise but doesn't cleanly fit a category, or volume is unusually high; flag for user review.",{"type":40,"tag":48,"props":739,"children":740},{},[741],{"type":45,"value":742},"When evaluating, weight these signals (in this order):",{"type":40,"tag":83,"props":744,"children":745},{},[746,779,789,799,809],{"type":40,"tag":87,"props":747,"children":748},{},[749,754,756,762,763,769,771,777],{"type":40,"tag":91,"props":750,"children":751},{},[752],{"type":45,"value":753},"Top non-Sentry-SDK frame.",{"type":45,"value":755}," If the top in-app frame is in ",{"type":40,"tag":54,"props":757,"children":759},{"className":758},[],[760],{"type":45,"value":761},"node_modules\u002F",{"type":45,"value":164},{"type":40,"tag":54,"props":764,"children":766},{"className":765},[],[767],{"type":45,"value":768},"chrome-extension:\u002F\u002F",{"type":45,"value":770},", a third-party host, or ",{"type":40,"tag":54,"props":772,"children":774},{"className":773},[],[775],{"type":45,"value":776},"\u003Cunknown>",{"type":45,"value":778},", this is a strong archive signal.",{"type":40,"tag":87,"props":780,"children":781},{},[782,787],{"type":40,"tag":91,"props":783,"children":784},{},[785],{"type":45,"value":786},"Title pattern.",{"type":45,"value":788}," Many archives are recognizable from the title alone (see criteria reference).",{"type":40,"tag":87,"props":790,"children":791},{},[792,797],{"type":40,"tag":91,"props":793,"children":794},{},[795],{"type":45,"value":796},"Volume is not a veto.",{"type":45,"value":798}," Some high-volume issues (10k+ events, thousands of users) are still archive-worthy if the top frame is third-party. Volume alone never forces archive either.",{"type":40,"tag":87,"props":800,"children":801},{},[802,807],{"type":40,"tag":91,"props":803,"children":804},{},[805],{"type":45,"value":806},"Recency.",{"type":45,"value":808}," Single-event issues older than 30 days with no recurrence are usually noise.",{"type":40,"tag":87,"props":810,"children":811},{},[812,817,819,825],{"type":40,"tag":91,"props":813,"children":814},{},[815],{"type":45,"value":816},"Customer org spread.",{"type":45,"value":818}," If events come from one customer subdomain only (check ",{"type":40,"tag":54,"props":820,"children":822},{"className":821},[],[823],{"type":45,"value":824},"customerDomain.subdomain",{"type":45,"value":826}," tag), it is likely customer-environment noise.",{"type":40,"tag":509,"props":828,"children":830},{"id":829},"_3-build-the-plan",[831],{"type":45,"value":832},"3. Build the plan",{"type":40,"tag":48,"props":834,"children":835},{},[836],{"type":45,"value":837},"Output one Markdown table to the user, in this exact shape:",{"type":40,"tag":839,"props":840,"children":844},"pre",{"className":841,"code":843,"language":45},[842],"language-text","## Triage plan — sentry\u002Fjavascript (\u003CN> candidates)\n\n| # | Issue | Title | Volume | Decision | Category | Reason |\n|---|-------|-------|--------|----------|----------|--------|\n| 1 | [JAVASCRIPT-XXXX](url) | TypeError: ... | 12e\u002F3u | archive | browser-api-noise | Browser clipboard permission denied; not actionable. |\n| 2 | [JAVASCRIPT-YYYY](url) | \u003Cunknown> | 4945e\u002F123u | needs-human | — | High volume, no title — please review before archiving. |\n| 3 | [JAVASCRIPT-ZZZZ](url) | ZodError: ... | 360e\u002F132u | skip | — | Schema validation failure in our code; looks actionable. |\n",[845],{"type":40,"tag":54,"props":846,"children":848},{"__ignoreMap":847},"",[849],{"type":45,"value":843},{"type":40,"tag":48,"props":851,"children":852},{},[853,855,861],{"type":45,"value":854},"Then summarize counts: ",{"type":40,"tag":54,"props":856,"children":858},{"className":857},[],[859],{"type":45,"value":860},"N archive \u002F M skip \u002F K needs-human",{"type":45,"value":862},". End with:",{"type":40,"tag":839,"props":864,"children":867},{"className":865,"code":866,"language":45},[842],"Reply `apply` to archive the N issues marked `archive`, `apply N,M,...` to archive a subset, or `cancel` to take no action.\n",[868],{"type":40,"tag":54,"props":869,"children":870},{"__ignoreMap":847},[871],{"type":45,"value":866},{"type":40,"tag":509,"props":873,"children":875},{"id":874},"_4-apply-on-approval",[876],{"type":45,"value":877},"4. Apply on approval",{"type":40,"tag":48,"props":879,"children":880},{},[881,883,889,891,897],{"type":45,"value":882},"When the user replies ",{"type":40,"tag":54,"props":884,"children":886},{"className":885},[],[887],{"type":45,"value":888},"apply",{"type":45,"value":890}," (or ",{"type":40,"tag":54,"props":892,"children":894},{"className":893},[],[895],{"type":45,"value":896},"apply \u003Csubset>",{"type":45,"value":898},"):",{"type":40,"tag":48,"props":900,"children":901},{},[902],{"type":45,"value":903},"For each issue in the approved set, call:",{"type":40,"tag":839,"props":905,"children":908},{"className":906,"code":907,"language":45},[842],"update_issue(\n  organizationSlug='sentry',\n  issueId=\u003CshortId>,\n  status='ignored',\n  ignoreMode='untilEscalating',\n  reason=\u003Ccategory-tagged reason from the plan>,\n)\n",[909],{"type":40,"tag":54,"props":910,"children":911},{"__ignoreMap":847},[912],{"type":45,"value":907},{"type":40,"tag":48,"props":914,"children":915},{},[916],{"type":45,"value":917},"Run these sequentially (not in parallel). If a call fails, log the failure, continue with the remaining issues, and report the failed IDs in step 5.",{"type":40,"tag":48,"props":919,"children":920},{},[921,923,929,931,936],{"type":45,"value":922},"If the user replies ",{"type":40,"tag":54,"props":924,"children":926},{"className":925},[],[927],{"type":45,"value":928},"cancel",{"type":45,"value":930}," or asks to modify the plan, do NOT call ",{"type":40,"tag":54,"props":932,"children":934},{"className":933},[],[935],{"type":45,"value":274},{"type":45,"value":937},". If they reply with edits (\"change row 2 to skip\"), rebuild the plan and re-confirm.",{"type":40,"tag":509,"props":939,"children":941},{"id":940},"_5-report",[942],{"type":45,"value":943},"5. Report",{"type":40,"tag":48,"props":945,"children":946},{},[947],{"type":45,"value":948},"After applying, output:",{"type":40,"tag":839,"props":950,"children":953},{"className":951,"code":952,"language":45},[842],"## Triage report\n\n- Archived: N\n- Skipped: M\n- Needs human review: K\n- Failures: F (with issue IDs)\n\n\u003Cdetails>\u003Csummary>Archived issues\u003C\u002Fsummary>\n\n- JAVASCRIPT-XXXX — \u003Creason>\n- ...\n\n\u003C\u002Fdetails>\n",[954],{"type":40,"tag":54,"props":955,"children":956},{"__ignoreMap":847},[957],{"type":45,"value":952},{"type":40,"tag":71,"props":959,"children":961},{"id":960},"recovery",[962],{"type":45,"value":963},"Recovery",{"type":40,"tag":302,"props":965,"children":966},{},[967,978,983],{"type":40,"tag":87,"props":968,"children":969},{},[970,971,976],{"type":45,"value":342},{"type":40,"tag":54,"props":972,"children":974},{"className":973},[],[975],{"type":45,"value":274},{"type":45,"value":977}," fails on one item, log the failure and continue with the rest. Report failed IDs at the end.",{"type":40,"tag":87,"props":979,"children":980},{},[981],{"type":45,"value":982},"If the user notices a wrong archive, the user can unarchive it themselves in Sentry. The skill never reverses its own actions automatically.",{"type":40,"tag":87,"props":984,"children":985},{},[986],{"type":45,"value":987},"If the user asks \"redo the plan with these tweaks\" mid-flow, regenerate the plan from scratch — do not assume the previous plan still applies.",{"type":40,"tag":71,"props":989,"children":991},{"id":990},"example-reasons-use-this-voice",[992],{"type":45,"value":993},"Example reasons (use this voice)",{"type":40,"tag":302,"props":995,"children":996},{},[997,1006,1015,1024,1033,1042,1051,1060],{"type":40,"tag":87,"props":998,"children":999},{},[1000],{"type":40,"tag":54,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":45,"value":1005},"Third-party library noise — echarts tooltip; not actionable in our code.",{"type":40,"tag":87,"props":1007,"children":1008},{},[1009],{"type":40,"tag":54,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":45,"value":1014},"Browser API permission noise — Clipboard writeText denied by user agent.",{"type":40,"tag":87,"props":1016,"children":1017},{},[1018],{"type":40,"tag":54,"props":1019,"children":1021},{"className":1020},[],[1022],{"type":45,"value":1023},"Customer-environment proxy interference — 200 response treated as error (HTML body from corporate proxy).",{"type":40,"tag":87,"props":1025,"children":1026},{},[1027],{"type":40,"tag":54,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":45,"value":1032},"Transient backend 5xx — InternalServerError on \u002Fapi\u002F0\u002Forganizations\u002F...\u002Fevents-meta\u002F; backend transient.",{"type":40,"tag":87,"props":1034,"children":1035},{},[1036],{"type":40,"tag":54,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":45,"value":1041},"Test\u002Fsynthetic event — smoke test or security probe, not production traffic.",{"type":40,"tag":87,"props":1043,"children":1044},{},[1045],{"type":40,"tag":54,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":45,"value":1050},"Wrong project — Prisma\u002FPython error mis-routed to frontend project.",{"type":40,"tag":87,"props":1052,"children":1053},{},[1054],{"type":40,"tag":54,"props":1055,"children":1057},{"className":1056},[],[1058],{"type":45,"value":1059},"Single-event fluke — 1 event, 1 user, no recurrence in 30+ days.",{"type":40,"tag":87,"props":1061,"children":1062},{},[1063],{"type":40,"tag":54,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":45,"value":1068},"Browser extension noise — ReferenceError for extension-injected global (DarkReader\u002FWeixinJSBridge).",{"items":1070,"total":1246},[1071,1096,1110,1123,1137,1154,1170,1184,1194,1205,1215,1233],{"slug":1072,"name":1072,"fn":1073,"description":1074,"org":1075,"tags":1076,"stars":1093,"repoUrl":1094,"updatedAt":1095},"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},[1077,1080,1083,1086,1087,1090],{"name":1078,"slug":1079,"type":16},"Debugging","debugging",{"name":1081,"slug":1082,"type":16},"iOS","ios",{"name":1084,"slug":1085,"type":16},"macOS","macos",{"name":9,"slug":8,"type":16},{"name":1088,"slug":1089,"type":16},"Testing","testing",{"name":1091,"slug":1092,"type":16},"Xcode","xcode",6176,"https:\u002F\u002Fgithub.com\u002Fgetsentry\u002FXcodeBuildMCP","2026-04-06T18:13:34.8719",{"slug":1097,"name":1097,"fn":1098,"description":1099,"org":1100,"tags":1101,"stars":1093,"repoUrl":1094,"updatedAt":1109},"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},[1102,1105,1106,1107,1108],{"name":1103,"slug":1104,"type":16},"CLI","cli",{"name":1081,"slug":1082,"type":16},{"name":1084,"slug":1085,"type":16},{"name":1088,"slug":1089,"type":16},{"name":1091,"slug":1092,"type":16},"2026-04-06T18:13:36.13414",{"slug":1111,"name":1111,"fn":1112,"description":1113,"org":1114,"tags":1115,"stars":21,"repoUrl":22,"updatedAt":1122},"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},[1116,1119],{"name":1117,"slug":1118,"type":16},"Documentation","documentation",{"name":1120,"slug":1121,"type":16},"Engineering","engineering","2026-05-15T06:16:29.695991",{"slug":1124,"name":1124,"fn":1125,"description":1126,"org":1127,"tags":1128,"stars":21,"repoUrl":22,"updatedAt":1136},"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},[1129,1132,1133],{"name":1130,"slug":1131,"type":16},"Communications","communications",{"name":9,"slug":8,"type":16},{"name":1134,"slug":1135,"type":16},"Technical Writing","technical-writing","2026-05-15T06:16:33.38217",{"slug":1138,"name":1138,"fn":1139,"description":1140,"org":1141,"tags":1142,"stars":21,"repoUrl":22,"updatedAt":1153},"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},[1143,1146,1149,1150],{"name":1144,"slug":1145,"type":16},"Branding","branding",{"name":1147,"slug":1148,"type":16},"Content Creation","content-creation",{"name":9,"slug":8,"type":16},{"name":1151,"slug":1152,"type":16},"UX Copy","ux-copy","2026-05-15T06:16:22.395707",{"slug":1155,"name":1155,"fn":1156,"description":1157,"org":1158,"tags":1159,"stars":21,"repoUrl":22,"updatedAt":1169},"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},[1160,1163,1166],{"name":1161,"slug":1162,"type":16},"Claude Code","claude-code",{"name":1164,"slug":1165,"type":16},"Configuration","configuration",{"name":1167,"slug":1168,"type":16},"Security","security","2026-05-15T06:16:44.335977",{"slug":1171,"name":1171,"fn":1172,"description":1173,"org":1174,"tags":1175,"stars":21,"repoUrl":22,"updatedAt":1183},"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},[1176,1178,1179,1182],{"name":1177,"slug":1171,"type":16},"Code Review",{"name":1120,"slug":1121,"type":16},{"name":1180,"slug":1181,"type":16},"Performance","performance",{"name":1167,"slug":1168,"type":16},"2026-05-15T06:16:35.824864",{"slug":1185,"name":1185,"fn":1186,"description":1187,"org":1188,"tags":1189,"stars":21,"repoUrl":22,"updatedAt":1193},"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},[1190],{"name":1191,"slug":1192,"type":16},"Code Analysis","code-analysis","2026-05-15T06:16:32.127981",{"slug":1195,"name":1195,"fn":1196,"description":1197,"org":1198,"tags":1199,"stars":21,"repoUrl":22,"updatedAt":1204},"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},[1200,1203],{"name":1201,"slug":1202,"type":16},"Git","git",{"name":9,"slug":8,"type":16},"2026-07-18T05:15:10.723937",{"slug":1206,"name":1206,"fn":1207,"description":1208,"org":1209,"tags":1210,"stars":21,"repoUrl":22,"updatedAt":1214},"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},[1211,1212,1213],{"name":1120,"slug":1121,"type":16},{"name":1201,"slug":1202,"type":16},{"name":9,"slug":8,"type":16},"2026-05-15T06:16:39.458431",{"slug":1216,"name":1216,"fn":1217,"description":1218,"org":1219,"tags":1220,"stars":21,"repoUrl":22,"updatedAt":1232},"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},[1221,1224,1225,1228,1231],{"name":1222,"slug":1223,"type":16},"Access Control","access-control",{"name":1191,"slug":1192,"type":16},{"name":1226,"slug":1227,"type":16},"Django","django",{"name":1229,"slug":1230,"type":16},"Python","python",{"name":1167,"slug":1168,"type":16},"2026-05-15T06:16:43.098698",{"slug":1234,"name":1234,"fn":1235,"description":1236,"org":1237,"tags":1238,"stars":21,"repoUrl":22,"updatedAt":1245},"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},[1239,1240,1243,1244],{"name":1177,"slug":1171,"type":16},{"name":1241,"slug":1242,"type":16},"Database","database",{"name":1226,"slug":1227,"type":16},{"name":1180,"slug":1181,"type":16},"2026-05-15T06:16:24.832813",88,{"items":1248,"total":1289},[1249,1254,1260,1267,1273,1280,1284],{"slug":1111,"name":1111,"fn":1112,"description":1113,"org":1250,"tags":1251,"stars":21,"repoUrl":22,"updatedAt":1122},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1252,1253],{"name":1117,"slug":1118,"type":16},{"name":1120,"slug":1121,"type":16},{"slug":1124,"name":1124,"fn":1125,"description":1126,"org":1255,"tags":1256,"stars":21,"repoUrl":22,"updatedAt":1136},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1257,1258,1259],{"name":1130,"slug":1131,"type":16},{"name":9,"slug":8,"type":16},{"name":1134,"slug":1135,"type":16},{"slug":1138,"name":1138,"fn":1139,"description":1140,"org":1261,"tags":1262,"stars":21,"repoUrl":22,"updatedAt":1153},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1263,1264,1265,1266],{"name":1144,"slug":1145,"type":16},{"name":1147,"slug":1148,"type":16},{"name":9,"slug":8,"type":16},{"name":1151,"slug":1152,"type":16},{"slug":1155,"name":1155,"fn":1156,"description":1157,"org":1268,"tags":1269,"stars":21,"repoUrl":22,"updatedAt":1169},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1270,1271,1272],{"name":1161,"slug":1162,"type":16},{"name":1164,"slug":1165,"type":16},{"name":1167,"slug":1168,"type":16},{"slug":1171,"name":1171,"fn":1172,"description":1173,"org":1274,"tags":1275,"stars":21,"repoUrl":22,"updatedAt":1183},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1276,1277,1278,1279],{"name":1177,"slug":1171,"type":16},{"name":1120,"slug":1121,"type":16},{"name":1180,"slug":1181,"type":16},{"name":1167,"slug":1168,"type":16},{"slug":1185,"name":1185,"fn":1186,"description":1187,"org":1281,"tags":1282,"stars":21,"repoUrl":22,"updatedAt":1193},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1283],{"name":1191,"slug":1192,"type":16},{"slug":1195,"name":1195,"fn":1196,"description":1197,"org":1285,"tags":1286,"stars":21,"repoUrl":22,"updatedAt":1204},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1287,1288],{"name":1201,"slug":1202,"type":16},{"name":9,"slug":8,"type":16},28]