From 2f51a05467f1475577c4ef405f58b2c43a50ac2d Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Mon, 10 Aug 2026 17:53:36 -0400 Subject: [PATCH 1/2] fix(verification): make the measure skill description a trigger spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `plugins/verification/skills/measure/SKILL.md`'s frontmatter `description` opened with what the skill IS and buried its routing phrases behind a lowercase `use for`. A description is the text Claude matches against to decide whether to LOAD a skill, so a summary-shaped one makes the skill under-fire: the skill-quality gate reported "description has no 'Use when:' trigger phrasing — a description is a trigger spec, not a summary". Move the phrases behind `Use when:` in the marketplace's house shape and add six more a user would actually type. Every single-quoted phrase the previous description carried is kept verbatim — including `'cannot quantify'`, which is prose the trigger extractor also tracks — so the gate's keyword- preservation check sees a superset rather than a rewrite. Refs #2174 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m --- plugins/verification/.claude-plugin/plugin.json | 2 +- plugins/verification/CHANGELOG.md | 15 +++++++++++++++ plugins/verification/skills/measure/SKILL.md | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/plugins/verification/.claude-plugin/plugin.json b/plugins/verification/.claude-plugin/plugin.json index cb2dba65d..7fe291d68 100644 --- a/plugins/verification/.claude-plugin/plugin.json +++ b/plugins/verification/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "verification", - "version": "0.5.1", + "version": "0.5.2", "description": "Outcome-verification stage: prove a change achieved its intended outcome (`/verification:confirm` — a mechanical build/test/lint prerequisite gate, then intent-match + evidence + verdict with the criterion auto-detected by change type), and verify measurable-improvement claims against a planning-time baseline (`/verification:measure`), never fabricating numbers.", "author": { "name": "Melodic Software", diff --git a/plugins/verification/CHANGELOG.md b/plugins/verification/CHANGELOG.md index 8d22c596c..cdeccc759 100644 --- a/plugins/verification/CHANGELOG.md +++ b/plugins/verification/CHANGELOG.md @@ -3,6 +3,21 @@ All notable changes to the `verification` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.5.2] + +### Changed + +- **`/verification:measure`'s `description` is now a trigger spec rather than a summary.** A skill + `description` is the text Claude matches to decide whether to load the skill, and this one opened + with what the skill *is* and buried its routing phrases behind `use for`, so the skill + under-fired: the skill-quality gate flagged it as carrying no `Use when:` trigger phrasing + (claude-code-plugins#2174). The phrases now sit behind `Use when:` in the marketplace's house + shape, and six phrases a user would actually type — `'did that actually speed it up'`, + `'how much faster is it'`, `'measure this'`, `'capture a baseline'`, + `'benchmark before and after'`, `'did complexity go down'` — join the three that were already + there. Every phrase the previous description carried is preserved verbatim, so the gate's + trigger-keyword-preservation check sees a superset, not a rewrite. + ## [0.5.1] ### Changed diff --git a/plugins/verification/skills/measure/SKILL.md b/plugins/verification/skills/measure/SKILL.md index 1f66a71c0..b76522480 100644 --- a/plugins/verification/skills/measure/SKILL.md +++ b/plugins/verification/skills/measure/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Verify a measurable-improvement claim against a baseline captured BEFORE the change — two metric families (`performance`: wall time, memory, allocations, throughput, latency; `metrics`: complexity, coverage, coupling), each with a `baseline` phase at planning time and a `compare` phase after the change. Never claims improvement without a baseline (no baseline → honest 'cannot quantify'); use for 'is it faster', 'before/after', 'prove the improvement', while intent/outcome confirmation stays with /verification:confirm." +description: "Verify a measurable-improvement claim against a baseline captured BEFORE the change — two metric families (`performance`: wall time, memory, allocations, throughput, latency; `metrics`: complexity, coverage, coupling), each with a `baseline` phase at planning time and a `compare` phase after the change. Never claims improvement without a baseline (no baseline → honest 'cannot quantify'). Use when: 'is it faster', 'before/after', 'prove the improvement', 'did that actually speed it up', 'how much faster is it', 'measure this', 'capture a baseline', 'benchmark before and after', 'did complexity go down'; intent/outcome confirmation stays with /verification:confirm." user-invocable: true argument-hint: "[performance|metrics] [baseline|compare] (e.g., /verification:measure performance, /verification:measure metrics baseline)" disable-model-invocation: false From b8077615dbdeb98ae97b95e9b32cc5789677c904 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:15:05 -0400 Subject: [PATCH 2/2] fix(skills): give every remaining skill description real trigger phrasing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A skill `description` is the text Claude matches against to decide whether to LOAD the skill, so a summary-shaped description makes the skill under-fire. The skill-quality gate has two checks for this, and a corpus-wide sweep found 28 skills tripping one of them beyond `verification:measure`: * 20 more carried no `Use when:` phrasing at all — most had good routing phrases sitting behind a lowercase `use for`, which the gate does not recognize; a few named only topics or states, never a phrase a user types. * 7 had `Use when:` but no SINGLE-quoted phrases. The gate's trigger-drop protection tracks only `'single-quoted'` text, so phrases written with escaped double quotes (debugging, docs-hygiene, kindle-dedrm) or as a bare comma list (repo-hygiene) had no regression cover at all — a later rewrite could silently drop any of them. Fix 25 of the 28, across context7, debugging, docs-hygiene, firecrawl, implementation, kindle-dedrm, planning, playbooks, repo-hygiene, review, testing, toolchain and verification. Every phrase already present is preserved verbatim, so the gate's keyword-preservation check sees a superset rather than a rewrite; each list also gains phrases a user would actually type rather than a paraphrase of the skill's purpose. Four are deliberately left as-is, all `disable-model-invocation: true` with no pre-existing quoted phrase: discipline:wait-what, firecrawl:update, github:setup, playbooks:update. A skill that cannot be model-invoked is never matched against its description, so triggers would buy no auto-invocation there — and two of them are maintainer-only drift checks that say "Not for consumers", where user-typed triggers would invite exactly the misfire this issue is about. Where a dmi:true skill already had quoted phrases (planning:questionnaire), the connector is normalized without inventing any. Closes #2174 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m --- plugins/context7/.claude-plugin/plugin.json | 2 +- plugins/context7/CHANGELOG.md | 12 ++++++++++++ plugins/context7/skills/lookup/SKILL.md | 2 +- plugins/debugging/.claude-plugin/plugin.json | 2 +- plugins/debugging/CHANGELOG.md | 12 ++++++++++++ plugins/debugging/skills/debug/SKILL.md | 2 +- .../docs-hygiene/.claude-plugin/plugin.json | 2 +- plugins/docs-hygiene/CHANGELOG.md | 10 ++++++++++ plugins/docs-hygiene/skills/compress/SKILL.md | 2 +- plugins/firecrawl/.claude-plugin/plugin.json | 2 +- plugins/firecrawl/CHANGELOG.md | 11 +++++++++++ plugins/firecrawl/skills/firecrawl/SKILL.md | 2 +- .../implementation/.claude-plugin/plugin.json | 2 +- plugins/implementation/CHANGELOG.md | 14 ++++++++++++++ .../skills/implement-dispatch/SKILL.md | 2 +- .../implementation/skills/implement/SKILL.md | 2 +- .../kindle-dedrm/.claude-plugin/plugin.json | 2 +- plugins/kindle-dedrm/CHANGELOG.md | 19 +++++++++++++++++++ plugins/kindle-dedrm/skills/manage/SKILL.md | 2 +- plugins/planning/.claude-plugin/plugin.json | 2 +- plugins/planning/CHANGELOG.md | 17 +++++++++++++++++ plugins/planning/skills/brainstorm/SKILL.md | 2 +- plugins/planning/skills/design/SKILL.md | 2 +- .../planning/skills/devils-advocate/SKILL.md | 2 +- plugins/planning/skills/interview/SKILL.md | 2 +- plugins/planning/skills/plan/SKILL.md | 2 +- plugins/planning/skills/prd/SKILL.md | 2 +- .../planning/skills/questionnaire/SKILL.md | 2 +- plugins/playbooks/.claude-plugin/plugin.json | 2 +- plugins/playbooks/CHANGELOG.md | 12 ++++++++++++ plugins/playbooks/skills/boris/SKILL.md | 2 +- .../repo-hygiene/.claude-plugin/plugin.json | 2 +- plugins/repo-hygiene/CHANGELOG.md | 10 ++++++++++ plugins/repo-hygiene/skills/clean/SKILL.md | 2 +- plugins/review/.claude-plugin/plugin.json | 2 +- plugins/review/CHANGELOG.md | 8 ++++++++ plugins/review/skills/fanout/SKILL.md | 2 +- plugins/testing/.claude-plugin/plugin.json | 2 +- plugins/testing/CHANGELOG.md | 12 ++++++++++++ plugins/testing/skills/diagnose/SKILL.md | 2 +- plugins/testing/skills/plan/SKILL.md | 2 +- plugins/testing/skills/run-e2e/SKILL.md | 2 +- plugins/testing/skills/write/SKILL.md | 2 +- plugins/toolchain/.claude-plugin/plugin.json | 2 +- plugins/toolchain/CHANGELOG.md | 12 ++++++++++++ plugins/toolchain/skills/check/SKILL.md | 2 +- plugins/toolchain/skills/lint/SKILL.md | 2 +- plugins/verification/CHANGELOG.md | 8 +++++++- plugins/verification/skills/confirm/SKILL.md | 2 +- 49 files changed, 192 insertions(+), 37 deletions(-) diff --git a/plugins/context7/.claude-plugin/plugin.json b/plugins/context7/.claude-plugin/plugin.json index ddbf1334d..cf4c56bcd 100644 --- a/plugins/context7/.claude-plugin/plugin.json +++ b/plugins/context7/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "context7", - "version": "0.5.0", + "version": "0.5.1", "description": "Looks up current library documentation, API references, and code examples via Context7 (ctx7 CLI or the Context7 MCP server) with a two-step resolve-then-query workflow: a lookup skill (default lookup plus an upstream drift-check action) and a setup skill for CLI install, auth, and MCP configuration.", "author": { "name": "Melodic Software", diff --git a/plugins/context7/CHANGELOG.md b/plugins/context7/CHANGELOG.md index b73842214..120479eaf 100644 --- a/plugins/context7/CHANGELOG.md +++ b/plugins/context7/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to the `context7` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.5.1] + +### Changed + +- **`/context7:lookup`'s `description` now leads with typed trigger phrases.** It previously stated + the routing condition only as prose ("whenever a question names a library, framework, SDK, CLI + tool, or cloud service"), which reads as a summary rather than a trigger spec, and the phrases a + user actually types were absent. `Use when:` now fronts `'look up the docs for X'`, + `'what's the API for X'`, `'how do I configure X'`, `'latest docs for X'`, + `'check context7 for X'` and `'how do I migrate to X v2'`, with the names-a-library condition + folded in behind them instead of stated twice. + ## [0.5.0] ### Removed diff --git a/plugins/context7/skills/lookup/SKILL.md b/plugins/context7/skills/lookup/SKILL.md index bb51f25c6..28fa86300 100644 --- a/plugins/context7/skills/lookup/SKILL.md +++ b/plugins/context7/skills/lookup/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Look up current library documentation, API references, and code examples via Context7 (ctx7 CLI or the Context7 MCP server — same backend) whenever a question names a library, framework, SDK, CLI tool, or cloud service, including API syntax, configuration, setup, and version-migration questions. Actions: lookup (default) | update (CLI upgrade + upstream drift check). For CLI/MCP setup, auth, and Windows gotchas, run /context7:setup." +description: "Look up current library documentation, API references, and code examples via Context7 (ctx7 CLI or the Context7 MCP server — same backend). Use when: 'look up the docs for X', 'what's the API for X', 'how do I configure X', 'latest docs for X', 'check context7 for X', 'how do I migrate to X v2', or whenever a question names a library, framework, SDK, CLI tool, or cloud service — including API syntax, configuration, setup, and version-migration questions. Actions: lookup (default) | update (CLI upgrade + upstream drift check). For CLI/MCP setup, auth, and Windows gotchas, run /context7:setup." argument-hint: "[lookup | update] (default: lookup — e.g., /context7:lookup react \"useEffect cleanup\")" user-invocable: true disable-model-invocation: false diff --git a/plugins/debugging/.claude-plugin/plugin.json b/plugins/debugging/.claude-plugin/plugin.json index 9c1aa1949..2ed617417 100644 --- a/plugins/debugging/.claude-plugin/plugin.json +++ b/plugins/debugging/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "debugging", - "version": "0.6.0", + "version": "0.6.1", "description": "Debug observed failures via a disciplined six-phase loop: build a fast deterministic reproduction signal, reproduce, rank falsifiable hypotheses, instrument, fix with a regression test, then clean up and post-mortem.", "author": { "name": "Melodic Software", diff --git a/plugins/debugging/CHANGELOG.md b/plugins/debugging/CHANGELOG.md index 8f973597d..9643fd012 100644 --- a/plugins/debugging/CHANGELOG.md +++ b/plugins/debugging/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to the `debugging` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.6.1] + +### Changed + +- **`/debugging:debug`'s trigger phrases are now single-quoted.** They were written with escaped + double quotes inside the double-quoted YAML scalar, and the skill-quality gate's trigger-drop + protection tracks only `'single-quoted'` phrases — so all nine (`'diagnose this'`, `'debug this'`, + `'why is X broken'`, `'X is throwing'`, `'something is wrong with'`, `'investigate this bug'`, + `'performance regression'`, `'this is slow'`, `'intermittent failure'`) were invisible to it and a + future rewrite could have dropped any of them unnoticed. The wording is unchanged; only the + quoting is. + ## [0.6.0] ### Removed diff --git a/plugins/debugging/skills/debug/SKILL.md b/plugins/debugging/skills/debug/SKILL.md index 5937cd77b..27735f0f0 100644 --- a/plugins/debugging/skills/debug/SKILL.md +++ b/plugins/debugging/skills/debug/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Debug and diagnose broken behavior via a disciplined six-phase loop: build feedback loop → reproduce → hypothesise → instrument → fix + regression test → cleanup. Use when: \"diagnose this\", \"debug this\", \"why is X broken\", \"X is throwing\", \"something is wrong with\", \"investigate this bug\", \"performance regression\", \"this is slow\", \"intermittent failure\", broken behavior in UI / logs / production / screenshot, flaky test traced to root cause — any OBSERVED FAILURE without a pre-existing reproduction. Phase 1 builds the loop; no phase proceeds without a fast, deterministic signal. Skip when: the symptom is already a failing test with no reproduction gap — cycle it directly. Outputs: reproduction loop, root-cause hypothesis, regression test or documented seam gap, cleaned fix, post-mortem finding." +description: "Debug and diagnose broken behavior via a disciplined six-phase loop: build feedback loop → reproduce → hypothesise → instrument → fix + regression test → cleanup. Use when: 'diagnose this', 'debug this', 'why is X broken', 'X is throwing', 'something is wrong with', 'investigate this bug', 'performance regression', 'this is slow', 'intermittent failure', broken behavior in UI / logs / production / screenshot, flaky test traced to root cause — any OBSERVED FAILURE without a pre-existing reproduction. Phase 1 builds the loop; no phase proceeds without a fast, deterministic signal. Skip when: the symptom is already a failing test with no reproduction gap — cycle it directly. Outputs: reproduction loop, root-cause hypothesis, regression test or documented seam gap, cleaned fix, post-mortem finding." argument-hint: "[bug description or observation] (e.g., /debugging:debug checkout times out for orders over $1k)" user-invocable: true disable-model-invocation: false diff --git a/plugins/docs-hygiene/.claude-plugin/plugin.json b/plugins/docs-hygiene/.claude-plugin/plugin.json index 51283eeb7..4464a1d79 100644 --- a/plugins/docs-hygiene/.claude-plugin/plugin.json +++ b/plugins/docs-hygiene/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "docs-hygiene", - "version": "0.10.0", + "version": "0.10.1", "description": "Documentation-hygiene toolkit of six skills: compress (flavor-trim markdown with a semantic-diff safety net), audit-noise (classify markdown noise), extract-ssot (deduplicate repeated content into a single source of truth), audit-encapsulation (detect citations into skill-private surfaces), rename-references (sweep stale references after renames), and audit-derivability (classify whether a whole document earns its existence — could a fresh agent re-derive it from the code?).", "author": { "name": "Melodic Software", diff --git a/plugins/docs-hygiene/CHANGELOG.md b/plugins/docs-hygiene/CHANGELOG.md index f64e36fc9..031f16633 100644 --- a/plugins/docs-hygiene/CHANGELOG.md +++ b/plugins/docs-hygiene/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog — docs-hygiene plugin +## [0.10.1] + +### Changed + +- **`/docs-hygiene:compress`'s trigger phrases are now single-quoted.** Same cause as the debugging + plugin's: escaped double quotes inside a double-quoted YAML scalar are not tracked by the + skill-quality gate's trigger-drop protection, so `'compress this doc'`, `'tighten markdown'`, + `'cut prose'`, `'shorten without losing meaning'` and `'trim onboarding doc'` carried no + regression cover. Quoting only; wording unchanged. + ## [0.10.0] ### Changed diff --git a/plugins/docs-hygiene/skills/compress/SKILL.md b/plugins/docs-hygiene/skills/compress/SKILL.md index cea869572..294c7d591 100644 --- a/plugins/docs-hygiene/skills/compress/SKILL.md +++ b/plugins/docs-hygiene/skills/compress/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Compress (tighten, shorten, trim) markdown files by dropping flavor — filler, hedging, articles — while preserving all content (directives, qualifiers, thresholds, examples), with a mandatory semantic-diff subagent that reverts any SEMANTIC LOSS or AMBIGUITY. Use when: \"compress this doc\", \"tighten markdown\", \"cut prose\", \"shorten without losing meaning\", \"trim onboarding doc\", or verbose prose in docs/, READMEs, rule bodies, skill bodies, or third-party pasted text — actions: default (snapshot → backend → semantic-diff subagent → revert-pass → markdownlint) and audit (read-only dry-run classifying SKIP/COMPRESS/UNCERTAIN per file); flags: --force (bypass <3% revert rule), --keep-snapshot; not for: session compaction (/compact), markdown noise classification (/audit-noise), code-comment trimming, or content relocation/SSOT consolidation (/extract-ssot)." +description: "Compress (tighten, shorten, trim) markdown files by dropping flavor — filler, hedging, articles — while preserving all content (directives, qualifiers, thresholds, examples), with a mandatory semantic-diff subagent that reverts any SEMANTIC LOSS or AMBIGUITY. Use when: 'compress this doc', 'tighten markdown', 'cut prose', 'shorten without losing meaning', 'trim onboarding doc', or verbose prose in docs/, READMEs, rule bodies, skill bodies, or third-party pasted text — actions: default (snapshot → backend → semantic-diff subagent → revert-pass → markdownlint) and audit (read-only dry-run classifying SKIP/COMPRESS/UNCERTAIN per file); flags: --force (bypass <3% revert rule), --keep-snapshot; not for: session compaction (/compact), markdown noise classification (/audit-noise), code-comment trimming, or content relocation/SSOT consolidation (/extract-ssot)." argument-hint: "[audit] [target] [--force] [--keep-snapshot]" user-invocable: true disable-model-invocation: false diff --git a/plugins/firecrawl/.claude-plugin/plugin.json b/plugins/firecrawl/.claude-plugin/plugin.json index c5a990337..2010f6e5d 100644 --- a/plugins/firecrawl/.claude-plugin/plugin.json +++ b/plugins/firecrawl/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "firecrawl", - "version": "0.5.0", + "version": "0.5.1", "description": "Web scraping, search, crawling, and file parsing through the firecrawl-cli binary with a write-to-disk-then-Read pattern that keeps large results out of context — a user-facing wrapper skill, a lazy-install setup skill, and a separate gated maintainer update skill tracking the upstream CLI and skill source.", "author": { "name": "Melodic Software", diff --git a/plugins/firecrawl/CHANGELOG.md b/plugins/firecrawl/CHANGELOG.md index 13009976c..4d6f8a29d 100644 --- a/plugins/firecrawl/CHANGELOG.md +++ b/plugins/firecrawl/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to the `firecrawl` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.5.1] + +### Changed + +- **`/firecrawl:firecrawl`'s `Use when:` list now opens with typed phrases.** It previously listed + only *conditions* ("WebFetch returns 403/429", "a page requires JS rendering") — accurate, but + nothing a user types, and nothing the gate's trigger-drop protection could track. + `'scrape this page'`, `'crawl this site'`, `'search the web for X'`, `'WebFetch is blocked'`, + `'this page needs JS'` and `'extract the text from this PDF'` now front the list; every original + condition is retained behind them. + ## [0.5.0] ### Changed diff --git a/plugins/firecrawl/skills/firecrawl/SKILL.md b/plugins/firecrawl/skills/firecrawl/SKILL.md index 52dfc4c76..063110e68 100644 --- a/plugins/firecrawl/skills/firecrawl/SKILL.md +++ b/plugins/firecrawl/skills/firecrawl/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Scrape, search, crawl, map, parse, or interact with web pages via the firecrawl-cli binary, writing results to disk instead of streaming them into context — actions: scrape, search, crawl, map, parse, interact, agent, monitor. Use when: WebFetch returns 403/429 (Cloudflare, PerimeterX, anti-bot block), a page requires JS rendering or clicks/form fills, you need web search with scraped results, bulk URL discovery and crawling, a local file (PDF/DOCX/XLSX) needs text extraction to markdown, or a natural-language web research task — skip for plain unprotected pages (WebFetch suffices) or when you want synthesis rather than primary source." +description: "Scrape, search, crawl, map, parse, or interact with web pages via the firecrawl-cli binary, writing results to disk instead of streaming them into context — actions: scrape, search, crawl, map, parse, interact, agent, monitor. Use when: 'scrape this page', 'crawl this site', 'search the web for X', 'WebFetch is blocked', 'this page needs JS', 'extract the text from this PDF', or WebFetch returns 403/429 (Cloudflare, PerimeterX, anti-bot block), a page requires JS rendering or clicks/form fills, you need web search with scraped results, bulk URL discovery and crawling, a local file (PDF/DOCX/XLSX) needs text extraction to markdown, or a natural-language web research task — skip for plain unprotected pages (WebFetch suffices) or when you want synthesis rather than primary source." argument-hint: " [args] — commands: scrape, search, crawl, map, parse, interact, agent, monitor, search-feedback, credit-usage" user-invocable: true disable-model-invocation: false diff --git a/plugins/implementation/.claude-plugin/plugin.json b/plugins/implementation/.claude-plugin/plugin.json index 07bbc4c12..be9503c34 100644 --- a/plugins/implementation/.claude-plugin/plugin.json +++ b/plugins/implementation/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "implementation", - "version": "0.13.0", + "version": "0.13.1", "description": "Disciplined implementation stage: execute approved plans inline (`/implementation:implement`) or via orchestrated worker subagents (`/implementation:implement-dispatch`) with incremental validation, TDD-by-default cadence, green-checkpoint commits, scope-fence drift detection, and divergence detection that routes back to planning. Build/test/lint, testing, and outcome verification live in the companion `toolchain`, `testing`, and `verification` plugins, invoked when installed.", "author": { "name": "Melodic Software", diff --git a/plugins/implementation/CHANGELOG.md b/plugins/implementation/CHANGELOG.md index 4a2528ccc..30d06b9bc 100644 --- a/plugins/implementation/CHANGELOG.md +++ b/plugins/implementation/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to the `implementation` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.13.1] + +### Changed + +- **`/implementation:implement`'s `description` now uses `Use when:`.** Its routing phrases sat + behind a lowercase `use for`, which the skill-quality gate does not recognize as trigger phrasing. + `'build this'`, `'write the code'`, `'make this change'` and `'apply the plan'` join the four + already there, all of which are preserved verbatim. +- **`/implementation:implement-dispatch` gained typed trigger phrases.** Its `Use when` clause + described a *state* ("the plan routes phases to worker surfaces") with no phrase a user would + type, so the gate saw no trackable trigger at all. `'dispatch this to workers'`, + `'run this with subagents'`, `'execute the plan in parallel'` and `'fan the plan out'` now precede + that condition, which is retained. + ## [0.13.0] ### Removed diff --git a/plugins/implementation/skills/implement-dispatch/SKILL.md b/plugins/implementation/skills/implement-dispatch/SKILL.md index c48b238bf..06789876a 100644 --- a/plugins/implementation/skills/implement-dispatch/SKILL.md +++ b/plugins/implementation/skills/implement-dispatch/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Orchestrate worker subagents to execute an approved plan — the main window composes scope-fenced briefs, dispatches workers, verifies their returns against direct evidence, and builds main-side instead of editing inline. Use when the plan routes phases to worker surfaces or the session runs autonomously; for interactive all-inline execution use /implementation:implement instead." +description: "Orchestrate worker subagents to execute an approved plan — the main window composes scope-fenced briefs, dispatches workers, verifies their returns against direct evidence, and builds main-side instead of editing inline. Use when: 'dispatch this to workers', 'run this with subagents', 'execute the plan in parallel', 'fan the plan out', or the plan routes phases to worker surfaces or the session runs autonomously; for interactive all-inline execution use /implementation:implement instead." argument-hint: "[phase] [--wave-cap ] (e.g., /implementation:implement-dispatch, /implementation:implement-dispatch phase-2 --wave-cap 3)" user-invocable: true disable-model-invocation: false diff --git a/plugins/implementation/skills/implement/SKILL.md b/plugins/implementation/skills/implement/SKILL.md index 1f9ebacba..4188d3cee 100644 --- a/plugins/implementation/skills/implement/SKILL.md +++ b/plugins/implementation/skills/implement/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Execute approved plans, fix bugs, and make code changes inline with incremental validation — TDD by default, build+test after each logical block, commit at green checkpoints, and divergence detection that routes back to planning instead of pushing through a broken approach. Use for 'implement this', 'execute the plan', 'fix this bug', 'refactor', or whenever code is about to be written; modes: feature, fix, refactor, config." +description: "Execute approved plans, fix bugs, and make code changes inline with incremental validation — TDD by default, build+test after each logical block, commit at green checkpoints, and divergence detection that routes back to planning instead of pushing through a broken approach. Use when: 'implement this', 'execute the plan', 'fix this bug', 'refactor', 'build this', 'write the code', 'make this change', 'apply the plan', or whenever code is about to be written; modes: feature, fix, refactor, config." argument-hint: "[task or mode] (e.g., /implementation:implement, /implementation:implement feature, /implementation:implement fix login-bug, /implementation:implement refactor)" user-invocable: true disable-model-invocation: false diff --git a/plugins/kindle-dedrm/.claude-plugin/plugin.json b/plugins/kindle-dedrm/.claude-plugin/plugin.json index 21b0e2f05..8e28c4b63 100644 --- a/plugins/kindle-dedrm/.claude-plugin/plugin.json +++ b/plugins/kindle-dedrm/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "kindle-dedrm", - "version": "0.7.0", + "version": "0.7.1", "description": "Manage the Kindle for PC 2.8.0 + Calibre DeDRM workflow for personal-use ebook DRM removal on books you own (Windows only). Action router with setup, sync, update, cleanup, and status, each state mutation paired with a documented compensating reversal.", "author": { "name": "Melodic Software", diff --git a/plugins/kindle-dedrm/CHANGELOG.md b/plugins/kindle-dedrm/CHANGELOG.md index eafd09a44..1c7f39e07 100644 --- a/plugins/kindle-dedrm/CHANGELOG.md +++ b/plugins/kindle-dedrm/CHANGELOG.md @@ -3,6 +3,25 @@ All notable changes to the `kindle-dedrm` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.7.1] + +### Changed + +- **`/kindle-dedrm:manage`'s trigger phrases are now single-quoted.** All eight + (`'set up Kindle DRM removal'`, `'remove DRM from Kindle books'`, + `'extract keys from my Kindle library'`, `'sync new Kindle books I bought'`, + `'check if DeDRM setup is current'`, `'clean up Kindle DRM tools'`, `'undo DeDRM setup'`, + `'convert Kindle books to EPUB'`) were written with escaped double quotes, which the skill-quality + gate's trigger-drop protection does not track — so none of them carried regression cover. Quoting + only; the wording is unchanged. + + `'set up Kindle DRM removal'` is deliberately kept here even though the sibling + `/kindle-dedrm:setup` also lists it. That looks like a routing ambiguity, but `setup` is + `disable-model-invocation: true` — its description is never matched against user text — so + `manage` is the only skill that can receive the phrase by model invocation, and its action router + delegates to `/kindle-dedrm:setup` from there. Dropping the duplicate would make the phrase + reachable only by an explicit slash command. + ## [0.7.0] ### Removed diff --git a/plugins/kindle-dedrm/skills/manage/SKILL.md b/plugins/kindle-dedrm/skills/manage/SKILL.md index f6b886c90..ebcb94563 100644 --- a/plugins/kindle-dedrm/skills/manage/SKILL.md +++ b/plugins/kindle-dedrm/skills/manage/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Manage the Kindle for PC 2.8.0 + Calibre DeDRM workflow for personal-use ebook DRM removal on books you own (Windows only). Action router: setup (first-time provisioning — download, firewall block, ICACLS lock, Calibre plugins, keyfinder; delegated to the dedicated /kindle-dedrm:setup check/apply skill), sync (new purchases — disable firewall, sync Kindle, re-enable, re-run keyfinder), update (drift check — upstream version pins and tutorial URLs, no mutations), cleanup (reversible decommission — per-item confirmation, --soft or --full), status (diagnostic). Every state mutation has a documented compensating reversal. Use when: \"set up Kindle DRM removal\", \"remove DRM from Kindle books\", \"extract keys from my Kindle library\", \"sync new Kindle books I bought\", \"check if DeDRM setup is current\", \"clean up Kindle DRM tools\", \"undo DeDRM setup\", \"convert Kindle books to EPUB\", Calibre + Kindle mentioned together, or making Kindle library readable on a non-Kindle device." +description: "Manage the Kindle for PC 2.8.0 + Calibre DeDRM workflow for personal-use ebook DRM removal on books you own (Windows only). Action router: setup (first-time provisioning — download, firewall block, ICACLS lock, Calibre plugins, keyfinder; delegated to the dedicated /kindle-dedrm:setup check/apply skill), sync (new purchases — disable firewall, sync Kindle, re-enable, re-run keyfinder), update (drift check — upstream version pins and tutorial URLs, no mutations), cleanup (reversible decommission — per-item confirmation, --soft or --full), status (diagnostic). Every state mutation has a documented compensating reversal. Use when: 'set up Kindle DRM removal', 'remove DRM from Kindle books', 'extract keys from my Kindle library', 'sync new Kindle books I bought', 'check if DeDRM setup is current', 'clean up Kindle DRM tools', 'undo DeDRM setup', 'convert Kindle books to EPUB', Calibre + Kindle mentioned together, or making Kindle library readable on a non-Kindle device." argument-hint: "[setup|sync|update|cleanup|status] [--dry-run] [--soft|--full]" user-invocable: true disable-model-invocation: false diff --git a/plugins/planning/.claude-plugin/plugin.json b/plugins/planning/.claude-plugin/plugin.json index 8bca75cee..ef6c4988a 100644 --- a/plugins/planning/.claude-plugin/plugin.json +++ b/plugins/planning/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "planning", - "version": "0.30.0", + "version": "0.30.1", "userConfig": { "use_ask_user_question": { "type": "boolean", diff --git a/plugins/planning/CHANGELOG.md b/plugins/planning/CHANGELOG.md index affeb14aa..7651cbcf9 100644 --- a/plugins/planning/CHANGELOG.md +++ b/plugins/planning/CHANGELOG.md @@ -3,6 +3,23 @@ All notable changes to the `planning` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.30.1] + +### Changed + +- **Every `planning` skill's `description` now uses `Use when:` rather than `use for`.** + `brainstorm`, `design`, `devils-advocate`, `interview`, `plan`, `prd` and `questionnaire` all + carried their routing phrases behind a lowercase `use for` (or, for `interview`, behind "on + explicit request (...)"), which the skill-quality gate does not recognize as trigger phrasing — so + each read as a summary of what the skill *is*. The six model-invocable ones each gain 2–3 phrases + a user would actually type (`'ideas for this'`, `'how should I structure this'`, + `'challenge this plan'`, `'ask me questions first'`, `'what's the approach here'`, + `'define the requirements'`, among others). `questionnaire` is `disable-model-invocation: true`, + so its description is never matched against user text and new phrases would buy it nothing — it + gets the `Use when:` connector and nothing else. Every phrase already present is preserved + verbatim, including `'devil's advocate'`, whose intra-word apostrophe the gate's extractor + normalizes. + ## [0.30.0] ### Removed diff --git a/plugins/planning/skills/brainstorm/SKILL.md b/plugins/planning/skills/brainstorm/SKILL.md index 72c2f4540..e41c16e9f 100644 --- a/plugins/planning/skills/brainstorm/SKILL.md +++ b/plugins/planning/skills/brainstorm/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Diverge before scoping — turn a rough engineering/product problem into codebase-grounded candidate approaches ordered cheapest→most ambitious, capture which resonate, and hand off scoped. Use for 'brainstorm', 'what are my options', 'places we could intervene', 'how could we approach X', or any rough technical problem with no locked scope; skip when scope is already locked or the options are visual variations." +description: "Diverge before scoping — turn a rough engineering/product problem into codebase-grounded candidate approaches ordered cheapest→most ambitious, capture which resonate, and hand off scoped. Use when: 'brainstorm', 'what are my options', 'places we could intervene', 'how could we approach X', 'ideas for this', 'explore some approaches', 'what could we do here', or any rough technical problem with no locked scope; skip when scope is already locked or the options are visual variations." argument-hint: " (e.g., /planning:brainstorm users churn after onboarding)" user-invocable: true disable-model-invocation: false diff --git a/plugins/planning/skills/design/SKILL.md b/plugins/planning/skills/design/SKILL.md index e04c4616d..40364f919 100644 --- a/plugins/planning/skills/design/SKILL.md +++ b/plugins/planning/skills/design/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Explore and resolve design decisions — types, contracts, package topology, module boundaries — through collaborative discussion rounds before /planning:plan plans implementation, producing capability-matrix / type-inventory / design-threads / topology artifacts. Use for 'design this', 'type modeling', 'figure out the abstractions', 'model this domain', or entering /planning:plan without exploring the design space first; scales from a single-file early-exit to a multi-session design effort." +description: "Explore and resolve design decisions — types, contracts, package topology, module boundaries — through collaborative discussion rounds before /planning:plan plans implementation, producing capability-matrix / type-inventory / design-threads / topology artifacts. Use when: 'design this', 'type modeling', 'figure out the abstractions', 'model this domain', 'what should the types look like', 'how should I structure this', 'where do the module boundaries go', or entering /planning:plan without exploring the design space first; scales from a single-file early-exit to a multi-session design effort." argument-hint: "[scope] [action] (e.g., /planning:design library, /planning:design module, /planning:design status, /planning:design discuss, /planning:design handoff)" user-invocable: true disable-model-invocation: false diff --git a/plugins/planning/skills/devils-advocate/SKILL.md b/plugins/planning/skills/devils-advocate/SKILL.md index 602d30ec1..1aff99956 100644 --- a/plugins/planning/skills/devils-advocate/SKILL.md +++ b/plugins/planning/skills/devils-advocate/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Stress-test plans and proposals via systematic adversarial review — assumption extraction, evidence check, failure scenarios, operational gotchas — before implementation begins. Use for 'devil's advocate', 'stress test', 'poke holes', 'what could go wrong', new dependencies, infrastructure/CI/build changes, or any architecture decision with cross-module blast radius. An `incumbent` mode turns the same adversarial lens on the status quo — 'is there a better way now', 'should we still use X', 'reconsider the current approach', 'is the incumbent still the right choice' — surveying alternatives before a plan commits to keeping an existing tool or approach. Not for code correctness bugs or pre-PR verification." +description: "Stress-test plans and proposals via systematic adversarial review — assumption extraction, evidence check, failure scenarios, operational gotchas — before implementation begins. Use when: 'devil's advocate', 'stress test', 'poke holes', 'what could go wrong', 'challenge this plan', 'find the holes in this', 'argue against this', new dependencies, infrastructure/CI/build changes, or any architecture decision with cross-module blast radius. An `incumbent` mode turns the same adversarial lens on the status quo — 'is there a better way now', 'should we still use X', 'reconsider the current approach', 'is the incumbent still the right choice' — surveying alternatives before a plan commits to keeping an existing tool or approach. Not for code correctness bugs or pre-PR verification." argument-hint: "[incumbent [target]] or [plan text or file path] — an optional leading deep/shallow sets research depth; works from conversation context if no argument given" user-invocable: true disable-model-invocation: false diff --git a/plugins/planning/skills/interview/SKILL.md b/plugins/planning/skills/interview/SKILL.md index d0a65a205..a7f2fc7b7 100644 --- a/plugins/planning/skills/interview/SKILL.md +++ b/plugins/planning/skills/interview/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Interview relentlessly to reach shared understanding on a plan, decision, or idea — questions arrive in frontier rounds: every question whose prerequisites are settled asked together as one numbered set, each with a recommendation. Routes by context: an engineering task locks a task contract (goal, constraints, acceptance criteria, named assumptions) into a PLAN.md Brief that feeds the planning pipeline; a general decision drives to a shared understanding and stops. Synthesizes directly when intent is clear, runs the rounds loop when gaps remain, or interviews relentlessly on request. Use proactively before behavior-changing work when intent is ambiguous or underspecified, or on explicit request ('interview me', 'lock the brief', 'spec this task', 'grill me', 'this is underspecified'); skip for mechanical work (typo/lint/whitespace/rename) and casual conversation." +description: "Interview relentlessly to reach shared understanding on a plan, decision, or idea — questions arrive in frontier rounds: every question whose prerequisites are settled asked together as one numbered set, each with a recommendation. Routes by context: an engineering task locks a task contract (goal, constraints, acceptance criteria, named assumptions) into a PLAN.md Brief that feeds the planning pipeline; a general decision drives to a shared understanding and stops. Synthesizes directly when intent is clear, runs the rounds loop when gaps remain, or interviews relentlessly on request. Use when: 'interview me', 'lock the brief', 'spec this task', 'grill me', 'this is underspecified', 'ask me questions first', 'what do you need to know', or proactively before behavior-changing work when intent is ambiguous or underspecified; skip for mechanical work (typo/lint/whitespace/rename) and casual conversation." argument-hint: "[action] [topic] (e.g., /planning:interview, /planning:interview me, /planning:interview lock, /planning:interview )" user-invocable: true disable-model-invocation: false diff --git a/plugins/planning/skills/plan/SKILL.md b/plugins/planning/skills/plan/SKILL.md index 2aaad3b42..5ba9becea 100644 --- a/plugins/planning/skills/plan/SKILL.md +++ b/plugins/planning/skills/plan/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Produce structured implementation plans with goal, approach, test strategy, blast-radius assessment, parallelism analysis, and a user approval gate before any code is written — persisting PLAN.md for fresh-session handoff. Use for 'plan this', 'architect this', 'how should we implement', 'implementation plan', proactively before executing without a formalized plan, or 'review this plan' to audit an existing plan's completeness." +description: "Produce structured implementation plans with goal, approach, test strategy, blast-radius assessment, parallelism analysis, and a user approval gate before any code is written — persisting PLAN.md for fresh-session handoff. Use when: 'plan this', 'architect this', 'how should we implement', 'implementation plan', 'write a plan for this', 'what's the approach here', 'review this plan' (audits an existing plan's completeness), or proactively before executing without a formalized plan." argument-hint: "[task description, 'review', or 'close-out'] (e.g., /planning:plan add caching to query handlers, /planning:plan review, /planning:plan close-out)" user-invocable: true disable-model-invocation: false diff --git a/plugins/planning/skills/prd/SKILL.md b/plugins/planning/skills/prd/SKILL.md index 9afb21b08..7b403b126 100644 --- a/plugins/planning/skills/prd/SKILL.md +++ b/plugins/planning/skills/prd/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Produce a Product Requirements Document that locks product intent — problem, users, success metrics — before any engineering plan, with tiers (one-pager / consumer-feature / b2b-internal), a synthesize path, and a review mode. Use for 'write a PRD', 'spec out a feature', 'product brief', or any user-facing business-driven change needing written alignment; skip for refactors, infra, bug fixes, and engineering-internal work (route to /interview or /planning:plan)." +description: "Produce a Product Requirements Document that locks product intent — problem, users, success metrics — before any engineering plan, with tiers (one-pager / consumer-feature / b2b-internal), a synthesize path, and a review mode. Use when: 'write a PRD', 'spec out a feature', 'product brief', 'product requirements doc', 'define the requirements', 'what are we actually building', or any user-facing business-driven change needing written alignment; skip for refactors, infra, bug fixes, and engineering-internal work (route to /interview or /planning:plan)." argument-hint: "[tier] [task description] (e.g., /planning:prd, /planning:prd one-pager add gig calendar, /planning:prd review)" user-invocable: true disable-model-invocation: false diff --git a/plugins/planning/skills/questionnaire/SKILL.md b/plugins/planning/skills/questionnaire/SKILL.md index 06af8a25c..ff9469698 100644 --- a/plugins/planning/skills/questionnaire/SKILL.md +++ b/plugins/planning/skills/questionnaire/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Turn a decision the user cannot answer — because another person holds the knowledge — into a Markdown questionnaire handed off async. Interviews the user only about the send (who it goes to, what they need back), never about the subject the recipient holds, then writes a discovery questionnaire aimed at the gap. Use for 'make a questionnaire for X', 'I need to ask my DBA/the client/legal about this', 'turn this into a doc someone else fills in', or when an interview branch defers to a person-arbiter; skip when the user can answer themselves (run /planning:interview) or when the answer is agent-lookupable." +description: "Turn a decision the user cannot answer — because another person holds the knowledge — into a Markdown questionnaire handed off async. Interviews the user only about the send (who it goes to, what they need back), never about the subject the recipient holds, then writes a discovery questionnaire aimed at the gap. Use when: 'make a questionnaire for X', 'I need to ask my DBA/the client/legal about this', 'turn this into a doc someone else fills in', or when an interview branch defers to a person-arbiter; skip when the user can answer themselves (run /planning:interview) or when the answer is agent-lookupable." argument-hint: "[topic]" user-invocable: true disable-model-invocation: true diff --git a/plugins/playbooks/.claude-plugin/plugin.json b/plugins/playbooks/.claude-plugin/plugin.json index 776bcbc25..96b8ee462 100644 --- a/plugins/playbooks/.claude-plugin/plugin.json +++ b/plugins/playbooks/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "playbooks", - "version": "0.8.1", + "version": "0.8.2", "description": "Doctrine and knowledge playbooks as on-demand skills, plus a maintainer-facing update skill. boris — Boris Cherny's Claude Code workflow tips (howborisusesclaudecode.com); skill-authoring — Anthropic's internal skill-authoring playbook; fable-5 — Claude Fable 5's operating doctrine (self-authored, no upstream). The boris and skill-authoring packs vendor a verbatim upstream baseline; /playbooks:update drift-checks and syncs those baselines centrally (maintainers).", "author": { "name": "Melodic Software", diff --git a/plugins/playbooks/CHANGELOG.md b/plugins/playbooks/CHANGELOG.md index 32f333774..5cdc341e9 100644 --- a/plugins/playbooks/CHANGELOG.md +++ b/plugins/playbooks/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to the `playbooks` plugin are recorded here. The `version` i `.claude-plugin/plugin.json` is the delivery vehicle — a consumer receives a change only after that version increases. +## [0.8.2] + +### Changed + +- **`/playbooks:boris` gained typed trigger phrases.** Its `Use when` clause named topics + ("optimizing Claude Code setup, workflows, CLAUDE.md, skills, hooks, or parallel sessions") rather + than anything a user types, so the skill-quality gate found no trackable trigger. + `'how does Boris use Claude Code'`, `'Claude Code workflow tips'`, `'optimize my CLAUDE.md'`, + `'improve my Claude Code setup'`, `'parallel Claude sessions'` and `'hook ideas'` now front the + clause; the topic list is retained behind them. The vendored upstream baseline under + `skills/boris/vendor/` is untouched — this is the refactored hub's own frontmatter. + ## [0.8.1] ### Changed diff --git a/plugins/playbooks/skills/boris/SKILL.md b/plugins/playbooks/skills/boris/SKILL.md index 81c0fc960..a1f85663d 100644 --- a/plugins/playbooks/skills/boris/SKILL.md +++ b/plugins/playbooks/skills/boris/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Boris Cherny Claude Code workflow tips (howborisusesclaudecode.com) — 127 tips across 115 sections on parallel sessions, planning, CLAUDE.md, skills, hooks, permissions, autonomy, orchestration, loops, and context engineering. Use when optimizing Claude Code setup, workflows, CLAUDE.md, skills, hooks, or parallel sessions." +description: "Boris Cherny Claude Code workflow tips (howborisusesclaudecode.com) — 127 tips across 115 sections on parallel sessions, planning, CLAUDE.md, skills, hooks, permissions, autonomy, orchestration, loops, and context engineering. Use when: 'how does Boris use Claude Code', 'Claude Code workflow tips', 'optimize my CLAUDE.md', 'improve my Claude Code setup', 'parallel Claude sessions', 'hook ideas', or optimizing Claude Code setup, workflows, CLAUDE.md, skills, hooks, or parallel sessions." when_to_use: "CC workflow optimization, Boris tips, CLAUDE.md/skills/hooks setup, parallel sessions" user-invocable: true disable-model-invocation: false diff --git a/plugins/repo-hygiene/.claude-plugin/plugin.json b/plugins/repo-hygiene/.claude-plugin/plugin.json index 2a7f62fa8..2f4832699 100644 --- a/plugins/repo-hygiene/.claude-plugin/plugin.json +++ b/plugins/repo-hygiene/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "repo-hygiene", - "version": "0.9.0", + "version": "0.9.1", "description": "Repo hygiene action-router: /repo-hygiene:clean sweeps reclaimable caches, build artifacts, and stale git metadata, and can realign the working tree to a fresh-pull state — dry-run-first, with destructive tiers gated behind explicit confirmation and a session-scoped destructive-command guard. Ecosystem targets are detected at runtime; secrets, runtime dependencies, and skill data are preserved by default.", "author": { "name": "Melodic Software", diff --git a/plugins/repo-hygiene/CHANGELOG.md b/plugins/repo-hygiene/CHANGELOG.md index 8d82d4f80..ae28ed6dc 100644 --- a/plugins/repo-hygiene/CHANGELOG.md +++ b/plugins/repo-hygiene/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to the `repo-hygiene` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.9.1] + +### Changed + +- **`/repo-hygiene:clean`'s trigger phrases are now single-quoted.** The `Use when:` list was a bare + comma-separated run of words (`clean, disk space, remove caches, ...`), which the skill-quality + gate's trigger-drop protection cannot track, and several entries were bare nouns rather than + phrasings. All fourteen are now quoted, with the noun-shaped ones rewritten as things a user says + — `'free up disk space'`, `'clear build artifacts'`, `'clean up my stashes'`. + ## [0.9.0] ### Removed diff --git a/plugins/repo-hygiene/skills/clean/SKILL.md b/plugins/repo-hygiene/skills/clean/SKILL.md index 1d75969eb..897169a8e 100644 --- a/plugins/repo-hygiene/skills/clean/SKILL.md +++ b/plugins/repo-hygiene/skills/clean/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Repo hygiene action-router: scan (inventory), caches, build, git (prune/branch audit), stash (stash audit/triage), tree (destructive fresh-pull reset), tree-batch (multi-repo tree reset with skip-list + dirty guard), all, and fleet batch forms of the selective tiers (caches-batch / build-batch / git-batch / all-batch over many repos behind one gate). Bare invocation detects intent from conversation or shows a menu. Dry-run-first; destructive actions require explicit confirmation. Use when: clean, disk space, remove caches, build artifacts, fresh pull, fresh clone state, reset to origin, reset all my repos, clean caches across all repos, clear build artifacts across all my repos, prune git across the fleet, stale branches, stashes, repo hygiene. Skip: removing git worktree directories (a worktree-management tool handles those)." +description: "Repo hygiene action-router: scan (inventory), caches, build, git (prune/branch audit), stash (stash audit/triage), tree (destructive fresh-pull reset), tree-batch (multi-repo tree reset with skip-list + dirty guard), all, and fleet batch forms of the selective tiers (caches-batch / build-batch / git-batch / all-batch over many repos behind one gate). Bare invocation detects intent from conversation or shows a menu. Dry-run-first; destructive actions require explicit confirmation. Use when: 'clean', 'free up disk space', 'remove caches', 'clear build artifacts', 'fresh pull', 'fresh clone state', 'reset to origin', 'reset all my repos', 'clean caches across all repos', 'clear build artifacts across all my repos', 'prune git across the fleet', 'stale branches', 'clean up my stashes', 'repo hygiene'. Skip: removing git worktree directories (a worktree-management tool handles those)." user-invocable: true argument-hint: "[scan|caches|build|git|stash|tree|tree-batch|all|caches-batch|build-batch|git-batch|all-batch|aliases…] (bare → menu or auto-detect)" allowed-tools: diff --git a/plugins/review/.claude-plugin/plugin.json b/plugins/review/.claude-plugin/plugin.json index 0906858dc..63256613d 100644 --- a/plugins/review/.claude-plugin/plugin.json +++ b/plugins/review/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "review", - "version": "0.18.1", + "version": "0.18.2", "description": "Code-review toolkit: six read-only reviewer agents (code, security, architecture, doc drift, build/test/lint, CI-log audit) plus two orchestration skills — a single-lens quality gate and a multi-surface review fan-out with severity-ranked, deduplicated findings.", "author": { "name": "Melodic Software", diff --git a/plugins/review/CHANGELOG.md b/plugins/review/CHANGELOG.md index 469c1b8d1..bbd4d380e 100644 --- a/plugins/review/CHANGELOG.md +++ b/plugins/review/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to the `review` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.18.2] + +### Changed + +- **`/review:fanout`'s `description` now uses `Use when:`.** Its five routing phrases sat behind a + lowercase `use for`, which the skill-quality gate does not recognize as trigger phrasing. All five + are preserved verbatim and `'review this from all sides'` joins them. + ## [0.18.1] ### Changed diff --git a/plugins/review/skills/fanout/SKILL.md b/plugins/review/skills/fanout/SKILL.md index bf8335547..600b67b30 100644 --- a/plugins/review/skills/fanout/SKILL.md +++ b/plugins/review/skills/fanout/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Fan out review across many finding-producing surfaces at once — this plugin's reviewer agents, the project's own per-concern review criteria docs, and orchestrator review plugins — then normalize the heterogeneous outputs into one severity-ranked, deduplicated report persisted to disk. Use for 'fan out review', 'breadth review', 'run all reviewers', 'review from every angle', or 'fix the review findings' (the fix action applies a persisted findings file)." +description: "Fan out review across many finding-producing surfaces at once — this plugin's reviewer agents, the project's own per-concern review criteria docs, and orchestrator review plugins — then normalize the heterogeneous outputs into one severity-ranked, deduplicated report persisted to disk. Use when: 'fan out review', 'breadth review', 'run all reviewers', 'review from every angle', 'review this from all sides', or 'fix the review findings' (the fix action applies a persisted findings file)." argument-hint: "[mode] [--yes] (e.g., /review:fanout, /review:fanout run-everything, /review:fanout fix, /review:fanout fix --yes)" user-invocable: true disable-model-invocation: false diff --git a/plugins/testing/.claude-plugin/plugin.json b/plugins/testing/.claude-plugin/plugin.json index 608c29666..15fc37cd7 100644 --- a/plugins/testing/.claude-plugin/plugin.json +++ b/plugins/testing/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "testing", - "version": "0.5.1", + "version": "0.5.2", "description": "Test-stage discipline across all ecosystems: coverage-gap analysis and test planning (`/testing:plan`), TDD test authoring and placement (`/testing:write`), live E2E plus non-UI smoke verification (`/testing:run-e2e`), and failing-test root-cause diagnosis with the reproduce → isolate → fix → retest loop (`/testing:diagnose`).", "author": { "name": "Melodic Software", diff --git a/plugins/testing/CHANGELOG.md b/plugins/testing/CHANGELOG.md index 10709a617..8d6cc29d5 100644 --- a/plugins/testing/CHANGELOG.md +++ b/plugins/testing/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to the `testing` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.5.2] + +### Changed + +- **Every `testing` skill's `description` now uses `Use when:` rather than `use for`.** `diagnose`, + `plan`, `run-e2e` and `write` each carried their routing phrases behind a lowercase `use for`, + which the skill-quality gate does not recognize as trigger phrasing. Each list gains 2–3 typed + phrases (`'this test is failing'`, `'where are the coverage gaps'`, + `'does the app actually work'`, `'add test coverage'`, among others); every phrase already present + is preserved verbatim. `plan`'s `'test plan' / 'what needs testing'` slash-pair becomes a plain + comma list, which the gate's extractor already read as two separate phrases. + ## [0.5.1] ### Changed diff --git a/plugins/testing/skills/diagnose/SKILL.md b/plugins/testing/skills/diagnose/SKILL.md index 96f650f28..765e8656e 100644 --- a/plugins/testing/skills/diagnose/SKILL.md +++ b/plugins/testing/skills/diagnose/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Diagnose and fix failing tests — failure classification, root-cause analysis (never retry blindly), then the reproduce → isolate → fix → retest → regression loop. Use for 'why does this fail', visible test failures, stack traces, or flaky tests; for authoring new tests use /testing:write, for running the suite /toolchain:check." +description: "Diagnose and fix failing tests — failure classification, root-cause analysis (never retry blindly), then the reproduce → isolate → fix → retest → regression loop. Use when: 'why does this fail', 'this test is failing', 'fix the failing tests', 'why is this test flaky', visible test failures, stack traces, or flaky tests; for authoring new tests use /testing:write, for running the suite /toolchain:check." argument-hint: "[failure] (e.g., /testing:diagnose, /testing:diagnose the frozen-logger error, /testing:diagnose loop)" user-invocable: true disable-model-invocation: false diff --git a/plugins/testing/skills/plan/SKILL.md b/plugins/testing/skills/plan/SKILL.md index b1440ef91..c06042f8b 100644 --- a/plugins/testing/skills/plan/SKILL.md +++ b/plugins/testing/skills/plan/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Analyze code changes and produce a test plan — classify changed files by required test type, identify coverage gaps, and prioritize by regression risk. Use for 'test plan' / 'what needs testing', after /implementation:implement completes, or for PR-prep coverage verification; for writing the tests use /testing:write, for running them /toolchain:check." +description: "Analyze code changes and produce a test plan — classify changed files by required test type, identify coverage gaps, and prioritize by regression risk. Use when: 'test plan', 'what needs testing', 'where are the coverage gaps', 'what should I test here', after /implementation:implement completes, or for PR-prep coverage verification; for writing the tests use /testing:write, for running them /toolchain:check." argument-hint: "[range or scope] (e.g., /testing:plan, /testing:plan HEAD~3, /testing:plan the auth module)" user-invocable: true disable-model-invocation: false diff --git a/plugins/testing/skills/run-e2e/SKILL.md b/plugins/testing/skills/run-e2e/SKILL.md index d6cf9f322..ecace02c2 100644 --- a/plugins/testing/skills/run-e2e/SKILL.md +++ b/plugins/testing/skills/run-e2e/SKILL.md @@ -1,5 +1,5 @@ --- -description: "End-to-end live app verification — check prerequisites, start the app, drive UI/API flows, and capture evidence (screenshots, responses, logs); includes a non-UI smoke-test playbook for libraries, MCP servers, hooks, and scripts. Use for 'e2e', 'smoke test', 'test the app', or when UI/API changes need runtime verification; for comprehensive build+test+lint use /verification:confirm." +description: "End-to-end live app verification — check prerequisites, start the app, drive UI/API flows, and capture evidence (screenshots, responses, logs); includes a non-UI smoke-test playbook for libraries, MCP servers, hooks, and scripts. Use when: 'e2e', 'smoke test', 'test the app', 'run it end to end', 'does the app actually work', 'click through the UI', or when UI/API changes need runtime verification; for comprehensive build+test+lint use /verification:confirm." argument-hint: "[scenario] (e.g., /testing:run-e2e, /testing:run-e2e the login flow, /testing:run-e2e non-ui)" user-invocable: true disable-model-invocation: false diff --git a/plugins/testing/skills/write/SKILL.md b/plugins/testing/skills/write/SKILL.md index 6e4bd21c5..3f2105ded 100644 --- a/plugins/testing/skills/write/SKILL.md +++ b/plugins/testing/skills/write/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Write and place tests across all ecosystems — TDD cadence (Red→Green→Refactor in vertical slices), test naming, test-type selection, project placement, and fixture patterns. Use for 'write tests', 'test this', 'where should this test go', or when code was just written without tests; for diagnosing failures use /testing:diagnose, for coverage-gap analysis /testing:plan, for running tests /toolchain:check." +description: "Write and place tests across all ecosystems — TDD cadence (Red→Green→Refactor in vertical slices), test naming, test-type selection, project placement, and fixture patterns. Use when: 'write tests', 'test this', 'where should this test go', 'add test coverage', 'write a unit test for this', or when code was just written without tests; for diagnosing failures use /testing:diagnose, for coverage-gap analysis /testing:plan, for running tests /toolchain:check." argument-hint: "[task] (e.g., /testing:write, /testing:write the new handler, /testing:write organize)" user-invocable: true disable-model-invocation: false diff --git a/plugins/toolchain/.claude-plugin/plugin.json b/plugins/toolchain/.claude-plugin/plugin.json index 979c94040..94540dd26 100644 --- a/plugins/toolchain/.claude-plugin/plugin.json +++ b/plugins/toolchain/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "toolchain", - "version": "0.12.0", + "version": "0.12.1", "description": "Repo-agnostic polyglot verification toolchain: build + test + lint for changed files across .NET, Python, TypeScript, Bash, PowerShell, Markdown, Go, YAML, and cross-cutting surfaces (`/toolchain:check`, `/toolchain:lint`), plus a re-runnable `/toolchain:setup` with check (report the configured ecosystems and their command surface) and apply (interview, infer, and write the tracked per-ecosystem command config those skills resolve first).", "author": { "name": "Melodic Software", diff --git a/plugins/toolchain/CHANGELOG.md b/plugins/toolchain/CHANGELOG.md index f69ff79aa..b165c021b 100644 --- a/plugins/toolchain/CHANGELOG.md +++ b/plugins/toolchain/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to the `toolchain` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.12.1] + +### Changed + +- **`/toolchain:check` and `/toolchain:lint` now carry `Use when:` trigger phrasing.** `check` + stated its phrases as "Use after any code edit or for 'does it compile' / 'run tests' checks" — + the two phrases are preserved verbatim and now lead, joined by `'build it'`, `'run the tests'`, + `'does this still build'` and `'check it'`. `lint` had no typed phrase at all ("Use for quick + lint/format feedback during development"), and now leads with `'lint this'`, `'run the linter'`, + `'format check'`, `'fix the formatting'`, `'is this formatted right'` and + `'run prettier/ruff/eslint'`. + ## [0.12.0] ### Removed diff --git a/plugins/toolchain/skills/check/SKILL.md b/plugins/toolchain/skills/check/SKILL.md index 14f2864ec..519c4cfe1 100644 --- a/plugins/toolchain/skills/check/SKILL.md +++ b/plugins/toolchain/skills/check/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Run build, test, and lint verification for changed files, auto-detecting affected ecosystems (.NET, Python, TypeScript, Bash, PowerShell, Markdown) from git status, with the consuming project's own documented commands overriding portable defaults. Use after any code edit or for 'does it compile' / 'run tests' checks; for lint-only use /toolchain:lint, for full outcome verification use /verification:confirm." +description: "Run build, test, and lint verification for changed files, auto-detecting affected ecosystems (.NET, Python, TypeScript, Bash, PowerShell, Markdown) from git status, with the consuming project's own documented commands overriding portable defaults. Use when: 'does it compile', 'run tests', 'build it', 'run the tests', 'does this still build', 'check it', or after any code edit; for lint-only use /toolchain:lint, for full outcome verification use /verification:confirm." user-invocable: true argument-hint: "[ecosystem] (e.g., /toolchain:check dotnet, /toolchain:check python, /toolchain:check all — default: auto-detect from git status)" shell: bash diff --git a/plugins/toolchain/skills/lint/SKILL.md b/plugins/toolchain/skills/lint/SKILL.md index 43876a3a5..70fa9b6c6 100644 --- a/plugins/toolchain/skills/lint/SKILL.md +++ b/plugins/toolchain/skills/lint/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Run polyglot linters and format checks across all affected ecosystems without a full build cycle — auto-detects ecosystems from changed files, honors each tool's config-file opt-in, and supports --fix mode to auto-correct where linters allow. Use for quick lint/format feedback during development; for build+test use /toolchain:check, for full outcome verification use /verification:confirm." +description: "Run polyglot linters and format checks across all affected ecosystems without a full build cycle — auto-detects ecosystems from changed files, honors each tool's config-file opt-in, and supports --fix mode to auto-correct where linters allow. Use when: 'lint this', 'run the linter', 'format check', 'fix the formatting', 'is this formatted right', 'run prettier/ruff/eslint', or for quick lint/format feedback during development; for build+test use /toolchain:check, for full outcome verification use /verification:confirm." user-invocable: true argument-hint: "[ecosystem] [--fix] (e.g., /toolchain:lint, /toolchain:lint dotnet, /toolchain:lint --fix, /toolchain:lint all)" shell: bash diff --git a/plugins/verification/CHANGELOG.md b/plugins/verification/CHANGELOG.md index cdeccc759..2a03b2cc8 100644 --- a/plugins/verification/CHANGELOG.md +++ b/plugins/verification/CHANGELOG.md @@ -15,8 +15,14 @@ All notable changes to the `verification` plugin are documented here. Format fol shape, and six phrases a user would actually type — `'did that actually speed it up'`, `'how much faster is it'`, `'measure this'`, `'capture a baseline'`, `'benchmark before and after'`, `'did complexity go down'` — join the three that were already - there. Every phrase the previous description carried is preserved verbatim, so the gate's + there. Every phrase the previous description carried is preserved verbatim — including + `'cannot quantify'`, which is prose the gate's extractor nonetheless tracks as a trigger — so the trigger-keyword-preservation check sees a superset, not a rewrite. +- **`/verification:confirm`'s `description` now uses `Use when:` too.** It had the same shape: three + good routing phrases (`'verify changes'`, `'prove this works'`, `'did we build the right thing'`) + behind a lowercase `use for` the gate does not recognize as trigger phrasing. All three are + preserved verbatim and `'is this done'`, `'check my work'` and `'did the fix actually work'` join + them. ## [0.5.1] diff --git a/plugins/verification/skills/confirm/SKILL.md b/plugins/verification/skills/confirm/SKILL.md index 4e8670800..ecfb23982 100644 --- a/plugins/verification/skills/confirm/SKILL.md +++ b/plugins/verification/skills/confirm/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Prove a change achieved its intended outcome: a mechanical build+test+lint prerequisite (delegated to /toolchain:check and /toolchain:lint, STOPs if broken), then outcome verification — does the change match the plan/intent and function correctly, with the criterion auto-detected by change-type (feature, fix, refactor). Use for 'verify changes', 'prove this works', 'did we build the right thing'; for quick mechanical-only checks use /toolchain:check, for measurable-improvement claims use /verification:measure." +description: "Prove a change achieved its intended outcome: a mechanical build+test+lint prerequisite (delegated to /toolchain:check and /toolchain:lint, STOPs if broken), then outcome verification — does the change match the plan/intent and function correctly, with the criterion auto-detected by change-type (feature, fix, refactor). Use when: 'verify changes', 'prove this works', 'did we build the right thing', 'is this done', 'check my work', 'did the fix actually work'; for quick mechanical-only checks use /toolchain:check, for measurable-improvement claims use /verification:measure." user-invocable: true argument-hint: "[mode] [ecosystem] (e.g., /verification:confirm, /verification:confirm outcome, /verification:confirm fix, /verification:confirm refactor, /verification:confirm dotnet)" disable-model-invocation: false