[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C5VGD87MC697RVF4G01PYK":3,"skill-same:01M6C5VGD87MC697RVF4G01PYK":90},{"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":23,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":6,"ownerHtmlUrl":67,"ownerBlogUrl":6,"ownerDescription":68,"updatedAt":69,"install":70,"resources":83},"01M6C5VGD87MC697RVF4G01PYK","evaluate-plugin-batch",null,"Batch evaluate every skill in a plugin and produce a plugin-level report. Use when auditing an entire plugin's quality or validating before a release.","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\u002Fevaluate-plugin\u002Fskills\u002Fevaluate-plugin-batch\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"evaluate","evaluate plugin batch","batch","evaluate plugin","plugin","parallel","2026","when","headless","wed","evals","use","write","read","grep","quality","subagent","Bash","produce","harness","git","release","report","code","create","2026-11-10 10:12:30",false,"---\nname: evaluate-plugin-batch\ndescription: Batch evaluate every skill in a plugin and produce a plugin-level report. Use when auditing an entire plugin's quality or validating before a release.\nargs: \u003Cplugin-name> [--create-missing-evals] [--parallel N] [--harness subagent|headless]\nallowed-tools: Task, Read, Write, Glob, Grep, Bash(bash *), SlashCommand\nargument-hint: \"git-plugin [--create-missing-evals]\"\nagent: general-purpose\ncreated: 2026-03-04\nmodified: 2026-10-05\ncompatibility: claude-code\nreviewed: 2026-09-02\n---\n\n# \u002Fevaluate:plugin-batch\n\nBatch evaluate all skills in a plugin. Runs `\u002Fevaluate:skill` for each skill, then produces a plugin-level quality report.\n\n## When to Use This Skill\n\n| Use this skill when... | Use alternative when... |\n|------------------------|------------------------|\n| Auditing all skills in a plugin before release | Evaluating a single skill -> `\u002Fevaluate:skill` |\n| Establishing quality baselines across a plugin | Viewing past results -> `\u002Fevaluate:report` |\n| Checking overall plugin quality after refactoring | Need structural compliance -> `plugin-compliance-check.sh` |\n\n## Context\n\n- Available plugins: !`find . -maxdepth 2 -type d -name '*-plugin' -not -name '.claude-plugin'`\n\n## Parameters\n\nParse these from `$ARGUMENTS`:\n\n| Parameter | Default | Description |\n|-----------|---------|-------------|\n| `\u003Cplugin-name>` | required | Name of the plugin to evaluate |\n| `--create-missing-evals` | false | Generate evals for skills that lack them |\n| `--parallel N` | 1 | Max concurrent skill evaluations |\n| `--harness subagent\\|headless` | `subagent` | Rollout harness forwarded to every `\u002Fevaluate:skill` run (see that skill). One harness per batch, so the per-skill benchmarks stay comparable |\n\n## Workflow harness (template)\n\n`workflows\u002Fevaluate-plugin-batch.workflow.js` ships beside this skill. **It is a\nTEMPLATE to adapt, not a script to run verbatim.** Read it, then rewrite it for\nthe work in front of you.\n\n**Adapt freely:** the inventory and aggregation agent prompts, the effort tiers,\nthe `DEFAULT_WAVE` starting width, the `CELL_CAP` handed to each child, the\n`skipped[]` reason strings, and the shape of the `rows` your project's report\nactually needs.\n\n**Preserve across any adaptation:** (a) the loop bound comes from\n`inspect_eval.sh --plugin-dir \u003Cplugin>`'s `=== SKILLS ===` \u002F `=== EVALS ===`\nlistings, never from a prose \"for each skill\" — and eval-readiness stays the\npure `s.hasEvals || createMissingEvals` filter over a file that exists or does\nnot, so no agent classifies it; (b) `REPORT_SCHEMA`'s closed\n`complete | partial-sweep | aggregate-failed` status enum and its one-value\n`denominatorSource` enum, which together make it structurally impossible to\nreport a plugin pass rate without stating that the denominator came from the\nscript; (c) the Aggregate stage is a barrier — `aggregate_benchmark.sh` walks\nthe filesystem for every skill's `eval-results\u002Fbenchmark.json`, so its\ndenominators are only correct once the last cell has finished writing, and no\nsingle cell can see the plugin-level numbers. The `harness` arg is forwarded\nverbatim to every `workflow('evaluate-skill', …)` child — never mixed within one\nbatch, because subagent and headless pass rates are not comparable.\n\nThree consequences of (a)–(c) that are also non-negotiable:\n\n- **`CAP` (default 25) ABORTS; it never truncates.** A silently-shortened sweep\n  publishes a pass rate over a denominator nobody chose — which is precisely the\n  number this skill exists to produce correctly. The abort states the count and\n  the cap.\n- **`--parallel N` is the caller's and is never superseded.** The wave width is\n  derived from `args.parallel`; `DEFAULT_WAVE` applies only when the caller\n  supplied nothing, and a non-integer value falls back loudly via `log()`. The\n  platform separately caps concurrency at `min(16, CPUs-2)`, and a nested child\n  shares this run's cap and agent counter.\n- **The workflow's own count is only a cross-check.** `crossCheck.agrees`\n  compares the cells this run dispatched against the benchmarks the script found\n  on disk. A disagreement emits `partial-sweep` — that disagreement is the\n  anti-laziness signal, not a rounding error, and must never be smoothed into\n  `complete`.\n\n**This harness runs near-empty until a golden set of `evals.json` files exists.**\nPer [`.claude\u002Frules\u002Fskill-evaluation.md`](..\u002F..\u002F..\u002F.claude\u002Frules\u002Fskill-evaluation.md)\neval coverage is deliberately scoped to ~15–25 canary skills, so most plugins\ntoday have zero or one eval-ready skill and the run aborts with\n`reason: 'below-floor'`. That is the designed outcome, not a bug — an empty\nsweep means the evals have not been written yet, and the fix is to author them\n(or pass `--create-missing-evals`), never to widen the harness.\n\n**Agent budget:** 2 + skills x evaluate-skill budget — the inventory and aggregate\nagents, plus one `evaluate-skill` child per included skill (at most 25), each\nspending that skill's own budget. The scale guard asks before every run: a\n`workflow()` child's agents are never counted.\n\n**Skip the harness when:** the plugin has fewer than 2 eval-ready skills — the\nmodal case today, and `FLOOR = 2` is a hard bound that aborts there rather than\na tunable knob, because a single skill is exactly what `\u002Fevaluate:skill` already\ndoes without an inventory agent, a nested workflow and an aggregate agent on\ntop. The steps below remain the authoritative description of *what* each stage\nmust produce; the harness only fixes *how* the work is split.\n\n`context: fork` stays **off** for this skill. The fan-out here is a caller-chosen\n`--parallel N` width, so the `[1m]` concurrent-subagent cascade hazard in\n[`.claude\u002Frules\u002Fskill-fork-context.md`](..\u002F..\u002F..\u002F.claude\u002Frules\u002Fskill-fork-context.md)\napplies; `scripts\u002Fplugin-compliance-check.sh` keeps this skill out of its\n`context: fork` pin list for that reason, and the harness does not change it.\n\n## Execution\n\n### Step 1: Discover skills\n\nFind all skills in the plugin:\n```\n\u003Cplugin-name>\u002Fskills\u002F*\u002FSKILL.md\n```\n\nList them and count the total.\n\n### Step 2: Filter and prepare\n\nFor each skill, check if `evals.json` exists:\n- **Has evals**: include in evaluation\n- **No evals + `--create-missing-evals`**: include, will create evals during evaluation\n- **No evals, no flag**: skip with a note\n\nReport the breakdown:\n```\nFound N skills in \u003Cplugin-name>:\n  - M with eval cases\n  - K without eval cases (skipped | will create)\n```\n\n### Step 3: Run evaluations\n\nFor each included skill, invoke `\u002Fevaluate:skill` via the SlashCommand tool:\n\n```\nSlashCommand: \u002Fevaluate:skill \u003Cplugin-name>\u002F\u003Cskill-name> [--create-evals] [--harness \u003Ch>]\n```\n\nForward `--harness` unchanged to every skill when it was given; omit it otherwise\n(the default is `subagent`).\n\nIf `--parallel N` is set and N > 1, batch evaluations into groups of N. Otherwise, run sequentially.\n\nReport progress from the results themselves: after each `\u002Fevaluate:skill`\nreturns, state which skill finished and its pass rate from `benchmark.json`.\n(Todo\u002Ftask tools are not available on Opus 4.8+\u002FSonnet 5\u002FFable-generation\nmodels unless `CLAUDE_CODE_ENABLE_TODO_TOOLS=1` is set; do not depend on them\n— see `.claude\u002Frules\u002Fagentic-permissions.md` § Task-tool availability.)\n\n### Step 4: Aggregate plugin report\n\nAfter all skill evaluations complete, read each skill's `benchmark.json` and aggregate:\n\n```\nbash evaluate-plugin\u002Fscripts\u002Faggregate_benchmark.sh \u003Cplugin-name>\n```\n\nWrite aggregated results to `\u003Cplugin-name>\u002Feval-results\u002Fplugin-benchmark.json`.\n\n### Step 5: Report\n\nPrint a plugin-level summary table:\n\n```\n## Plugin Evaluation: \u003Cplugin-name>\n\n| Skill | Evals | Pass Rate | Status |\n|-------|-------|-----------|--------|\n| skill-a | 4 | 100% | PASS |\n| skill-b | 3 | 67% | PARTIAL |\n| skill-c | 5 | 80% | PASS |\n\n**Overall**: 82% pass rate across N eval cases\n```\n\nRank skills by pass rate. Flag any below 50% as needing attention.\n\n## Agentic Optimizations\n\n| Context | Command |\n|---------|---------|\n| Inventory plugin skills + evals | `bash evaluate-plugin\u002Fscripts\u002Finspect_eval.sh --plugin-dir \u003Cplugin>` |\n| Inspect a single skill's evals | `bash evaluate-plugin\u002Fscripts\u002Finspect_eval.sh --plugin \u003Cplugin> --skill \u003Cskill>` |\n| Aggregate results | `bash evaluate-plugin\u002Fscripts\u002Faggregate_benchmark.sh \u003Cplugin>` |\n\n## Quick Reference\n\n| Flag | Description |\n|------|-------------|\n| `--create-missing-evals` | Generate eval cases for skills without them |\n| `--parallel N` | Max concurrent evaluations (default: 1) |\n| `--harness headless` | Run every skill's rollouts through real `claude -p` children (default: `subagent`) |\n","# \u002Fevaluate:plugin-batch\n\nBatch evaluate all skills in a plugin. Runs `\u002Fevaluate:skill` for each skill, then produces a plugin-level quality report.\n\n## When to Use This Skill\n\n| Use this skill when... | Use alternative when... |\n|------------------------|------------------------|\n| Auditing all skills in a plugin before release | Evaluating a single skill -> `\u002Fevaluate:skill` |\n| Establishing quality baselines across a plugin | Viewing past results -> `\u002Fevaluate:report` |\n| Checking overall plugin quality after refactoring | Need structural compliance -> `plugin-compliance-check.sh` |\n\n## Context\n\n- Available plugins: !`find . -maxdepth 2 -type d -name '*-plugin' -not -name '.claude-plugin'`\n\n## Parameters\n\nParse these from `$ARGUMENTS`:\n\n| Parameter | Default | Description |\n|-----------|---------|-------------|\n| `\u003Cplugin-name>` | required | Name of the plugin to evaluate |\n| `--create-missing-evals` | false | Generate evals for skills that lack them |\n| `--parallel N` | 1 | Max concurrent skill evaluations |\n| `--harness subagent\\|headless` | `subagent` | Rollout harness forwarded to every `\u002Fevaluate:skill` run (see that skill). One harness per batch, so the per-skill benchmarks stay comparable |\n\n## Workflow harness (template)\n\n`workflows\u002Fevaluate-plugin-batch.workflow.js` ships beside this skill. **It is a\nTEMPLATE to adapt, not a script to run verbatim.** Read it, then rewrite it for\nthe work in front of you.\n\n**Adapt freely:** the inventory and aggregation agent prompts, the effort tiers,\nthe `DEFAULT_WAVE` starting width, the `CELL_CAP` handed to each child, the\n`skipped[]` reason strings, and the shape of the `rows` your project's report\nactually needs.\n\n**Preserve across any adaptation:** (a) the loop bound comes from\n`inspect_eval.sh --plugin-dir \u003Cplugin>`'s `=== SKILLS ===` \u002F `=== EVALS ===`\nlistings, never from a prose \"for each skill\" — and eval-readiness stays the\npure `s.hasEvals || createMissingEvals` filter over a file that exists or does\nnot, so no agent classifies it; (b) `REPORT_SCHEMA`'s closed\n`complete | partial-sweep | aggregate-failed` status enum and its one-value\n`denominatorSource` enum, which together make it structurally impossible to\nreport a plugin pass rate without stating that the denominator came from the\nscript; (c) the Aggregate stage is a barrier — `aggregate_benchmark.sh` walks\nthe filesystem for every skill's `eval-results\u002Fbenchmark.json`, so its\ndenominators are only correct once the last cell has finished writing, and no\nsingle cell can see the plugin-level numbers. The `harness` arg is forwarded\nverbatim to every `workflow('evaluate-skill', …)` child — never mixed within one\nbatch, because subagent and headless pass rates are not comparable.\n\nThree consequences of (a)–(c) that are also non-negotiable:\n\n- **`CAP` (default 25) ABORTS; it never truncates.** A silently-shortened sweep\n  publishes a pass rate over a denominator nobody chose — which is precisely the\n  number this skill exists to produce correctly. The abort states the count and\n  the cap.\n- **`--parallel N` is the caller's and is never superseded.** The wave width is\n  derived from `args.parallel`; `DEFAULT_WAVE` applies only when the caller\n  supplied nothing, and a non-integer value falls back loudly via `log()`. The\n  platform separately caps concurrency at `min(16, CPUs-2)`, and a nested child\n  shares this run's cap and agent counter.\n- **The workflow's own count is only a cross-check.** `crossCheck.agrees`\n  compares the cells this run dispatched against the benchmarks the script found\n  on disk. A disagreement emits `partial-sweep` — that disagreement is the\n  anti-laziness signal, not a rounding error, and must never be smoothed into\n  `complete`.\n\n**This harness runs near-empty until a golden set of `evals.json` files exists.**\nPer [`.claude\u002Frules\u002Fskill-evaluation.md`](..\u002F..\u002F..\u002F.claude\u002Frules\u002Fskill-evaluation.md)\neval coverage is deliberately scoped to ~15–25 canary skills, so most plugins\ntoday have zero or one eval-ready skill and the run aborts with\n`reason: 'below-floor'`. That is the designed outcome, not a bug — an empty\nsweep means the evals have not been written yet, and the fix is to author them\n(or pass `--create-missing-evals`), never to widen the harness.\n\n**Agent budget:** 2 + skills x evaluate-skill budget — the inventory and aggregate\nagents, plus one `evaluate-skill` child per included skill (at most 25), each\nspending that skill's own budget. The scale guard asks before every run: a\n`workflow()` child's agents are never counted.\n\n**Skip the harness when:** the plugin has fewer than 2 eval-ready skills — the\nmodal case today, and `FLOOR = 2` is a hard bound that aborts there rather than\na tunable knob, because a single skill is exactly what `\u002Fevaluate:skill` already\ndoes without an inventory agent, a nested workflow and an aggregate agent on\ntop. The steps below remain the authoritative description of *what* each stage\nmust produce; the harness only fixes *how* the work is split.\n\n`context: fork` stays **off** for this skill. The fan-out here is a caller-chosen\n`--parallel N` width, so the `[1m]` concurrent-subagent cascade hazard in\n[`.claude\u002Frules\u002Fskill-fork-context.md`](..\u002F..\u002F..\u002F.claude\u002Frules\u002Fskill-fork-context.md)\napplies; `scripts\u002Fplugin-compliance-check.sh` keeps this skill out of its\n`context: fork` pin list for that reason, and the harness does not change it.\n\n## Execution\n\n### Step 1: Discover skills\n\nFind all skills in the plugin:\n```\n\u003Cplugin-name>\u002Fskills\u002F*\u002FSKILL.md\n```\n\nList them and count the total.\n\n### Step 2: Filter and prepare\n\nFor each skill, check if `evals.json` exists:\n- **Has evals**: include in evaluation\n- **No evals + `--create-missing-evals`**: include, will create evals during evaluation\n- **No evals, no flag**: skip with a note\n\nReport the breakdown:\n```\nFound N skills in \u003Cplugin-name>:\n  - M with eval cases\n  - K without eval cases (skipped | will create)\n```\n\n### Step 3: Run evaluations\n\nFor each included skill, invoke `\u002Fevaluate:skill` via the SlashCommand tool:\n\n```\nSlashCommand: \u002Fevaluate:skill \u003Cplugin-name>\u002F\u003Cskill-name> [--create-evals] [--harness \u003Ch>]\n```\n\nForward `--harness` unchanged to every skill when it was given; omit it otherwise\n(the default is `subagent`).\n\nIf `--parallel N` is set and N > 1, batch evaluations into groups of N. Otherwise, run sequentially.\n\nReport progress from the results themselves: after each `\u002Fevaluate:skill`\nreturns, state which skill finished and its pass rate from `benchmark.json`.\n(Todo\u002Ftask tools are not available on Opus 4.8+\u002FSonnet 5\u002FFable-generation\nmodels unless `CLAUDE_CODE_ENABLE_TODO_TOOLS=1` is set; do not depend on them\n— see `.claude\u002Frules\u002Fagentic-permissions.md` § Task-tool availability.)\n\n### Step 4: Aggregate plugin report\n\nAfter all skill evaluations complete, read each skill's `benchmark.json` and aggregate:\n\n```\nbash evaluate-plugin\u002Fscripts\u002Faggregate_benchmark.sh \u003Cplugin-name>\n```\n\nWrite aggregated results to `\u003Cplugin-name>\u002Feval-results\u002Fplugin-benchmark.json`.\n\n### Step 5: Report\n\nPrint a plugin-level summary table:\n\n```\n## Plugin Evaluation: \u003Cplugin-name>\n\n| Skill | Evals | Pass Rate | Status |\n|-------|-------|-----------|--------|\n| skill-a | 4 | 100% | PASS |\n| skill-b | 3 | 67% | PARTIAL |\n| skill-c | 5 | 80% | PASS |\n\n**Overall**: 82% pass rate across N eval cases\n```\n\nRank skills by pass rate. Flag any below 50% as needing attention.\n\n## Agentic Optimizations\n\n| Context | Command |\n|---------|---------|\n| Inventory plugin skills + evals | `bash evaluate-plugin\u002Fscripts\u002Finspect_eval.sh --plugin-dir \u003Cplugin>` |\n| Inspect a single skill's evals | `bash evaluate-plugin\u002Fscripts\u002Finspect_eval.sh --plugin \u003Cplugin> --skill \u003Cskill>` |\n| Aggregate results | `bash evaluate-plugin\u002Fscripts\u002Faggregate_benchmark.sh \u003Cplugin>` |\n\n## Quick Reference\n\n| Flag | Description |\n|------|-------------|\n| `--create-missing-evals` | Generate eval cases for skills without them |\n| `--parallel N` | Max concurrent evaluations (default: 1) |\n| `--harness headless` | Run every skill's rollouts through real `claude -p` children (default: `subagent`) |\n",{"args":54,"name":5,"agent":55,"created":56,"modified":57,"reviewed":58,"description":7,"allowed-tools":59,"argument-hint":60,"compatibility":61},"\u003Cplugin-name> [--create-missing-evals] [--parallel N] [--harness subagent|headless]","general-purpose",1772582400000,1791158400000,1788307200000,"Task, Read, Write, Glob, Grep, Bash(bash *), SlashCommand","git-plugin [--create-missing-evals]","claude-code","main","bdd0582f1a2ba53d21061835bfd72d45f2f954f4","evaluate-plugin\u002Fskills\u002Fevaluate-plugin-batch",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-12 03:43:32",{"source":8,"skillName":5,"commands":71,"prompt":81,"zipAvailable":82},[72,75,78],{"tool":73,"command":74},"npx","npx skills add laurigates\u002Fclaude-plugins --skill evaluate-plugin-batch",{"tool":76,"command":77},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill evaluate-plugin-batch",{"tool":79,"command":80},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill evaluate-plugin-batch","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fevaluate-plugin\u002Fskills\u002Fevaluate-plugin-batch\u002FSKILL.md",true,[84],{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"workflows\u002Fevaluate-plugin-batch.workflow.js","SCRIPT","脚本",16382,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fevaluate-plugin\u002Fskills\u002Fevaluate-plugin-batch\u002Fworkflows\u002Fevaluate-plugin-batch.workflow.js",[91,116,136,152,175,205],{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":100,"publishedAt":49},"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",[97],{"categoryNo":98,"categoryName":99,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[101,102,103,104,105,106,107,108,109,110,35,31,41,111,112,113,114,115,30,37],"show","kitty show image","image","kitty","show image","ls","get","send","open","dev","file","text","with","xdg","via",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":49},"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",[],[104,123,124,125,126,127,31,41,128,129,130,30,37,36,131,132,133,134,135,35],"kitty session persistence","session","persistence","false","snapshots","uname","reboot","terminal","edit","snapshot","macos","sessions","restore",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":49},"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",[],[143,144,104,145,146,106,147,148,107,149,150,35,31,151,41,112,113,130,30,37],"kitty remote control","remote","control","remote control","running","never","panes","notify","query",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":49},"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",[],[159,160,161,162,163,164,165,166,167,168,35,31,41,169,111,170,171,172,173,174],"docs reference check","check","reference check","reference","docs","links","python3","repo","files","auto","drift","lint","wiring","chezmoi","references","cp",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":190,"publishedAt":49},"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",[181,184,185],{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":98,"categoryName":99,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":186,"categoryName":187,"taxonomyType":188,"taxonomyTypeDesc":189},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[191,192,193,194,165,195,37,196,131,197,198,199,35,41,111,200,201,31,202,203,204,115,30],"youtube upload","upload","youtube","Video","run","uv run","publishing","data","uv","api","v3","tags","id","title",{"skillNo":206,"name":207,"nameZh":6,"description":208,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":209,"categories":210,"keywords":212,"publishedAt":49},"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",[211],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[213,214,215,216,193,194,217,218,219,220,221,37,222,223,224,225,35,226,31,113,227,30],"youtube studio share","share","youtube studio","studio","browser","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization"]