[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C65WPDKD6ESQQBAP1MV7K4":3,"skill-same:01M6C65WPDKD6ESQQBAP1MV7K4":98},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":6,"ownerHtmlUrl":57,"ownerBlogUrl":6,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M6C65WPDKD6ESQQBAP1MV7K4","macos-incident-postmortem",null,"Reconstruct macOS freeze, panic, or reboot from DiagnosticReports and shell history. Use when investigating hangs, panics, watchdog timeouts, jetsam, or thermal throttling.","laurigates\u002Fclaude-plugins","laurigates","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13014001?v=4","01M6C59YHWS9C7KMXKSRX1YXNP","Lauri Gates","01M6C59YP2APG9YAM4DWYQYGFJ",59,"MIT","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fmacos-plugin\u002Fskills\u002Fmacos-incident-postmortem\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"incident postmortem","postmortem","incident","macos incident postmortem","macos","use","2026","when","uname","sysctl","thermal","false","wed","reboot","log","read","grep","history","Bash","freeze","shell","throttling","watchdog","uptime","2026-11-10 10:12:30",false,"---\nname: macos-incident-postmortem\ndescription: Reconstruct macOS freeze, panic, or reboot from DiagnosticReports and shell history. Use when investigating hangs, panics, watchdog timeouts, jetsam, or thermal throttling.\nuser-invocable: false\nallowed-tools: Bash(bash *), Bash(uname *), Bash(sysctl *), Bash(uptime *), Bash(last *), Bash(log *), Bash(pmset *), Read, Grep, Glob, TodoWrite\ncreated: 2026-05-03\nmodified: 2026-11-09\nreviewed: 2026-06-10\n---\n\n# macOS Incident Postmortem\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|------------------------|----------------------------|\n| GUI froze and you're not sure if the machine rebooted | Live-debugging a hung process — use `sample` \u002F `spindump` |\n| Investigating recent kernel panics or watchdog timeouts | Application crashes — open the per-app `.crash` \u002F `.ips` directly |\n| Cross-referencing \"what was I doing at time T?\" against logs | Active CPU diagnosis — see `launchservices-health` |\n| Auditing whether the system is \"due for a reboot\" | Pre-incident hardening — wrong skill, this is forensics |\n\n## Platform Guard\n\nThis skill is **macOS-only**. `\u002FLibrary\u002FLogs\u002FDiagnosticReports\u002F`, `kern.boottime`, `pmset -g log`, and the `log` command are Darwin-specific. Refuse to act if `uname -s` is not `Darwin`.\n\n```bash\ntest \"$(uname -s)\" = \"Darwin\" || { echo \"macos-plugin: not Darwin, refusing\"; exit 1; }\n```\n\n## Core Expertise\n\nA macOS \"incident\" can mean any of:\n\n- A kernel panic (system reset by the kernel)\n- A WindowServer userspace watchdog timeout (the GUI froze and the user power-cycled)\n- A LaunchServices \u002F coreaudiod \u002F mds-stores XPC stall (one daemon dragged the GUI down)\n- A jetsam memory-pressure event (the kernel killed apps to reclaim RAM)\n- A thermal throttle (CPU clamped to base frequency for minutes)\n- A user-initiated force-reboot after a hang (no panic; just lost state)\n\nThe first job in a postmortem is **distinguishing between actual reboots and GUI hangs**. The 2026-04-22 incident that motivated this plugin *looked* like a crash to the user but `last reboot` showed no reboot — the kernel was fine, only the GUI stack hung.\n\nThe second job is **timeline reconstruction**: cross-reference Diagnostic Reports, `kern.boottime`, `last reboot`, `last shutdown`, and shell history to answer \"what happened around time T?\".\n\n## Gather the deterministic signals\n\nRun the bundled script to gather every mechanical signal in one pass —\nreboot-vs-hang detection, per-category DiagnosticReports counts, the CPU-event\noffender histogram, the jetsam victim list, and the fixed reboot\u002Fhang\nclassifier:\n\n```bash\nbash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fmacos-incident-postmortem.sh\" --home-dir \"$HOME\"\n```\n\nParse `STATUS=` and `ISSUES:` from the output. The script emits\n`CLASSIFICATION=` (REBOOT_PANIC \u002F REBOOT_CLEAN \u002F HANG_UI \u002F HANG_CPU \u002F\nHANG_JETSAM \u002F HANG_OR_POWERCYCLE \u002F UNKNOWN) with a `CLASSIFICATION_REASON=`,\nplus `PANIC_COUNT=` \u002F `HANG_COUNT=` \u002F `JETSAM_COUNT=` \u002F `CPU_RESOURCE_COUNT=`\netc., `LATEST_PANIC=` \u002F `LATEST_HANG=` paths, and `CPU_OFFENDERS:` \u002F\n`JETSAM_VICTIMS:` histograms.\n\nPass the incident time T as an epoch to enable the classifier\n(`MACOS_PM_INCIDENT_EPOCH=\u003Cepoch> bash …`), or supply an alternate report\nsource with `--reports-dir \u003Cpath>`. With no incident time the classifier\nreports `UNKNOWN` rather than guessing — feed it T once you know it.\n\nThe reboot\u002Fhang decision tree the script encodes:\n\n| Pattern | Interpretation |\n|---------|----------------|\n| Boot at\u002Fafter T with a `.panic` report | True reboot from a kernel panic |\n| Boot at\u002Fafter T, no panic | Clean restart (user-initiated or watchdog) |\n| Boot before T with a `.hang`\u002F`.spindump.txt` | GUI hang — machine did not reboot |\n| Boot before T with a `.cpu_resource.diag` | Daemon CPU storm |\n| Boot before T with a `JetsamEvent-*` | Memory-pressure kill |\n| Boot before T, none of the above | Power loss or hard power-cycle |\n\nWhen a report filename or category is unfamiliar, or `last reboot` comes back empty because `wtmp` rotated past T, open [references\u002Fdiagnostic-reports.md](references\u002Fdiagnostic-reports.md) for the suffix → category → severity table and the unified-log boot\u002Fshutdown query.\n\n## Timeline Reconstruction (judgment)\n\nWith the deterministic classification and counts in hand, the remaining steps\nare the agent's job: read the panic backtrace, name suspect kexts, correlate\nwith logs and shell activity, and write the narrative.\n\n### Step 1: Inspect the unified log around T\n\n```bash\n# Adjust the time window to bracket T\nlog show --start \"2026-04-22 08:15:00\" --end \"2026-04-22 08:25:00\" \\\n  --predicate 'subsystem == \"com.apple.WindowServer\" OR process == \"launchservicesd\" OR process == \"coreaudiod\"' \\\n  --style syslog \\\n  | head -500\n```\n\nCommon signatures to grep for:\n\n| Signature | Meaning |\n|-----------|---------|\n| `WindowServer:` watchdog | UI froze long enough to trip the watchdog |\n| `posix_spawn` failures | Fork\u002Fexec storm — usually shell loops or runaway scripts |\n| `Jetsam Killing` | Kernel killing processes for memory |\n| `_dispatch_*_timeout` | Daemon stuck on a synchronous IPC call |\n| `Thermal pressure` | CPU thermal-throttled |\n\n### Step 2: Inspect the panic \u002F hang report\n\nThe script's `LATEST_PANIC=` \u002F `LATEST_HANG=` lines give you the file to read.\nKey fields in a panic report:\n\n| Field | Meaning |\n|-------|---------|\n| `panic(cpu N caller ...)` | The instruction that panicked; first line says why |\n| `Backtrace (CPU N)` | Call stack at the time of panic |\n| `Mac OS version`, `Kernel version` | OS state |\n| `System uptime in nanoseconds` | Uptime at the moment of panic |\n| `last loaded kext` \u002F `loaded kexts` | Likely third-party suspect |\n\nHang reports are spindump-style: one column per thread of the hung process (typically WindowServer or the offender daemon), with stack traces at sample intervals.\n\n### Step 3: Correlate with shell activity\n\n```bash\n# Most recent zsh history entries (assumes default zsh)\nfc -l -t '%Y-%m-%d %H:%M:%S' -100\n\n# Or directly:\ntail -50 ~\u002F.zsh_history\n```\n\nThe zsh `EXTENDED_HISTORY` format `: \u003Cepoch>:\u003Celapsed>;\u003Ccmd>` lets you grep for commands run within the incident window.\n\n### Step 4: Synthesize\n\nWrite a one-paragraph timeline including:\n\n- Type of incident (panic \u002F hang \u002F jetsam \u002F power-cycle)\n- Time T and time-since-boot at T\n- Top suspects (loaded kexts, busy daemons, low-memory processes)\n- What recovery looked like (clean reboot \u002F hard power-cycle \u002F GUI returned on its own)\n\n## Common Patterns\n\nThe reboot-vs-hang one-liner, per-category report counts, the CPU-event\noffender histogram, and the jetsam victim list are all produced in one pass by\nthe bundled script (`scripts\u002Fmacos-incident-postmortem.sh` — see \"Gather the\ndeterministic signals\" above). Read `CLASSIFICATION=`, the `*_COUNT=` keys,\n`CPU_OFFENDERS:`, and `JETSAM_VICTIMS:` from its output rather than re-running\nthe equivalent shell pipelines. A sudden rise in any category count is a\nleading indicator before a major hang or panic; offenders\u002Fvictims that recur\nare running near their CPU\u002Fmemory budget.\n\n### Correlate with sleep\u002Fwake history\n\n```bash\npmset -g log | grep -E 'Sleep|Wake|DarkWake' | tail -50\n```\n\nA spurt of `DarkWake` entries followed by a hang report often means a peripheral or sleep-assertion-holder is the trigger.\n\n## Skip List (Common False Suspects)\n\n| Suspect | Why it's usually NOT the cause |\n|---------|--------------------------------|\n| `mds`, `mds_stores` (Spotlight) | Heavy I\u002FO is normal after large file changes; rarely panics |\n| `cloudd` | High network use is normal during iCloud sync |\n| `bird` (CloudKit) | Same as `cloudd` |\n| `Time Machine` | Throttles itself; almost never the proximate cause |\n| `kernel_task` at 100% | This is thermal management *running*, not a bug |\n\nIf one of these is the only thing visible in your timeline, look harder — the real cause is usually a daemon that *blocked on* one of these, not the daemon itself.\n\n## Agentic Optimizations\n\n| Context | Command |\n|---------|---------|\n| All deterministic signals + classifier | `bash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fmacos-incident-postmortem.sh\" --home-dir \"$HOME\"` |\n| Classify against a known T | `MACOS_PM_INCIDENT_EPOCH=\u003Cepoch> bash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fmacos-incident-postmortem.sh\"` |\n| Last 5 boots | `last reboot \\| head -5` |\n| Last 5 shutdowns | `last shutdown \\| head -5` |\n| WindowServer log slice | `log show --predicate 'subsystem == \"com.apple.WindowServer\"' --last 1h --style syslog \\| head -200` |\n\n## Quick Reference\n\nKey paths, useful `log show` predicates, and time selectors for building the timeline queries: [references\u002Fquick-reference.md](references\u002Fquick-reference.md).\n\n## Decision Flow\n\n```\nDid `last reboot` advance near time T?\n├─ YES → Kernel-level event\n│   ├─ *.panic file present? → Panic; read backtrace\n│   └─ No panic file → Clean restart (user-initiated or watchdog)\n└─ NO → Userspace event\n    ├─ *.hang or *.spindump.txt near T? → UI thread hang\n    ├─ *.cpu_resource.diag spike near T? → Daemon CPU storm\n    ├─ JetsamEvent-* near T? → Memory-pressure kill\n    └─ None of the above → Power loss or hard power-cycle\n```\n\n## Error Handling\n\nWhen a command fails or the reports do not reach back to T (permission denied, empty `last reboot`, slow `log show`, rotated reports), open [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md).\n\n## Related Skills\n\n- `launchservices-health` — when the timeline points at `launchservicesd`, dig deeper there\n- `kitty-plugin:kitty-session-persistence` — recover terminal state lost during the incident\n","# macOS Incident Postmortem\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|------------------------|----------------------------|\n| GUI froze and you're not sure if the machine rebooted | Live-debugging a hung process — use `sample` \u002F `spindump` |\n| Investigating recent kernel panics or watchdog timeouts | Application crashes — open the per-app `.crash` \u002F `.ips` directly |\n| Cross-referencing \"what was I doing at time T?\" against logs | Active CPU diagnosis — see `launchservices-health` |\n| Auditing whether the system is \"due for a reboot\" | Pre-incident hardening — wrong skill, this is forensics |\n\n## Platform Guard\n\nThis skill is **macOS-only**. `\u002FLibrary\u002FLogs\u002FDiagnosticReports\u002F`, `kern.boottime`, `pmset -g log`, and the `log` command are Darwin-specific. Refuse to act if `uname -s` is not `Darwin`.\n\n```bash\ntest \"$(uname -s)\" = \"Darwin\" || { echo \"macos-plugin: not Darwin, refusing\"; exit 1; }\n```\n\n## Core Expertise\n\nA macOS \"incident\" can mean any of:\n\n- A kernel panic (system reset by the kernel)\n- A WindowServer userspace watchdog timeout (the GUI froze and the user power-cycled)\n- A LaunchServices \u002F coreaudiod \u002F mds-stores XPC stall (one daemon dragged the GUI down)\n- A jetsam memory-pressure event (the kernel killed apps to reclaim RAM)\n- A thermal throttle (CPU clamped to base frequency for minutes)\n- A user-initiated force-reboot after a hang (no panic; just lost state)\n\nThe first job in a postmortem is **distinguishing between actual reboots and GUI hangs**. The 2026-04-22 incident that motivated this plugin *looked* like a crash to the user but `last reboot` showed no reboot — the kernel was fine, only the GUI stack hung.\n\nThe second job is **timeline reconstruction**: cross-reference Diagnostic Reports, `kern.boottime`, `last reboot`, `last shutdown`, and shell history to answer \"what happened around time T?\".\n\n## Gather the deterministic signals\n\nRun the bundled script to gather every mechanical signal in one pass —\nreboot-vs-hang detection, per-category DiagnosticReports counts, the CPU-event\noffender histogram, the jetsam victim list, and the fixed reboot\u002Fhang\nclassifier:\n\n```bash\nbash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fmacos-incident-postmortem.sh\" --home-dir \"$HOME\"\n```\n\nParse `STATUS=` and `ISSUES:` from the output. The script emits\n`CLASSIFICATION=` (REBOOT_PANIC \u002F REBOOT_CLEAN \u002F HANG_UI \u002F HANG_CPU \u002F\nHANG_JETSAM \u002F HANG_OR_POWERCYCLE \u002F UNKNOWN) with a `CLASSIFICATION_REASON=`,\nplus `PANIC_COUNT=` \u002F `HANG_COUNT=` \u002F `JETSAM_COUNT=` \u002F `CPU_RESOURCE_COUNT=`\netc., `LATEST_PANIC=` \u002F `LATEST_HANG=` paths, and `CPU_OFFENDERS:` \u002F\n`JETSAM_VICTIMS:` histograms.\n\nPass the incident time T as an epoch to enable the classifier\n(`MACOS_PM_INCIDENT_EPOCH=\u003Cepoch> bash …`), or supply an alternate report\nsource with `--reports-dir \u003Cpath>`. With no incident time the classifier\nreports `UNKNOWN` rather than guessing — feed it T once you know it.\n\nThe reboot\u002Fhang decision tree the script encodes:\n\n| Pattern | Interpretation |\n|---------|----------------|\n| Boot at\u002Fafter T with a `.panic` report | True reboot from a kernel panic |\n| Boot at\u002Fafter T, no panic | Clean restart (user-initiated or watchdog) |\n| Boot before T with a `.hang`\u002F`.spindump.txt` | GUI hang — machine did not reboot |\n| Boot before T with a `.cpu_resource.diag` | Daemon CPU storm |\n| Boot before T with a `JetsamEvent-*` | Memory-pressure kill |\n| Boot before T, none of the above | Power loss or hard power-cycle |\n\nWhen a report filename or category is unfamiliar, or `last reboot` comes back empty because `wtmp` rotated past T, open [references\u002Fdiagnostic-reports.md](references\u002Fdiagnostic-reports.md) for the suffix → category → severity table and the unified-log boot\u002Fshutdown query.\n\n## Timeline Reconstruction (judgment)\n\nWith the deterministic classification and counts in hand, the remaining steps\nare the agent's job: read the panic backtrace, name suspect kexts, correlate\nwith logs and shell activity, and write the narrative.\n\n### Step 1: Inspect the unified log around T\n\n```bash\n# Adjust the time window to bracket T\nlog show --start \"2026-04-22 08:15:00\" --end \"2026-04-22 08:25:00\" \\\n  --predicate 'subsystem == \"com.apple.WindowServer\" OR process == \"launchservicesd\" OR process == \"coreaudiod\"' \\\n  --style syslog \\\n  | head -500\n```\n\nCommon signatures to grep for:\n\n| Signature | Meaning |\n|-----------|---------|\n| `WindowServer:` watchdog | UI froze long enough to trip the watchdog |\n| `posix_spawn` failures | Fork\u002Fexec storm — usually shell loops or runaway scripts |\n| `Jetsam Killing` | Kernel killing processes for memory |\n| `_dispatch_*_timeout` | Daemon stuck on a synchronous IPC call |\n| `Thermal pressure` | CPU thermal-throttled |\n\n### Step 2: Inspect the panic \u002F hang report\n\nThe script's `LATEST_PANIC=` \u002F `LATEST_HANG=` lines give you the file to read.\nKey fields in a panic report:\n\n| Field | Meaning |\n|-------|---------|\n| `panic(cpu N caller ...)` | The instruction that panicked; first line says why |\n| `Backtrace (CPU N)` | Call stack at the time of panic |\n| `Mac OS version`, `Kernel version` | OS state |\n| `System uptime in nanoseconds` | Uptime at the moment of panic |\n| `last loaded kext` \u002F `loaded kexts` | Likely third-party suspect |\n\nHang reports are spindump-style: one column per thread of the hung process (typically WindowServer or the offender daemon), with stack traces at sample intervals.\n\n### Step 3: Correlate with shell activity\n\n```bash\n# Most recent zsh history entries (assumes default zsh)\nfc -l -t '%Y-%m-%d %H:%M:%S' -100\n\n# Or directly:\ntail -50 ~\u002F.zsh_history\n```\n\nThe zsh `EXTENDED_HISTORY` format `: \u003Cepoch>:\u003Celapsed>;\u003Ccmd>` lets you grep for commands run within the incident window.\n\n### Step 4: Synthesize\n\nWrite a one-paragraph timeline including:\n\n- Type of incident (panic \u002F hang \u002F jetsam \u002F power-cycle)\n- Time T and time-since-boot at T\n- Top suspects (loaded kexts, busy daemons, low-memory processes)\n- What recovery looked like (clean reboot \u002F hard power-cycle \u002F GUI returned on its own)\n\n## Common Patterns\n\nThe reboot-vs-hang one-liner, per-category report counts, the CPU-event\noffender histogram, and the jetsam victim list are all produced in one pass by\nthe bundled script (`scripts\u002Fmacos-incident-postmortem.sh` — see \"Gather the\ndeterministic signals\" above). Read `CLASSIFICATION=`, the `*_COUNT=` keys,\n`CPU_OFFENDERS:`, and `JETSAM_VICTIMS:` from its output rather than re-running\nthe equivalent shell pipelines. A sudden rise in any category count is a\nleading indicator before a major hang or panic; offenders\u002Fvictims that recur\nare running near their CPU\u002Fmemory budget.\n\n### Correlate with sleep\u002Fwake history\n\n```bash\npmset -g log | grep -E 'Sleep|Wake|DarkWake' | tail -50\n```\n\nA spurt of `DarkWake` entries followed by a hang report often means a peripheral or sleep-assertion-holder is the trigger.\n\n## Skip List (Common False Suspects)\n\n| Suspect | Why it's usually NOT the cause |\n|---------|--------------------------------|\n| `mds`, `mds_stores` (Spotlight) | Heavy I\u002FO is normal after large file changes; rarely panics |\n| `cloudd` | High network use is normal during iCloud sync |\n| `bird` (CloudKit) | Same as `cloudd` |\n| `Time Machine` | Throttles itself; almost never the proximate cause |\n| `kernel_task` at 100% | This is thermal management *running*, not a bug |\n\nIf one of these is the only thing visible in your timeline, look harder — the real cause is usually a daemon that *blocked on* one of these, not the daemon itself.\n\n## Agentic Optimizations\n\n| Context | Command |\n|---------|---------|\n| All deterministic signals + classifier | `bash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fmacos-incident-postmortem.sh\" --home-dir \"$HOME\"` |\n| Classify against a known T | `MACOS_PM_INCIDENT_EPOCH=\u003Cepoch> bash \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Fmacos-incident-postmortem.sh\"` |\n| Last 5 boots | `last reboot \\| head -5` |\n| Last 5 shutdowns | `last shutdown \\| head -5` |\n| WindowServer log slice | `log show --predicate 'subsystem == \"com.apple.WindowServer\"' --last 1h --style syslog \\| head -200` |\n\n## Quick Reference\n\nKey paths, useful `log show` predicates, and time selectors for building the timeline queries: [references\u002Fquick-reference.md](references\u002Fquick-reference.md).\n\n## Decision Flow\n\n```\nDid `last reboot` advance near time T?\n├─ YES → Kernel-level event\n│   ├─ *.panic file present? → Panic; read backtrace\n│   └─ No panic file → Clean restart (user-initiated or watchdog)\n└─ NO → Userspace event\n    ├─ *.hang or *.spindump.txt near T? → UI thread hang\n    ├─ *.cpu_resource.diag spike near T? → Daemon CPU storm\n    ├─ JetsamEvent-* near T? → Memory-pressure kill\n    └─ None of the above → Power loss or hard power-cycle\n```\n\n## Error Handling\n\nWhen a command fails or the reports do not reach back to T (permission denied, empty `last reboot`, slow `log show`, rotated reports), open [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md).\n\n## Related Skills\n\n- `launchservices-health` — when the timeline points at `launchservicesd`, dig deeper there\n- `kitty-plugin:kitty-session-persistence` — recover terminal state lost during the incident\n",{"name":5,"created":48,"modified":49,"reviewed":50,"description":7,"allowed-tools":51,"user-invocable":44},1777766400000,1794182400000,1781049600000,"Bash(bash *), Bash(uname *), Bash(sysctl *), Bash(uptime *), Bash(last *), Bash(log *), Bash(pmset *), Read, Grep, Glob, TodoWrite","main","4ce428979f89281ce915e0c022270791a6fa5b08","macos-plugin\u002Fskills\u002Fmacos-incident-postmortem",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-13 03:22:01",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add laurigates\u002Fclaude-plugins --skill macos-incident-postmortem",{"tool":66,"command":67},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill macos-incident-postmortem",{"tool":69,"command":70},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill macos-incident-postmortem","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fmacos-plugin\u002Fskills\u002Fmacos-incident-postmortem\u002FSKILL.md",true,[74,80,84,88,94],{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fdiagnostic-reports.md","REFERENCE","参考文档",1545,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fmacos-plugin\u002Fskills\u002Fmacos-incident-postmortem\u002Freferences\u002Fdiagnostic-reports.md",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fquick-reference.md",1248,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fmacos-plugin\u002Fskills\u002Fmacos-incident-postmortem\u002Freferences\u002Fquick-reference.md",{"path":85,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Ftroubleshooting.md",844,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fmacos-plugin\u002Fskills\u002Fmacos-incident-postmortem\u002Freferences\u002Ftroubleshooting.md",{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Fmacos-incident-postmortem.sh","SCRIPT","脚本",10788,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fmacos-plugin\u002Fskills\u002Fmacos-incident-postmortem\u002Fscripts\u002Fmacos-incident-postmortem.sh",{"path":95,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":96,"sourceHtmlUrl":97},"scripts\u002Ftests\u002Ftest-macos-incident-postmortem.sh",7481,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fmacos-plugin\u002Fskills\u002Fmacos-incident-postmortem\u002Fscripts\u002Ftests\u002Ftest-macos-incident-postmortem.sh",[99,126,143,159,182,212],{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":110,"publishedAt":43},"01M70PFHMH9ADY0CRE6047Y4B2","kitty-show-image","Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",[105],{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[111,112,113,114,115,116,117,118,119,120,24,26,37,121,122,123,124,125,25,34],"show","kitty show image","image","kitty","show image","ls","get","send","open","dev","file","text","with","xdg","via",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":43},"01M70PFEN18HKQ4RCQ1VPGMPTB","kitty-session-persistence","Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-session-persistence\u002FSKILL.md",[],[114,133,134,135,30,136,26,37,27,32,137,25,34,138,139,140,23,141,142,24],"kitty session persistence","session","persistence","snapshots","terminal","write","edit","snapshot","sessions","restore",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":43},"01M70PFC77XGXCVQ1543VGZHYR","kitty-remote-control","Safe kitty remote control from an agent — read panes with kitty @ ls\u002Fget-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-remote-control\u002FSKILL.md",[],[150,151,114,152,153,116,154,155,117,156,157,24,26,158,37,122,123,137,25,34],"kitty remote control","remote","control","remote control","running","never","panes","notify","query",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":43},"01M70P6WVMCT5JG4SACTM69AF9","docs-reference-check","Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved\u002Fdeleted files, or wiring a doc-drift lint.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fdocumentation-plugin\u002Fskills\u002Fdocs-reference-check\u002FSKILL.md",[],[166,167,168,169,170,171,172,173,174,175,24,26,37,176,121,177,178,179,180,181],"docs reference check","check","reference check","reference","docs","links","python3","repo","files","auto","drift","lint","wiring","chezmoi","references","cp",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":197,"publishedAt":43},"01M6C6NDE7DAQGNWSF22J5CJ0Z","youtube-upload","Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-upload\u002FSKILL.md",[188,191,192],{"categoryNo":189,"categoryName":190,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},{"categoryNo":193,"categoryName":194,"taxonomyType":195,"taxonomyTypeDesc":196},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[198,199,200,201,172,202,34,203,139,204,205,206,24,37,121,207,208,26,209,210,211,125,25],"youtube upload","upload","youtube","Video","run","uv run","publishing","data","uv","api","v3","tags","id","title",{"skillNo":213,"name":214,"nameZh":6,"description":215,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":216,"categories":217,"keywords":221,"publishedAt":43},"01M6C6NABWW1X58KJJM4F6GQMQ","youtube-studio-share","Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-studio-share\u002FSKILL.md",[218],{"categoryNo":219,"categoryName":220,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000023","Skill与智能体开发",[222,223,224,225,200,201,226,227,228,229,230,34,231,232,233,234,24,235,26,123,236,25],"youtube studio share","share","youtube studio","studio","browser","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization"]