[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-triage":3,"mdc-oc807o-key":36,"related-org-anthropic-triage":670,"related-repo-anthropic-triage":858},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"triage","investigate and diagnose system alerts","Investigate an alert or incident in this channel: classify the symptom, load the matching triage reference, check lessons.md for known causes, and post a grounded first-pass diagnosis with evidence links and a proposed (never executed) fix. Use when an alert fires, a routine detects a new anomaly, or someone reports something broken (\"tests aren't running\", \"deploys look stuck\", \"is CI down?\").\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20,22],{"name":14,"slug":15,"type":16},"Monitoring","monitoring","tag",{"name":18,"slug":19,"type":16},"Incident Response","incident-response",{"name":21,"slug":4,"type":16},"Triage",{"name":23,"slug":24,"type":16},"Debugging","debugging",3,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Foncall-kit","2026-08-22T03:57:34.744138",null,0,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"Starter kit for a Claude-assisted on-call: mines your incident history into triage playbooks, sets up through human-approved gates, and runs read-only in your Slack channel — humans deploy every fix.","https:\u002F\u002Fgithub.com\u002Fanthropics\u002Foncall-kit\u002Ftree\u002FHEAD\u002Fskills\u002Ftriage","---\nname: triage\ndescription: >\n  Investigate an alert or incident in this channel: classify the symptom,\n  load the matching triage reference, check lessons.md for known causes, and\n  post a grounded first-pass diagnosis with evidence links and a proposed\n  (never executed) fix. Use when an alert fires, a routine detects a new\n  anomaly, or someone reports something broken (\"tests aren't running\",\n  \"deploys look stuck\", \"is CI down?\").\n---\n\n\u003C!-- Copyright 2026 Anthropic PBC -->\n\u003C!-- SPDX-License-Identifier: Apache-2.0 -->\n\n# Triage\n\nStanding rules in `CLAUDE.md` apply — especially: propose, don't act (rule\n1); every claim carries a link (rule 4); data before theory (rule 5); log to\n`lessons.md` without asking (rule 8).\n\n## Procedure\n\n1. **Load context.** Read `ONCALL.md` (policy + routing), `STACK.md`\n   (capability bindings), and `lessons.md` (known causes) from disk. Files\n   over memory (rule 7).\n\n2. **Classify the symptom.** Match against the failure classes in\n   `references\u002F`:\n\n   | Symptom looks like | Load |\n   |---|---|\n   | Tests failing, flaking, or silently not running | `references\u002Ftest-failures.md` |\n   | PRs stuck, queue depth growing, merges slow | `references\u002Fmerge-queue.md` |\n   | Jobs not starting, agents stuck, capacity errors | `references\u002Frunner-infra.md` |\n   | Bad deploy, rollout stuck, post-deploy regression | `references\u002Fdeploy-rollout.md` |\n   | None of the above | No reference — say so explicitly, and investigate from first principles: timeline first (what changed around onset — deploys, flags, config), then blast radius, then narrow. |\n\n   (Classes are the CI defaults; your setup phase may have replaced them.\n   The table above must match the files actually present in `references\u002F` —\n   if they've diverged, trust the directory and flag the drift.)\n\n3. **Check the log first.** Search `lessons.md` for this class's #tag and\n   read the matching entries — never ingest the whole file; it grows\n   unbounded by design. A matching past incident is your first\n   hypothesis — cheapest to confirm or kill.\n\n3a. **Correlate before you classify.** Sweep the other alert channels (and\n   the `incidents` binding) for the same time window. Five alerts are often\n   one incident: if this symptom is downstream of something already broken —\n   a cluster problem, a shared dependency, another team's incident — say so\n   in the diagnosis (\"correlates with X in #infra-alerts; likely one\n   incident, not five\") and route to the upstream owner instead of\n   investigating the echo.\n\n3b. **Alert storms get ONE triage, not one each.** If several alerts have\n   landed in a short window — or new alerts arrive while you're already\n   investigating — treat them as a batch: group by likely common cause,\n   run a single investigation for the group, and post one diagnosis that\n   lists every alert it accounts for (\"these 14 alerts trace to one\n   upstream: …\"). If an incident record is already open for the cause,\n   attach new alerts to it (post in its thread\u002Frecord) instead of opening\n   a parallel investigation. If the batch looks like a real incident and\n   no record exists, propose declaring one per ONCALL.md — a human\n   declares it (the incident-record invariant); you never do. **Batching is for\n   shared cause only:** if the evidence says the batch contains genuinely\n   unrelated failures, say so explicitly and treat them as distinct\n   incidents — separate diagnoses, separate records, each with its own\n   severity call. Never merge for tidiness.\n\n4. **Run the reference's first checks** against the bound capabilities in\n   `STACK.md`. Establish the timeline: when did the symptom start, and what\n   changed within the preceding window — `deploys`, `flags` change history,\n   config, merges?\n\n4a. **Fan-out (page-severity only; sequential is the default below it).**\n   Where the channel's platform supports spawning parallel subagents, you\n   are the orchestrator: spawn one investigator per bound source of truth\n   the reference's first checks touch — `metrics`, `logs`, `code`\u002F`deploys`,\n   `pager`, `alert-channels`. Each investigator receives exactly four\n   things: the symptom sentence, the onset window, its binding line from\n   `STACK.md`, and the reference's first-check queries for its source —\n   nothing else, so a poisoned thread can't steer it (rule 9a applies\n   inside subagents too). Each returns the fixed shape:\n\n   - **CHECKED:** queries run, with links\n   - **FOUND:** observations with timestamps — observations, never root\n     causes\n   - **NOT FOUND:** what was looked for and absent — absence counts only\n     if the run\u002Fwindow was complete\n   - **CANNOT ACCESS:** anything that 403'd or timed out (surfaces in the\n     diagnosis as a gap, never silently dropped)\n\n   Synthesis is yours alone: correlate, deconflict (two investigators\n   dating onset differently is itself a finding), and write the one\n   diagnosis. Fan-out multiplies token cost — worth it for a page, never\n   for a morning-log item.\n\n5. **Apply the reference's correlation table.** Where observations match a\n   row, you have a candidate root cause; verify it against the timeline\n   before promoting it (rule 5).\n\n5a. **Cross-check blame against \"still happening\"** (CLAUDE.md rule 5a).\n   A blame verdict — bisect, revert notice, \"that PR broke it\" — names\n   the change that *started* the failure; before naming it as the live\n   cause, confirm the symptom appears in the most recent **completed**\n   run\u002Fwindow. Presence always confirms red; absence confirms green only\n   on a completed run.\n\n6. **Post the diagnosis** in this format, in-thread:\n\n   > **What's happening:** one sentence, fresh-reader test applied.\n   > **Root cause (confidence high\u002Fmedium\u002Flow):** the mechanism, with each\n   > claim linked to its evidence.\n   > **Blast radius:** who\u002Fwhat is affected, linked.\n   > **Proposed fix:** the action, why it's safe, and what to watch after.\n   > **Ruled out:** alternatives checked and the evidence that killed them.\n   > **Would change my mind:** the one observation that would.\n\n6a. **Updates on long-running incidents.** Any update posted >30 min after\n   your first diagnosis opens with a 2–4 sentence *story so far* a\n   newcomer can land on cold: when it started and what broke → the\n   **current best understanding** of cause (not the first guess) → what's\n   been tried → where it stands, one sentence. Then the delta. Ruled-out\n   hypotheses don't reappear unless load-bearing. **Never post a \"no\n   change\" update** — silence is a valid state, and noise trains readers\n   to skip your updates.\n\n7. **Route.** If `ONCALL.md`'s routing tree names an owner for this class,\n   mention them. Otherwise mention no one (rule 12).\n\n8. **On human questions or pushback** (\"could it be the schema change\n   instead?\"): treat it as a hypothesis to check, check it against the data,\n   and report back with evidence either way. Never defend a diagnosis;\n   re-derive it.\n\n9. **When a fix is deployed** (by a human, or a permitted gated action):\n   watch it land — bounded. Check the affected metrics at the reference's\n   expected-resolution window (once at half, once at full, once at double —\n   three checks, not a polling loop), post when they return to baseline, or\n   escalate per the routing tree if the window blows. Do not mark resolved\n   (rule 2). If a human wants tighter watching, they can ask — continuous\n   polling is never the default. Verify through the same door the failure\n   came in: re-run the original failing path, or re-check the exact signal\n   that detected the incident — never a proxy. \"Merges are flowing\" proves\n   the merge path, not the whole provider; if your check can't see the\n   original symptom, say the verification is partial and name what it\n   can't see.\n\n10. **Afterwards**, append the incident to `lessons.md` in its entry format\n    (rule 8). If this incident exposed a gap in a reference file, propose\n    the amendment as a PR (rule 9) — you fix the playbook, not just the\n    incident. And ask the alerting question: **would a rule have caught\n    this earlier?** If detection was human or late, propose the rule in\n    the postmortem — paste-ready in the format `ONCALL.md` names, with\n    this incident as provenance. Install per ONCALL.md's install mode:\n    default is a human pastes it; under the alert-editor extension you may\n    create it yourself after explicit approval in the channel (additive\n    only, logged to lessons.md — CLAUDE.md rule 1a).\n",{"data":37,"body":38},{"name":4,"description":6},{"type":39,"children":40},"root",[41,48,71,78,274,294,313,350,412,456,461,475,502,565,598],{"type":42,"tag":43,"props":44,"children":45},"element","h1",{"id":4},[46],{"type":47,"value":21},"text",{"type":42,"tag":49,"props":50,"children":51},"p",{},[52,54,61,63,69],{"type":47,"value":53},"Standing rules in ",{"type":42,"tag":55,"props":56,"children":58},"code",{"className":57},[],[59],{"type":47,"value":60},"CLAUDE.md",{"type":47,"value":62}," apply — especially: propose, don't act (rule\n1); every claim carries a link (rule 4); data before theory (rule 5); log to\n",{"type":42,"tag":55,"props":64,"children":66},{"className":65},[],[67],{"type":47,"value":68},"lessons.md",{"type":47,"value":70}," without asking (rule 8).",{"type":42,"tag":72,"props":73,"children":75},"h2",{"id":74},"procedure",[76],{"type":47,"value":77},"Procedure",{"type":42,"tag":79,"props":80,"children":81},"ol",{},[82,117,257],{"type":42,"tag":83,"props":84,"children":85},"li",{},[86,92,94,100,102,108,110,115],{"type":42,"tag":87,"props":88,"children":89},"strong",{},[90],{"type":47,"value":91},"Load context.",{"type":47,"value":93}," Read ",{"type":42,"tag":55,"props":95,"children":97},{"className":96},[],[98],{"type":47,"value":99},"ONCALL.md",{"type":47,"value":101}," (policy + routing), ",{"type":42,"tag":55,"props":103,"children":105},{"className":104},[],[106],{"type":47,"value":107},"STACK.md",{"type":47,"value":109},"\n(capability bindings), and ",{"type":42,"tag":55,"props":111,"children":113},{"className":112},[],[114],{"type":47,"value":68},{"type":47,"value":116}," (known causes) from disk. Files\nover memory (rule 7).",{"type":42,"tag":83,"props":118,"children":119},{},[120,125,127,133,135,244,248,250,255],{"type":42,"tag":87,"props":121,"children":122},{},[123],{"type":47,"value":124},"Classify the symptom.",{"type":47,"value":126}," Match against the failure classes in\n",{"type":42,"tag":55,"props":128,"children":130},{"className":129},[],[131],{"type":47,"value":132},"references\u002F",{"type":47,"value":134},":",{"type":42,"tag":136,"props":137,"children":138},"table",{},[139,158],{"type":42,"tag":140,"props":141,"children":142},"thead",{},[143],{"type":42,"tag":144,"props":145,"children":146},"tr",{},[147,153],{"type":42,"tag":148,"props":149,"children":150},"th",{},[151],{"type":47,"value":152},"Symptom looks like",{"type":42,"tag":148,"props":154,"children":155},{},[156],{"type":47,"value":157},"Load",{"type":42,"tag":159,"props":160,"children":161},"tbody",{},[162,180,197,214,231],{"type":42,"tag":144,"props":163,"children":164},{},[165,171],{"type":42,"tag":166,"props":167,"children":168},"td",{},[169],{"type":47,"value":170},"Tests failing, flaking, or silently not running",{"type":42,"tag":166,"props":172,"children":173},{},[174],{"type":42,"tag":55,"props":175,"children":177},{"className":176},[],[178],{"type":47,"value":179},"references\u002Ftest-failures.md",{"type":42,"tag":144,"props":181,"children":182},{},[183,188],{"type":42,"tag":166,"props":184,"children":185},{},[186],{"type":47,"value":187},"PRs stuck, queue depth growing, merges slow",{"type":42,"tag":166,"props":189,"children":190},{},[191],{"type":42,"tag":55,"props":192,"children":194},{"className":193},[],[195],{"type":47,"value":196},"references\u002Fmerge-queue.md",{"type":42,"tag":144,"props":198,"children":199},{},[200,205],{"type":42,"tag":166,"props":201,"children":202},{},[203],{"type":47,"value":204},"Jobs not starting, agents stuck, capacity errors",{"type":42,"tag":166,"props":206,"children":207},{},[208],{"type":42,"tag":55,"props":209,"children":211},{"className":210},[],[212],{"type":47,"value":213},"references\u002Frunner-infra.md",{"type":42,"tag":144,"props":215,"children":216},{},[217,222],{"type":42,"tag":166,"props":218,"children":219},{},[220],{"type":47,"value":221},"Bad deploy, rollout stuck, post-deploy regression",{"type":42,"tag":166,"props":223,"children":224},{},[225],{"type":42,"tag":55,"props":226,"children":228},{"className":227},[],[229],{"type":47,"value":230},"references\u002Fdeploy-rollout.md",{"type":42,"tag":144,"props":232,"children":233},{},[234,239],{"type":42,"tag":166,"props":235,"children":236},{},[237],{"type":47,"value":238},"None of the above",{"type":42,"tag":166,"props":240,"children":241},{},[242],{"type":47,"value":243},"No reference — say so explicitly, and investigate from first principles: timeline first (what changed around onset — deploys, flags, config), then blast radius, then narrow.",{"type":42,"tag":245,"props":246,"children":247},"br",{},[],{"type":47,"value":249},"(Classes are the CI defaults; your setup phase may have replaced them.\nThe table above must match the files actually present in ",{"type":42,"tag":55,"props":251,"children":253},{"className":252},[],[254],{"type":47,"value":132},{"type":47,"value":256}," —\nif they've diverged, trust the directory and flag the drift.)",{"type":42,"tag":83,"props":258,"children":259},{},[260,265,267,272],{"type":42,"tag":87,"props":261,"children":262},{},[263],{"type":47,"value":264},"Check the log first.",{"type":47,"value":266}," Search ",{"type":42,"tag":55,"props":268,"children":270},{"className":269},[],[271],{"type":47,"value":68},{"type":47,"value":273}," for this class's #tag and\nread the matching entries — never ingest the whole file; it grows\nunbounded by design. A matching past incident is your first\nhypothesis — cheapest to confirm or kill.",{"type":42,"tag":49,"props":275,"children":276},{},[277,279,284,286,292],{"type":47,"value":278},"3a. ",{"type":42,"tag":87,"props":280,"children":281},{},[282],{"type":47,"value":283},"Correlate before you classify.",{"type":47,"value":285}," Sweep the other alert channels (and\nthe ",{"type":42,"tag":55,"props":287,"children":289},{"className":288},[],[290],{"type":47,"value":291},"incidents",{"type":47,"value":293}," binding) for the same time window. Five alerts are often\none incident: if this symptom is downstream of something already broken —\na cluster problem, a shared dependency, another team's incident — say so\nin the diagnosis (\"correlates with X in #infra-alerts; likely one\nincident, not five\") and route to the upstream owner instead of\ninvestigating the echo.",{"type":42,"tag":49,"props":295,"children":296},{},[297,299,304,306,311],{"type":47,"value":298},"3b. ",{"type":42,"tag":87,"props":300,"children":301},{},[302],{"type":47,"value":303},"Alert storms get ONE triage, not one each.",{"type":47,"value":305}," If several alerts have\nlanded in a short window — or new alerts arrive while you're already\ninvestigating — treat them as a batch: group by likely common cause,\nrun a single investigation for the group, and post one diagnosis that\nlists every alert it accounts for (\"these 14 alerts trace to one\nupstream: …\"). If an incident record is already open for the cause,\nattach new alerts to it (post in its thread\u002Frecord) instead of opening\na parallel investigation. If the batch looks like a real incident and\nno record exists, propose declaring one per ONCALL.md — a human\ndeclares it (the incident-record invariant); you never do. ",{"type":42,"tag":87,"props":307,"children":308},{},[309],{"type":47,"value":310},"Batching is for\nshared cause only:",{"type":47,"value":312}," if the evidence says the batch contains genuinely\nunrelated failures, say so explicitly and treat them as distinct\nincidents — separate diagnoses, separate records, each with its own\nseverity call. Never merge for tidiness.",{"type":42,"tag":79,"props":314,"children":316},{"start":315},4,[317],{"type":42,"tag":83,"props":318,"children":319},{},[320,325,327,332,334,340,342,348],{"type":42,"tag":87,"props":321,"children":322},{},[323],{"type":47,"value":324},"Run the reference's first checks",{"type":47,"value":326}," against the bound capabilities in\n",{"type":42,"tag":55,"props":328,"children":330},{"className":329},[],[331],{"type":47,"value":107},{"type":47,"value":333},". Establish the timeline: when did the symptom start, and what\nchanged within the preceding window — ",{"type":42,"tag":55,"props":335,"children":337},{"className":336},[],[338],{"type":47,"value":339},"deploys",{"type":47,"value":341},", ",{"type":42,"tag":55,"props":343,"children":345},{"className":344},[],[346],{"type":47,"value":347},"flags",{"type":47,"value":349}," change history,\nconfig, merges?",{"type":42,"tag":49,"props":351,"children":352},{},[353,355,360,362,368,369,375,376,381,383,388,390,396,397,403,405,410],{"type":47,"value":354},"4a. ",{"type":42,"tag":87,"props":356,"children":357},{},[358],{"type":47,"value":359},"Fan-out (page-severity only; sequential is the default below it).",{"type":47,"value":361},"\nWhere the channel's platform supports spawning parallel subagents, you\nare the orchestrator: spawn one investigator per bound source of truth\nthe reference's first checks touch — ",{"type":42,"tag":55,"props":363,"children":365},{"className":364},[],[366],{"type":47,"value":367},"metrics",{"type":47,"value":341},{"type":42,"tag":55,"props":370,"children":372},{"className":371},[],[373],{"type":47,"value":374},"logs",{"type":47,"value":341},{"type":42,"tag":55,"props":377,"children":379},{"className":378},[],[380],{"type":47,"value":55},{"type":47,"value":382},"\u002F",{"type":42,"tag":55,"props":384,"children":386},{"className":385},[],[387],{"type":47,"value":339},{"type":47,"value":389},",\n",{"type":42,"tag":55,"props":391,"children":393},{"className":392},[],[394],{"type":47,"value":395},"pager",{"type":47,"value":341},{"type":42,"tag":55,"props":398,"children":400},{"className":399},[],[401],{"type":47,"value":402},"alert-channels",{"type":47,"value":404},". Each investigator receives exactly four\nthings: the symptom sentence, the onset window, its binding line from\n",{"type":42,"tag":55,"props":406,"children":408},{"className":407},[],[409],{"type":47,"value":107},{"type":47,"value":411},", and the reference's first-check queries for its source —\nnothing else, so a poisoned thread can't steer it (rule 9a applies\ninside subagents too). Each returns the fixed shape:",{"type":42,"tag":413,"props":414,"children":415},"ul",{},[416,426,436,446],{"type":42,"tag":83,"props":417,"children":418},{},[419,424],{"type":42,"tag":87,"props":420,"children":421},{},[422],{"type":47,"value":423},"CHECKED:",{"type":47,"value":425}," queries run, with links",{"type":42,"tag":83,"props":427,"children":428},{},[429,434],{"type":42,"tag":87,"props":430,"children":431},{},[432],{"type":47,"value":433},"FOUND:",{"type":47,"value":435}," observations with timestamps — observations, never root\ncauses",{"type":42,"tag":83,"props":437,"children":438},{},[439,444],{"type":42,"tag":87,"props":440,"children":441},{},[442],{"type":47,"value":443},"NOT FOUND:",{"type":47,"value":445}," what was looked for and absent — absence counts only\nif the run\u002Fwindow was complete",{"type":42,"tag":83,"props":447,"children":448},{},[449,454],{"type":42,"tag":87,"props":450,"children":451},{},[452],{"type":47,"value":453},"CANNOT ACCESS:",{"type":47,"value":455}," anything that 403'd or timed out (surfaces in the\ndiagnosis as a gap, never silently dropped)",{"type":42,"tag":49,"props":457,"children":458},{},[459],{"type":47,"value":460},"Synthesis is yours alone: correlate, deconflict (two investigators\ndating onset differently is itself a finding), and write the one\ndiagnosis. Fan-out multiplies token cost — worth it for a page, never\nfor a morning-log item.",{"type":42,"tag":79,"props":462,"children":464},{"start":463},5,[465],{"type":42,"tag":83,"props":466,"children":467},{},[468,473],{"type":42,"tag":87,"props":469,"children":470},{},[471],{"type":47,"value":472},"Apply the reference's correlation table.",{"type":47,"value":474}," Where observations match a\nrow, you have a candidate root cause; verify it against the timeline\nbefore promoting it (rule 5).",{"type":42,"tag":49,"props":476,"children":477},{},[478,480,485,487,493,495,500],{"type":47,"value":479},"5a. ",{"type":42,"tag":87,"props":481,"children":482},{},[483],{"type":47,"value":484},"Cross-check blame against \"still happening\"",{"type":47,"value":486}," (CLAUDE.md rule 5a).\nA blame verdict — bisect, revert notice, \"that PR broke it\" — names\nthe change that ",{"type":42,"tag":488,"props":489,"children":490},"em",{},[491],{"type":47,"value":492},"started",{"type":47,"value":494}," the failure; before naming it as the live\ncause, confirm the symptom appears in the most recent ",{"type":42,"tag":87,"props":496,"children":497},{},[498],{"type":47,"value":499},"completed",{"type":47,"value":501},"\nrun\u002Fwindow. Presence always confirms red; absence confirms green only\non a completed run.",{"type":42,"tag":79,"props":503,"children":505},{"start":504},6,[506],{"type":42,"tag":83,"props":507,"children":508},{},[509,514,516],{"type":42,"tag":87,"props":510,"children":511},{},[512],{"type":47,"value":513},"Post the diagnosis",{"type":47,"value":515}," in this format, in-thread:",{"type":42,"tag":517,"props":518,"children":519},"blockquote",{},[520],{"type":42,"tag":49,"props":521,"children":522},{},[523,528,530,535,537,542,544,549,551,556,558,563],{"type":42,"tag":87,"props":524,"children":525},{},[526],{"type":47,"value":527},"What's happening:",{"type":47,"value":529}," one sentence, fresh-reader test applied.\n",{"type":42,"tag":87,"props":531,"children":532},{},[533],{"type":47,"value":534},"Root cause (confidence high\u002Fmedium\u002Flow):",{"type":47,"value":536}," the mechanism, with each\nclaim linked to its evidence.\n",{"type":42,"tag":87,"props":538,"children":539},{},[540],{"type":47,"value":541},"Blast radius:",{"type":47,"value":543}," who\u002Fwhat is affected, linked.\n",{"type":42,"tag":87,"props":545,"children":546},{},[547],{"type":47,"value":548},"Proposed fix:",{"type":47,"value":550}," the action, why it's safe, and what to watch after.\n",{"type":42,"tag":87,"props":552,"children":553},{},[554],{"type":47,"value":555},"Ruled out:",{"type":47,"value":557}," alternatives checked and the evidence that killed them.\n",{"type":42,"tag":87,"props":559,"children":560},{},[561],{"type":47,"value":562},"Would change my mind:",{"type":47,"value":564}," the one observation that would.",{"type":42,"tag":49,"props":566,"children":567},{},[568,570,575,577,582,584,589,591,596],{"type":47,"value":569},"6a. ",{"type":42,"tag":87,"props":571,"children":572},{},[573],{"type":47,"value":574},"Updates on long-running incidents.",{"type":47,"value":576}," Any update posted >30 min after\nyour first diagnosis opens with a 2–4 sentence ",{"type":42,"tag":488,"props":578,"children":579},{},[580],{"type":47,"value":581},"story so far",{"type":47,"value":583}," a\nnewcomer can land on cold: when it started and what broke → the\n",{"type":42,"tag":87,"props":585,"children":586},{},[587],{"type":47,"value":588},"current best understanding",{"type":47,"value":590}," of cause (not the first guess) → what's\nbeen tried → where it stands, one sentence. Then the delta. Ruled-out\nhypotheses don't reappear unless load-bearing. ",{"type":42,"tag":87,"props":592,"children":593},{},[594],{"type":47,"value":595},"Never post a \"no\nchange\" update",{"type":47,"value":597}," — silence is a valid state, and noise trains readers\nto skip your updates.",{"type":42,"tag":79,"props":599,"children":601},{"start":600},7,[602,619,629,639],{"type":42,"tag":83,"props":603,"children":604},{},[605,610,612,617],{"type":42,"tag":87,"props":606,"children":607},{},[608],{"type":47,"value":609},"Route.",{"type":47,"value":611}," If ",{"type":42,"tag":55,"props":613,"children":615},{"className":614},[],[616],{"type":47,"value":99},{"type":47,"value":618},"'s routing tree names an owner for this class,\nmention them. Otherwise mention no one (rule 12).",{"type":42,"tag":83,"props":620,"children":621},{},[622,627],{"type":42,"tag":87,"props":623,"children":624},{},[625],{"type":47,"value":626},"On human questions or pushback",{"type":47,"value":628}," (\"could it be the schema change\ninstead?\"): treat it as a hypothesis to check, check it against the data,\nand report back with evidence either way. Never defend a diagnosis;\nre-derive it.",{"type":42,"tag":83,"props":630,"children":631},{},[632,637],{"type":42,"tag":87,"props":633,"children":634},{},[635],{"type":47,"value":636},"When a fix is deployed",{"type":47,"value":638}," (by a human, or a permitted gated action):\nwatch it land — bounded. Check the affected metrics at the reference's\nexpected-resolution window (once at half, once at full, once at double —\nthree checks, not a polling loop), post when they return to baseline, or\nescalate per the routing tree if the window blows. Do not mark resolved\n(rule 2). If a human wants tighter watching, they can ask — continuous\npolling is never the default. Verify through the same door the failure\ncame in: re-run the original failing path, or re-check the exact signal\nthat detected the incident — never a proxy. \"Merges are flowing\" proves\nthe merge path, not the whole provider; if your check can't see the\noriginal symptom, say the verification is partial and name what it\ncan't see.",{"type":42,"tag":83,"props":640,"children":641},{},[642,647,649,654,656,661,663,668],{"type":42,"tag":87,"props":643,"children":644},{},[645],{"type":47,"value":646},"Afterwards",{"type":47,"value":648},", append the incident to ",{"type":42,"tag":55,"props":650,"children":652},{"className":651},[],[653],{"type":47,"value":68},{"type":47,"value":655}," in its entry format\n(rule 8). If this incident exposed a gap in a reference file, propose\nthe amendment as a PR (rule 9) — you fix the playbook, not just the\nincident. And ask the alerting question: ",{"type":42,"tag":87,"props":657,"children":658},{},[659],{"type":47,"value":660},"would a rule have caught\nthis earlier?",{"type":47,"value":662}," If detection was human or late, propose the rule in\nthe postmortem — paste-ready in the format ",{"type":42,"tag":55,"props":664,"children":666},{"className":665},[],[667],{"type":47,"value":99},{"type":47,"value":669}," names, with\nthis incident as provenance. Install per ONCALL.md's install mode:\ndefault is a human pastes it; under the alert-editor extension you may\ncreate it yourself after explicit approval in the channel (additive\nonly, logged to lessons.md — CLAUDE.md rule 1a).",{"items":671,"total":857},[672,688,707,721,733,752,768,779,800,820,834,849],{"slug":673,"name":673,"fn":674,"description":675,"org":676,"tags":677,"stars":685,"repoUrl":686,"updatedAt":687},"academy-guide","recommend Claude Academy resources","Stop and check this skill before finishing any reply to a question about how to use Claude or a Claude product — it recommends matching courses, tutorials, and use cases from Claude Academy (academy.claude.com), Anthropic's learning hub. Trigger on: \"how do I\", \"how can I\", \"getting started with\", \"what can Claude do\", \"teach me\", \"learn to use\"; questions about artifacts, projects, skills, plugins, connectors, MCP; requests about rolling Claude out to a team, class, or organization; and any ask for training materials, onboarding content, or learning resources. Use it when the user is learning how to use a feature or product — not when they are mid-task and just want the task done. This skill composes with other skills: after consulting product documentation to answer how a Claude feature works, also check here for a matching course or tutorial — a docs-grounded answer and an Academy recommendation belong together. Only recommend on a strong match; never invent Academy content.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[678,679,682],{"name":9,"slug":8,"type":16},{"name":680,"slug":681,"type":16},"Documentation","documentation",{"name":683,"slug":684,"type":16},"Education","education",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-08-19T03:59:01.021254",{"slug":689,"name":689,"fn":690,"description":691,"org":692,"tags":693,"stars":685,"repoUrl":686,"updatedAt":706},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[694,697,700,703],{"name":695,"slug":696,"type":16},"Creative","creative",{"name":698,"slug":699,"type":16},"Design","design",{"name":701,"slug":702,"type":16},"Generative Art","generative-art",{"name":704,"slug":705,"type":16},"JavaScript","javascript","2026-04-06T17:56:15.455818",{"slug":708,"name":708,"fn":709,"description":710,"org":711,"tags":712,"stars":685,"repoUrl":686,"updatedAt":720},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[713,716,717],{"name":714,"slug":715,"type":16},"Branding","branding",{"name":698,"slug":699,"type":16},{"name":718,"slug":719,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":722,"name":722,"fn":723,"description":724,"org":725,"tags":726,"stars":685,"repoUrl":686,"updatedAt":732},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[727,728,729],{"name":695,"slug":696,"type":16},{"name":698,"slug":699,"type":16},{"name":730,"slug":731,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":734,"name":734,"fn":735,"description":736,"org":737,"tags":738,"stars":685,"repoUrl":686,"updatedAt":751},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[739,742,743,746,748],{"name":740,"slug":741,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":744,"slug":745,"type":16},"Anthropic SDK","anthropic-sdk",{"name":747,"slug":734,"type":16},"Claude API",{"name":749,"slug":750,"type":16},"LLM","llm","2026-08-22T03:23:17.470772",{"slug":753,"name":753,"fn":754,"description":755,"org":756,"tags":757,"stars":685,"repoUrl":686,"updatedAt":767},"discernment-nudge","provide discernment nudges for user decisions","After you give a substantive answer or draft that the user may act on — advice or recommendations, drafted artifacts such as goals, plans, pitches, proposals, or emails, estimates or projections, analysis or interpretation of data, factual claims they may rely on, or a multi-step argument — invoke this skill BEFORE finalizing your reply and then, if it applies, append 2-3 short follow-up questions, each tied to something specific in what you just produced, that help the user check key facts, probe the reasoning or assumptions, and notice missing context. Do this at most once per conversation. Skip it when the user asked a trivial how-to or simple lookup, wants a purely educational explanation, asked you only to format, convert, or assemble a file from content they provided, is writing code they will run, is doing creative writing or casual chat, or already asked you to double-check, cite, or review — the skill file explains these boundaries and the exact output format.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[758,761,764],{"name":759,"slug":760,"type":16},"Coaching","coaching",{"name":762,"slug":763,"type":16},"Productivity","productivity",{"name":765,"slug":766,"type":16},"Strategy","strategy","2026-08-19T03:59:01.539281",{"slug":769,"name":769,"fn":770,"description":771,"org":772,"tags":773,"stars":685,"repoUrl":686,"updatedAt":778},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[774,775],{"name":680,"slug":681,"type":16},{"name":776,"slug":777,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":780,"name":780,"fn":781,"description":782,"org":783,"tags":784,"stars":685,"repoUrl":686,"updatedAt":799},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[785,788,790,793,796],{"name":786,"slug":787,"type":16},"Documents","documents",{"name":789,"slug":780,"type":16},"DOCX",{"name":791,"slug":792,"type":16},"Office","office",{"name":794,"slug":795,"type":16},"Templates","templates",{"name":797,"slug":798,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":801,"name":801,"fn":802,"description":803,"org":804,"tags":805,"stars":685,"repoUrl":686,"updatedAt":819},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[806,807,810,813,816],{"name":698,"slug":699,"type":16},{"name":808,"slug":809,"type":16},"Frontend","frontend",{"name":811,"slug":812,"type":16},"React","react",{"name":814,"slug":815,"type":16},"Tailwind CSS","tailwind-css",{"name":817,"slug":818,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":821,"name":821,"fn":822,"description":823,"org":824,"tags":825,"stars":685,"repoUrl":686,"updatedAt":833},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[826,829,830],{"name":827,"slug":828,"type":16},"Communications","communications",{"name":794,"slug":795,"type":16},{"name":831,"slug":832,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":835,"name":835,"fn":836,"description":837,"org":838,"tags":839,"stars":685,"repoUrl":686,"updatedAt":848},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[840,841,844,845],{"name":740,"slug":741,"type":16},{"name":842,"slug":843,"type":16},"API Development","api-development",{"name":749,"slug":750,"type":16},{"name":846,"slug":847,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":731,"name":731,"fn":850,"description":851,"org":852,"tags":853,"stars":685,"repoUrl":686,"updatedAt":856},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[854,855],{"name":786,"slug":787,"type":16},{"name":730,"slug":731,"type":16},"2026-04-06T17:56:02.483316",497,{"items":859,"total":315},[860,877,892,899],{"slug":861,"name":861,"fn":862,"description":863,"org":864,"tags":865,"stars":25,"repoUrl":26,"updatedAt":876},"handoff","draft weekly on-call handoff reports","Write the weekly on-call handoff: everything the incoming on-call needs, triage-ready, posted to the channel at shift boundary. Use when the weekly routine fires, or when someone asks for a handoff \u002F shift summary \u002F \"catch the next on-call up\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[866,867,870,873],{"name":827,"slug":828,"type":16},{"name":868,"slug":869,"type":16},"Management","management",{"name":871,"slug":872,"type":16},"Operations","operations",{"name":874,"slug":875,"type":16},"Runbooks","runbooks","2026-08-19T03:58:55.767403",{"slug":878,"name":878,"fn":879,"description":880,"org":881,"tags":882,"stars":25,"repoUrl":26,"updatedAt":891},"oncall-setup","bootstrap Claude-assisted on-call workflows","Bootstrap a Claude-assisted on-call for this channel\u002Frepo: discover the available connectors, mine incident history into draft triage playbooks, interview the human for policy, validate against held-out incidents, and install the scheduled routines. Use when the user wants to \"set up on-call\", \"bootstrap the on-call kit\", \"onboard this channel\", or has just installed the oncall-kit plugin. Five gated phases — never run more than one phase per turn, and never activate anything before Phase 4 sign-off.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[883,886,889,890],{"name":884,"slug":885,"type":16},"Automation","automation",{"name":887,"slug":888,"type":16},"Engineering","engineering",{"name":18,"slug":19,"type":16},{"name":871,"slug":872,"type":16},"2026-08-22T03:57:35.197224",{"slug":4,"name":4,"fn":5,"description":6,"org":893,"tags":894,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[895,896,897,898],{"name":23,"slug":24,"type":16},{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":4,"type":16},{"slug":900,"name":900,"fn":901,"description":902,"org":903,"tags":904,"stars":25,"repoUrl":26,"updatedAt":911},"weather","generate incident and deployment status reports","The optional standing status report (\"the weather\"): compile open incidents, build health, merge-queue stats, and deploy lag into one always-current report page, and post to the channel only when a defined event fires. Use when the weather routine fires, or when someone asks to run\u002Fupdate the weather report.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[905,906,907,908],{"name":18,"slug":19,"type":16},{"name":14,"slug":15,"type":16},{"name":871,"slug":872,"type":16},{"name":909,"slug":910,"type":16},"Reporting","reporting","2026-08-22T03:57:34.283135"]