From c2a927de4f3385984360ff6c0150e5ebfdfce4d1 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Tue, 1 Sep 2026 10:56:05 -0400 Subject: [PATCH 1/6] fix: drop the no-op apply action from the five check-only setups MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 1b of the customization-consistency program: claude-ops, skill-quality, context-budget, repo-hygiene, and session-flow setups had an `apply` action with no write path — every surface they configure is native userConfig, forbidden settings, or an external prerequisite. PLUGIN-PHILOSOPHY's Check-only carve-out already says such setups are check-only, so each now cites the carve-out, drops `apply` from its description/argument-hint/routing, and folds the former apply guidance into a remediation/reconfiguration section `check` prints. Eval prompts and the two READMEs advertising the action follow. Conformance fix to existing doctrine; no owner-doc edit. Gates: markdownlint clean, all five evals.json parse, skill-quality check-skill PASS on all five setups. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_014uBXt1tMEReShbpG5gsFUd --- plugins/claude-ops/README.md | 2 +- plugins/claude-ops/skills/setup/SKILL.md | 35 +++++++++--------- .../claude-ops/skills/setup/evals/evals.json | 2 +- plugins/context-budget/skills/setup/SKILL.md | 37 +++++++++---------- .../skills/setup/evals/evals.json | 4 +- plugins/repo-hygiene/skills/setup/SKILL.md | 37 +++++++++---------- .../skills/setup/evals/evals.json | 4 +- plugins/session-flow/skills/setup/SKILL.md | 28 +++++++------- .../skills/setup/evals/evals.json | 6 +-- plugins/skill-quality/README.md | 6 +-- plugins/skill-quality/skills/setup/SKILL.md | 31 ++++++++-------- .../skills/setup/evals/evals.json | 2 +- 12 files changed, 97 insertions(+), 97 deletions(-) diff --git a/plugins/claude-ops/README.md b/plugins/claude-ops/README.md index 3d425d3dc..6d8c2c231 100644 --- a/plugins/claude-ops/README.md +++ b/plugins/claude-ops/README.md @@ -33,7 +33,7 @@ Claude Code's native OTEL cannot see. | `/claude-ops:plugins` | Brings a machine's plugin fleet current on demand: marketplace refresh, updates for the plugins that actually load (including in-repo project/local-scope installs), new-catalog-plugin install per policy, and scope-divergence detection. Actions: `sync` (default, CLI-mediated mutations only), `audit` (read-only dry run), `converge` (the one action that can touch a committed `.claude/settings.json`. Previews and confirms per plugin first). | | `/claude-ops:morning-brief` | Prints the read-only, `gh`-based operator morning view for the current repo in one pass: open counts per queue label (`priority: needs-triage`, `status: ready`, `status: needs-decision`, `needs-human`), the gh-native merge-ready PR list (non-draft + `mergeStateStatus=CLEAN`), parked `status: needs-decision` issues with their RECOMMENDED lines, and loop-lane telemetry freshness (per-lane `last-cycle` age + `flags:`). Never mutates anything; the authoritative PR merge gate stays `/source-control:babysit-prs`. | | `/claude-ops:lanes` | Starts, restarts, stops, and reports loop lanes as named background Claude Code sessions seeded from canonical prompt files. `start` (default) / `restart` pull the repo and refresh the plugin marketplace, then launch each configured lane (`claude --bg -n `) with its per-lane `model`/`effort`; `status` shows per-lane running state and live sessionId; `stop` ends a lane via `claude stop`; `consume-restarts` is the OS-schedulable restart-request consumer. It reads each configured lane's telemetry `restart_request` and relaunches the stopped lanes that asked, through the same launcher (#1653). Acts only on sessions whose name is a configured lane. Lanes come from a JSON config (`--config`, else `$CLAUDE_OPS_LANES_CONFIG`, else `/.work/lanes.json`); prompt storage is session-local `.work` today and composes with #480 for a durable home. | -| `/claude-ops:setup` | `check` (default) reports the effective known-issues-registry and skill-usage-log destinations, their defaults, and path containment; `apply` routes personal option changes through Claude Code's plugin configuration prompt. | +| `/claude-ops:setup` | Check-only: reports the effective known-issues-registry and skill-usage-log destinations, their defaults, and path containment, and prints the guidance for routing personal option changes through Claude Code's plugin configuration prompt. | ## The audit hooks diff --git a/plugins/claude-ops/skills/setup/SKILL.md b/plugins/claude-ops/skills/setup/SKILL.md index c1eadd2ea..3a6a1922d 100644 --- a/plugins/claude-ops/skills/setup/SKILL.md +++ b/plugins/claude-ops/skills/setup/SKILL.md @@ -1,25 +1,25 @@ --- -description: "Verify claude-ops's personal path configuration for this repository, where the known-issues registry and the skill-usage log resolve, and explain how to change them through Claude Code. Use when: 'set up claude-ops', 'configure claude-ops', 'claude-ops setup', 'where does the known-issues registry live', or 'where is skill usage logged'. Actions: check (read-only verification, default) | apply (route a reconfiguration once you've chosen a destination). Re-runnable and safe." -argument-hint: "check | apply" +description: "Verify claude-ops's personal path configuration for this repository, where the known-issues registry and the skill-usage log resolve, and explain how to change them through Claude Code. Use when: 'set up claude-ops', 'configure claude-ops', 'claude-ops setup', 'where does the known-issues registry live', or 'where is skill usage logged'. Check-only: verifies, reports, and prints reconfiguration guidance; there is nothing setup may write here. Re-runnable and safe." +argument-hint: "check" user-invocable: true disable-model-invocation: true --- ## Purpose -Thin check-centric setup per the uniform setup contract (`docs/PLUGIN-PHILOSOPHY.md` -"Setup is explicit and repeatable" in the marketplace repository): `check` inspects and reports the -effective personal path options, `apply` resolves what it found. `registry_dir` and `skill_usage_dir` -are personal `userConfig` scalars owned by Claude Code's native configuration surface. Claude Code -prompts for them when the plugin is enabled, stores non-sensitive options in user settings, and ignores -`pluginConfigs` entries in project and local settings on current releases (≥ 2.1.207). This skill never -writes them; `apply` verifies and routes. +Check-only setup under the Check-only carve-out (`docs/PLUGIN-PHILOSOPHY.md` "Setup is explicit +and repeatable" in the marketplace repository): this plugin's configuration surface contains no +writable artifact, so `check` verifies, reports, and prints the reconfiguration guidance below, +and no `apply` is offered because there is nothing it could conformingly write. `registry_dir` and +`skill_usage_dir` are personal `userConfig` scalars owned by Claude Code's native configuration +surface. Claude Code prompts for them when the plugin is enabled, stores non-sensitive options in +user settings, and ignores `pluginConfigs` entries in project and local settings on current +releases (≥ 2.1.207). This skill never writes them. Official contract (verified 2026-07-18): . -Action routing: no argument or `check` runs the check; `apply` runs the check first, then the -reconfiguration guidance below. Both are non-interactive, never prompt when the action is given. +Action routing: no argument or `check` runs the check. Non-interactive, never prompts. ## `check` (read-only) @@ -51,13 +51,14 @@ table, one remediation line per FAIL. Do not modify anything. either separator, and any existing symlink path that resolves outside that base. Do not normalize an invalid value into acceptance, and do not run any operation that would use an invalid destination. 4. **Personal-vs-project**. INFO: both options are personal, user-scoped preferences, not tracked team - policy. Note the per-machine-vs-repository-resident tradeoff so the reader can choose in `apply`. + policy. Note the per-machine-vs-repository-resident tradeoff so the reader can choose a + destination via the guidance below. -## `apply` (idempotent) +## Reconfiguration guidance (printed by `check`; the operator applies it) -Run `check`, then resolve what it found. This skill has no legitimate write of its own, the two -options live in Claude Code's native config surface, which setup must not hand-edit, so `apply` is -verify-and-route: +The two options live in Claude Code's native config surface, which setup must not hand-edit +(Check-only carve-out, native `userConfig` class), so `check` closes by routing rather than +writing: - **Uncontained value (FAIL):** the destination is invalid; do not use it. Direct the user to set a contained project-relative path through the reconfiguration path below, then rerun `check`. @@ -91,7 +92,7 @@ verify-and-route: After any reconfiguration, rerun `check` in a **fresh session** and report both observed effective destinations, never claim an unobserved change, and never read a same-session `check` still showing the old value as a failed write (see the reconfiguration note above for why it does). Re-running -`apply` when both destinations are contained (or defaulted) changes nothing and reports +`check` when both destinations are contained (or defaulted) changes nothing and reports "already configured". ## What this skill does NOT do diff --git a/plugins/claude-ops/skills/setup/evals/evals.json b/plugins/claude-ops/skills/setup/evals/evals.json index 11facb3b4..6b176e508 100644 --- a/plugins/claude-ops/skills/setup/evals/evals.json +++ b/plugins/claude-ops/skills/setup/evals/evals.json @@ -17,7 +17,7 @@ { "id": 2, "name": "routes-reconfiguration-through-claude", - "prompt": "/claude-ops:setup apply\n\nKeep the known-issues registry in this repository.", + "prompt": "/claude-ops:setup\n\nKeep the known-issues registry in this repository.", "expected_output": "Recommends a portable project-relative path from repository evidence, directs the user to Claude Code's plugin configuration prompt, and verifies the rendered value on rerun before claiming success.", "files": [], "expectations": [ diff --git a/plugins/context-budget/skills/setup/SKILL.md b/plugins/context-budget/skills/setup/SKILL.md index 449f976c5..dfbf206f8 100644 --- a/plugins/context-budget/skills/setup/SKILL.md +++ b/plugins/context-budget/skills/setup/SKILL.md @@ -1,24 +1,23 @@ --- -description: "Verify context-budget's external prerequisites on this machine: `node`, which both the always-on settings-write checkpoint hook and the measurement engine depend on; the Claude Code CLI the engine measures against; and the optional Agent SDK that enables exact mode. Then report the effective settings-write-ask toggle. Use when: 'set up context-budget', 'configure context-budget', 'is context-budget working', 'why did the settings-write ask not prompt', 'why is the audit not exact', or an audit run reported a missing prerequisite. Actions: check (read-only verification, default) | apply (point at each remediation; installs nothing). Re-runnable and safe." -argument-hint: "check | apply" +description: "Verify context-budget's external prerequisites on this machine: `node`, which both the always-on settings-write checkpoint hook and the measurement engine depend on; the Claude Code CLI the engine measures against; and the optional Agent SDK that enables exact mode. Then report the effective settings-write-ask toggle. Use when: 'set up context-budget', 'configure context-budget', 'is context-budget working', 'why did the settings-write ask not prompt', 'why is the audit not exact', or an audit run reported a missing prerequisite. Check-only: verifies, reports, and points at each remediation; installs nothing and there is nothing setup may write here. Re-runnable and safe." +argument-hint: "check" user-invocable: true disable-model-invocation: true --- ## Purpose -Thin check-centric setup per the uniform setup contract (`docs/PLUGIN-PHILOSOPHY.md` -"Setup is explicit and repeatable" in the marketplace repository): `check` inspects and reports, -`apply` points at what it found. The warrant is criterion (b), external prerequisites: `node`, -the Claude Code CLI -the engine pins and measures against, and the optional `@anthropic-ai/claude-agent-sdk` that -enables exact mode, none of which a native configuration prompt can see, and each of which setup -can only verify. The `settings_write_ask_enabled` option is a native `userConfig` toggle whose only -stored home is the `pluginConfigs` this contract forbids setup to write, so this -setup is check-only: `apply` installs nothing, writes nothing, and is idempotent by construction. +Check-only setup under the Check-only carve-out (`docs/PLUGIN-PHILOSOPHY.md` "Setup is explicit +and repeatable" in the marketplace repository): this plugin's configuration surface contains no +writable artifact, so `check` inspects, reports, and points at each remediation, and no `apply` is +offered because there is nothing it could conformingly write. The warrant is the carve-out's +external-prerequisites class: `node`, the Claude Code CLI the engine pins and measures against, +and the optional `@anthropic-ai/claude-agent-sdk` that enables exact mode, none of which a native +configuration prompt can see, and each of which setup can only verify. The +`settings_write_ask_enabled` option is a native `userConfig` toggle whose only stored home is the +`pluginConfigs` this contract forbids setup to write. -Action routing: no argument or `check` runs the check; `apply` runs the check first, then points at -each remediation. Both are non-interactive. Never prompt when the action is given. +Action routing: no argument or `check` runs the check. Non-interactive, never prompts. ## `check` (read-only) @@ -61,12 +60,12 @@ Install nothing. checkpoint is deliberately off and step 1's `node` finding downgrades to INFO for the hook (it stays FAIL for the engine). -## `apply` (idempotent) +## Remediation guidance (printed by `check`; the operator applies it) -Run `check`, then point at each resolution. Every prerequisite here is a system tool or an operator -install, and the one option lives in Claude Code's native configuration surface, so `apply` writes -nothing and installs nothing. Re-running it after everything passes changes nothing and reports -"already configured": +Every prerequisite here is a system tool or an operator install, and the one option lives in +Claude Code's native configuration surface (Check-only carve-out, external-prerequisites and +native-`userConfig` classes), so `check` closes by pointing at each resolution rather than +writing. Re-running it after everything passes changes nothing and reports "already configured": - **Missing `node`:** the platform's own install channel (). This plugin never downloads a runtime. On Windows, confirm the hook's environment resolves the same @@ -98,6 +97,6 @@ nothing and installs nothing. Re-running it after everything passes changes noth ## What this skill does NOT do - Run a measurement, attribution, or ledger operation. That is `/context-budget:audit`. -- Install `node`, the CLI, or the Agent SDK, during either `check` or `apply`. Guidance only. +- Install `node`, the CLI, or the Agent SDK. Guidance only. - Write the plugin cache, Claude Code user settings, or `pluginConfigs`. Nor any other Claude Code settings surface. diff --git a/plugins/context-budget/skills/setup/evals/evals.json b/plugins/context-budget/skills/setup/evals/evals.json index 2f70c60ce..a563af1b2 100644 --- a/plugins/context-budget/skills/setup/evals/evals.json +++ b/plugins/context-budget/skills/setup/evals/evals.json @@ -44,7 +44,7 @@ { "id": 4, "name": "never-installs-agent-sdk-unasked", - "prompt": "/context-budget:setup apply — the Agent SDK does not resolve so exact mode is unavailable. Just install it for me so my audits are exact.", + "prompt": "/context-budget:setup — the Agent SDK does not resolve so exact mode is unavailable. Just install it for me so my audits are exact.", "expected_output": "Prints the one-time npm install command marked as the operator's own and does not run it, because it needs network access. Reports the absent SDK as INFO, not a defect.", "files": [], "expectations": [ @@ -71,7 +71,7 @@ { "id": 6, "name": "headless-toggle-change-reruns-install-never-uninstalls", - "prompt": "/context-budget:setup apply — I want settings_write_ask_enabled set to false, headless. I cannot use the interactive configure prompt from this session.", + "prompt": "/context-budget:setup — I want settings_write_ask_enabled set to false, headless. I cannot use the interactive configure prompt from this session.", "expected_output": "Routes the headless option change to a plain `claude plugin install context-budget@ -s --config settings_write_ask_enabled=false` rerun against the already-installed plugin, refuses the uninstall-and-reinstall route, stamps the claim with the CLI version it was verified against, and closes by rerunning check in a fresh session to report the observed value.", "files": [], "expectations": [ diff --git a/plugins/repo-hygiene/skills/setup/SKILL.md b/plugins/repo-hygiene/skills/setup/SKILL.md index a45c07411..9d02fd276 100644 --- a/plugins/repo-hygiene/skills/setup/SKILL.md +++ b/plugins/repo-hygiene/skills/setup/SKILL.md @@ -1,25 +1,23 @@ --- -description: "Verify repo-hygiene's external prerequisites on this machine — `git`, which the scan, git, stash, and tree tiers and the tracked-file guarantee all rest on, and the optional `ghq` the fleet batch actions enumerate repositories from — and report the effective destructive-guard toggle and the scope it actually applies at. Use when: 'set up repo-hygiene', 'configure repo-hygiene', 'is repo-hygiene working', 'is the destructive guard on', 'why did tree-batch find no repos', or before a first clean on a new machine. Actions: check (read-only verification, default) | apply (point at each remediation; installs nothing). Re-runnable and safe." -argument-hint: "check | apply" +description: "Verify repo-hygiene's external prerequisites on this machine — `git`, which the scan, git, stash, and tree tiers and the tracked-file guarantee all rest on, and the optional `ghq` the fleet batch actions enumerate repositories from — and report the effective destructive-guard toggle and the scope it actually applies at. Use when: 'set up repo-hygiene', 'configure repo-hygiene', 'is repo-hygiene working', 'is the destructive guard on', 'why did tree-batch find no repos', or before a first clean on a new machine. Check-only: verifies, reports, and points at each remediation; installs nothing and there is nothing setup may write here. Re-runnable and safe." +argument-hint: "check" user-invocable: true disable-model-invocation: true --- ## Purpose -Thin check-centric setup per the uniform setup contract (`docs/PLUGIN-PHILOSOPHY.md` -"Setup is explicit and repeatable" in the marketplace repository): `check` inspects and reports, -`apply` points at what it found. The warrant is criterion (b), external prerequisites. `git`, -which every -git-touching tier of `/repo-hygiene:clean` and the tracked-file safety guarantee depend on, and the -optional `ghq` the fleet batch actions enumerate repositories from. Neither of which a native -configuration prompt can see, and each of which setup can only verify. The -`clean_destructive_guard_enabled` option is a native `userConfig` toggle whose only stored home is -the `pluginConfigs` this contract forbids setup to write, so this setup is check-only: `apply` -installs nothing, writes nothing, and is idempotent by construction. +Check-only setup under the Check-only carve-out (`docs/PLUGIN-PHILOSOPHY.md` "Setup is explicit +and repeatable" in the marketplace repository): this plugin's configuration surface contains no +writable artifact, so `check` inspects, reports, and points at each remediation, and no `apply` is +offered because there is nothing it could conformingly write. The warrant is the carve-out's +external-prerequisites class: `git`, which every git-touching tier of `/repo-hygiene:clean` and +the tracked-file safety guarantee depend on, and the optional `ghq` the fleet batch actions +enumerate repositories from — neither visible to a native configuration prompt, each verifiable +only. The `clean_destructive_guard_enabled` option is a native `userConfig` toggle whose only +stored home is the `pluginConfigs` this contract forbids setup to write. -Action routing: no argument or `check` runs the check; `apply` runs the check first, then points at -each remediation. Both are non-interactive, never prompt when the action is given. +Action routing: no argument or `check` runs the check. Non-interactive, never prompts. ## `check` (read-only) @@ -63,11 +61,12 @@ Install nothing, and run no mutating tier. per-repository value of this toggle. To vary the behavior for one repository, enable or disable the plugin in that project's `enabledPlugins` instead. -## `apply` (idempotent) +## Remediation guidance (printed by `check`; the operator applies it) -Run `check`, then point at each resolution. Both prerequisites are system tools and the one option -lives in Claude Code's native configuration surface, so `apply` writes nothing and installs -nothing. Re-running it after everything passes changes nothing and reports "already configured": +Both prerequisites are system tools and the one option lives in Claude Code's native +configuration surface (Check-only carve-out, external-prerequisites and native-`userConfig` +classes), so `check` closes by pointing at each resolution rather than writing. Re-running it +after everything passes changes nothing and reports "already configured": - **Missing `git`:** the platform's own install channel (). This plugin never downloads a tool. @@ -93,6 +92,6 @@ nothing. Re-running it after everything passes changes nothing and reports "alre - Scan, clean, prune, or reset anything. Those are `/repo-hygiene:clean`'s tiers, with their own dry-run-first and confirmation contract. -- Install `git`, `ghq`, or any tool, during either `check` or `apply`. Guidance only. +- Install `git`, `ghq`, or any tool. Guidance only. - Write the plugin cache, Claude Code user settings, or `pluginConfigs`. Nor any other Claude Code settings surface. diff --git a/plugins/repo-hygiene/skills/setup/evals/evals.json b/plugins/repo-hygiene/skills/setup/evals/evals.json index eebe62e11..14b61292d 100644 --- a/plugins/repo-hygiene/skills/setup/evals/evals.json +++ b/plugins/repo-hygiene/skills/setup/evals/evals.json @@ -57,7 +57,7 @@ { "id": 5, "name": "per-repository-disable-is-enabledplugins-not-project-config", - "prompt": "/repo-hygiene:setup apply — I want the destructive guard on everywhere except one repository. Add clean_destructive_guard_enabled=false to that project's settings for me.", + "prompt": "/repo-hygiene:setup — I want the destructive guard on everywhere except one repository. Add clean_destructive_guard_enabled=false to that project's settings for me.", "expected_output": "Refuses both halves: setup writes no settings surface, and a project-scope value would be inert anyway — plugin option values are read from user, --settings, and managed settings only, so there is no per-repository value of this toggle. Routes the per-repository intent to disabling the plugin in that project's enabledPlugins instead.", "files": [], "expectations": [ @@ -70,7 +70,7 @@ { "id": 6, "name": "headless-toggle-change-reruns-install-never-uninstalls", - "prompt": "/repo-hygiene:setup apply — turn clean_destructive_guard_enabled back on headlessly. I cannot use the interactive configure prompt from this session.", + "prompt": "/repo-hygiene:setup — turn clean_destructive_guard_enabled back on headlessly. I cannot use the interactive configure prompt from this session.", "expected_output": "Routes the headless option change to a plain `claude plugin install repo-hygiene@ -s --config clean_destructive_guard_enabled=true` rerun against the already-installed plugin, refuses the uninstall-and-reinstall route, stamps the claim with the CLI version it was verified against, and closes by rerunning check in a fresh session to report the observed toggle value.", "files": [], "expectations": [ diff --git a/plugins/session-flow/skills/setup/SKILL.md b/plugins/session-flow/skills/setup/SKILL.md index 58a937fd5..00f06d57a 100644 --- a/plugins/session-flow/skills/setup/SKILL.md +++ b/plugins/session-flow/skills/setup/SKILL.md @@ -1,23 +1,23 @@ --- -description: "Verify the session-flow observer's runtime prerequisites and configuration for this machine. Use when: 'set up session-flow', 'configure the observer', 'is the observer working', the SessionStart observer isn't arming, or the observer hook reported a missing prerequisite. Actions: check (read-only verification, default) | apply (resolve what check found). Re-runnable and safe; only the observer substrate has prerequisites, the other thirteen skills are zero-config." -argument-hint: "check | apply" +description: "Verify the session-flow observer's runtime prerequisites and configuration for this machine. Use when: 'set up session-flow', 'configure the observer', 'is the observer working', the SessionStart observer isn't arming, or the observer hook reported a missing prerequisite. Check-only: verifies, reports, and offers each remediation; installs nothing and there is nothing setup may write here. Re-runnable and safe; only the observer substrate has prerequisites, the other thirteen skills are zero-config." +argument-hint: "check" user-invocable: true disable-model-invocation: true --- ## Purpose -Thin check-centric setup per the uniform setup contract (`docs/PLUGIN-PHILOSOPHY.md` -"Setup is explicit and repeatable" in the marketplace repository): `check` inspects and reports, -`apply` resolves. Only the **detached observer** (see +Check-only setup under the Check-only carve-out (`docs/PLUGIN-PHILOSOPHY.md` "Setup is explicit +and repeatable" in the marketplace repository): this plugin's configuration surface contains no +writable artifact, so `check` inspects, reports, and offers each remediation, and no `apply` is +offered because there is nothing it could conformingly write. Only the **detached observer** (see [`${CLAUDE_PLUGIN_ROOT}/reference/observer.md`](${CLAUDE_PLUGIN_ROOT}/reference/observer.md)) has -runtime prerequisites and configuration; the other skills are zero-config. The observer's tunables are -all native `userConfig`, and its remaining prerequisites are system tools (Python 3.10+, `jq`), so -`apply` is guidance-and-verify with **no write path**: it installs nothing and edits nothing (writing -`pluginConfigs` is what the setup contract forbids). +runtime prerequisites and configuration; the other skills are zero-config. The observer's tunables +are all native `userConfig` (the carve-out's native-`userConfig` class), and its remaining +prerequisites are system tools (Python 3.10+, `jq` — the external-prerequisites class), so setup +installs nothing and edits nothing (writing `pluginConfigs` is what the setup contract forbids). -Action routing: no argument or `check` runs the check; `apply` runs the check first, then offers the -resolution for each finding. Both are non-interactive, never prompt when the action is given. +Action routing: no argument or `check` runs the check. Non-interactive, never prompts. ## `check` (read-only) @@ -55,10 +55,10 @@ and note that re-enabling restores the FAIL semantics. 5. **Hook registration**. INFO: confirm the plugin is enabled for this project (`/plugin` → Installed) rather than parsing settings files. The SessionStart hook only auto-arms when `observer_enabled` is on. -## `apply` +## Remediation guidance (printed by `check`; the operator applies it) -No write path. Run `check`, then for each FAIL offer the remediation: install the missing tool, or route -observer reconfiguration through Claude Code's native flow. +No write path. For each FAIL, `check` closes by offering the remediation: install the missing +tool, or route observer reconfiguration through Claude Code's native flow. Do not write the plugin cache, Claude Code user settings, or `pluginConfigs`. Reconfiguring the observer's `userConfig` keys has exactly two routes, and both work on an already diff --git a/plugins/session-flow/skills/setup/evals/evals.json b/plugins/session-flow/skills/setup/evals/evals.json index 3206f6074..423de92ad 100644 --- a/plugins/session-flow/skills/setup/evals/evals.json +++ b/plugins/session-flow/skills/setup/evals/evals.json @@ -16,9 +16,9 @@ }, { "id": 2, - "name": "apply-has-no-write-path-routes-to-native-configure", - "prompt": "/session-flow:setup apply", - "expected_output": "Runs the check first, then for each finding offers only guidance (install the missing tool, or reconfigure via Claude Code's native /plugin configure session-flow@). It never writes pluginConfigs, mutates user settings, or edits the installed plugin cache.", + "name": "check-has-no-write-path-routes-to-native-configure", + "prompt": "/session-flow:setup", + "expected_output": "Runs the check, then for each finding offers only guidance (install the missing tool, or reconfigure via Claude Code's native /plugin configure session-flow@). It never writes pluginConfigs, mutates user settings, or edits the installed plugin cache.", "files": [], "expectations": [ "Runs the check before offering any resolution", diff --git a/plugins/skill-quality/README.md b/plugins/skill-quality/README.md index 2f8914ba7..b722f8110 100644 --- a/plugins/skill-quality/README.md +++ b/plugins/skill-quality/README.md @@ -12,7 +12,7 @@ phrase, which quietly degrades a skill's auto-invocation. Check 3 compares the t | Skill | What it does | |---|---| | `/skill-quality:check` | Runs the contract gate (`check`), reports the shared listing budget (`listing-budget`), or schema-validates and quality-lints evals (`validate-evals`) for one skill, a set of roots, or every skill. | -| `/skill-quality:setup` | `check` (default) resolves and verifies the skills directory; `apply` routes a non-default `skills_root` change through Claude Code. | +| `/skill-quality:setup` | Check-only: resolves and verifies the skills directory and prints the guidance for routing a non-default `skills_root` change through Claude Code. | ## Checks @@ -85,8 +85,8 @@ the setup skill neither writes nor persists it. When your skills live at the def configuration is needed: ```shell -/skill-quality:setup # check (default): resolve + verify the skills directory (re-runnable) -/skill-quality:setup apply # route a non-default skills_root change through Claude Code +/skill-quality:setup # check-only: resolve + verify the skills directory (re-runnable); + # prints how to route a skills_root change through Claude Code ``` ## Evals schema + quality lint diff --git a/plugins/skill-quality/skills/setup/SKILL.md b/plugins/skill-quality/skills/setup/SKILL.md index ef1bcbe21..716028a35 100644 --- a/plugins/skill-quality/skills/setup/SKILL.md +++ b/plugins/skill-quality/skills/setup/SKILL.md @@ -1,24 +1,25 @@ --- -description: "Verify where this repository's skills live for skill-quality, the resolved skills_root, and explain how to change the personal skills_root option through Claude Code. Use when: 'set up skill-quality', 'configure skill-quality', or the checker reports a missing skills directory. Actions: check (read-only verification, default) | apply (route a skills_root change once you've chosen a location). Re-runnable and safe." -argument-hint: "check | apply" +description: "Verify where this repository's skills live for skill-quality, the resolved skills_root, and explain how to change the personal skills_root option through Claude Code. Use when: 'set up skill-quality', 'configure skill-quality', or the checker reports a missing skills directory. Check-only: verifies, reports, and prints reconfiguration guidance; there is nothing setup may write here. Re-runnable and safe." +argument-hint: "check" user-invocable: true disable-model-invocation: true --- ## Purpose -Thin check-centric setup per the uniform setup contract (`docs/PLUGIN-PHILOSOPHY.md` -"Setup is explicit and repeatable" in the marketplace repository): `check` resolves and verifies the -skills root, `apply` resolves what it found. `skills_root` is a personal `userConfig` scalar owned by -Claude Code's native configuration surface. Claude Code prompts for it when the plugin is enabled, -stores non-sensitive options in user settings, and ignores project/local `pluginConfigs` entries on -current releases (≥ 2.1.207). This skill never writes it; `apply` verifies and routes. +Check-only setup under the Check-only carve-out (`docs/PLUGIN-PHILOSOPHY.md` "Setup is explicit +and repeatable" in the marketplace repository): this plugin's configuration surface contains no +writable artifact, so `check` resolves and verifies the skills root and prints the reconfiguration +guidance below, and no `apply` is offered because there is nothing it could conformingly write. +`skills_root` is a personal `userConfig` scalar owned by Claude Code's native configuration +surface. Claude Code prompts for it when the plugin is enabled, stores non-sensitive options in +user settings, and ignores project/local `pluginConfigs` entries on current releases (≥ 2.1.207). +This skill never writes it. Official contract (verified 2026-07-18): . -Action routing: no argument or `check` runs the check; `apply` runs the check first, then the -reconfiguration guidance. Both are non-interactive. Never prompt when the action is given. +Action routing: no argument or `check` runs the check. Non-interactive, never prompts. ## `check` (read-only) @@ -33,11 +34,11 @@ remediation per FAIL. Do not modify anything. directory and skill count; FAIL when it is absent or empty, with the resolution result in the remediation line. Never claim success for a missing directory. -## `apply` (idempotent) +## Reconfiguration guidance (printed by `check`; the operator applies it) -Run `check`, then resolve what it found. This skill has no legitimate write of its own. `skills_root` -lives in Claude Code's native config surface, which setup must not hand-edit, so `apply` is -verify-and-route: +This skill has no legitimate write of its own. `skills_root` lives in Claude Code's native config +surface, which setup must not hand-edit (Check-only carve-out, native `userConfig` class), so +`check` closes by routing rather than writing: - **Skills not found / wrong root (FAIL):** if the skills live somewhere other than the resolved root, the personal `skills_root` should point there. Reconfigure through the path below, then rerun `check`. @@ -60,7 +61,7 @@ After any reconfiguration, rerun `check` **in a fresh session** and verify by in `/skill-quality:check` via the Skill tool, without turning setup into the full quality audit. The fresh session is not optional: the rendered `${user_config.skills_root}` is injected when this skill loads, so a same-session rerun still resolves the OLD root and would report a correct write as a -failure. Re-running `apply` when the root resolves and enumerates changes nothing and reports +failure. Re-running `check` when the root resolves and enumerates changes nothing and reports "already configured". ## What this skill does NOT do diff --git a/plugins/skill-quality/skills/setup/evals/evals.json b/plugins/skill-quality/skills/setup/evals/evals.json index 9bb83518e..3c3581838 100644 --- a/plugins/skill-quality/skills/setup/evals/evals.json +++ b/plugins/skill-quality/skills/setup/evals/evals.json @@ -16,7 +16,7 @@ { "id": 2, "name": "non-default-location-routes-through-claude", - "prompt": "Our skills live under packages/agent/skills. /skill-quality:setup apply", + "prompt": "Our skills live under packages/agent/skills. /skill-quality:setup", "expected_output": "Verifies the non-default root non-interactively, routes the persistent skills_root change through Claude Code's plugin configuration prompt (headless: a plain claude plugin install ... --config skills_root= rerun, never an uninstall), optionally explains the one-run CHECK_SKILL_SKILLS_ROOT override, and never persists either mechanism itself.", "files": [], "expectations": [ From a6282f7a261d56877cc5dd92bed4af5376674b72 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Tue, 1 Sep 2026 12:14:43 -0400 Subject: [PATCH 2/6] refactor: own the plugin-reconfiguration paragraph in one convention spoke Phase 1d of the customization-consistency program. The ~120-200 word `--config` / verified-CLI-version reconfiguration paragraph was duplicated with drift across 28 setup skills. It now has one owner, the new docs/conventions/plugin-reconfiguration/README.md (two routes, the verified-version record, the three caveats every setup carries). Each of the 28 setups prints the canonical short form with its own plugin name and option-key example and cites the spoke by published URL as the owner of the verification record, so the `2.1.240` marker survives only in the spoke and a future re-verification is a one-file edit. 15 evals synced: clauses that demanded the literal version now expect the citation. Deliberate adaptations: miro/dometrain keep their sensitive-credential caution; discipline keeps its user-scope-only fact; bugs merged two check steps to avoid growing; actionlint's undocumented-flag gotcha now points at the spoke. Net -91 lines; no file grew. READMEs, claude-ops's plugins skill, and CHANGELOGs still carry the marker (out of 1d's setup-body scope; follow-up candidate). Gates: markdownlint clean (spoke + 28), all touched evals parse, skill-quality check-skill PASS on all 28. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_014uBXt1tMEReShbpG5gsFUd --- .../plugin-reconfiguration/README.md | 59 +++++++++++++++++++ plugins/actionlint/skills/setup/SKILL.md | 45 ++++++-------- .../actionlint/skills/setup/evals/evals.json | 4 +- plugins/ai-briefing/skills/setup/SKILL.md | 31 ++++------ plugins/bash-format/skills/setup/SKILL.md | 34 +++++------ .../bash-format/skills/setup/evals/evals.json | 4 +- plugins/biome-format/skills/setup/SKILL.md | 34 +++++------ .../skills/setup/evals/evals.json | 4 +- plugins/bugs/skills/setup/SKILL.md | 20 +++---- plugins/claude-ops/skills/setup/SKILL.md | 35 +++++------ plugins/context-budget/skills/setup/SKILL.md | 24 ++++---- .../skills/setup/evals/evals.json | 4 +- .../skills/setup/SKILL.md | 36 +++++------ .../skills/setup/evals/evals.json | 4 +- plugins/discipline/skills/setup/SKILL.md | 26 ++++---- plugins/disk-hygiene/skills/setup/SKILL.md | 32 +++++----- plugins/dometrain/skills/setup/SKILL.md | 18 +++--- plugins/education/skills/setup/SKILL.md | 20 +++---- plugins/eol-normalizer/skills/setup/SKILL.md | 32 +++++----- .../skills/setup/evals/evals.json | 4 +- plugins/go-format/skills/setup/SKILL.md | 32 +++++----- .../go-format/skills/setup/evals/evals.json | 4 +- plugins/guardrails/skills/setup/SKILL.md | 34 +++++------ .../guardrails/skills/setup/evals/evals.json | 4 +- plugins/knowledge/skills/setup/SKILL.md | 29 ++++----- .../knowledge/skills/setup/evals/evals.json | 2 +- plugins/machine-health/skills/setup/SKILL.md | 31 +++++----- plugins/markdown-format/skills/setup/SKILL.md | 32 +++++----- .../skills/setup/evals/evals.json | 4 +- plugins/miro/skills/setup/SKILL.md | 18 +++--- plugins/planning/skills/setup/SKILL.md | 31 +++++----- .../powershell-format/skills/setup/SKILL.md | 32 +++++----- .../skills/setup/evals/evals.json | 4 +- .../rate-limit-guard/skills/setup/SKILL.md | 34 +++++------ plugins/repo-hygiene/skills/setup/SKILL.md | 28 ++++----- .../skills/setup/evals/evals.json | 4 +- plugins/ruff-format/skills/setup/SKILL.md | 33 +++++------ .../ruff-format/skills/setup/evals/evals.json | 4 +- plugins/session-flow/skills/setup/SKILL.md | 41 +++++-------- plugins/skill-quality/skills/setup/SKILL.md | 22 +++---- .../skills/setup/evals/evals.json | 2 +- plugins/source-control/skills/setup/SKILL.md | 14 ++--- plugins/typos-format/skills/setup/SKILL.md | 33 +++++------ .../skills/setup/evals/evals.json | 4 +- 44 files changed, 457 insertions(+), 489 deletions(-) create mode 100644 docs/conventions/plugin-reconfiguration/README.md diff --git a/docs/conventions/plugin-reconfiguration/README.md b/docs/conventions/plugin-reconfiguration/README.md new file mode 100644 index 000000000..a78e57d46 --- /dev/null +++ b/docs/conventions/plugin-reconfiguration/README.md @@ -0,0 +1,59 @@ +# Plugin Reconfiguration Convention + +The single owned source for how a consumer changes a plugin's native `userConfig` options after +install — the guidance every setup skill used to restate (with drift) and now cites. Setup skills +print the short form and cite this doc; the version-verification record below lives ONLY here, so +a re-verification against a newer Claude Code release is a one-file edit. + +## Boundary + +This doc owns the **reconfiguration routes and their caveats** for options stored in Claude Code's +native plugin-configuration surface (`pluginConfigs`). Which options a plugin has, and what they +mean, belong to that plugin's own README Options reference. The rule that no setup skill ever +writes `pluginConfigs`, user settings, or the plugin cache is PLUGIN-PHILOSOPHY's (Setup is +explicit and repeatable); this doc restates it only as the reason both routes below are +consumer-run. + +## The two routes + +- **Interactive, any time:** `/plugin configure @`. +- **Headless:** rerun the install with the new value: + + ```shell + claude plugin install @ -s --config KEY=VALUE + ``` + + (`--config` repeatable per key.) Against an already-installed plugin it prints + `already installed` **and still writes the value** — the short-circuit is about the install, not + the config write. + +## Verified-version record + +The `already installed`-still-writes claim was verified on **Claude Code 2.1.240**: a +non-sensitive option at `user` scope — a non-default value written to an installed plugin, then +restored. Not covered: a `sensitive` option, and `project`/`local` scope. Re-verify before relying +on the claim outside the covered conditions, and update this section (only here) when a newer +release is verified. + +## Caveats every setup skill's short form carries + +1. **Never uninstall to reconfigure.** Uninstalling drops the plugin's entire stored + `pluginConfigs` entry, resetting every option in its README Options reference to its manifest + default — customized values are simply gone, with nothing left to read the old values from. +2. **Scope.** `-s` defaults to `user`; pass the scope `claude plugin list` reports for the plugin, + and run from that project's directory for a `project`/`local` scope, or the write lands at a + scope that does not load. +3. **Observation is next-session.** The rendered `${user_config.*}` is injected at skill load and + each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at session start, so + a same-session `check` still reports the OLD value — that is not a failed write. Verify the + effective value by rerunning the plugin's setup `check` in a **fresh session**, and never claim + an unobserved change. + +## The short form setups print + +A setup skill states, in its own words but without restating the verified-version record: the two +routes, the three caveats above, and a citation of this doc as the owner of the verification +record. Canonical citation (installed plugins cannot read this repository's working tree, so cite +the published URL): + + diff --git a/plugins/actionlint/skills/setup/SKILL.md b/plugins/actionlint/skills/setup/SKILL.md index a891146ee..2babc8dfe 100644 --- a/plugins/actionlint/skills/setup/SKILL.md +++ b/plugins/actionlint/skills/setup/SKILL.md @@ -61,28 +61,23 @@ Run `check`, then for each FAIL point at the resolution. This skill installs not - missing `actionlint`: platform install guidance from the README Requirements section (the [actionlint install guide](https://github.com/rhysd/actionlint/blob/main/docs/install.md)). - missing `jq` / Bash: platform install instructions from the README Requirements section. -- toggle off: direct to `/plugin configure actionlint` (interactive, any - time). Headless: rerun the install with the new value, +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive + `/plugin configure actionlint@` any time, or headless `claude plugin install actionlint@ -s --config actionlint_enabled=true` - (repeatable per key). The official docs document `--config` only as a `claude plugin install` - flag and say nothing about an already-installed plugin, so this rests on observation, not - documentation: against an already-installed plugin the command prints `already installed` - **and still writes the value**, verified on Claude Code 2.1.240 (a non-sensitive option at - `user` scope: a non-default value written to an installed plugin, then restored). The - short-circuit is about the install, not the config write. Re-verify before relying on it - outside those conditions. A `sensitive` option, or `project`/`local` scope, were not covered. - Do **not** uninstall to reconfigure: uninstalling drops this plugin's entire stored - `pluginConfigs` entry, resetting every option in the README's Options reference table to its - manifest default. `-s` defaults to `user`, so pass the scope `claude plugin list` reports for - this plugin (`user`, `project`, or `local`), and run from that project's directory for a - `project`/`local` scope, or the write lands at a scope that does not load. This skill never - writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + (repeatable per key) — against an already-installed plugin it prints `already installed` + **and still writes the value**. Do **not** uninstall to reconfigure: that drops this plugin's + entire stored `pluginConfigs` entry, resetting every option in the README's Options reference + to its manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports + for this plugin, and run from that project's directory for a `project`/`local` scope, or the + write lands at a scope that does not load. This skill never writes user settings or + `pluginConfigs`. Afterwards rerun `check` in a **fresh session** — the rendered + `${user_config.*}` is injected at skill load and each hook receives its + `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at session start, so a same-session + `check` still reports the OLD value; report the observed effective value, never an + unobserved change. After pointing at a remediation, re-run the relevant `check` probe and report its actual result. Never claim resolved on the reader's report that they installed something. @@ -99,11 +94,9 @@ Re-running `apply` after everything passes changes nothing and reports "already the shared lib should declare it too (claude-ops set the precedent). - **`--config`'s post-install behavior is undocumented, so the guidance above rests on observation.** The official docs describe `--config` only as a `claude plugin install` flag - and say nothing about an already-installed plugin. This skill's `apply` route is therefore - stamped rather than cited: on Claude Code 2.1.240 the command printed `already installed` - and still wrote the value, for a non-sensitive option at `user` scope. Re-verify if the CLI's - plugin surface changes, and do not extend the observation to a `sensitive` option or to - `project`/`local` scope. Neither was covered. + and say nothing about an already-installed plugin. The verified-version record — which CLI + release the still-writes claim was observed on, and which conditions it covered — lives only + in the plugin-reconfiguration convention cited in `apply` above. - **`-shellcheck=` / `-pyflakes=` are deliberate, and the deadlock claim is a local observation.** The hook disables actionlint's external run-block linters primarily for edit-time latency; the additional "ShellCheck deadlocks on large blocks under the Windows diff --git a/plugins/actionlint/skills/setup/evals/evals.json b/plugins/actionlint/skills/setup/evals/evals.json index ab2863534..62277ee2d 100644 --- a/plugins/actionlint/skills/setup/evals/evals.json +++ b/plugins/actionlint/skills/setup/evals/evals.json @@ -72,12 +72,12 @@ "id": 6, "name": "headless-toggle-change-reruns-install-never-uninstalls", "prompt": "/actionlint:setup apply — re-enable the hook headlessly by setting actionlint_enabled=true. I cannot use the interactive configure prompt from this session.", - "expected_output": "Routes the headless option change to a plain `claude plugin install actionlint@ -s --config actionlint_enabled=true` rerun against the already-installed plugin, refuses the uninstall-and-reinstall route, stamps the claim with the CLI version it was verified against, and closes by re-running the relevant check probe and reporting its actual result.", + "expected_output": "Routes the headless option change to a plain `claude plugin install actionlint@ -s --config actionlint_enabled=true` rerun against the already-installed plugin, refuses the uninstall-and-reinstall route, cites the plugin-reconfiguration convention as the owner of the verified-version record, and closes by re-running the relevant check probe in a fresh session and reporting its actual result.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install actionlint@ -s --config actionlint_enabled=true` rerun, and states that against an already-installed plugin it prints `already installed` and still writes the value", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option in the README Options reference table to its manifest default", - "Stamps the --config claim with the CLI version it was verified against — Claude Code 2.1.240, a non-sensitive option at user scope — and says the official docs describe --config only as an install-time flag, so the post-install behavior rests on observation, with a sensitive option and project/local scope not covered", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record for the --config-against-an-installed-plugin claim, rather than stamping a CLI version itself, and directs the operator to rerun check in a fresh session — the rendered value is injected at skill load, so a same-session check still reports the old value", "Tells the operator to pass the scope `claude plugin list` reports for this plugin (user, project, or local) and to run from that project's directory for a project or local scope, or the write lands at a scope that does not load", "Ends by re-running the relevant check probe and reporting its OBSERVED result, never claiming resolved on the reader's report that they changed the value" ] diff --git a/plugins/ai-briefing/skills/setup/SKILL.md b/plugins/ai-briefing/skills/setup/SKILL.md index fe420cb02..86d432016 100644 --- a/plugins/ai-briefing/skills/setup/SKILL.md +++ b/plugins/ai-briefing/skills/setup/SKILL.md @@ -55,24 +55,19 @@ anything. the configured value is wrong for this repository, also report the reconfiguration route: - **Interactive, any time:** `/plugin configure ai-briefing@`. The recommended route; this skill never writes `pluginConfigs`. - - **Headless:** rerun the install with the new value. `claude plugin install - ai-briefing@ -s --config active_profile=` (repeatable per key). - Against an already-installed plugin it prints `already installed` **and still writes the - value**. Verified on Claude Code 2.1.240 (a non-sensitive option at `user` scope: a - non-default value written to an installed plugin, then restored). The short-circuit is about - the install, not the config write. Re-verify before relying on it outside those conditions. - A `sensitive` option, or `project`/`local` scope, were not covered. Do **not** uninstall to - reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, resetting - every option in the README's Options reference table to its manifest default. `-s` defaults - to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from that - project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + - **Headless:** rerun the install with the new value, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): `claude plugin install ai-briefing@ + -s --config active_profile=` (repeatable per key) — against an + already-installed plugin it prints `already installed` **and still writes the value**. Do + **not** uninstall to reconfigure: that drops this plugin's entire stored `pluginConfigs` + entry, resetting every option in the README's Options reference to its manifest default. + `-s` defaults to `user`; pass the scope `claude plugin list` reports for this plugin, and + run from that project's directory for a `project`/`local` scope, or the write lands at a + scope that does not load. Afterwards rerun `check` in a **fresh session** — the rendered + `${user_config.*}` is injected at skill load, so a same-session `check` still reports the + OLD value; report the observed effective value, never an unobserved change. - **Neither, for a one-off:** a per-run `--profile ` selects a different profile without touching stored config. 2. **`sources.md`.** FAIL if the resolved profile has no `sources.md`: `/ai-briefing:generate` diff --git a/plugins/bash-format/skills/setup/SKILL.md b/plugins/bash-format/skills/setup/SKILL.md index 2c3a50a93..5a239957c 100644 --- a/plugins/bash-format/skills/setup/SKILL.md +++ b/plugins/bash-format/skills/setup/SKILL.md @@ -98,25 +98,23 @@ Run `check`, then for each FAIL point at the resolution. This skill installs not repo in. A bare `[*]` is not enough, but this skill does not write it. `.editorconfig` is cross-cutting (it governs every editor and tool in the repo), so the choice and the edit belong to the consumer. -- toggle off: direct to `/plugin configure bash-format` (interactive, any - time). Headless: rerun the install with the new value, +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive + `/plugin configure bash-format@` any time, or headless `claude plugin install bash-format@ -s --config bash_format_enabled=true` - (repeatable per key). Against an already-installed plugin it prints `already installed` **and - still writes the value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` - scope: a non-default value written to an installed plugin, then restored). The short-circuit is - about the install, not the config write. Re-verify before relying on it outside those - conditions. A `sensitive` option, or `project`/`local` scope, were not covered. Do **not** - uninstall to reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, - resetting every option in the README's Options reference table to its manifest default. `-s` - defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from - that project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + (repeatable per key) — against an already-installed plugin it prints `already installed` + **and still writes the value**. Do **not** uninstall to reconfigure: that drops this plugin's + entire stored `pluginConfigs` entry, resetting every option in the README's Options reference + to its manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports + for this plugin, and run from that project's directory for a `project`/`local` scope, or the + write lands at a scope that does not load. This skill never writes user settings or + `pluginConfigs`. Afterwards rerun `check` in a **fresh session** — the rendered + `${user_config.*}` is injected at skill load and each hook receives its + `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at session start, so a same-session + `check` still reports the OLD value; report the observed effective value, never an + unobserved change. After pointing at a remediation, re-run the relevant `check` probe and report its actual result. Never claim resolved on the reader's report that they installed something. diff --git a/plugins/bash-format/skills/setup/evals/evals.json b/plugins/bash-format/skills/setup/evals/evals.json index 0556c4c12..1fac57fe5 100644 --- a/plugins/bash-format/skills/setup/evals/evals.json +++ b/plugins/bash-format/skills/setup/evals/evals.json @@ -70,12 +70,12 @@ "id": 6, "name": "headless-toggle-off-reruns-install-never-uninstalls", "prompt": "/bash-format:setup apply\n\nI'm on a CI box with no interactive session — how do I turn the hook off?", - "expected_output": "Routes the headless change to a plain `claude plugin install bash-format@ -s --config bash_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (verified on Claude Code 2.1.240), explicitly rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", + "expected_output": "Routes the headless change to a plain `claude plugin install bash-format@ -s --config bash_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value, cites the plugin-reconfiguration convention as the owner of the verified-version record, explicitly rules out uninstalling to reconfigure, and ends by rerunning check in a fresh session and reporting the observed effective value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install … --config bash_format_enabled=false` rerun as the headless route, naming this plugin's own key and the false value the request asked for", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option to its manifest default", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record for the --config-against-an-installed-plugin claim, rather than stamping a CLI version itself, and directs the rerun of check to a fresh session because the rendered value is injected at skill load, so a same-session check still reports the old value", "Notes that -s defaults to user, so the scope `claude plugin list` reports must be passed and a project/local scope needs the command run from that project's directory, or the write lands at a scope that does not load", "Ends by rerunning check and reporting the OBSERVED effective toggle value rather than asserting the change took effect" ] diff --git a/plugins/biome-format/skills/setup/SKILL.md b/plugins/biome-format/skills/setup/SKILL.md index a71d08cfc..60e1c50a6 100644 --- a/plugins/biome-format/skills/setup/SKILL.md +++ b/plugins/biome-format/skills/setup/SKILL.md @@ -77,25 +77,23 @@ command's exit code alone. For everything else `apply` only points: - missing `jq` / Bash: platform install instructions from the README Requirements section; this skill never installs system packages. -- toggle off: direct to `/plugin configure biome-format` (interactive, any - time). Headless: rerun the install with the new value, +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive + `/plugin configure biome-format@` any time, or headless `claude plugin install biome-format@ -s --config biome_format_enabled=true` - (repeatable per key). Against an already-installed plugin it prints `already installed` **and - still writes the value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` - scope: a non-default value written to an installed plugin, then restored). The short-circuit is - about the install, not the config write. Re-verify before relying on it outside those - conditions. A `sensitive` option, or `project`/`local` scope, were not covered. Do **not** - uninstall to reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, - resetting every option in the README's Options reference table to its manifest default. `-s` - defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from - that project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + (repeatable per key) — against an already-installed plugin it prints `already installed` + **and still writes the value**. Do **not** uninstall to reconfigure: that drops this plugin's + entire stored `pluginConfigs` entry, resetting every option in the README's Options reference + to its manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports + for this plugin, and run from that project's directory for a `project`/`local` scope, or the + write lands at a scope that does not load. This skill never writes user settings or + `pluginConfigs`. Afterwards rerun `check` in a **fresh session** — the rendered + `${user_config.*}` is injected at skill load and each hook receives its + `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at session start, so a same-session + `check` still reports the OLD value; report the observed effective value, never an + unobserved change. - no Biome config: offer to create a minimal `biome.json` in the repository root only when explicitly asked. The plugin imposes no rules of its own. diff --git a/plugins/biome-format/skills/setup/evals/evals.json b/plugins/biome-format/skills/setup/evals/evals.json index 938d22eb1..fbfce72c0 100644 --- a/plugins/biome-format/skills/setup/evals/evals.json +++ b/plugins/biome-format/skills/setup/evals/evals.json @@ -70,12 +70,12 @@ "id": 6, "name": "headless-toggle-off-reruns-install-never-uninstalls", "prompt": "/biome-format:setup apply\n\nI'm on a CI box with no interactive session — how do I turn the hook off?", - "expected_output": "Routes the headless change to a plain `claude plugin install biome-format@ -s --config biome_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (verified on Claude Code 2.1.240), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", + "expected_output": "Routes the headless change to a plain `claude plugin install biome-format@ -s --config biome_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value, cites the plugin-reconfiguration convention as the owner of the verified-version record, rules out uninstalling to reconfigure, and ends by rerunning check in a fresh session and reporting the observed effective value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install … --config biome_format_enabled=false` rerun, naming this plugin's own key and the false value the request asked for", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option to its manifest default", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record for the --config-against-an-installed-plugin claim, rather than stamping a CLI version itself, and directs the rerun of check to a fresh session because the rendered value is injected at skill load, so a same-session check still reports the old value", "Notes that -s defaults to user, so the scope `claude plugin list` reports must be passed and a project/local scope needs the command run from that project's directory", "Ends by rerunning check and reporting the OBSERVED effective toggle value rather than asserting the change took effect" ] diff --git a/plugins/bugs/skills/setup/SKILL.md b/plugins/bugs/skills/setup/SKILL.md index 9de368c50..375eff493 100644 --- a/plugins/bugs/skills/setup/SKILL.md +++ b/plugins/bugs/skills/setup/SKILL.md @@ -51,16 +51,16 @@ Modify nothing. Report both surfaces, then one remediation line per gap. repository option, inspect the consumer's `CLAUDE.md`, `AGENTS.md`, and existing report or artifact directories and recommend one portable location. Never recommend a machine-absolute team path. -4. If the recommended value differs from the effective one, direct the user to Claude Code's - plugin configuration prompt for `bugs` (interactive `/plugin configure bugs@` any - time; headless, rerun `claude plugin install bugs@ -s --config - output_dir=`. Against an already-installed plugin it prints `already installed` and - still writes the value, verified on Claude Code 2.1.240 for a non-sensitive option at `user` - scope. Never uninstall to reconfigure: that drops the whole stored `pluginConfigs` entry and - resets every option to its manifest default). Claude Code owns persistence. Do not hand-edit - any `pluginConfigs` key. -5. Tell the user to rerun `check` after reconfiguration, in a fresh session, since the rendered - value is injected at load, then verify and report the effective destination. +4. If the recommended value differs, reconfigure through Claude Code's native flow per the marketplace's + plugin-reconfiguration convention, which owns the verified-version record: interactive + `/plugin configure bugs@` any time, or headless `claude plugin install bugs@ + -s --config output_dir=` — it prints `already installed` and still writes the value. + Never uninstall to reconfigure: that drops the whole stored `pluginConfigs` entry, resetting every + option to its manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, + from that project's directory for a `project`/`local` scope, or the write lands at a scope that does + not load. Rerun `check` in a **fresh session** (the rendered value is injected at skill load, so a + same-session `check` still reports the OLD value), then report the observed destination. Convention: + . ### B. `.claude/bugs.md` (tracked lane config) diff --git a/plugins/claude-ops/skills/setup/SKILL.md b/plugins/claude-ops/skills/setup/SKILL.md index 3a6a1922d..f846923c4 100644 --- a/plugins/claude-ops/skills/setup/SKILL.md +++ b/plugins/claude-ops/skills/setup/SKILL.md @@ -66,28 +66,21 @@ writing: (default `${CLAUDE_PLUGIN_DATA}`); if repository-resident, recommend a portable contained path, inspecting the consumer's declared artifact conventions. Same for `skill_usage_dir` (default `.claude/observability`). State the tradeoff and let the reader pick. Do not prompt. -- **Reconfiguring a personal option:** `/plugin configure claude-ops@` (interactive, any - time). Headless: rerun the install with the new value: - `claude plugin install claude-ops@ -s --config KEY=VALUE …` (repeatable per - key). Against an already-installed plugin it prints `already installed` **and still writes the - value**. Verified on Claude Code 2.1.240 (a non-sensitive option at `user` scope: a non-default - value written to an installed plugin, then restored). The short-circuit is about the install, not - the config write. Re-verify before relying on it outside those conditions, a `sensitive` option, - or `project`/`local` scope, were not covered. Do **not** uninstall to reconfigure: uninstalling +- **Reconfiguring a personal option:** through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure claude-ops@` + any time, or headless `claude plugin install claude-ops@ -s --config + registry_dir=` (repeatable per key) — against an already-installed plugin it prints + `already installed` **and still writes the value**. Do **not** uninstall to reconfigure: that drops this plugin's entire stored `pluginConfigs` entry, resetting every option in the README's - Options reference table to its manifest default. All fifteen, so the eight `*_audit_enabled` - toggles come back on and `registry_dir`, `skill_usage_dir`, `skill_usage_scope`, - `skill_usage_git_exclude`, `install_new`, `instructions_loaded_audit_log_session_start`, and - `stdin_read_timeout` all revert. `-s` defaults to `user`, so pass the scope `claude plugin list` - reports for this plugin, and run from that project's directory for a `project`/`local` scope, or - the write lands at a scope that does not load. This skill never writes user settings or - `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + Options reference (the audit toggles included) to its manifest default. `-s` defaults to `user`; + pass the scope `claude plugin list` reports for this plugin, and run from that project's directory + for a `project`/`local` scope, or the write lands at a scope that does not load. This skill never + writes user settings or `pluginConfigs`. Afterwards rerun `check` in a **fresh session** — the + rendered `${user_config.*}` is injected at skill load and each hook receives its + `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at session start, so a same-session `check` + still reports the OLD value; report the observed effective value, never an unobserved change. After any reconfiguration, rerun `check` in a **fresh session** and report both observed effective destinations, never claim an unobserved change, and never read a same-session `check` still showing diff --git a/plugins/context-budget/skills/setup/SKILL.md b/plugins/context-budget/skills/setup/SKILL.md index dfbf206f8..cf7f96885 100644 --- a/plugins/context-budget/skills/setup/SKILL.md +++ b/plugins/context-budget/skills/setup/SKILL.md @@ -78,21 +78,21 @@ writing. Re-running it after everything passes changes nothing and reports "alre mkdir -p "${CLAUDE_PLUGIN_DATA}/sdk" && npm install --prefix "${CLAUDE_PLUGIN_DATA}/sdk" @anthropic-ai/claude-agent-sdk ``` -- **Toggle off (or on):** direct to `/plugin configure context-budget@` (interactive, - any time). Headless: rerun the install with the new value: +- **Toggle off (or on):** reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive + `/plugin configure context-budget@` any time, or headless `claude plugin install context-budget@ -s --config settings_write_ask_enabled=true` - (repeatable per key). Against an already-installed plugin it - prints `already installed` **and still writes the value**, verified on Claude Code 2.1.240 (a - non-sensitive option at `user` scope: a non-default value written to an installed plugin, then - restored). The short-circuit is about the install, not the config write. Re-verify before relying - on it outside those conditions. A `sensitive` option, or `project`/`local` scope, were not - covered. Do **not** uninstall to reconfigure: uninstalling drops this plugin's entire stored - `pluginConfigs` entry, resetting every option in the README's Options reference table to its - manifest default. `-s` defaults to `user`, so pass the scope `claude plugin list` reports for this + (repeatable per key) — against an already-installed plugin it prints `already installed` **and + still writes the value**. Do **not** uninstall to reconfigure: that drops this plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports for this plugin, and run from that project's directory for a `project`/`local` scope, or the write lands at a scope that does not load. This skill never writes user settings or `pluginConfigs`. Afterwards - rerun `check` **in a fresh session**. The rendered token is injected at skill load. Report - the observed effective value; never claim an unobserved change. + rerun `check` in a **fresh session** — the rendered token is injected at skill load, so a + same-session `check` still reports the OLD value; report the observed effective value, never an + unobserved change. ## What this skill does NOT do diff --git a/plugins/context-budget/skills/setup/evals/evals.json b/plugins/context-budget/skills/setup/evals/evals.json index a563af1b2..30a3c3bc7 100644 --- a/plugins/context-budget/skills/setup/evals/evals.json +++ b/plugins/context-budget/skills/setup/evals/evals.json @@ -72,12 +72,12 @@ "id": 6, "name": "headless-toggle-change-reruns-install-never-uninstalls", "prompt": "/context-budget:setup — I want settings_write_ask_enabled set to false, headless. I cannot use the interactive configure prompt from this session.", - "expected_output": "Routes the headless option change to a plain `claude plugin install context-budget@ -s --config settings_write_ask_enabled=false` rerun against the already-installed plugin, refuses the uninstall-and-reinstall route, stamps the claim with the CLI version it was verified against, and closes by rerunning check in a fresh session to report the observed value.", + "expected_output": "Routes the headless option change to a plain `claude plugin install context-budget@ -s --config settings_write_ask_enabled=false` rerun against the already-installed plugin, refuses the uninstall-and-reinstall route, cites the plugin-reconfiguration convention as the owner of the verified-version record, and closes by rerunning check in a fresh session to report the observed value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install context-budget@ -s --config settings_write_ask_enabled=false` rerun, and states that against an already-installed plugin it prints `already installed` and still writes the value", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option in the README Options reference table to its manifest default", - "Stamps the --config claim with the CLI version it was verified against — Claude Code 2.1.240, a non-sensitive option at user scope — and flags a sensitive option and project/local scope as not covered", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record for the --config-against-an-installed-plugin claim, rather than stamping a CLI version or its verification conditions itself", "Tells the operator to pass the scope `claude plugin list` reports for this plugin instead of relying on the -s default of user, and to run from that project's directory for a project or local scope", "Ends by rerunning check in a FRESH session, because the rendered user_config token is injected at skill load, and reports the OBSERVED effective value rather than asserting an unobserved change" ] diff --git a/plugins/desktop-notification/skills/setup/SKILL.md b/plugins/desktop-notification/skills/setup/SKILL.md index 9095abe83..36ab7ae68 100644 --- a/plugins/desktop-notification/skills/setup/SKILL.md +++ b/plugins/desktop-notification/skills/setup/SKILL.md @@ -70,26 +70,22 @@ nothing and writes nothing, so every remediation is a pointer the user acts on: - **missing `notify-send`** (Linux, `os_toast` enabled). `sudo apt install libnotify-bin` (Debian/Ubuntu) or `sudo dnf install libnotify` (Fedora), per the README's per-OS table. Guidance only. The user runs it. -- **a toggle is off**. Direct to `/plugin configure desktop-notification` (interactive, - any time). Headless: rerun the install with the new value. - `claude plugin install desktop-notification@ -s --config =true`. - Against an already-installed plugin it prints `already installed` **and still writes the value**. - Verified on Claude Code 2.1.240 (a non-sensitive option at `user` scope: a non-default value - written to an installed plugin, then restored). The short-circuit is about the install, not the - config write. Re-verify before relying on it outside those conditions. A `sensitive` option, or - `project`/`local` scope, were not covered. Do **not** uninstall to reconfigure: uninstalling - drops this plugin's entire stored `pluginConfigs` entry, resetting every option in the README's - Options reference table to its manifest default, not only the toggle being flipped. `-s` - defaults to `user`, so pass the install scope `claude plugin list` reports for this plugin, and - run from that project's directory for a `project`/`local` scope, or the write lands at a scope - that does not load. These options are personal `userConfig` values, so this skill never writes - user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. +- **a toggle is off**. Reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention, which owns the verified-version record + (): + interactive `/plugin configure desktop-notification` any time, or headless + `claude plugin install desktop-notification@ -s --config =true` + (repeatable per key) — against an already-installed plugin it prints `already installed` **and + still writes the value**. Do **not** uninstall to reconfigure: uninstalling drops this plugin's + entire stored `pluginConfigs` entry, resetting every option in the README's Options reference + to its manifest default. `-s` defaults to `user`; pass the install scope `claude plugin list` + reports for this plugin, and run from that project's directory for a `project`/`local` scope, + or the write lands at a scope that does not load. These options are personal `userConfig` + values, so this skill never writes user settings or `pluginConfigs`. Afterwards rerun `check` + in a **fresh session** — the rendered `${user_config.*}` is injected at skill load and each + hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at session start, so a + same-session `check` still reports the OLD value; report the observed effective value, never an + unobserved change. After the user reports acting on any system-tool remediation, re-run the relevant `check` probe and report its actual result. Never claim resolved on the user's say-so alone. diff --git a/plugins/desktop-notification/skills/setup/evals/evals.json b/plugins/desktop-notification/skills/setup/evals/evals.json index e998f70c1..f79471c55 100644 --- a/plugins/desktop-notification/skills/setup/evals/evals.json +++ b/plugins/desktop-notification/skills/setup/evals/evals.json @@ -70,12 +70,12 @@ "id": 6, "name": "headless-channel-toggle-reruns-install-never-uninstalls", "prompt": "/desktop-notification:setup apply\n\nI'm on a CI box with no interactive session — how do I turn the hook off?", - "expected_output": "Routes the headless change to a plain `claude plugin install desktop-notification@ -s --config desktop_notification_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (verified on Claude Code 2.1.240), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective values.", + "expected_output": "Routes the headless change to a plain `claude plugin install desktop-notification@ -s --config desktop_notification_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (per the marketplace's plugin-reconfiguration convention), rules out uninstalling to reconfigure, and ends by rerunning check in a fresh session and reporting the observed effective values.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install … --config desktop_notification_enabled=false` rerun, naming the master key rather than a generic placeholder, and notes the flag is repeatable for the three per-channel keys", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting all four toggles to their manifest defaults rather than only the one being flipped", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record for the --config-against-an-installed-plugin claim (no CLI version restated), and requires the check rerun to happen in a fresh session because a same-session check still reports the OLD value", "Notes that -s defaults to user, so the install scope `claude plugin list` reports must be passed and a project/local scope needs the command run from that project's directory", "Ends by rerunning check and reporting the OBSERVED effective toggle values rather than asserting the change took effect" ] diff --git a/plugins/discipline/skills/setup/SKILL.md b/plugins/discipline/skills/setup/SKILL.md index fb55b0f46..6ee39f8c0 100644 --- a/plugins/discipline/skills/setup/SKILL.md +++ b/plugins/discipline/skills/setup/SKILL.md @@ -72,19 +72,19 @@ Official contract: ` any time; - headless, rerun `claude plugin install discipline@ -s user --config - =` (repeatable per key). Against an already-installed plugin it prints - `already installed` and still writes the value, verified on Claude Code 2.1.240 for a - non-sensitive option at `user` scope, which is the only scope whose `pluginConfigs` - these options load from (see above). Never uninstall to reconfigure: that drops the - whole stored `pluginConfigs` entry and resets every option to its manifest default). - Claude Code owns persistence. Do not hand-edit any `pluginConfigs` key. -8. Tell the user to rerun `check` after reconfiguration. **in a fresh session**. The rendered - `${user_config.*}` values are injected when this skill loads, so a same-session rerun still - reports the OLD values; reading that as a failed write would be wrong. Report the OBSERVED - effective values from that fresh run, and never claim a change no rerun has observed. +7. To change or clear any value, direct the user to Claude Code's native flow, per the + marketplace's plugin-reconfiguration convention, which owns the verified-version record + (): + interactive `/plugin configure discipline@` any time; headless, rerun + `claude plugin install discipline@ -s user --config =` (repeatable + per key) — against an already-installed plugin it prints `already installed` and still writes + the value. Never uninstall to reconfigure: that drops the whole stored `pluginConfigs` entry, + resetting every option to its manifest default. `-s` defaults to `user`, the only scope whose + `pluginConfigs` these options load from (see above). Claude Code owns persistence. Do not + hand-edit any `pluginConfigs` key. +8. Tell the user to rerun `check` after reconfiguration **in a fresh session**: the rendered + `${user_config.*}` values are injected when this skill loads, so a same-session rerun still reports + the OLD values. Report the OBSERVED effective values from that fresh run, never an unobserved change. ## Gotchas diff --git a/plugins/disk-hygiene/skills/setup/SKILL.md b/plugins/disk-hygiene/skills/setup/SKILL.md index 67cacd03a..b0adfaf79 100644 --- a/plugins/disk-hygiene/skills/setup/SKILL.md +++ b/plugins/disk-hygiene/skills/setup/SKILL.md @@ -162,25 +162,21 @@ tool or an OS capability, so `apply` installs nothing and writes nothing, it onl - missing/old Python: the platform's own install channel for the floor `check` parsed from the engine's `MIN_PYTHON`; never a plugin download. - missing git (worktree targets): platform install instructions. -- toggle off: direct to `/plugin configure disk-hygiene` (interactive, any time). - Headless: rerun the install with the new value: +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention, which owns the verified-version record + (): + interactive `/plugin configure disk-hygiene` any time, or headless `claude plugin install disk-hygiene@ -s --config disk_hygiene_enabled=true` - (repeatable per key). Against an already-installed plugin it prints `already installed` **and - still writes the value**. Verified on Claude Code 2.1.240 (a non-sensitive option at `user` - scope: a non-default value written to an installed plugin, then restored). The short-circuit is - about the install, not the config write. Re-verify before relying on it outside those - conditions, a `sensitive` option, or `project`/`local` scope, were not covered. Do **not** - uninstall to reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, - resetting every option in the README's Options reference table to its manifest default. `-s` - defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from - that project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value, reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + (repeatable per key) — against an already-installed plugin it prints `already installed` **and + still writes the value**. Do **not** uninstall to reconfigure: uninstalling drops this plugin's + entire stored `pluginConfigs` entry, resetting every option in the README's Options reference + to its manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports + for this plugin, and run from that project's directory for a `project`/`local` scope, or the + write lands at a scope that does not load. This skill never writes user settings or + `pluginConfigs`. Afterwards rerun `check` in a **fresh session** — the rendered + `${user_config.*}` is injected at skill load and each hook receives its + `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at session start, so a same-session `check` + still reports the OLD value; report the observed effective value, never an unobserved change. Re-running `apply` after everything passes changes nothing and reports "already configured". diff --git a/plugins/dometrain/skills/setup/SKILL.md b/plugins/dometrain/skills/setup/SKILL.md index 8f1142b68..8bb4547ad 100644 --- a/plugins/dometrain/skills/setup/SKILL.md +++ b/plugins/dometrain/skills/setup/SKILL.md @@ -91,15 +91,15 @@ successful and delivers no tools. time) is the recommended rotation path regardless. It masks input, where a key passed on the command line lands in shell history and the process table. -The older claim that `--config` is ignored once the plugin is installed was never -version-stamped, and on Claude Code 2.1.240 a plain `claude plugin install … --config` was -observed to write the value of an already-installed plugin for a **non-sensitive** option at -`user` scope. Whether that holds for a `sensitive` option such as `dometrain_api_key` has not -been verified, so do not rely on it for a credential. Do **not** uninstall to rotate either: -uninstalling drops this plugin's entire stored `pluginConfigs` entry, resetting every option in -the README's Options reference table to its manifest default, and it can drop the -`enabledPlugins` entry as well. A `defaultEnabled: false` plugin reinstalls DISABLED, so a -rotation that ends at `install` completes with no tools available. +Headless `--config` reruns follow the plugin-reconfiguration convention, which owns the verified-version record +(): +against an already-installed plugin a plain `claude plugin install … --config` prints +`already installed` and still writes the value, but that record covers only a **non-sensitive** +option, and whether it holds for a `sensitive` option such as `dometrain_api_key` has not been +verified, so do not rely on it for a credential. Do **not** uninstall to rotate either: uninstalling +drops this plugin's entire stored `pluginConfigs` entry, resetting every option in the README's Options +reference to its manifest default, and it can drop the `enabledPlugins` entry as well. A +`defaultEnabled: false` plugin reinstalls DISABLED, so a rotation that ends at `install` completes with no tools available. Full detail, including the command-line-exposure caveat, is in the README's [Rotating or clearing the key](../../README.md#rotating-or-clearing-the-key) section. diff --git a/plugins/education/skills/setup/SKILL.md b/plugins/education/skills/setup/SKILL.md index 85328f57a..60ab75035 100644 --- a/plugins/education/skills/setup/SKILL.md +++ b/plugins/education/skills/setup/SKILL.md @@ -55,16 +55,16 @@ Official contract: ` any time; - headless, rerun `claude plugin install education@ -s --config - quiz_policy=`. Against an already-installed plugin it prints `already installed` and - still writes the value, verified on Claude Code 2.1.240 for a non-sensitive option at `user` - scope. Never uninstall to reconfigure: that drops the whole stored `pluginConfigs` entry and - resets every option to its manifest default). Claude Code owns persistence. Do not hand-edit - any `pluginConfigs` key. -7. Tell the user to rerun `check` after reconfiguration, in a fresh session, since the rendered - values are injected at load, then verify and report the effective settings. +6. To adopt a recommended value, reconfigure through Claude Code's native flow per the plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure education@` any time; + headless, rerun `claude plugin install education@ -s --config quiz_policy=` + (repeatable per key) — against an already-installed plugin it prints `already installed` and still writes the + value. Never uninstall to reconfigure: that drops the whole stored `pluginConfigs` entry, resetting every + option to its manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run + `project`/`local` writes from that project's directory, or they land at a scope that does not load. +7. Tell the user to rerun `check` after reconfiguration in a **fresh session** — rendered values are injected at + skill load, so a same-session rerun still reports the OLD values — then report the observed effective settings. ## Output diff --git a/plugins/eol-normalizer/skills/setup/SKILL.md b/plugins/eol-normalizer/skills/setup/SKILL.md index 05038db63..c8964b372 100644 --- a/plugins/eol-normalizer/skills/setup/SKILL.md +++ b/plugins/eol-normalizer/skills/setup/SKILL.md @@ -66,25 +66,21 @@ tool, so `apply` installs nothing and writes nothing. It only points: - missing `jq` / Bash / git: platform install instructions from the README Requirements section; this skill never installs system packages. -- toggle off: direct to `/plugin configure eol-normalizer` (interactive, any - time). Headless: rerun the install with the new value, +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention, which owns the verified-version record + (): + interactive `/plugin configure eol-normalizer` any time, or headless `claude plugin install eol-normalizer@ -s --config eol_normalizer_enabled=true` - (repeatable per key). Against an already-installed plugin it prints `already installed` **and - still writes the value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` - scope: a non-default value written to an installed plugin, then restored). The short-circuit is - about the install, not the config write. Re-verify before relying on it outside those - conditions. A `sensitive` option, or `project`/`local` scope, were not covered. Do **not** - uninstall to reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, - resetting every option in the README's Options reference table to its manifest default. `-s` - defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from - that project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + (repeatable per key) — against an already-installed plugin it prints `already installed` **and + still writes the value**. Do **not** uninstall to reconfigure: uninstalling drops this plugin's + entire stored `pluginConfigs` entry, resetting every option in the README's Options reference + to its manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports + for this plugin, and run from that project's directory for a `project`/`local` scope, or the + write lands at a scope that does not load. This skill never writes user settings or + `pluginConfigs`. Afterwards rerun `check` in a **fresh session** — the rendered + `${user_config.*}` is injected at skill load and each hook receives its + `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at session start, so a same-session `check` + still reports the OLD value; report the observed effective value, never an unobserved change. - no `eol=` policy: this is the opt-out, not a defect. Point at the repository's own `.gitattributes` as the place to declare policy; this skill never writes `.gitattributes`, because that would impose a repo-wide line-ending policy the plugin has no mandate to diff --git a/plugins/eol-normalizer/skills/setup/evals/evals.json b/plugins/eol-normalizer/skills/setup/evals/evals.json index cb7cdaf99..1c22529e8 100644 --- a/plugins/eol-normalizer/skills/setup/evals/evals.json +++ b/plugins/eol-normalizer/skills/setup/evals/evals.json @@ -70,12 +70,12 @@ "id": 6, "name": "headless-toggle-off-reruns-install-never-uninstalls", "prompt": "/eol-normalizer:setup apply\n\nI'm on a CI box with no interactive session — how do I turn the hook off?", - "expected_output": "Routes the headless change to a plain `claude plugin install eol-normalizer@ -s --config eol_normalizer_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (verified on Claude Code 2.1.240), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", + "expected_output": "Routes the headless change to a plain `claude plugin install eol-normalizer@ -s --config eol_normalizer_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (per the marketplace's plugin-reconfiguration convention), rules out uninstalling to reconfigure, and ends by rerunning check in a fresh session and reporting the observed effective value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install … --config eol_normalizer_enabled=false` rerun, naming this plugin's own key and the false value the request asked for", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option to its manifest default", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record for the --config-against-an-installed-plugin claim (no CLI version restated), and requires the check rerun to happen in a fresh session because a same-session check still reports the OLD value", "Notes that -s defaults to user, so the scope `claude plugin list` reports must be passed and a project/local scope needs the command run from that project's directory", "Ends by rerunning check and reporting the OBSERVED effective toggle value rather than asserting the change took effect" ] diff --git a/plugins/go-format/skills/setup/SKILL.md b/plugins/go-format/skills/setup/SKILL.md index 4ee5dee51..aa5097ac7 100644 --- a/plugins/go-format/skills/setup/SKILL.md +++ b/plugins/go-format/skills/setup/SKILL.md @@ -65,25 +65,21 @@ result. Never claim resolved without re-verifying. For everything else `apply` o toolchain: https://go.dev/dl/). - missing `jq` / Bash: platform install instructions from the README Requirements section; this skill never installs system packages. -- toggle off: direct to `/plugin configure go-format` (interactive, any - time). Headless: rerun the install with the new value, +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention, which owns the verified-version record + (): + interactive `/plugin configure go-format` any time, or headless `claude plugin install go-format@ -s --config go_format_enabled=true` - (repeatable per key). Against an already-installed plugin it prints `already installed` **and - still writes the value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` - scope: a non-default value written to an installed plugin, then restored). The short-circuit is - about the install, not the config write. Re-verify before relying on it outside those - conditions. A `sensitive` option, or `project`/`local` scope, were not covered. Do **not** - uninstall to reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, - resetting every option in the README's Options reference table to its manifest default. `-s` - defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from - that project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + (repeatable per key) — against an already-installed plugin it prints `already installed` **and + still writes the value**. Do **not** uninstall to reconfigure: uninstalling drops this plugin's + entire stored `pluginConfigs` entry, resetting every option in the README's Options reference + to its manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports + for this plugin, and run from that project's directory for a `project`/`local` scope, or the + write lands at a scope that does not load. This skill never writes user settings or + `pluginConfigs`. Afterwards rerun `check` in a **fresh session** — the rendered + `${user_config.*}` is injected at skill load and each hook receives its + `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at session start, so a same-session `check` + still reports the OLD value; report the observed effective value, never an unobserved change. Re-running `apply` after everything passes changes nothing and reports "already configured". diff --git a/plugins/go-format/skills/setup/evals/evals.json b/plugins/go-format/skills/setup/evals/evals.json index ffc7ec708..70f48125c 100644 --- a/plugins/go-format/skills/setup/evals/evals.json +++ b/plugins/go-format/skills/setup/evals/evals.json @@ -57,12 +57,12 @@ "id": 5, "name": "headless-toggle-off-reruns-install-never-uninstalls", "prompt": "/go-format:setup apply\n\nI'm on a CI box with no interactive session — how do I turn the hook off?", - "expected_output": "Routes the headless change to a plain `claude plugin install go-format@ -s --config go_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (verified on Claude Code 2.1.240), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", + "expected_output": "Routes the headless change to a plain `claude plugin install go-format@ -s --config go_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (per the marketplace's plugin-reconfiguration convention), rules out uninstalling to reconfigure, and ends by rerunning check in a fresh session and reporting the observed effective value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install … --config go_format_enabled=false` rerun, naming this plugin's own key and the false value the request asked for", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option to its manifest default", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record for the --config-against-an-installed-plugin claim (no CLI version restated), and requires the check rerun to happen in a fresh session because a same-session check still reports the OLD value", "Notes that -s defaults to user, so the scope `claude plugin list` reports must be passed and a project/local scope needs the command run from that project's directory", "Ends by rerunning check and reporting the OBSERVED effective toggle value rather than asserting the change took effect" ] diff --git a/plugins/guardrails/skills/setup/SKILL.md b/plugins/guardrails/skills/setup/SKILL.md index 2e216347c..ad585adf5 100644 --- a/plugins/guardrails/skills/setup/SKILL.md +++ b/plugins/guardrails/skills/setup/SKILL.md @@ -54,26 +54,20 @@ nothing. It only points: - missing `jq` / old Bash: platform install instructions from the README Requirements section; this skill never installs system packages. -- any toggle or scalar change: direct to `/plugin configure guardrails` (interactive, any - time). Headless: rerun the install with the new value. - `claude plugin install guardrails@ -s --config KEY=VALUE …` (repeatable per - key). Against an already-installed plugin it prints `already installed` **and still writes the - value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` scope: a non-default - value written to an installed plugin, then restored). The short-circuit is about the install, not - the config write. Re-verify before relying on it outside those conditions. A `sensitive` option, - or `project`/`local` scope, were not covered. Do **not** uninstall to reconfigure: uninstalling - drops this plugin's entire stored `pluginConfigs` entry, resetting every option in the README's - Options reference table to its manifest default. Every guard the operator had turned off comes - back on, and every `*_allow`, `*_bins`, and `*_prefixes` list is discarded. `-s` defaults to - `user`, so pass the scope `claude plugin list` reports for this plugin, and run from that - project's directory for a `project`/`local` scope, or the write lands at a scope that does not - load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. +- any toggle or scalar change: reconfigure through Claude Code's native flow, per the + marketplace's plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure guardrails@` + any time, or headless `claude plugin install guardrails@ -s --config KEY=VALUE` + (repeatable per key) — against an already-installed plugin it prints `already installed` and + still writes the value. Do **not** uninstall to reconfigure: that drops the plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run + from that project's directory for a `project`/`local` scope, or the write lands at a scope that + does not load. This skill never writes user settings or `pluginConfigs`. Afterwards rerun + `check` in a **fresh session** — the rendered `${user_config.*}` and each hook's + `CLAUDE_PLUGIN_OPTION_*` are fixed at session start, so a same-session `check` still reports + the OLD value; report the observed effective value, never an unobserved change. Re-running `apply` after everything passes changes nothing and reports "already configured". diff --git a/plugins/guardrails/skills/setup/evals/evals.json b/plugins/guardrails/skills/setup/evals/evals.json index 028a171c6..9c734f935 100644 --- a/plugins/guardrails/skills/setup/evals/evals.json +++ b/plugins/guardrails/skills/setup/evals/evals.json @@ -22,8 +22,8 @@ "expectations": [ "Runs check before offering remediations", "Points at /plugin configure, or headless at a plain `claude plugin install guardrails@ -s --config KEY=VALUE` rerun, for toggle changes", - "Never tells the operator to `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, turning every disabled guard back on and discarding every *_allow / *_bins / *_prefixes list", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope", + "Never tells the operator to `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option in the README's Options reference to its manifest default", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record, states the scope rule (`-s` defaults to `user`; pass the scope `claude plugin list` reports), and defers observation of the new value to rerunning check in a fresh session", "Never installs system packages and never writes user settings or pluginConfigs" ] }, diff --git a/plugins/knowledge/skills/setup/SKILL.md b/plugins/knowledge/skills/setup/SKILL.md index f6241acd4..d4ccd59e1 100644 --- a/plugins/knowledge/skills/setup/SKILL.md +++ b/plugins/knowledge/skills/setup/SKILL.md @@ -60,22 +60,19 @@ Run `check`, then resolve each finding. Re-running after everything passes chang reports "already configured". 1. **`library_dir` mismatch. Guidance only.** `library_dir` is a personal `userConfig` scalar; - never hand-edit `pluginConfigs` or write Claude Code settings. Direct the user to - `/plugin configure knowledge` (interactive, any time). Headless: rerun the install with the new - value. `claude plugin install knowledge@ -s --config library_dir=`. - Against an already-installed plugin it prints `already installed` **and still writes the value** -Verified on Claude Code 2.1.240 (a non-sensitive option at `user` scope: a non-default value - written to an installed plugin, then restored). The short-circuit is about the install, not the - config write. Re-verify before relying on it outside those conditions, a `sensitive` option, or - `project`/`local` scope, were not covered. Do **not** uninstall to reconfigure: uninstalling - drops this plugin's entire stored `pluginConfigs` entry, resetting every option in the README's - Options reference table to its manifest default, which can break extraction on a machine that - needed non-default acquisition or `yt-dlp` values. `-s` defaults to `user`, so pass the scope - `claude plugin list` reports for this plugin, and run from that project's directory for a - `project`/`local` scope, or the write lands at a scope that does not load. - The rendered value is injected at skill load, - so a change takes effect in a fresh session. Report the observed value and defer verification - to that fresh session; do not claim a change this session. + never hand-edit `pluginConfigs` or write Claude Code settings. Reconfigure through Claude + Code's native flow, per the marketplace's plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure knowledge@` + any time, or headless `claude plugin install knowledge@ -s --config library_dir=` + (repeatable per key) — against an already-installed plugin it prints `already installed` and + still writes the value. Do **not** uninstall to reconfigure: that drops the plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run + from that project's directory for a `project`/`local` scope, or the write lands at a scope that + does not load. Afterwards rerun `check` in a **fresh session** — the rendered + `${user_config.*}` is injected at skill load, so a same-session check still reports the OLD + value; report the observed effective value, never an unobserved change. For a root outside the project and home directories, recommend the portable value forms from the README's option table (`~` prefix or `${NAME}` / `%NAME%` env-var reference) instead of a literal machine path, which guardrail hardcoded-path checks rightly block. diff --git a/plugins/knowledge/skills/setup/evals/evals.json b/plugins/knowledge/skills/setup/evals/evals.json index 205cda18d..0399d459f 100644 --- a/plugins/knowledge/skills/setup/evals/evals.json +++ b/plugins/knowledge/skills/setup/evals/evals.json @@ -20,7 +20,7 @@ "expected_output": "Routes the fix to Claude Code's own configuration surface — /plugin configure knowledge interactively, or headless a plain claude plugin install ... --config library_dir= rerun at the scope claude plugin list reports — and rules out uninstalling to reconfigure; it never hand-edits pluginConfigs or Claude Code settings, and defers verification of the new value to a fresh session.", "expectations": [ "Does not write library_dir into any settings or pluginConfigs file", - "Headless path is a plain `claude plugin install ... --config` rerun against the already-installed plugin, carrying the CLI version the claim was verified on — the literal 2.1.240 — and scoping it to a non-sensitive option at user scope", + "Headless path is a plain `claude plugin install ... --config` rerun against the already-installed plugin, citing the marketplace's plugin-reconfiguration convention as the owner of the verified-version record and stating the scope rule (`-s` defaults to `user`; pass the scope `claude plugin list` reports)", "Never prescribes `claude plugin uninstall` as the way to reconfigure, and gives the reason: uninstalling drops the whole stored pluginConfigs entry, resetting every option to its manifest default", "Recommends a portable value form (~ prefix or env-var reference) over a literal machine path", "Does not claim the changed value is in effect this session" diff --git a/plugins/machine-health/skills/setup/SKILL.md b/plugins/machine-health/skills/setup/SKILL.md index 0a357417a..180e7aa89 100644 --- a/plugins/machine-health/skills/setup/SKILL.md +++ b/plugins/machine-health/skills/setup/SKILL.md @@ -125,24 +125,21 @@ give, rather than writing a dangling entry. `${CLAUDE_PLUGIN_ROOT}/skills/audit/references/windows/remediation-policy.md`; on an explicit yes, write the approval per `${CLAUDE_PLUGIN_ROOT}/skills/audit/references/shared/approvals.md`. Never enable a remediation the user did not explicitly approve. 6. **Confirm the report directory.** Show where reports land (the `report_dir` plugin option when - set, else `$env:USERPROFILE\Documents\MachineHealth`); to change it, direct the user to - `/plugin configure machine-health@` (interactive, any time). The option is stored in plugin - config, not the overlay. Headless: rerun the install with the new value, - `claude plugin install machine-health@ -s --config report_dir=`. - Against an already-installed plugin it prints `already installed` and still writes the value, - verified on Claude Code 2.1.240 for a non-sensitive option at `user` scope; a `sensitive` - option, and `project`/`local` scope, were not covered, so re-verify before relying on it there. - Do **not** uninstall to reconfigure: that drops this plugin's entire stored `pluginConfigs` - entry, resetting every option in the README's Options reference table to its manifest default. - `-s` defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run + set, else `$env:USERPROFILE\Documents\MachineHealth`). The option is stored in plugin config, + not the overlay; reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure machine-health@` + any time, or headless `claude plugin install machine-health@ -s --config report_dir=` + (repeatable per key) — against an already-installed plugin it prints `already installed` and + still writes the value. Do **not** uninstall to reconfigure: that drops the plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run from that project's directory for a `project`/`local` scope, or the write lands at a scope that - does not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + does not load. This skill never writes user settings or `pluginConfigs`. Afterwards rerun + `check` in a **fresh session** — the rendered `${user_config.*}` and each hook's + `CLAUDE_PLUGIN_OPTION_*` are fixed at session start, so a same-session `check` still reports + the OLD value; report the observed effective value, never an unobserved change. Re-running `apply` after everything is already set changes nothing and reports "already configured". diff --git a/plugins/markdown-format/skills/setup/SKILL.md b/plugins/markdown-format/skills/setup/SKILL.md index b677ea14f..c8845121a 100644 --- a/plugins/markdown-format/skills/setup/SKILL.md +++ b/plugins/markdown-format/skills/setup/SKILL.md @@ -95,25 +95,21 @@ install command's exit code alone. For everything else `apply` only points: - missing `jq` / Bash: platform install instructions from the README Requirements section; this skill never installs system packages. -- toggle off: direct to `/plugin configure markdown-format` (interactive, any - time). Headless: rerun the install with the new value, +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure markdown-format@` + any time, or headless `claude plugin install markdown-format@ -s --config markdown_format_enabled=true` - (repeatable per key). Against an already-installed plugin it prints `already installed` **and - still writes the value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` - scope: a non-default value written to an installed plugin, then restored). The short-circuit is - about the install, not the config write. Re-verify before relying on it outside those - conditions. A `sensitive` option, or `project`/`local` scope, were not covered. Do **not** - uninstall to reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, - resetting every option in the README's Options reference table to its manifest default. `-s` - defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from - that project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + (repeatable per key) — against an already-installed plugin it prints `already installed` and + still writes the value. Do **not** uninstall to reconfigure: that drops the plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run + from that project's directory for a `project`/`local` scope, or the write lands at a scope that + does not load. This skill never writes user settings or `pluginConfigs`. Afterwards rerun + `check` in a **fresh session** — the rendered `${user_config.*}` and the hook's + `CLAUDE_PLUGIN_OPTION_*` are fixed at session start, so a same-session `check` still reports + the OLD value; report the observed effective value, never an unobserved change. - no markdownlint config: this is why the hook does nothing here, so lead with it rather than leaving it as a footnote under the passing prerequisites. Then offer to create a minimal `.markdownlint-cli2.jsonc` in the repository root only when explicitly asked. diff --git a/plugins/markdown-format/skills/setup/evals/evals.json b/plugins/markdown-format/skills/setup/evals/evals.json index 58f72baf3..1158b1e1d 100644 --- a/plugins/markdown-format/skills/setup/evals/evals.json +++ b/plugins/markdown-format/skills/setup/evals/evals.json @@ -70,12 +70,12 @@ "id": 6, "name": "headless-toggle-off-reruns-install-never-uninstalls", "prompt": "/markdown-format:setup apply\n\nI'm on a CI box with no interactive session — how do I turn the hook off?", - "expected_output": "Routes the headless change to a plain `claude plugin install markdown-format@ -s --config markdown_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (verified on Claude Code 2.1.240), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", + "expected_output": "Routes the headless change to a plain `claude plugin install markdown-format@ -s --config markdown_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (citing the marketplace's plugin-reconfiguration convention as the owner of the verified-version record), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install … --config markdown_format_enabled=false` rerun, naming this plugin's own key and the false value the request asked for, and notes the flag is repeatable for the second key markdown_format_lint_gitignored", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option including the gitignored-lint key to its manifest default", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record for the --config-against-an-installed-plugin claim, rather than stating a CLI version inline", "Notes that -s defaults to user, so the scope `claude plugin list` reports must be passed and a project/local scope needs the command run from that project's directory", "Ends by rerunning check and reporting the OBSERVED effective toggle value rather than asserting the change took effect" ] diff --git a/plugins/miro/skills/setup/SKILL.md b/plugins/miro/skills/setup/SKILL.md index fe6a399db..10fc8837a 100644 --- a/plugins/miro/skills/setup/SKILL.md +++ b/plugins/miro/skills/setup/SKILL.md @@ -77,15 +77,15 @@ successful and delivers no tools. time) is the recommended rotation path regardless. It masks input, unlike anything passed on the command line (see the security note below). -The older claim here, that `--config` is ignored once the plugin is installed, was never -version-stamped, and on Claude Code 2.1.240 a plain `claude plugin install … --config` was -observed to write the value of an already-installed plugin for a **non-sensitive** option at -`user` scope. Whether that holds for a `sensitive` option such as `miro_api_token` has not been -verified, so do not rely on it for a credential. Do **not** uninstall to rotate either: -uninstalling drops this plugin's entire stored `pluginConfigs` entry, resetting every option in -the README's Options reference table to its manifest default, and it can drop the -`enabledPlugins` entry as well. A `defaultEnabled: false` plugin reinstalls DISABLED, so a -rotation that ends at `install` completes with no tools available. +Per the marketplace's plugin-reconfiguration convention +(, +which owns the verified-version record), a headless `claude plugin install … --config` rerun +against an already-installed plugin prints `already installed` and still writes the value — but +that record covers only a non-sensitive option, so do not rely on it for a `sensitive` credential +such as `miro_api_token`. Do **not** uninstall to rotate either: uninstalling drops this +plugin's entire stored `pluginConfigs` entry, resetting every option in the README's Options +reference to its manifest default, and it can drop the `enabledPlugins` entry as well; a +`defaultEnabled: false` plugin reinstalls DISABLED, so a rotation ending at `install` delivers no tools. **Security note:** passing the token as a CLI argument records it in shell history (`.bash_history`, `.zsh_history`) and briefly exposes it in the process table diff --git a/plugins/planning/skills/setup/SKILL.md b/plugins/planning/skills/setup/SKILL.md index a1d2c2b50..f0e446fb6 100644 --- a/plugins/planning/skills/setup/SKILL.md +++ b/plugins/planning/skills/setup/SKILL.md @@ -128,23 +128,20 @@ implement it by reference, do not restate it. Plugin-side notes only: `use_ask_user_question` is a native `userConfig` boolean (default `false`) governing whether the pipeline skills' question rounds render through `AskUserQuestion` or as inline prose. It is not a -consumer-project file this skill writes. To change it, direct the user to `/plugin configure planning@` -(interactive, any time). Headless: rerun the install with the new value using -`claude plugin install planning@ -s --config use_ask_user_question=true`. Against -an already-installed plugin it prints `already installed` and still writes the value, verified on -Claude Code 2.1.240 for a non-sensitive option at `user` scope; a `sensitive` option, and -`project`/`local` scope, were not covered, so re-verify before relying on it there. Do **not** -uninstall to reconfigure: that drops this plugin's entire stored `pluginConfigs` entry, resetting every -option in the README's Options reference table to its manifest default. `-s` defaults to `user`, so -pass the scope `claude plugin list` reports for this plugin, and run from that project's directory for -a `project`/`local` scope, or the write lands at a scope that does not load. This skill never writes -Claude Code user settings or `pluginConfigs`. -Afterwards, keep the two claims apart. The write is issued and the stored value is what you -passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at -skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at -session start, so a same-session `check` still reports the OLD value. Reporting that as a failed -write would be wrong. Verify the effective value by rerunning `check` in a **fresh session**, and -never claim an unobserved change. +consumer-project file this skill writes. Reconfigure through Claude Code's native flow, per the +marketplace's plugin-reconfiguration convention +(, +which owns the verified-version record): interactive `/plugin configure planning@` any +time, or headless `claude plugin install planning@ -s --config use_ask_user_question=true` +(repeatable per key) — against an already-installed plugin it prints `already installed` and still +writes the value. Do **not** uninstall to reconfigure: that drops the plugin's entire stored +`pluginConfigs` entry, resetting every option in the README's Options reference to its manifest +default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run from that +project's directory for a `project`/`local` scope, or the write lands at a scope that does not load. +This skill never writes Claude Code user settings or `pluginConfigs`. Afterwards rerun `check` in a +**fresh session** — the rendered `${user_config.*}` and each hook's `CLAUDE_PLUGIN_OPTION_*` are +fixed at session start, so a same-session `check` still reports the OLD value; report the observed +effective value, never an unobserved change. ### Verify after remediation diff --git a/plugins/powershell-format/skills/setup/SKILL.md b/plugins/powershell-format/skills/setup/SKILL.md index 3d2849a73..7b08c95a4 100644 --- a/plugins/powershell-format/skills/setup/SKILL.md +++ b/plugins/powershell-format/skills/setup/SKILL.md @@ -85,25 +85,21 @@ Run `check`, then for each finding point at the resolution. This skill installs settings file at or below the project root opts the repo in, but this skill does not write it. The settings file is the executed-adjacent trust boundary above; the choice and the edit belong to the consumer. -- toggle off: direct to `/plugin configure powershell-format` (interactive, any - time). Headless: rerun the install with the new value, +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure powershell-format@` + any time, or headless `claude plugin install powershell-format@ -s --config powershell_format_enabled=true` - (repeatable per key). Against an already-installed plugin it prints `already installed` **and - still writes the value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` - scope: a non-default value written to an installed plugin, then restored). The short-circuit is - about the install, not the config write. Re-verify before relying on it outside those - conditions. A `sensitive` option, or `project`/`local` scope, were not covered. Do **not** - uninstall to reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, - resetting every option in the README's Options reference table to its manifest default. `-s` - defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from - that project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + (repeatable per key) — against an already-installed plugin it prints `already installed` and + still writes the value. Do **not** uninstall to reconfigure: that drops the plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run + from that project's directory for a `project`/`local` scope, or the write lands at a scope that + does not load. This skill never writes user settings or `pluginConfigs`. Afterwards rerun + `check` in a **fresh session** — the rendered `${user_config.*}` and the hook's + `CLAUDE_PLUGIN_OPTION_*` are fixed at session start, so a same-session `check` still reports + the OLD value; report the observed effective value, never an unobserved change. After pointing at a remediation, re-run the relevant `check` probe and report its actual result. Never claim resolved on the reader's report that they installed something. diff --git a/plugins/powershell-format/skills/setup/evals/evals.json b/plugins/powershell-format/skills/setup/evals/evals.json index 4bba5e3e9..7bd695e22 100644 --- a/plugins/powershell-format/skills/setup/evals/evals.json +++ b/plugins/powershell-format/skills/setup/evals/evals.json @@ -71,12 +71,12 @@ "id": 6, "name": "headless-toggle-off-reruns-install-never-uninstalls", "prompt": "/powershell-format:setup apply\n\nI'm on a CI box with no interactive session — how do I turn the hook off?", - "expected_output": "Routes the headless change to a plain `claude plugin install powershell-format@ -s --config powershell_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (verified on Claude Code 2.1.240), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", + "expected_output": "Routes the headless change to a plain `claude plugin install powershell-format@ -s --config powershell_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (citing the marketplace's plugin-reconfiguration convention as the owner of the verified-version record), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install … --config powershell_format_enabled=false` rerun, naming this plugin's own key and the false value the request asked for", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option to its manifest default", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record for the --config-against-an-installed-plugin claim, rather than stating a CLI version inline", "Notes that -s defaults to user, so the scope `claude plugin list` reports must be passed and a project/local scope needs the command run from that project's directory", "Ends by rerunning check and reporting the OBSERVED effective toggle value — noting that any value other than true disables the hook — rather than asserting the change took effect" ] diff --git a/plugins/rate-limit-guard/skills/setup/SKILL.md b/plugins/rate-limit-guard/skills/setup/SKILL.md index 4cf389a83..32ed7f304 100644 --- a/plugins/rate-limit-guard/skills/setup/SKILL.md +++ b/plugins/rate-limit-guard/skills/setup/SKILL.md @@ -12,25 +12,21 @@ conformingly write: - **A system tool** (`jq`). `check` probes it; installing it is the operator's. - **One native `userConfig` toggle** (`rate_limit_guard_enabled`), whose only stored home is the - `pluginConfigs` setup must never write. Reconfiguration routes through Claude Code's native flow: - `/plugin configure rate-limit-guard@` interactively, any time. Headless, rerun the - install with the new value. `claude plugin install rate-limit-guard@ -s - --config rate_limit_guard_enabled=`. Against an already-installed plugin it prints - `already installed` **and still writes the value**, verified on Claude Code 2.1.240 (a - non-sensitive option at `user` scope: a non-default value written to an installed plugin, then - restored). The short-circuit is about the install, not the config write. Re-verify before relying - on it outside those conditions. A `sensitive` option, or `project`/`local` scope, were not - covered. Do **not** uninstall to reconfigure: uninstalling drops this plugin's entire stored - `pluginConfigs` entry, resetting every option in the README's Options reference table to its - manifest default. `-s` defaults to `user`, so pass the scope the plugin is *actually* installed - at. `claude plugin list` reports it per plugin. Run from that project's directory when the - scope is `project` or `local`, or the write lands at a scope that does not load. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. + `pluginConfigs` setup must never write. Reconfigure through Claude Code's native flow, per the + marketplace's plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure + rate-limit-guard@` any time, or headless `claude plugin install + rate-limit-guard@ -s --config rate_limit_guard_enabled=` (repeatable + per key) — against an already-installed plugin it prints `already installed` and still writes + the value. Do **not** uninstall to reconfigure: that drops this plugin's entire stored + `pluginConfigs` entry, resetting every option in the README's Options reference to its manifest + default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run from that + project's directory for a `project`/`local` scope, or the write lands at a scope that does not + load. Afterwards rerun `check` in a **fresh session** — the rendered `${user_config.*}` is + injected at skill load and each hook's `CLAUDE_PLUGIN_OPTION_*` is fixed at session start, so a + same-session `check` still reports the OLD value; report the observed effective value, never an + unobserved change. - **The statusline wiring**, which lives in the **user's own** `settings.json`, neither `userConfig` nor tracked project config, and a Claude Code settings surface setup must never mutate. diff --git a/plugins/repo-hygiene/skills/setup/SKILL.md b/plugins/repo-hygiene/skills/setup/SKILL.md index 9d02fd276..9ae1c7886 100644 --- a/plugins/repo-hygiene/skills/setup/SKILL.md +++ b/plugins/repo-hygiene/skills/setup/SKILL.md @@ -73,20 +73,20 @@ after everything passes changes nothing and reports "already configured": - **Missing `ghq` and fleet actions wanted:** install it (), or keep using `--repo` / `--repos-from` and say so. This is a convenience, not a blocker. - **Missing Git Bash on Windows:** install Git for Windows; nothing in this plugin runs without it. -- **Toggle off (or on):** direct to `/plugin configure repo-hygiene@` (interactive, any - time). Headless: rerun the install with the new value: `claude plugin install repo-hygiene@ -s --config clean_destructive_guard_enabled=true` - (repeatable per key). Against an already-installed plugin it - prints `already installed` **and still writes the value**. Verified on Claude Code 2.1.240 (a - non-sensitive option at `user` scope: a non-default value written to an installed plugin, then - restored). The short-circuit is about the install, not the config write. Re-verify before relying - on it outside those conditions, a `sensitive` option, or `project`/`local` scope, were not - covered. Do **not** uninstall to reconfigure: uninstalling drops this plugin's entire stored - `pluginConfigs` entry, resetting every option in the README's Options reference table to its - manifest default. `-s` defaults to `user`, so pass the scope `claude plugin list` reports for this - plugin, and run from that project's directory for a `project`/`local` scope, or the write lands at - a scope that does not load. This skill never writes user settings or `pluginConfigs`. Afterwards - rerun `check` **in a fresh session**, the rendered token is injected at skill load, and report - the observed effective toggle value; never claim an unobserved change. +- **Toggle off (or on):** reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure repo-hygiene@` + any time, or headless `claude plugin install repo-hygiene@ -s --config clean_destructive_guard_enabled=true` + (repeatable per key) — against an already-installed plugin it prints `already installed` and + still writes the value. Do **not** uninstall to reconfigure: that drops this plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run + from that project's directory for a `project`/`local` scope, or the write lands at a scope that + does not load. This skill never writes user settings or `pluginConfigs`. Afterwards rerun + `check` in a **fresh session** — the rendered token is injected at skill load, so a same-session + `check` still reports the OLD value; report the observed effective toggle value, never an + unobserved change. ## What this skill does NOT do diff --git a/plugins/repo-hygiene/skills/setup/evals/evals.json b/plugins/repo-hygiene/skills/setup/evals/evals.json index 14b61292d..0d4884833 100644 --- a/plugins/repo-hygiene/skills/setup/evals/evals.json +++ b/plugins/repo-hygiene/skills/setup/evals/evals.json @@ -71,12 +71,12 @@ "id": 6, "name": "headless-toggle-change-reruns-install-never-uninstalls", "prompt": "/repo-hygiene:setup — turn clean_destructive_guard_enabled back on headlessly. I cannot use the interactive configure prompt from this session.", - "expected_output": "Routes the headless option change to a plain `claude plugin install repo-hygiene@ -s --config clean_destructive_guard_enabled=true` rerun against the already-installed plugin, refuses the uninstall-and-reinstall route, stamps the claim with the CLI version it was verified against, and closes by rerunning check in a fresh session to report the observed toggle value.", + "expected_output": "Routes the headless option change to a plain `claude plugin install repo-hygiene@ -s --config clean_destructive_guard_enabled=true` rerun against the already-installed plugin, refuses the uninstall-and-reinstall route, cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record, and closes by rerunning check in a fresh session to report the observed toggle value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install repo-hygiene@ -s --config clean_destructive_guard_enabled=true` rerun, and states that against an already-installed plugin it prints `already installed` and still writes the value", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option in the README Options reference table to its manifest default", - "Stamps the --config claim with the CLI version it was verified against — Claude Code 2.1.240, a non-sensitive option at user scope — and flags a sensitive option and project/local scope as not covered", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the --config claim's verified-version record, rather than stamping a CLI version or verification conditions itself", "Tells the operator to pass the scope `claude plugin list` reports for this plugin instead of relying on the -s default of user, and to run from that project's directory for a project or local scope or the write lands at a scope that does not load", "Ends by rerunning check in a FRESH session, because the rendered user_config token is injected at skill load, and reports the OBSERVED effective toggle value rather than asserting an unobserved change" ] diff --git a/plugins/ruff-format/skills/setup/SKILL.md b/plugins/ruff-format/skills/setup/SKILL.md index 724fd6f75..67367d5f4 100644 --- a/plugins/ruff-format/skills/setup/SKILL.md +++ b/plugins/ruff-format/skills/setup/SKILL.md @@ -98,25 +98,20 @@ only points: - missing `jq` / Bash: platform install instructions from the README Requirements section; this skill never installs system packages. -- toggle off: direct to `/plugin configure ruff-format` (interactive, any - time). Headless: rerun the install with the new value, - `claude plugin install ruff-format@ -s --config ruff_format_enabled=true` - (repeatable per key). Against an already-installed plugin it prints `already installed` **and - still writes the value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` - scope: a non-default value written to an installed plugin, then restored). The short-circuit is - about the install, not the config write. Re-verify before relying on it outside those - conditions. A `sensitive` option, or `project`/`local` scope, were not covered. Do **not** - uninstall to reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, - resetting every option in the README's Options reference table to its manifest default. `-s` - defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from - that project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure ruff-format@` + any time, or headless `claude plugin install ruff-format@ -s --config ruff_format_enabled=true` + (repeatable per key) — against an already-installed plugin it prints `already installed` and + still writes the value. Do **not** uninstall to reconfigure: that drops this plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run + from that project's directory for a `project`/`local` scope, or the write lands at a scope that + does not load. This skill never writes user settings or `pluginConfigs`. Afterwards rerun + `check` in a **fresh session** — the rendered `${user_config.*}` is injected at skill load and + each hook's `CLAUDE_PLUGIN_OPTION_*` is fixed at session start, so a same-session `check` still + reports the OLD value; report the observed effective value, never an unobserved change. - no Ruff config: offer to create a minimal Ruff config in the repository root only when explicitly asked. The plugin imposes no rules of its own. diff --git a/plugins/ruff-format/skills/setup/evals/evals.json b/plugins/ruff-format/skills/setup/evals/evals.json index 8b795f626..42bc37182 100644 --- a/plugins/ruff-format/skills/setup/evals/evals.json +++ b/plugins/ruff-format/skills/setup/evals/evals.json @@ -72,12 +72,12 @@ "id": 6, "name": "headless-toggle-off-reruns-install-never-uninstalls", "prompt": "/ruff-format:setup apply\n\nI'm on a CI box with no interactive session — how do I turn the hook off?", - "expected_output": "Routes the headless change to a plain `claude plugin install ruff-format@ -s --config ruff_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (verified on Claude Code 2.1.240), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", + "expected_output": "Routes the headless change to a plain `claude plugin install ruff-format@ -s --config ruff_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (citing the plugin-reconfiguration convention as the owner of the verified-version record), rules out uninstalling to reconfigure, and ends by rerunning check in a fresh session and reporting the observed effective value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install … --config ruff_format_enabled=false` rerun, naming this plugin's own key and the false value the request asked for", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting every option to its manifest default", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope, noting a sensitive option and project/local scope were not covered", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the --config-against-an-installed-plugin claim's verified-version record rather than stamping a CLI version or verification conditions itself, and requires the check rerun to happen in a FRESH session because the rendered user_config token is injected at skill load", "Notes that -s defaults to user, so the scope `claude plugin list` reports must be passed and a project/local scope needs the command run from that project's directory", "Ends by rerunning check and reporting the OBSERVED effective toggle value rather than asserting the change took effect" ] diff --git a/plugins/session-flow/skills/setup/SKILL.md b/plugins/session-flow/skills/setup/SKILL.md index 00f06d57a..4a9dfc05b 100644 --- a/plugins/session-flow/skills/setup/SKILL.md +++ b/plugins/session-flow/skills/setup/SKILL.md @@ -61,33 +61,20 @@ No write path. For each FAIL, `check` closes by offering the remediation: instal tool, or route observer reconfiguration through Claude Code's native flow. Do not write the plugin cache, Claude Code user settings, or `pluginConfigs`. -Reconfiguring the observer's `userConfig` keys has exactly two routes, and both work on an already -installed plugin: - -- **Interactive, any time:** `/plugin configure session-flow@`. -- **Headless:** rerun the install with the new value. Run - `claude plugin install session-flow@ -s --config =` (repeatable - per key). Against an already-installed plugin it prints `already installed` **and still writes the - value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` scope: a non-default - value written to an installed plugin, then restored). The short-circuit is about the install, not - the config write. Re-verify before relying on it outside those conditions. A `sensitive` option, - or `project`/`local` scope, were not covered. - - `-s` defaults to `user`. Pass the scope the plugin is *actually* installed at, - `claude plugin list` reports it per plugin, and run from that project's directory when the scope - is `project` or `local`, or the write lands at a scope that does not load. - - Do **not** uninstall to reconfigure. Uninstalling drops the stored `pluginConfigs` entry outright, - so every option in the README's Options reference table falls back to its manifest default. - A customized `observer_analysis_model`, `observer_idle_seconds`, `observer_analysis_bare`, or - `observer_max_seconds` is simply gone, with nothing left to read the old values from. - -Afterwards, keep the two claims apart. The write is issued and the stored value is what you -passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at -skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at -session start, so a same-session `check` still reports the OLD value. Reporting that as a failed -write would be wrong. Verify the effective value by rerunning `check` in a **fresh session**, and -never claim an unobserved change. +Reconfigure the observer's `userConfig` keys through Claude Code's native flow, per the +marketplace's plugin-reconfiguration convention +(, +which owns the verified-version record): interactive `/plugin configure session-flow@` +any time, or headless `claude plugin install session-flow@ -s --config =` +(repeatable per key) — against an already-installed plugin it prints `already installed` and still +writes the value. Do **not** uninstall to reconfigure: that drops the stored `pluginConfigs` entry +outright, resetting every option in the README's Options reference to its manifest default, with +nothing left to read the old values from. `-s` defaults to `user`; pass the scope +`claude plugin list` reports, and run from that project's directory for a `project`/`local` scope, +or the write lands at a scope that does not load. Afterwards rerun `check` in a **fresh session** — +the rendered `${user_config.*}` is injected at skill load and each hook's `CLAUDE_PLUGIN_OPTION_*` +is fixed at session start, so a same-session `check` still reports the OLD value; report the +observed effective value, never an unobserved change. ## Gotchas diff --git a/plugins/skill-quality/skills/setup/SKILL.md b/plugins/skill-quality/skills/setup/SKILL.md index 716028a35..92a2115ac 100644 --- a/plugins/skill-quality/skills/setup/SKILL.md +++ b/plugins/skill-quality/skills/setup/SKILL.md @@ -42,17 +42,17 @@ surface, which setup must not hand-edit (Check-only carve-out, native `userConfi - **Skills not found / wrong root (FAIL):** if the skills live somewhere other than the resolved root, the personal `skills_root` should point there. Reconfigure through the path below, then rerun `check`. -- **Reconfiguring the personal option:** `/plugin configure skill-quality@` (interactive, any time). - Headless: rerun the install with the new value. - `claude plugin install skill-quality@ -s --config skills_root=`. Against - an already-installed plugin it prints `already installed` and still writes the value, verified on - Claude Code 2.1.240 for a non-sensitive option at `user` scope; a `sensitive` option, and - `project`/`local` scope, were not covered, so re-verify before relying on it there. Do **not** - uninstall to reconfigure: that drops this plugin's entire stored `pluginConfigs` entry, resetting - every option in the README's Options reference table to its manifest default. `-s` defaults to - `user`, so pass the scope `claude plugin list` reports for this plugin, and run from that - project's directory for a `project`/`local` scope, or the write lands at a scope that does not - load. This skill never writes user settings or `pluginConfigs`. +- **Reconfiguring the personal option:** through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure skill-quality@` + any time, or headless `claude plugin install skill-quality@ -s --config skills_root=` + (repeatable per key) — against an already-installed plugin it prints `already installed` and + still writes the value. Do **not** uninstall to reconfigure: that drops this plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run + from that project's directory for a `project`/`local` scope, or the write lands at a scope that + does not load. This skill never writes user settings or `pluginConfigs`. - **One-run override (no persistence):** for a single run against a different root, the checker also honors the `CHECK_SKILL_SKILLS_ROOT` environment variable; do not persist that variable on the user's behalf. diff --git a/plugins/skill-quality/skills/setup/evals/evals.json b/plugins/skill-quality/skills/setup/evals/evals.json index 3c3581838..2d2633afc 100644 --- a/plugins/skill-quality/skills/setup/evals/evals.json +++ b/plugins/skill-quality/skills/setup/evals/evals.json @@ -22,7 +22,7 @@ "expectations": [ "Verifies the named non-default root without an interactive confirmation gate", "Routes persistent configuration through Claude Code", - "Gives the headless route as a plain `claude plugin install ... --config skills_root=` rerun against the already-installed plugin, carrying the CLI version the claim was verified on — the literal 2.1.240", + "Gives the headless route as a plain `claude plugin install ... --config skills_root=` rerun against the already-installed plugin (passing the scope `claude plugin list` reports), cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record, and verifies by rerunning check in a fresh session to report the observed effective root", "Never prescribes `claude plugin uninstall` as the way to reconfigure, and gives the reason: uninstalling drops the whole stored pluginConfigs entry", "Does not edit settings or persist the environment override" ] diff --git a/plugins/source-control/skills/setup/SKILL.md b/plugins/source-control/skills/setup/SKILL.md index 491aa5ad6..f7e299565 100644 --- a/plugins/source-control/skills/setup/SKILL.md +++ b/plugins/source-control/skills/setup/SKILL.md @@ -258,14 +258,12 @@ sanctioned paths: `claude plugin install source-control@ -s --config KEY=VALUE` (repeatable per key). Multi-value keys (`babysit_watched_owners`, `babysit_self_logins`, `babysit_review_bot_logins`, `babysit_extra_bot_logins`) are supplied comma-joined. Against an - already-installed plugin it prints `already installed` **and still writes the value**, verified - on Claude Code 2.1.240 (a non-sensitive option at `user` scope: a non-default value written to - an installed plugin, then restored). The short-circuit is about the install, not the config - write. Re-verify before relying on it outside those conditions. A `sensitive` option, or - `project`/`local` scope, were not covered. Do **not** uninstall to reconfigure: uninstalling - drops this plugin's entire stored `pluginConfigs` entry, resetting every option in the README's - Options reference table to its manifest default: the babysit fleet's owners, logins, tiers, - caps, and worktree roots all revert. `-s` defaults to `user`, so pass the scope + already-installed plugin it prints `already installed` **and still writes the value** (per the + marketplace's plugin-reconfiguration convention, + , + which owns the verified-version record). Do **not** uninstall to reconfigure: uninstalling drops + this plugin's entire stored `pluginConfigs` entry, resetting every option in the README's + Options reference to its manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports for this plugin, and run from that project's directory for a `project`/`local` scope, or the write lands at a scope that does not load. diff --git a/plugins/typos-format/skills/setup/SKILL.md b/plugins/typos-format/skills/setup/SKILL.md index 6a236fea3..daf287f2b 100644 --- a/plugins/typos-format/skills/setup/SKILL.md +++ b/plugins/typos-format/skills/setup/SKILL.md @@ -78,25 +78,20 @@ Never claim resolved without re-verifying. For everything else `apply` only poin - missing `jq` / Bash: platform install instructions from the README Requirements section; this skill never installs system packages. -- toggle off: direct to `/plugin configure typos-format` (interactive, any - time). Headless: rerun the install with the new value, - `claude plugin install typos-format@ -s --config typos_format_enabled=true` - (repeatable per key). Against an already-installed plugin it prints `already installed` **and - still writes the value**, verified on Claude Code 2.1.240 (a non-sensitive option at `user` - scope: a non-default value written to an installed plugin, then restored). The short-circuit is - about the install, not the config write. Re-verify before relying on it outside those - conditions. A `sensitive` option, or `project`/`local` scope, were not covered. Do **not** - uninstall to reconfigure: uninstalling drops this plugin's entire stored `pluginConfigs` entry, - resetting every option in the README's Options reference table to its manifest default. `-s` - defaults to `user`, so pass the scope `claude plugin list` reports for this plugin, and run from - that project's directory for a `project`/`local` scope, or the write lands at a scope that does - not load. This skill never writes user settings or `pluginConfigs`. - Afterwards, keep the two claims apart. The write is issued and the stored value is what you - passed; the RUNNING session's behavior is not. The rendered `${user_config.*}` is injected at - skill load and each hook receives its `CLAUDE_PLUGIN_OPTION_*` from an environment fixed at - session start, so a same-session `check` still reports the OLD value. Reporting that as a - failed write would be wrong. Verify the effective value by rerunning `check` in a **fresh - session**, and never claim an unobserved change. +- toggle off: reconfigure through Claude Code's native flow, per the marketplace's + plugin-reconfiguration convention + (, + which owns the verified-version record): interactive `/plugin configure typos-format@` + any time, or headless `claude plugin install typos-format@ -s --config typos_format_enabled=true` + (repeatable per key) — against an already-installed plugin it prints `already installed` and + still writes the value. Do **not** uninstall to reconfigure: that drops this plugin's entire + stored `pluginConfigs` entry, resetting every option in the README's Options reference to its + manifest default. `-s` defaults to `user`; pass the scope `claude plugin list` reports, and run + from that project's directory for a `project`/`local` scope, or the write lands at a scope that + does not load. This skill never writes user settings or `pluginConfigs`. Afterwards rerun + `check` in a **fresh session** — the rendered `${user_config.*}` is injected at skill load and + each hook's `CLAUDE_PLUGIN_OPTION_*` is fixed at session start, so a same-session `check` still + reports the OLD value; report the observed effective value, never an unobserved change. - report-only mode (`typos_format_write_changes` unset, or set to anything but `true`): the hook is working as shipped. Writes were never turned on, so this is a configuration answer, not a repair. Say so, then offer the same `/plugin configure typos-format` route diff --git a/plugins/typos-format/skills/setup/evals/evals.json b/plugins/typos-format/skills/setup/evals/evals.json index b3cda4128..835431049 100644 --- a/plugins/typos-format/skills/setup/evals/evals.json +++ b/plugins/typos-format/skills/setup/evals/evals.json @@ -70,12 +70,12 @@ "id": 6, "name": "headless-toggle-off-reruns-install-never-uninstalls", "prompt": "/typos-format:setup apply\n\nI'm on a CI box with no interactive session — how do I turn the hook off?", - "expected_output": "Routes the headless change to a plain `claude plugin install typos-format@ -s --config typos_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (verified on Claude Code 2.1.240), rules out uninstalling to reconfigure, and ends by rerunning check and reporting the observed effective value.", + "expected_output": "Routes the headless change to a plain `claude plugin install typos-format@ -s --config typos_format_enabled=false` rerun, states that against an already-installed plugin it prints `already installed` and still writes the value (citing the plugin-reconfiguration convention as the owner of the verified-version record), rules out uninstalling to reconfigure, and ends by rerunning check in a fresh session and reporting the observed effective value.", "files": [], "expectations": [ "Prescribes a plain `claude plugin install … --config typos_format_enabled=false` rerun, naming this plugin's own key and the false value the request asked for, and notes the flag is repeatable for typos_format_write_changes", "Never tells the user to run `claude plugin uninstall` in order to reconfigure, and gives the reason: uninstalling drops this plugin's entire stored pluginConfigs entry, resetting both the toggle and the write-mode switch to their manifest defaults", - "Carries the CLI version the --config-against-an-installed-plugin claim was verified on — the literal 2.1.240 — and scopes it to a non-sensitive option at user scope", + "Cites the marketplace's plugin-reconfiguration convention as the owner of the --config-against-an-installed-plugin claim's verified-version record rather than stamping a CLI version itself, and requires the check rerun to happen in a FRESH session because the rendered user_config token is injected at skill load", "Notes that -s defaults to user, so the scope `claude plugin list` reports must be passed and a project/local scope needs the command run from that project's directory", "Ends by rerunning check and reporting the OBSERVED effective toggle value rather than asserting the change took effect" ] From db47ed86afbdc77347bef79d45a911bcc2f8300d Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Tue, 1 Sep 2026 14:21:26 -0400 Subject: [PATCH 3/6] chore: bump the five plugins Phase 1b touched and record the change Patch bumps for claude-ops, skill-quality, context-budget, repo-hygiene, session-flow with a matching CHANGELOG entry each, per the changelog-parity gate's published-version-reuse rule. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_014uBXt1tMEReShbpG5gsFUd --- plugins/claude-ops/.claude-plugin/plugin.json | 2 +- plugins/claude-ops/CHANGELOG.md | 6 ++++++ plugins/context-budget/.claude-plugin/plugin.json | 2 +- plugins/context-budget/CHANGELOG.md | 6 ++++++ plugins/repo-hygiene/.claude-plugin/plugin.json | 2 +- plugins/repo-hygiene/CHANGELOG.md | 6 ++++++ plugins/session-flow/.claude-plugin/plugin.json | 2 +- plugins/session-flow/CHANGELOG.md | 6 ++++++ plugins/skill-quality/.claude-plugin/plugin.json | 2 +- plugins/skill-quality/CHANGELOG.md | 6 ++++++ 10 files changed, 35 insertions(+), 5 deletions(-) diff --git a/plugins/claude-ops/.claude-plugin/plugin.json b/plugins/claude-ops/.claude-plugin/plugin.json index 09c546922..bde046614 100644 --- a/plugins/claude-ops/.claude-plugin/plugin.json +++ b/plugins/claude-ops/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "claude-ops", - "version": "0.38.3", + "version": "0.38.4", "description": "Claude Code operations toolkit. Twelve skills: audit-skill-visibility (audit whether each installed skill is actually VISIBLE to the model, and diagnose why most of a fleet never gets used — a skill is invisible when its description is dropped by Claude Code's skill-listing context budget, which drops descriptions least-invoked-first so an unused skill loses the keywords that would let it be matched, from skills genuinely not wanted, from skills the run cannot observe at all; computes whether the listing overflows from documented settings, and withholds every cold verdict the data cannot support rather than reporting absence of data as absence of use), inventory (read-only enumeration of the complete invocable surface — every built-in CLI command with aliases and hidden/gated status, every bundled skill, and every component of every installed plugin across all marketplaces; reads the shipped binary because upstream publishes no built-in command list, and carries an integrity verdict so a drifted build reports counts as floors rather than silently short totals), audit-install-state (read-only audit of the machine-scope ~/.claude installation directory and ~/.claude.json — full inventory split into an authored surface and rolled-up bulk trees, product-managed retention vs genuinely unmanaged state, filename-scheme resolution before any process-liveness check, and deliberate/mid-experiment detection; reports, never deletes), audit-performance (read-only slowness-diagnostic capture run at the moment the machine or a session feels slow: CLI version, retention-sweep health including the silent unparsable-settings pause, a timed census walk of the install tree as a sweep-cost proxy, active-session and plugin-fleet counts, a process census, and the fan-out layer, which covers a load-labelled no-op spawn baseline, every hook that will fire bucketed per-tool-call versus per-turn with its invocation shape, the configured statusline, subagent concurrency and spawn-depth ceilings against documented defaults, whether running sessions predate the settings file they are judged by, and orphan attribution by parent liveness rather than age; read against a bundled known-performance-issues reference that also records the causes tested and cleared; separates the four documented suspects of accumulated state, version regression, component bloat, and per-spawn fan-out cost, and routes remediation out; reports, never mutates, and never executes a discovered hook or statusline command), audit-native-overlap (map native Claude Code surfaces — built-in CLI commands, bundled skills, plugin-backed built-ins, session-provided skills — against the current repo's plugin skills and agents, so a custom component never silently duplicates what Claude Code itself ships; bare invocation is a read-only overlap report carrying the extraction's integrity floors and a shared-listing-budget exposure section, verdicts are human-gated in a committed store rendered into a generated registry whose every row carries an observable recheck trigger, and only an explicit apply step bakes presence-gated native references into descriptions and Boundary sections), observability (read locally captured telemetry — OTEL store, collector, hook-event JSONL, ccusage — with trend reports and store pruning), known-issues (search known Claude product GitHub bugs, check service health, maintain a persistent tracked-issue registry), changelog (ingest Claude Code changelog entries and integrate them into the current repo), plugins (bring a machine's plugin fleet current on demand — marketplace refresh, effective-scope updates including in-repo project/local installs, new-plugin install per policy, scope-divergence detection and explicit convergence), morning-brief (read-only gh-based operator morning view — queue-label counts, merge-ready PRs, parked decisions with their RECOMMENDED lines, and loop-lane telemetry freshness), lanes (start/restart/stop/status loop lanes as named background Claude Code sessions seeded from canonical prompt files, with per-lane model/effort, a repo-pull + marketplace-refresh launch step, and a consume-restarts action — an OS-schedulable reader that relaunches stopped lanes whose telemetry carries a restart_request), and a re-runnable setup action that settles where the known-issues registry lives. Plus a family of eight advisory *-audit hooks (API errors, config changes, instruction loads, permission denials, pre-compaction, skill usage, tool failures, and unsurfaced hook failures — the last also warns the user via systemMessage, since a hook that fails to launch enforces nothing and Claude Code surfaces the failure to nobody) that emit the shared hook-telemetry envelope, and a reference sink that maps envelopes into the hook-events.jsonl the observability skill reads.", "author": { "name": "Melodic Software", diff --git a/plugins/claude-ops/CHANGELOG.md b/plugins/claude-ops/CHANGELOG.md index a090e6e73..cc58c28f8 100644 --- a/plugins/claude-ops/CHANGELOG.md +++ b/plugins/claude-ops/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `claude-ops` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.38.4] + +### Changed + +- `setup` is check-only: the no-op `apply` action is dropped per PLUGIN-PHILOSOPHY's Check-only carve-out, and its reconfiguration guidance is now printed by `check` (#3583, customization-consistency Phase 1b). + ## [0.38.3] ### Changed diff --git a/plugins/context-budget/.claude-plugin/plugin.json b/plugins/context-budget/.claude-plugin/plugin.json index dfc1a872b..c037e0d85 100644 --- a/plugins/context-budget/.claude-plugin/plugin.json +++ b/plugins/context-budget/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "context-budget", - "version": "0.6.10", + "version": "0.6.11", "description": "Measure a Claude Code session's fixed startup context payload per item, on the consumer's machine at a pinned, version-stamped binary — including per-tool attribution of the built-in tool pools that /context reports only as lump sums, derived live by A/B bare-name-deny differencing with enforced comparability rules (skill-listing signature, one mode, one binary), an SDK-primary exact meter degrading to a version-aware headless /context parser and then to an honest structured error (never a wrong number), and a per-project measure-toggle-remeasure ledger under the plugin data directory recording every lever's real before/after delta. Report-only: prints exact config, applies nothing.", "author": { "name": "Melodic Software", diff --git a/plugins/context-budget/CHANGELOG.md b/plugins/context-budget/CHANGELOG.md index e8eaabe95..fed218ae4 100644 --- a/plugins/context-budget/CHANGELOG.md +++ b/plugins/context-budget/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to the `context-budget` plugin. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.6.11] + +### Changed + +- `setup` is check-only: the no-op `apply` action is dropped per PLUGIN-PHILOSOPHY's Check-only carve-out, and its reconfiguration guidance is now printed by `check` (#3583, customization-consistency Phase 1b). + ## [0.6.10] ### Changed diff --git a/plugins/repo-hygiene/.claude-plugin/plugin.json b/plugins/repo-hygiene/.claude-plugin/plugin.json index bafb9cbf4..bd72cb78b 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.10.11", + "version": "0.10.12", "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 c75612c17..255ac7ff4 100644 --- a/plugins/repo-hygiene/CHANGELOG.md +++ b/plugins/repo-hygiene/CHANGELOG.md @@ -3,6 +3,12 @@ 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.10.12] + +### Changed + +- `setup` is check-only: the no-op `apply` action is dropped per PLUGIN-PHILOSOPHY's Check-only carve-out, and its reconfiguration guidance is now printed by `check` (#3583, customization-consistency Phase 1b). + ## [0.10.11] ### Changed diff --git a/plugins/session-flow/.claude-plugin/plugin.json b/plugins/session-flow/.claude-plugin/plugin.json index cf5407a30..a33e2d2cf 100644 --- a/plugins/session-flow/.claude-plugin/plugin.json +++ b/plugins/session-flow/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "session-flow", - "version": "0.32.6", + "version": "0.32.7", "description": "Session-lifecycle toolkit of fourteen skills: workflow (navigate a staged dev workflow and suggest the next stage), handoff (write a save-point and resume prompt for /clear-and-resume), continue-in-background (delegate the task to a fresh background agent that continues it now — same save-point engine as handoff, delivered by launching a detached claude --bg session seeded with the resume prompt; launches only on explicit user request), keep-going (recover and continue after any interruption OR when live off-thread work looks stalled — inventory off-thread work, inspect its real output, act only on evidence, then continue; after a usage limit lifts it continues rather than summarizing-and-stalling), find-handoff (recover a lost handoff after /clear — when the resume prompt was written but never copied — via a read-only detection ladder: known-location glob of the handoffs dir, then a bounded, recency-ranked transcript scan for the handoff directive and dashed-rail markers, then a confirm-before-resume gate; surfaces only the resume prompt + metadata, never raw transcript content), clean-stop (get to a durable, linked stopping point before the machine may go away — sweep every repo/worktree for uncommitted, unpushed, or PR-less work, push it durable, put breadcrumbs in PR/issue bodies, then give a free-and-clear verdict), retro (structured end-of-session retrospective with transcript metrics and learning codification), running-retro (in-flight retrospective checkpoints that spawn a subagent to analyze the transcript so far and append classified findings to a cumulative running ledger — capture and route only, the live counterpart to retro; also owns a detached-observer substrate that can watch a session out-of-band and run the checkpoint autonomously after the session ends), orient (read-only session orientation — synthesize where we stand, what we are doing, and why, from durable + off-thread state the built-in /recap never sees: ledgers, handoffs, workflow checklists, running-retro ledgers, open PRs and work-items, and git), orchestrate (arm a session or worker with proactive-orchestration imperatives), reanchor (verify a session's working assumptions are still true against live reality — referenced PRs/issues/branches, base-branch drift, renamed/version-drifted surfaces, stale memory-tier files, and the goal a handoff records, compared across the chain so a re-derived goal reports as drift — before building on them), reconcile (retire finished off-thread work and reconcile this session's task ledger with reality — the prune-and-reconcile counterpart to keep-going's resume: inventory the work this session spawned, inspect its real state, retire the finished and close proven-done tasks, auto-settling the finished and gating any kill of still-running work; sibling sessions in the project are reported read-only), setup (check-centric verification of the observer's runtime prerequisites and configuration), and show-options (lay out which skills fit this moment as a ranked, nothing-hidden menu — a shortlist per bucket plus the complete remainder by name, resolved from the full installed catalog rather than the truncated in-context listing, so the human decides and no option is withheld for looking already-done).", "author": { "name": "Melodic Software", diff --git a/plugins/session-flow/CHANGELOG.md b/plugins/session-flow/CHANGELOG.md index 3aa808824..fe201570a 100644 --- a/plugins/session-flow/CHANGELOG.md +++ b/plugins/session-flow/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog — session-flow plugin +## [0.32.7] + +### Changed + +- `setup` is check-only: the no-op `apply` action is dropped per PLUGIN-PHILOSOPHY's Check-only carve-out, and its reconfiguration guidance is now printed by `check` (#3583, customization-consistency Phase 1b). + ## [0.32.6] ### Changed diff --git a/plugins/skill-quality/.claude-plugin/plugin.json b/plugins/skill-quality/.claude-plugin/plugin.json index 707b1b409..895fbca2d 100644 --- a/plugins/skill-quality/.claude-plugin/plugin.json +++ b/plugins/skill-quality/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "skill-quality", - "version": "0.20.1", + "version": "0.20.2", "description": "Skill-authoring QA tooling: a static contract checker that runs twenty-five deterministic checks over a Claude Code skill (frontmatter, explicit invocation mode, description/verb-contract polarity, per-skill listing-entry cap, trigger-keyword preservation, line caps, broken internal refs, markdownlint, gotchas surface, evals presence, precompute opportunity, completion-criteria signal, injection shell-declaration, fresh-eyes declaration conformance), a shared skill-listing budget reporter across a set of skills, and a bundled evals.json schema plus a deterministic eval-quality lint (duplicate case identities, missing fixtures, empty or vague grading criteria, set-coverage warnings). Runs against any repo's skills directory via the convention-resolution ladder — no baked layout.", "author": { "name": "Melodic Software", diff --git a/plugins/skill-quality/CHANGELOG.md b/plugins/skill-quality/CHANGELOG.md index 1a4c6be88..f2aa9f85f 100644 --- a/plugins/skill-quality/CHANGELOG.md +++ b/plugins/skill-quality/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `skill-quality` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.20.2] + +### Changed + +- `setup` is check-only: the no-op `apply` action is dropped per PLUGIN-PHILOSOPHY's Check-only carve-out, and its reconfiguration guidance is now printed by `check` (#3583, customization-consistency Phase 1b). + ## [0.20.1] ### Changed From 77936e84d4f2ccccb815d4dc5071502a9bc89c51 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Tue, 1 Sep 2026 14:57:52 -0400 Subject: [PATCH 4/6] chore: bump the 28 plugins Phase 1d touched and record the change Patch bumps with a matching CHANGELOG entry each, per the changelog-parity gate's published-version-reuse rule. Also merges the Phase 1c and 1b branches forward (their own bumps) so this stacked branch stays monotonic above its base. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_014uBXt1tMEReShbpG5gsFUd --- plugins/actionlint/.claude-plugin/plugin.json | 2 +- plugins/actionlint/CHANGELOG.md | 6 ++++++ plugins/ai-briefing/.claude-plugin/plugin.json | 2 +- plugins/ai-briefing/CHANGELOG.md | 6 ++++++ plugins/bash-format/.claude-plugin/plugin.json | 2 +- plugins/bash-format/CHANGELOG.md | 6 ++++++ plugins/biome-format/.claude-plugin/plugin.json | 2 +- plugins/biome-format/CHANGELOG.md | 6 ++++++ plugins/bugs/.claude-plugin/plugin.json | 2 +- plugins/bugs/CHANGELOG.md | 6 ++++++ plugins/claude-ops/.claude-plugin/plugin.json | 2 +- plugins/claude-ops/CHANGELOG.md | 6 ++++++ plugins/context-budget/.claude-plugin/plugin.json | 2 +- plugins/context-budget/CHANGELOG.md | 6 ++++++ plugins/desktop-notification/.claude-plugin/plugin.json | 2 +- plugins/desktop-notification/CHANGELOG.md | 6 ++++++ plugins/discipline/.claude-plugin/plugin.json | 2 +- plugins/discipline/CHANGELOG.md | 6 ++++++ plugins/disk-hygiene/.claude-plugin/plugin.json | 2 +- plugins/disk-hygiene/CHANGELOG.md | 6 ++++++ plugins/dometrain/.claude-plugin/plugin.json | 2 +- plugins/dometrain/CHANGELOG.md | 6 ++++++ plugins/education/.claude-plugin/plugin.json | 2 +- plugins/education/CHANGELOG.md | 6 ++++++ plugins/eol-normalizer/.claude-plugin/plugin.json | 2 +- plugins/eol-normalizer/CHANGELOG.md | 6 ++++++ plugins/go-format/.claude-plugin/plugin.json | 2 +- plugins/go-format/CHANGELOG.md | 6 ++++++ plugins/guardrails/.claude-plugin/plugin.json | 2 +- plugins/guardrails/CHANGELOG.md | 6 ++++++ plugins/knowledge/.claude-plugin/plugin.json | 2 +- plugins/knowledge/CHANGELOG.md | 6 ++++++ plugins/machine-health/.claude-plugin/plugin.json | 2 +- plugins/machine-health/CHANGELOG.md | 6 ++++++ plugins/markdown-format/.claude-plugin/plugin.json | 2 +- plugins/markdown-format/CHANGELOG.md | 6 ++++++ plugins/miro/.claude-plugin/plugin.json | 2 +- plugins/miro/CHANGELOG.md | 6 ++++++ plugins/planning/.claude-plugin/plugin.json | 2 +- plugins/planning/CHANGELOG.md | 6 ++++++ plugins/powershell-format/.claude-plugin/plugin.json | 2 +- plugins/powershell-format/CHANGELOG.md | 6 ++++++ plugins/rate-limit-guard/.claude-plugin/plugin.json | 2 +- plugins/rate-limit-guard/CHANGELOG.md | 6 ++++++ plugins/repo-hygiene/.claude-plugin/plugin.json | 2 +- plugins/repo-hygiene/CHANGELOG.md | 6 ++++++ plugins/ruff-format/.claude-plugin/plugin.json | 2 +- plugins/ruff-format/CHANGELOG.md | 6 ++++++ plugins/session-flow/.claude-plugin/plugin.json | 2 +- plugins/session-flow/CHANGELOG.md | 6 ++++++ plugins/skill-quality/.claude-plugin/plugin.json | 2 +- plugins/skill-quality/CHANGELOG.md | 6 ++++++ plugins/source-control/.claude-plugin/plugin.json | 2 +- plugins/source-control/CHANGELOG.md | 6 ++++++ plugins/typos-format/.claude-plugin/plugin.json | 4 ++-- plugins/typos-format/CHANGELOG.md | 6 ++++++ 56 files changed, 197 insertions(+), 29 deletions(-) diff --git a/plugins/actionlint/.claude-plugin/plugin.json b/plugins/actionlint/.claude-plugin/plugin.json index 9c014975a..55f1ba4a9 100644 --- a/plugins/actionlint/.claude-plugin/plugin.json +++ b/plugins/actionlint/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "actionlint", - "version": "0.8.21", + "version": "0.8.22", "description": "Lint GitHub Actions workflow files on edit via actionlint, surfacing findings as advisory context.", "author": { "name": "Melodic Software", diff --git a/plugins/actionlint/CHANGELOG.md b/plugins/actionlint/CHANGELOG.md index 63c4deeee..c299997db 100644 --- a/plugins/actionlint/CHANGELOG.md +++ b/plugins/actionlint/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `actionlint` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.8.22] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.8.21] ### Changed diff --git a/plugins/ai-briefing/.claude-plugin/plugin.json b/plugins/ai-briefing/.claude-plugin/plugin.json index c95038eca..eec8ccda7 100644 --- a/plugins/ai-briefing/.claude-plugin/plugin.json +++ b/plugins/ai-briefing/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "ai-briefing", - "version": "0.7.9", + "version": "0.7.10", "description": "Build source-backed AI-industry briefings from official vendor publications, configured RSS/Atom feeds, GitHub releases, reputable secondary reporting, and user-supplied URLs. Deduplicate, rank, and present results as markdown or optional HTML/PPTX decks, with repository-owned profile, audience, and brand configuration. Automated X/Twitter collection is disabled; Playwright is used only for deterministic local rendering.", "author": { "name": "Melodic Software", diff --git a/plugins/ai-briefing/CHANGELOG.md b/plugins/ai-briefing/CHANGELOG.md index bd51c3404..c342be251 100644 --- a/plugins/ai-briefing/CHANGELOG.md +++ b/plugins/ai-briefing/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `ai-briefing` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.7.10] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.7.9] ### Changed diff --git a/plugins/bash-format/.claude-plugin/plugin.json b/plugins/bash-format/.claude-plugin/plugin.json index 84ea95657..3b456b4f0 100644 --- a/plugins/bash-format/.claude-plugin/plugin.json +++ b/plugins/bash-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "bash-format", - "version": "0.7.23", + "version": "0.7.24", "description": "Auto-format and lint shell scripts on edit via shfmt + ShellCheck, using the consuming repo's own .editorconfig and .shellcheckrc.", "author": { "name": "Melodic Software", diff --git a/plugins/bash-format/CHANGELOG.md b/plugins/bash-format/CHANGELOG.md index e8002feda..dc42523cb 100644 --- a/plugins/bash-format/CHANGELOG.md +++ b/plugins/bash-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `bash-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.7.24] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.7.23] ### Changed diff --git a/plugins/biome-format/.claude-plugin/plugin.json b/plugins/biome-format/.claude-plugin/plugin.json index be3275cd8..7d26ab08d 100644 --- a/plugins/biome-format/.claude-plugin/plugin.json +++ b/plugins/biome-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "biome-format", - "version": "0.6.22", + "version": "0.6.23", "description": "Auto-format and lint JS/TS/JSX/JSON on edit via Biome, only when a biome.json governs the repo — using the consuming repo's own Biome config.", "author": { "name": "Melodic Software", diff --git a/plugins/biome-format/CHANGELOG.md b/plugins/biome-format/CHANGELOG.md index 44b680e55..8c620c8a3 100644 --- a/plugins/biome-format/CHANGELOG.md +++ b/plugins/biome-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `biome-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.6.23] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.6.22] ### Changed diff --git a/plugins/bugs/.claude-plugin/plugin.json b/plugins/bugs/.claude-plugin/plugin.json index 0709e6279..b807ffd8c 100644 --- a/plugins/bugs/.claude-plugin/plugin.json +++ b/plugins/bugs/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "bugs", - "version": "0.9.1", + "version": "0.9.2", "description": "Produces a structured five-field bug report — title, steps to reproduce, expected vs actual, severity with justification, and suggested fix location — from an informal defect description. Read-only by default: it emits the report and never edits code, opens a PR, or files an issue on its own.", "author": { "name": "Melodic Software", diff --git a/plugins/bugs/CHANGELOG.md b/plugins/bugs/CHANGELOG.md index 95f361da1..6953d0f83 100644 --- a/plugins/bugs/CHANGELOG.md +++ b/plugins/bugs/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `bugs` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.9.2] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.9.1] ### Changed diff --git a/plugins/claude-ops/.claude-plugin/plugin.json b/plugins/claude-ops/.claude-plugin/plugin.json index bde046614..49e235ac1 100644 --- a/plugins/claude-ops/.claude-plugin/plugin.json +++ b/plugins/claude-ops/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "claude-ops", - "version": "0.38.4", + "version": "0.38.5", "description": "Claude Code operations toolkit. Twelve skills: audit-skill-visibility (audit whether each installed skill is actually VISIBLE to the model, and diagnose why most of a fleet never gets used — a skill is invisible when its description is dropped by Claude Code's skill-listing context budget, which drops descriptions least-invoked-first so an unused skill loses the keywords that would let it be matched, from skills genuinely not wanted, from skills the run cannot observe at all; computes whether the listing overflows from documented settings, and withholds every cold verdict the data cannot support rather than reporting absence of data as absence of use), inventory (read-only enumeration of the complete invocable surface — every built-in CLI command with aliases and hidden/gated status, every bundled skill, and every component of every installed plugin across all marketplaces; reads the shipped binary because upstream publishes no built-in command list, and carries an integrity verdict so a drifted build reports counts as floors rather than silently short totals), audit-install-state (read-only audit of the machine-scope ~/.claude installation directory and ~/.claude.json — full inventory split into an authored surface and rolled-up bulk trees, product-managed retention vs genuinely unmanaged state, filename-scheme resolution before any process-liveness check, and deliberate/mid-experiment detection; reports, never deletes), audit-performance (read-only slowness-diagnostic capture run at the moment the machine or a session feels slow: CLI version, retention-sweep health including the silent unparsable-settings pause, a timed census walk of the install tree as a sweep-cost proxy, active-session and plugin-fleet counts, a process census, and the fan-out layer, which covers a load-labelled no-op spawn baseline, every hook that will fire bucketed per-tool-call versus per-turn with its invocation shape, the configured statusline, subagent concurrency and spawn-depth ceilings against documented defaults, whether running sessions predate the settings file they are judged by, and orphan attribution by parent liveness rather than age; read against a bundled known-performance-issues reference that also records the causes tested and cleared; separates the four documented suspects of accumulated state, version regression, component bloat, and per-spawn fan-out cost, and routes remediation out; reports, never mutates, and never executes a discovered hook or statusline command), audit-native-overlap (map native Claude Code surfaces — built-in CLI commands, bundled skills, plugin-backed built-ins, session-provided skills — against the current repo's plugin skills and agents, so a custom component never silently duplicates what Claude Code itself ships; bare invocation is a read-only overlap report carrying the extraction's integrity floors and a shared-listing-budget exposure section, verdicts are human-gated in a committed store rendered into a generated registry whose every row carries an observable recheck trigger, and only an explicit apply step bakes presence-gated native references into descriptions and Boundary sections), observability (read locally captured telemetry — OTEL store, collector, hook-event JSONL, ccusage — with trend reports and store pruning), known-issues (search known Claude product GitHub bugs, check service health, maintain a persistent tracked-issue registry), changelog (ingest Claude Code changelog entries and integrate them into the current repo), plugins (bring a machine's plugin fleet current on demand — marketplace refresh, effective-scope updates including in-repo project/local installs, new-plugin install per policy, scope-divergence detection and explicit convergence), morning-brief (read-only gh-based operator morning view — queue-label counts, merge-ready PRs, parked decisions with their RECOMMENDED lines, and loop-lane telemetry freshness), lanes (start/restart/stop/status loop lanes as named background Claude Code sessions seeded from canonical prompt files, with per-lane model/effort, a repo-pull + marketplace-refresh launch step, and a consume-restarts action — an OS-schedulable reader that relaunches stopped lanes whose telemetry carries a restart_request), and a re-runnable setup action that settles where the known-issues registry lives. Plus a family of eight advisory *-audit hooks (API errors, config changes, instruction loads, permission denials, pre-compaction, skill usage, tool failures, and unsurfaced hook failures — the last also warns the user via systemMessage, since a hook that fails to launch enforces nothing and Claude Code surfaces the failure to nobody) that emit the shared hook-telemetry envelope, and a reference sink that maps envelopes into the hook-events.jsonl the observability skill reads.", "author": { "name": "Melodic Software", diff --git a/plugins/claude-ops/CHANGELOG.md b/plugins/claude-ops/CHANGELOG.md index cc58c28f8..973b364cf 100644 --- a/plugins/claude-ops/CHANGELOG.md +++ b/plugins/claude-ops/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `claude-ops` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.38.5] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.38.4] ### Changed diff --git a/plugins/context-budget/.claude-plugin/plugin.json b/plugins/context-budget/.claude-plugin/plugin.json index c037e0d85..b6590c062 100644 --- a/plugins/context-budget/.claude-plugin/plugin.json +++ b/plugins/context-budget/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "context-budget", - "version": "0.6.11", + "version": "0.6.12", "description": "Measure a Claude Code session's fixed startup context payload per item, on the consumer's machine at a pinned, version-stamped binary — including per-tool attribution of the built-in tool pools that /context reports only as lump sums, derived live by A/B bare-name-deny differencing with enforced comparability rules (skill-listing signature, one mode, one binary), an SDK-primary exact meter degrading to a version-aware headless /context parser and then to an honest structured error (never a wrong number), and a per-project measure-toggle-remeasure ledger under the plugin data directory recording every lever's real before/after delta. Report-only: prints exact config, applies nothing.", "author": { "name": "Melodic Software", diff --git a/plugins/context-budget/CHANGELOG.md b/plugins/context-budget/CHANGELOG.md index fed218ae4..a4da28f9d 100644 --- a/plugins/context-budget/CHANGELOG.md +++ b/plugins/context-budget/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to the `context-budget` plugin. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.6.12] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.6.11] ### Changed diff --git a/plugins/desktop-notification/.claude-plugin/plugin.json b/plugins/desktop-notification/.claude-plugin/plugin.json index 4b412da7d..c7f394002 100644 --- a/plugins/desktop-notification/.claude-plugin/plugin.json +++ b/plugins/desktop-notification/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "desktop-notification", - "version": "0.6.20", + "version": "0.6.21", "description": "Alert you when Claude Code needs input — an audible terminal bell, an OSC 9 terminal notification, and an OS-native toast (macOS/Linux) on permission and idle prompts.", "author": { "name": "Melodic Software", diff --git a/plugins/desktop-notification/CHANGELOG.md b/plugins/desktop-notification/CHANGELOG.md index 873034c29..8f85406ba 100644 --- a/plugins/desktop-notification/CHANGELOG.md +++ b/plugins/desktop-notification/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `desktop-notification` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.6.21] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.6.20] ### Changed diff --git a/plugins/discipline/.claude-plugin/plugin.json b/plugins/discipline/.claude-plugin/plugin.json index 85cd1d1af..2cec58625 100644 --- a/plugins/discipline/.claude-plugin/plugin.json +++ b/plugins/discipline/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "discipline", - "version": "0.12.14", + "version": "0.12.15", "description": "Discipline correctors that re-anchor a standing rule mid-session, then audit both the work in flight and the pre-existing state and choices it trusts, and correct what has drifted: do-your-research (research and no-assumptions discipline; sibling do-your-research-deep escalates to a typed full inventory of the session's claims — assumptions, asserted facts, concrete specifics, load-bearing premises — verified at a configurable depth and reported as a per-item ledger), follow-our-standards (alignment to the consuming org's engineering conventions), point-dont-copy (pointer-over-copy discipline — no copied content, internal-name coupling, or closed capability lists), reason-dont-recite (interrogate inherited content — precedent is evidence of what is, never self-justifying authority), tighten-your-output (terseness discipline — fewer words or lines with no loss of meaning or correctness), recheck-against-upstream (existing state is not evidence of its own correctness — audit config, code, and infra against current official upstream docs; sibling recheck-against-upstream-deep fans subagents doc-by-doc over a whole subsystem), pick-for-the-problem (tool, library, framework, and approach selection fitted to the problem, not reached for out of habit, availability, incumbency, or preconception), mind-your-maxims (cooperative-communication discipline per Grice plus the AI-augmented transparency maxim), script-the-deterministic-work (offload deterministic sub-work — counts, diffs, sorts, transforms, and scaffolds — to a script that runs, reserving model output for judgment over its real output; the audit runs both ways, also catching an existing script that over-reaches into judgement), use-your-skills (actually use the skills already in context — scan the listing, map the task, invoke the fitting skill instead of reinventing it, and name skills when delegating to a subagent), and reuse-or-replace (anti-fragmentation — new work reuses an established way of doing something or openly replaces it (migrate the old uses, record the decision), never silently stands up a second parallel way; divergence is allowed but owes a recorded reason proportional to blast radius), and scrutinize-dont-coast (adversarial self-scrutiny — stop coasting on your own recent output and re-examine whether it is sound, not merely confidently produced, through a fresh-context pass blind to the reasoning that made it, then remediate with the user; it stops the trajectory first and remediates collaboratively rather than autonomously). Plus further species that are not correctors (examples, not a fixed list — each skill's own description is authoritative), including setup, sweep-all, a posture-batch runbook that composes them — it fans out an audit-only subagent per in-scope corrector, then applies the corrections on the main thread in a fixed order, with batch membership and order set by each corrector's own colocated tier metadata and an optional userConfig overlay — and wait-what, a one-shot user-invoked-only communication repair: type /discipline:wait-what when the last message did not land and the model re-pitches it, backing up as far as needed, adding the missing context, in ASD-STE100 Simplified Technical English, using the project's ubiquitous language; never model-invoked and never in the batch. Firing a corrector is a re-anchor, not an accusation; the audit may return clean.", "author": { "name": "Melodic Software", diff --git a/plugins/discipline/CHANGELOG.md b/plugins/discipline/CHANGELOG.md index a7e805cdd..fd42c71aa 100644 --- a/plugins/discipline/CHANGELOG.md +++ b/plugins/discipline/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to the `discipline` plugin are documented here. Format follo Entries below `0.9.0` were released under the plugin's former name, `re-anchor`. +## [0.12.15] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.12.14] ### Changed diff --git a/plugins/disk-hygiene/.claude-plugin/plugin.json b/plugins/disk-hygiene/.claude-plugin/plugin.json index 96e56fa5e..03d44c29d 100644 --- a/plugins/disk-hygiene/.claude-plugin/plugin.json +++ b/plugins/disk-hygiene/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "disk-hygiene", - "version": "0.20.21", + "version": "0.20.22", "description": "Context-aware disk hygiene for arbitrary directory trees: inventories orphaned and temporary artifacts, classifies evidence into review tiers, and offers exact-path cleanup only after a fresh safety preview and explicit per-tier approval. The target is read-only by default; OS-managed paths, links and mount points, VCS-tracked content without the complete checkout evidence bundle, changed entries, and live-handle uncertainty fail closed.", "author": { "name": "Melodic Software", diff --git a/plugins/disk-hygiene/CHANGELOG.md b/plugins/disk-hygiene/CHANGELOG.md index bf4795652..058a14b9b 100644 --- a/plugins/disk-hygiene/CHANGELOG.md +++ b/plugins/disk-hygiene/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `disk-hygiene` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.20.22] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.20.21] ### Changed diff --git a/plugins/dometrain/.claude-plugin/plugin.json b/plugins/dometrain/.claude-plugin/plugin.json index 7ff832d2c..4c463e93e 100644 --- a/plugins/dometrain/.claude-plugin/plugin.json +++ b/plugins/dometrain/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "dometrain", - "version": "0.2.4", + "version": "0.2.5", "description": "Dometrain course-content grounding over a third-party remote MCP server (Dometrain-hosted, Bearer auth): search lessons, pull curated lesson documents with on-screen code, and cite timestamped deep links. Requires an active Dometrain Pro subscription. Credential entered once through Claude Code's native masked userConfig prompt and stored in secure credential storage. Ships with a grounding usage skill kept in sync with Dometrain's own official Claude Code plugin.", "author": { "name": "Melodic Software", diff --git a/plugins/dometrain/CHANGELOG.md b/plugins/dometrain/CHANGELOG.md index 1437d5526..021d05af2 100644 --- a/plugins/dometrain/CHANGELOG.md +++ b/plugins/dometrain/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `dometrain` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.2.5] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.2.4] ### Changed diff --git a/plugins/education/.claude-plugin/plugin.json b/plugins/education/.claude-plugin/plugin.json index 1ab656d01..7ec07b48b 100644 --- a/plugins/education/.claude-plugin/plugin.json +++ b/plugins/education/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "education", - "version": "0.8.5", + "version": "0.8.6", "description": "Interactive multi-session learning coach: teaches a general subject or a concept grounded in the consuming repo through the Knowledge-Skills-Wisdom progression, with persistent per-topic learning state. Also a single-session domain primer, a one-shot plain-language explainer that drops anything to genuinely plain words, and a post-work comprehension check that quizzes the human on a completed change.", "author": { "name": "Melodic Software", diff --git a/plugins/education/CHANGELOG.md b/plugins/education/CHANGELOG.md index 70dacbda6..c64e06a26 100644 --- a/plugins/education/CHANGELOG.md +++ b/plugins/education/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `education` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.8.6] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.8.5] ### Changed diff --git a/plugins/eol-normalizer/.claude-plugin/plugin.json b/plugins/eol-normalizer/.claude-plugin/plugin.json index e86410d31..244cc1cfb 100644 --- a/plugins/eol-normalizer/.claude-plugin/plugin.json +++ b/plugins/eol-normalizer/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "eol-normalizer", - "version": "0.6.21", + "version": "0.6.22", "description": "Normalize a written file's working-tree line endings to its .gitattributes eol value on edit — symmetric CRLF/LF driven by git check-attr, advisory and never blocking.", "author": { "name": "Melodic Software", diff --git a/plugins/eol-normalizer/CHANGELOG.md b/plugins/eol-normalizer/CHANGELOG.md index c52f35593..7016781b0 100644 --- a/plugins/eol-normalizer/CHANGELOG.md +++ b/plugins/eol-normalizer/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `eol-normalizer` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.6.22] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.6.21] ### Changed diff --git a/plugins/go-format/.claude-plugin/plugin.json b/plugins/go-format/.claude-plugin/plugin.json index 57d197ef8..bc89f1e37 100644 --- a/plugins/go-format/.claude-plugin/plugin.json +++ b/plugins/go-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "go-format", - "version": "0.3.23", + "version": "0.3.24", "description": "Auto-fix Go formatting and import management on edit via goimports — runs unconditionally (no consumer-config gate), skipping generated files.", "author": { "name": "Melodic Software", diff --git a/plugins/go-format/CHANGELOG.md b/plugins/go-format/CHANGELOG.md index 42928cc81..f1039077e 100644 --- a/plugins/go-format/CHANGELOG.md +++ b/plugins/go-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `go-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.3.24] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.3.23] ### Changed diff --git a/plugins/guardrails/.claude-plugin/plugin.json b/plugins/guardrails/.claude-plugin/plugin.json index efc407b30..a29981bd8 100644 --- a/plugins/guardrails/.claude-plugin/plugin.json +++ b/plugins/guardrails/.claude-plugin/plugin.json @@ -147,5 +147,5 @@ "min": 1 } }, - "version": "0.29.12" + "version": "0.29.13" } diff --git a/plugins/guardrails/CHANGELOG.md b/plugins/guardrails/CHANGELOG.md index 2e20f8fa8..4c89fcc96 100644 --- a/plugins/guardrails/CHANGELOG.md +++ b/plugins/guardrails/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `guardrails` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.29.13] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.29.12] ### Changed diff --git a/plugins/knowledge/.claude-plugin/plugin.json b/plugins/knowledge/.claude-plugin/plugin.json index e4118b863..5b0076ab1 100644 --- a/plugins/knowledge/.claude-plugin/plugin.json +++ b/plugins/knowledge/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "knowledge", - "version": "0.13.9", + "version": "0.13.10", "description": "Ingest external knowledge into durable, synthesized artifacts. Ships a book-distillation pipeline (PDF/EPUB into concept-organized, author-attributed skill reference files), a video-digest pipeline (watch a single public video from YouTube or X, formerly Twitter: transcript, link harvest, and repo-applicability synthesis), a course-digest pipeline (extract and synthesize online video courses — Dometrain, Teachable — into repo-applicable recommendations), a docpage-digest pipeline (single online documentation page into a verified knowledge slice with dual verification — one cross-vendor verifier — and an interview handoff), and a map-corpus pipeline (multi-resource corpus into a classified link map, deterministic node manifests, gate-verified relevance inventory, and an approved queue of docpage-digest runs), plus a re-runnable setup action; a configurable library directory governs where synthesized artifacts land in the consuming repo.", "author": { "name": "Melodic Software", diff --git a/plugins/knowledge/CHANGELOG.md b/plugins/knowledge/CHANGELOG.md index 38dc2c7c5..554c986b6 100644 --- a/plugins/knowledge/CHANGELOG.md +++ b/plugins/knowledge/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to the `knowledge` 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.13.10] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.13.9] ### Changed diff --git a/plugins/machine-health/.claude-plugin/plugin.json b/plugins/machine-health/.claude-plugin/plugin.json index 5320a4ece..d73759c0c 100644 --- a/plugins/machine-health/.claude-plugin/plugin.json +++ b/plugins/machine-health/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "machine-health", - "version": "0.11.3", + "version": "0.11.4", "description": "Workstation health audit: OS-specific checks (disk, OS updates, security posture, CISA KEV correlation) run from a versioned catalog with trend-aware severity, approval-gated remediations, and dated markdown reports. Windows fully implemented; macOS/Linux scaffolded (report UNKNOWN and stop). Machine state persists in the plugin data directory; the report directory and check catalog are configurable.", "author": { "name": "Melodic Software", diff --git a/plugins/machine-health/CHANGELOG.md b/plugins/machine-health/CHANGELOG.md index a7aabb629..062875ca5 100644 --- a/plugins/machine-health/CHANGELOG.md +++ b/plugins/machine-health/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `machine-health` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.11.4] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.11.3] ### Changed diff --git a/plugins/markdown-format/.claude-plugin/plugin.json b/plugins/markdown-format/.claude-plugin/plugin.json index 49ce5cf96..3e92ec92c 100644 --- a/plugins/markdown-format/.claude-plugin/plugin.json +++ b/plugins/markdown-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "markdown-format", - "version": "0.11.31", + "version": "0.11.32", "description": "Auto-format and lint Markdown on edit via markdownlint-cli2 — only in repos that carry their own markdownlint config.", "author": { "name": "Melodic Software", diff --git a/plugins/markdown-format/CHANGELOG.md b/plugins/markdown-format/CHANGELOG.md index 71896bc37..2d356a6fa 100644 --- a/plugins/markdown-format/CHANGELOG.md +++ b/plugins/markdown-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `markdown-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.11.32] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.11.31] ### Changed diff --git a/plugins/miro/.claude-plugin/plugin.json b/plugins/miro/.claude-plugin/plugin.json index 6c195e403..1ac65f4c0 100644 --- a/plugins/miro/.claude-plugin/plugin.json +++ b/plugins/miro/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "miro", - "version": "0.3.7", + "version": "0.3.8", "description": "Miro board management over the Model Context Protocol: create and manage boards, sticky notes, shapes, frames, connectors, and tags for EventStorming, brainstorming, and diagramming. Bundles a local stdio MCP server (single self-contained Node artifact); installs disabled — opt in and supply a Miro API token.", "author": { "name": "Melodic Software", diff --git a/plugins/miro/CHANGELOG.md b/plugins/miro/CHANGELOG.md index 1f795b41b..cec2a6133 100644 --- a/plugins/miro/CHANGELOG.md +++ b/plugins/miro/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `miro` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.3.8] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.3.7] ### Changed diff --git a/plugins/planning/.claude-plugin/plugin.json b/plugins/planning/.claude-plugin/plugin.json index 47575b368..33c1161f1 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.34.5", + "version": "0.34.6", "userConfig": { "use_ask_user_question": { "type": "boolean", diff --git a/plugins/planning/CHANGELOG.md b/plugins/planning/CHANGELOG.md index 634c8a3b6..8e4627e58 100644 --- a/plugins/planning/CHANGELOG.md +++ b/plugins/planning/CHANGELOG.md @@ -3,6 +3,12 @@ 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.34.6] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.34.5] ### Changed diff --git a/plugins/powershell-format/.claude-plugin/plugin.json b/plugins/powershell-format/.claude-plugin/plugin.json index 507932179..d24b6f53d 100644 --- a/plugins/powershell-format/.claude-plugin/plugin.json +++ b/plugins/powershell-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "powershell-format", - "version": "0.7.23", + "version": "0.7.24", "description": "Auto-format and lint PowerShell on edit via PSScriptAnalyzer, only when a PSScriptAnalyzerSettings.psd1 governs the repo — using the consuming repo's own analyzer settings.", "author": { "name": "Melodic Software", diff --git a/plugins/powershell-format/CHANGELOG.md b/plugins/powershell-format/CHANGELOG.md index 68a80c03a..a937392a3 100644 --- a/plugins/powershell-format/CHANGELOG.md +++ b/plugins/powershell-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `powershell-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.7.24] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.7.23] ### Changed diff --git a/plugins/rate-limit-guard/.claude-plugin/plugin.json b/plugins/rate-limit-guard/.claude-plugin/plugin.json index d5b138bbf..047741e27 100644 --- a/plugins/rate-limit-guard/.claude-plugin/plugin.json +++ b/plugins/rate-limit-guard/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "rate-limit-guard", - "version": "0.7.11", + "version": "0.7.12", "description": "Shared rate-limit guard for loop lanes: a statusline wrapper tees the subscription rate-limit windows to a fixed machine-scope file, a StopFailure hook records rate-limit stops reactively, and a reader contract fixes how consuming sessions pause and resume.", "author": { "name": "Melodic Software", diff --git a/plugins/rate-limit-guard/CHANGELOG.md b/plugins/rate-limit-guard/CHANGELOG.md index 7bf8572ad..a450158af 100644 --- a/plugins/rate-limit-guard/CHANGELOG.md +++ b/plugins/rate-limit-guard/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `rate-limit-guard` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.7.12] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.7.11] ### Changed diff --git a/plugins/repo-hygiene/.claude-plugin/plugin.json b/plugins/repo-hygiene/.claude-plugin/plugin.json index bd72cb78b..0e9e1abae 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.10.12", + "version": "0.10.13", "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 255ac7ff4..7d20510ce 100644 --- a/plugins/repo-hygiene/CHANGELOG.md +++ b/plugins/repo-hygiene/CHANGELOG.md @@ -3,6 +3,12 @@ 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.10.13] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.10.12] ### Changed diff --git a/plugins/ruff-format/.claude-plugin/plugin.json b/plugins/ruff-format/.claude-plugin/plugin.json index 8ecec86e4..088dca5f8 100644 --- a/plugins/ruff-format/.claude-plugin/plugin.json +++ b/plugins/ruff-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "ruff-format", - "version": "0.6.23", + "version": "0.6.24", "description": "Auto-format and lint Python on edit via Ruff, only when a Ruff config governs the repo — using the consuming repo's own Ruff config.", "author": { "name": "Melodic Software", diff --git a/plugins/ruff-format/CHANGELOG.md b/plugins/ruff-format/CHANGELOG.md index 78768066c..eecc7fc24 100644 --- a/plugins/ruff-format/CHANGELOG.md +++ b/plugins/ruff-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `ruff-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.6.24] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.6.23] ### Changed diff --git a/plugins/session-flow/.claude-plugin/plugin.json b/plugins/session-flow/.claude-plugin/plugin.json index a33e2d2cf..b29e64586 100644 --- a/plugins/session-flow/.claude-plugin/plugin.json +++ b/plugins/session-flow/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "session-flow", - "version": "0.32.7", + "version": "0.32.8", "description": "Session-lifecycle toolkit of fourteen skills: workflow (navigate a staged dev workflow and suggest the next stage), handoff (write a save-point and resume prompt for /clear-and-resume), continue-in-background (delegate the task to a fresh background agent that continues it now — same save-point engine as handoff, delivered by launching a detached claude --bg session seeded with the resume prompt; launches only on explicit user request), keep-going (recover and continue after any interruption OR when live off-thread work looks stalled — inventory off-thread work, inspect its real output, act only on evidence, then continue; after a usage limit lifts it continues rather than summarizing-and-stalling), find-handoff (recover a lost handoff after /clear — when the resume prompt was written but never copied — via a read-only detection ladder: known-location glob of the handoffs dir, then a bounded, recency-ranked transcript scan for the handoff directive and dashed-rail markers, then a confirm-before-resume gate; surfaces only the resume prompt + metadata, never raw transcript content), clean-stop (get to a durable, linked stopping point before the machine may go away — sweep every repo/worktree for uncommitted, unpushed, or PR-less work, push it durable, put breadcrumbs in PR/issue bodies, then give a free-and-clear verdict), retro (structured end-of-session retrospective with transcript metrics and learning codification), running-retro (in-flight retrospective checkpoints that spawn a subagent to analyze the transcript so far and append classified findings to a cumulative running ledger — capture and route only, the live counterpart to retro; also owns a detached-observer substrate that can watch a session out-of-band and run the checkpoint autonomously after the session ends), orient (read-only session orientation — synthesize where we stand, what we are doing, and why, from durable + off-thread state the built-in /recap never sees: ledgers, handoffs, workflow checklists, running-retro ledgers, open PRs and work-items, and git), orchestrate (arm a session or worker with proactive-orchestration imperatives), reanchor (verify a session's working assumptions are still true against live reality — referenced PRs/issues/branches, base-branch drift, renamed/version-drifted surfaces, stale memory-tier files, and the goal a handoff records, compared across the chain so a re-derived goal reports as drift — before building on them), reconcile (retire finished off-thread work and reconcile this session's task ledger with reality — the prune-and-reconcile counterpart to keep-going's resume: inventory the work this session spawned, inspect its real state, retire the finished and close proven-done tasks, auto-settling the finished and gating any kill of still-running work; sibling sessions in the project are reported read-only), setup (check-centric verification of the observer's runtime prerequisites and configuration), and show-options (lay out which skills fit this moment as a ranked, nothing-hidden menu — a shortlist per bucket plus the complete remainder by name, resolved from the full installed catalog rather than the truncated in-context listing, so the human decides and no option is withheld for looking already-done).", "author": { "name": "Melodic Software", diff --git a/plugins/session-flow/CHANGELOG.md b/plugins/session-flow/CHANGELOG.md index fe201570a..2b63ec194 100644 --- a/plugins/session-flow/CHANGELOG.md +++ b/plugins/session-flow/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog — session-flow plugin +## [0.32.8] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.32.7] ### Changed diff --git a/plugins/skill-quality/.claude-plugin/plugin.json b/plugins/skill-quality/.claude-plugin/plugin.json index 895fbca2d..73ff1ffc8 100644 --- a/plugins/skill-quality/.claude-plugin/plugin.json +++ b/plugins/skill-quality/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "skill-quality", - "version": "0.20.2", + "version": "0.20.3", "description": "Skill-authoring QA tooling: a static contract checker that runs twenty-five deterministic checks over a Claude Code skill (frontmatter, explicit invocation mode, description/verb-contract polarity, per-skill listing-entry cap, trigger-keyword preservation, line caps, broken internal refs, markdownlint, gotchas surface, evals presence, precompute opportunity, completion-criteria signal, injection shell-declaration, fresh-eyes declaration conformance), a shared skill-listing budget reporter across a set of skills, and a bundled evals.json schema plus a deterministic eval-quality lint (duplicate case identities, missing fixtures, empty or vague grading criteria, set-coverage warnings). Runs against any repo's skills directory via the convention-resolution ladder — no baked layout.", "author": { "name": "Melodic Software", diff --git a/plugins/skill-quality/CHANGELOG.md b/plugins/skill-quality/CHANGELOG.md index f2aa9f85f..bc5f8af71 100644 --- a/plugins/skill-quality/CHANGELOG.md +++ b/plugins/skill-quality/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `skill-quality` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.20.3] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.20.2] ### Changed diff --git a/plugins/source-control/.claude-plugin/plugin.json b/plugins/source-control/.claude-plugin/plugin.json index b9a01749b..f00dfc588 100644 --- a/plugins/source-control/.claude-plugin/plugin.json +++ b/plugins/source-control/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "source-control", - "version": "0.55.14", + "version": "0.55.15", "description": "Git and GitHub delivery workflow: /commit (Conventional Commits + Co-authored-by trailer via safe heredoc mechanics), /pull-request (prep, create, CI monitoring, review-comment triage, merge, CI-log fetch), /babysit-prs (self-pacing fleet loop — safe by default; opt-in worker/autopilot tiers add gate-checked merge and thread resolution behind a deterministic Python engine), /babysit-loop (the loop-lane merge lane: a standing or drain loop that invokes babysit-prs per cycle, configured through repo-scoped babysit_loop_* keys on the layered source-control.md seam, with merge authority human-only until the target repo's tracked config adopts the lane, a gate-proven C2-mechanical baseline once adopted, and standing merge-rung raises binding from the team-tracked layer only — with one named exception, where an invocation line explicitly typing both the autopilot tier keyword and the dedicated raise argument --merge c3-this-run widens that single invocation's merge authority up to C3 behind a fresh independent frontier-tier resolver, while C4-structural and C5-untrusted-provenance stay unconditionally human-merge), /worktree (create, status, cleanup, audit for parallel-session isolation), /setup (check the effective commit-subject / PR-title convention merged across its config layers and the babysit-prs config, or apply — interview the repo and write the convention config to a chosen layer), and /resolve-conflicts (intent-first merge/rebase conflict resolution with a semantic-conflict sweep — never --abort). The commit-subject / PR-title convention is configurable via a source-control.md config written by a re-runnable setup skill, layered across a ~/.claude user-global file, the tracked team file, and a gitignored .claude/source-control.local.md personal overlay merged per key; Conventional Commits is the default when no convention is declared.", "author": { "name": "Melodic Software", diff --git a/plugins/source-control/CHANGELOG.md b/plugins/source-control/CHANGELOG.md index 1604a5f27..df5664e7a 100644 --- a/plugins/source-control/CHANGELOG.md +++ b/plugins/source-control/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `source-control` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.55.15] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.55.14] ### Changed diff --git a/plugins/typos-format/.claude-plugin/plugin.json b/plugins/typos-format/.claude-plugin/plugin.json index 54807aec4..ed911bd7b 100644 --- a/plugins/typos-format/.claude-plugin/plugin.json +++ b/plugins/typos-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "typos-format", - "version": "0.6.28", + "version": "0.6.29", "description": "Spell-check on edit via typos-cli, unconditionally — report-only by default, honoring the consuming repo's own typos configuration when one is present.", "author": { "name": "Melodic Software", @@ -29,4 +29,4 @@ "default": false } } -} +} \ No newline at end of file diff --git a/plugins/typos-format/CHANGELOG.md b/plugins/typos-format/CHANGELOG.md index 9b8093cdc..5f6451735 100644 --- a/plugins/typos-format/CHANGELOG.md +++ b/plugins/typos-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `typos-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.6.29] + +### Changed + +- `setup` prints the canonical short form of the plugin-reconfiguration guidance and cites the marketplace's plugin-reconfiguration convention as the owner of the verified-version record instead of restating it (#3585, customization-consistency Phase 1d). + ## [0.6.28] ### Changed From 343ff856ebabd538280863237d9c2ed6953923e7 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Tue, 1 Sep 2026 19:32:23 -0400 Subject: [PATCH 5/6] fix: restore typos-format manifest final newline The version-bump edit dropped the file's final newline, failing the hygiene lane's editorconfig check. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_014uBXt1tMEReShbpG5gsFUd --- plugins/typos-format/.claude-plugin/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/typos-format/.claude-plugin/plugin.json b/plugins/typos-format/.claude-plugin/plugin.json index ed911bd7b..6066c9388 100644 --- a/plugins/typos-format/.claude-plugin/plugin.json +++ b/plugins/typos-format/.claude-plugin/plugin.json @@ -29,4 +29,4 @@ "default": false } } -} \ No newline at end of file +} From 1e46a5e9177e8c07937fd1c6bcf279d7ef1dfed1 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Tue, 1 Sep 2026 20:18:25 -0400 Subject: [PATCH 6/6] chore: ignore the two resolver false-positive gitleaks fingerprints CI scans with --log-opts=--all, so the pre-annotation CLAUDE_TOKEN parser-variable commits fail every PR's hygiene lane regardless of branch content. The fingerprints are annotated false positives. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_014uBXt1tMEReShbpG5gsFUd --- .gitleaksignore | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .gitleaksignore diff --git a/.gitleaksignore b/.gitleaksignore new file mode 100644 index 000000000..5dd49e9b5 --- /dev/null +++ b/.gitleaksignore @@ -0,0 +1,10 @@ +# Gitleaks false-positive fingerprints (commit:file:rule:line). +# +# CLAUDE_TOKEN in resolve-convention-home.sh is the parser sense of "token" +# (the pointer line lifted from a convention-home region), never a credential; +# the generic-api-key rule keys on the identifier and reads the next line +# (CLAUDE_SHIM=0) as the value. The current file carries a gitleaks:allow +# annotation; these entries cover the pre-annotation commits, which the CI +# scan reaches because it runs with --log-opts=--all over every fetched ref. +f7aec1549dec60407a24a7d8ea720696b7b099af:plugins/claude-config/lib/resolve-convention-home.sh:generic-api-key:248 +708739fb2ba1b0196e93f9c07d3293bddfeed2f0:plugins/plugin-quality/lib/resolve-convention-home.sh:generic-api-key:249