diff --git a/.changes/autonomy/docs-drop-pointer-stamps-batch7-bce3eefa.md b/.changes/autonomy/docs-drop-pointer-stamps-batch7-bce3eefa.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/autonomy/docs-drop-pointer-stamps-batch7-bce3eefa.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/bugs/docs-drop-pointer-stamps-batch7-407dd970.md b/.changes/bugs/docs-drop-pointer-stamps-batch7-407dd970.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/bugs/docs-drop-pointer-stamps-batch7-407dd970.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/computer-use/docs-drop-pointer-stamps-batch7-199d2db8.md b/.changes/computer-use/docs-drop-pointer-stamps-batch7-199d2db8.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/computer-use/docs-drop-pointer-stamps-batch7-199d2db8.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/context7/docs-drop-pointer-stamps-batch7-fcb629ec.md b/.changes/context7/docs-drop-pointer-stamps-batch7-fcb629ec.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/context7/docs-drop-pointer-stamps-batch7-fcb629ec.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/discipline/docs-drop-pointer-stamps-batch7-be4bea88.md b/.changes/discipline/docs-drop-pointer-stamps-batch7-be4bea88.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/discipline/docs-drop-pointer-stamps-batch7-be4bea88.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/event-storming/docs-drop-pointer-stamps-batch7-63776025.md b/.changes/event-storming/docs-drop-pointer-stamps-batch7-63776025.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/event-storming/docs-drop-pointer-stamps-batch7-63776025.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/firecrawl/docs-drop-pointer-stamps-batch7-b03af710.md b/.changes/firecrawl/docs-drop-pointer-stamps-batch7-b03af710.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/firecrawl/docs-drop-pointer-stamps-batch7-b03af710.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/fleet/docs-drop-pointer-stamps-batch7-f8db6c03.md b/.changes/fleet/docs-drop-pointer-stamps-batch7-f8db6c03.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/fleet/docs-drop-pointer-stamps-batch7-f8db6c03.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/mcp-tools/docs-drop-pointer-stamps-batch7-3a83cb5c.md b/.changes/mcp-tools/docs-drop-pointer-stamps-batch7-3a83cb5c.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/mcp-tools/docs-drop-pointer-stamps-batch7-3a83cb5c.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/miro/docs-drop-pointer-stamps-batch7-159c7551.md b/.changes/miro/docs-drop-pointer-stamps-batch7-159c7551.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/miro/docs-drop-pointer-stamps-batch7-159c7551.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/multi-agent/docs-drop-pointer-stamps-batch7-293834c2.md b/.changes/multi-agent/docs-drop-pointer-stamps-batch7-293834c2.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/multi-agent/docs-drop-pointer-stamps-batch7-293834c2.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/mutation-testing/docs-drop-pointer-stamps-batch7-b546e700.md b/.changes/mutation-testing/docs-drop-pointer-stamps-batch7-b546e700.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/mutation-testing/docs-drop-pointer-stamps-batch7-b546e700.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/prototype/docs-drop-pointer-stamps-batch7-78e1252c.md b/.changes/prototype/docs-drop-pointer-stamps-batch7-78e1252c.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/prototype/docs-drop-pointer-stamps-batch7-78e1252c.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/rate-limit-guard/docs-drop-pointer-stamps-batch7-a4773e16.md b/.changes/rate-limit-guard/docs-drop-pointer-stamps-batch7-a4773e16.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/rate-limit-guard/docs-drop-pointer-stamps-batch7-a4773e16.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/skill-quality/docs-drop-pointer-stamps-batch7-6506a6ed.md b/.changes/skill-quality/docs-drop-pointer-stamps-batch7-6506a6ed.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/skill-quality/docs-drop-pointer-stamps-batch7-6506a6ed.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/user-experience/docs-drop-pointer-stamps-batch7-dbdb3321.md b/.changes/user-experience/docs-drop-pointer-stamps-batch7-dbdb3321.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/user-experience/docs-drop-pointer-stamps-batch7-dbdb3321.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/.changes/visualization/docs-drop-pointer-stamps-batch7-36150c96.md b/.changes/visualization/docs-drop-pointer-stamps-batch7-36150c96.md new file mode 100644 index 00000000000..b6bdc3f861e --- /dev/null +++ b/.changes/visualization/docs-drop-pointer-stamps-batch7-36150c96.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- Pointer records no longer carry an as-of date or recheck trigger; stored values keep theirs. diff --git a/plugins/autonomy/README.md b/plugins/autonomy/README.md index 5e082054f84..ac825fa05ea 100644 --- a/plugins/autonomy/README.md +++ b/plugins/autonomy/README.md @@ -23,8 +23,7 @@ gate is not enforced. The setup `check` reports whether `node` resolves. The hoo whether `node` and `jq` resolve. - **Pointer**: when checking whether a Claude Code install brings Node, fetch - live. **As of**: 2026-10-11. - **Recheck trigger**: the setup page says the native binary ships or uses Node. + live. ## Shipped capability (0.7.0) @@ -148,8 +147,7 @@ marker file. The gate reads those signals itself and does not lean on the `/goal (pointer: when deciding whether a command hook could use that evaluator instead, fetch [goal: how evaluation works](https://code.claude.com/docs/en/goal#how-evaluation-works) and [hooks guide: prompt-based hooks](https://code.claude.com/docs/en/hooks-guide#prompt-based-hooks) -live; as of 2026-11-03; recheck when either section changes what a command hook can trigger). The -marker is consumed (deleted) when it authorizes a stop, one marker, one stop, so a file left in the +live). The marker is consumed (deleted) when it authorizes a stop, one marker, one stop, so a file left in the checkout by a prior completed run never authorizes the stops of a later lane run. Use `/goal` for a single session, this gate for a standing lane. @@ -180,7 +178,7 @@ settings precedence: session, run the arm helper from the installed plugin the same way, then pass the id as this plugin's `lane_stop_gate_arm_id` option through `--settings`. Read the option's settings shape from [settings reference: pluginConfigs](https://code.claude.com/docs/en/settings-reference#pluginconfigs) - live (as of 2026-11-03; recheck when that entry changes its shape). + live. 3. **User `settings.json`**, located from the hook's own install path, a *persistent* enable that also gates interactive sessions, which defeats the default-OFF design; prefer the launcher. @@ -200,8 +198,6 @@ location, so only managed settings can enable the gate there. - **Pointer**: when checking how an option value reaches a hook, fetch live. - **As of**: 2026-11-03. **Recheck trigger**: that section changes how an option value reaches a - hook process. It is fail-open (unreadable stdin / missing `jq` / a `SubagentStop` never trips it) and bounded against runaway by the `stop_hook_active` one-nudge guard plus Claude Code's own cap on @@ -209,13 +205,11 @@ consecutive Stop-hook continuations. It catches a graceful self-stop only: a clo killed process, or `/loop` expiry emit no `Stop` event. - **Pointer**: when checking the Stop input field the guard reads, fetch - live. **As of**: 2026-10-11. **Recheck - trigger**: a Claude Code changelog entry changes the Stop hook's input fields. + live. - **Pointer**: when checking Claude Code's own cap on consecutive Stop-hook continuations and the setting that raises it, fetch [Stop hook hits the block cap](https://code.claude.com/docs/en/hooks-guide#stop-hook-hits-the-block-cap) - live. **As of**: 2026-10-18. **Recheck trigger**: that section changes the number of consecutive - blocks it allows, or renames `CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`. + live. When the consuming repo sets `HOOK_TELEMETRY_SINK`, the gate emits one fire-and-forget envelope per evaluated outcome (`hook: "lane-stop-gate"`; payload contract in the marketplace's hook-telemetry diff --git a/plugins/autonomy/reference/guardrails/isolation-ladder.md b/plugins/autonomy/reference/guardrails/isolation-ladder.md index ad1f1ca05a5..1d564ed002c 100644 --- a/plugins/autonomy/reference/guardrails/isolation-ladder.md +++ b/plugins/autonomy/reference/guardrails/isolation-ladder.md @@ -13,9 +13,7 @@ document names substrate classes as marked examples only, never an instance list tools, hooks, and protocol-connected tool surfaces still execute on the host. An attended ergonomics tier, not an autonomy tier. Which level a harness's own sandbox reaches is read live: see the guardrail slice's - [sandbox rating record](../../skills/setup/context/guardrail-slice.md#harness-records-for-the-vendor-neutral-leaves) - (as of 2026-10-11; recheck when that record's trigger fires, or the linked heading is renamed or - removed). + [sandbox rating record](../../skills/setup/context/guardrail-slice.md#harness-records-for-the-vendor-neutral-leaves). - **`L2`: whole-process OS-enforced boundary with default-deny egress, credential protection, contained workspace host-writes, and policy nothing the run can install may widen.** The minimum for any unattended run, except on the diff --git a/plugins/autonomy/reference/prerequisite-resolution.md b/plugins/autonomy/reference/prerequisite-resolution.md index b137f352e16..e6de579ebfa 100644 --- a/plugins/autonomy/reference/prerequisite-resolution.md +++ b/plugins/autonomy/reference/prerequisite-resolution.md @@ -78,8 +78,7 @@ tokens"; they are not reused as probe labels. is a host-harness rule this contract does not restate. - **Pointer**: when a verdict depends on what enables a declared server, read the [project server enablement record](../skills/setup/context/prerequisite-resolution-slice.md#project-server-enablement) - and fetch the section it names live. **As of**: 2026-11-03. **Recheck trigger**: that - record's recheck trigger fires, or its heading is renamed or removed. + and fetch the section it names live. 3. **machine-context**: CLI availability, local substrates, deterministic and per-surface. A result is a claim about the probed surface only, never a repo claim. 4. **prose-context inference**: host instruction files, agent-instruction files, README are a @@ -98,8 +97,6 @@ because this tree names no vendor. Last verified 2026-09-19, against harness ver - **Pointer**: when a proposal depends on which instruction files a session loads, read the [instruction-file loading record](../skills/setup/context/prerequisite-resolution-slice.md#instruction-file-loading) and fetch the sections it names live. -- **As of**: 2026-10-11 -- **Recheck trigger**: that record's recheck trigger fires, or its heading is renamed or removed. Probe evidence is durable per surface under the existing isolation-binding pattern. Only signals with no owner (CI-config presence, flag-SDK presence) gain probes owned by this contract; diff --git a/plugins/autonomy/reference/routines.md b/plugins/autonomy/reference/routines.md index 6af92b8a513..d3d2e54626e 100644 --- a/plugins/autonomy/reference/routines.md +++ b/plugins/autonomy/reference/routines.md @@ -351,10 +351,8 @@ commentary, and a leaf that contradicts one is non-conforming. the app-control, playwright and source-control plugins plus a browser, and the network allowlist admits the browser download. *Basis:* the harness documentation page for cloud environments, section on what carries over from your setup, whose table states that a cloud session does not - install the plugins a repository enables in its settings. *As of:* 2026-10-04. This supersedes - the 2026-09-06 transfer-path record below on plugin loading. *Recheck trigger:* that table's - repository-settings plugin row changes, or a release note names plugin loading in cloud - sessions. The consumer picks the cadence (daily is a reasonable start); a + install the plugins a repository enables in its settings. This supersedes the transfer-path + record below on plugin loading. The consumer picks the cadence (daily is a reasonable start); a pass with no change since the last clean one skips, by the skill's own rule. No leaf under `routines/` is written until a consumer records a manual run of the skill. diff --git a/plugins/autonomy/reference/runner/escalation.md b/plugins/autonomy/reference/runner/escalation.md index f5e2673d894..4451bede04e 100644 --- a/plugins/autonomy/reference/runner/escalation.md +++ b/plugins/autonomy/reference/runner/escalation.md @@ -173,9 +173,6 @@ available everywhere the harness runs, a second reason it never substitutes for - **Pointer**: when binding either leg, read the guardrail slice's [escalation transports record](../../skills/setup/context/guardrail-slice.md#harness-records-for-the-vendor-neutral-leaves) and fetch the sections it names live. -- **As of**: 2026-10-11 -- **Recheck trigger**: that record's recheck trigger fires, or the linked heading is renamed or - removed. ### Contract-default severities @@ -239,9 +236,6 @@ the two are not interchangeable. - **Pointer**: when adopting the interrupt shape, read the guardrail slice's [pause and resume record](../../skills/setup/context/guardrail-slice.md#harness-records-for-the-vendor-neutral-leaves) and fetch the sections it names live. -- **As of**: 2026-10-11 -- **Recheck trigger**: that record's recheck trigger fires, or the linked heading is renamed or - removed. ## Escalation telemetry diff --git a/plugins/autonomy/reference/telemetry.md b/plugins/autonomy/reference/telemetry.md index 228ec7c74ee..144ac271c08 100644 --- a/plugins/autonomy/reference/telemetry.md +++ b/plugins/autonomy/reference/telemetry.md @@ -91,9 +91,6 @@ join, because native joining does not cover every session kind the contract serv [Inbound trace context in headless sessions](../skills/setup/context/agent-session-telemetry.md#inbound-trace-context-in-headless-sessions) and [Traces stay beta](../skills/setup/context/agent-session-telemetry.md#traces-stay-beta), and fetch the sections they name live. -- **As of**: 2026-10-11 -- **Recheck trigger**: either of those records' recheck triggers fires, or either linked heading is - renamed or removed. ## Sink binding: out of contract diff --git a/plugins/autonomy/skills/setup/SKILL.md b/plugins/autonomy/skills/setup/SKILL.md index aa5b2b293c0..bccdae61e69 100644 --- a/plugins/autonomy/skills/setup/SKILL.md +++ b/plugins/autonomy/skills/setup/SKILL.md @@ -116,8 +116,7 @@ paid sinks are advisory + explicit opt-in with cost surfaced first. 3. **Agent-session wiring (Claude Code specifics)**. Turn the session's telemetry export on with the variables [monitoring: common configuration variables](https://code.claude.com/docs/en/monitoring-usage#common-configuration-variables) - names, read live (as of 2026-11-03; recheck when that section renames the enable or exporter - variables), and for work-item-dispatched sessions set + names, read live, and for work-item-dispatched sessions set `OTEL_RESOURCE_ATTRIBUTES` carrying `autonomy.work_item.url=`. The slice treats spans as optional and never depends on beta span shapes. It joins on `autonomy.work_item.url`, never on inbound trace context; relying on native inbound-context @@ -202,9 +201,7 @@ a watched repository's own settings cannot supply plugin options, so a repo cann verification. The slice proposes neither as a binding field. - **Pointer**: when checking which settings scopes plugin options are read from, fetch - live. **As of**: 2026-10-11. - **Recheck trigger**: a Claude Code changelog entry changes the scopes `pluginConfigs` is read - from. + live. **Layered resolution order.** Org-policy-home defaults → settings-as-code per-repo security binding → repo-local non-security remaps. Later layers refine earlier ones for diff --git a/plugins/autonomy/skills/setup/context/agent-session-telemetry.md b/plugins/autonomy/skills/setup/context/agent-session-telemetry.md index 82a90197079..79615e07368 100644 --- a/plugins/autonomy/skills/setup/context/agent-session-telemetry.md +++ b/plugins/autonomy/skills/setup/context/agent-session-telemetry.md @@ -15,9 +15,6 @@ for the signal events ride beside `CLAUDE_CODE_ENABLE_TELEMETRY`. - **Pointer**: when choosing which exporters a binding sets, fetch and live. -- **As of**: 2026-10-11 -- **Recheck trigger**: a Claude Code changelog entry touching the logs exporter or the code edit - decision counter, or either section is renamed or removed. ## Resource attributes on every datapoint and event @@ -27,9 +24,6 @@ metrics on that attribute never sets `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=f - **Pointer**: when checking which signals carry resource attributes and what that variable changes, fetch live. -- **As of**: 2026-10-11 -- **Recheck trigger**: a Claude Code changelog entry touching resource attributes or - `OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES`, or that section is renamed or removed. ## Cloud session identity @@ -39,9 +33,6 @@ A binding that groups or filters telemetry by cloud session keys on `ccr.session - **Pointer**: when attributing telemetry to a cloud or Claude Tag session, fetch the "Attribute telemetry to cloud sessions" section, , live. -- **As of**: 2026-10-31 -- **Recheck trigger**: a Claude Code changelog entry touching `ccr.session.id` or cloud-session - attributes, or that section is renamed or removed. ## Inbound trace context in headless sessions @@ -69,9 +60,6 @@ The slice treats spans as optional and never depends on beta span shapes. - **Pointer**: when a binding wires spans, fetch live for the variables spans need. -- **As of**: 2026-10-11 -- **Recheck trigger**: the page drops the beta label from that section or drops the - `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` flag. ## Evidence that a guardrail fired @@ -85,9 +73,6 @@ rule or one hook from that event alone, and it takes no rejection evidence from , , and live. -- **As of**: 2026-10-11 -- **Recheck trigger**: a Claude Code changelog entry touching `claude_code.tool_decision` or its - `source` values, or any of those sections is renamed or removed. ## GenAI mirrors on beta spans @@ -96,8 +81,6 @@ records why nothing in that namespace can be pinned yet. - **Pointer**: when a binding reads span attributes, fetch live. -- **As of**: 2026-10-11 -- **Recheck trigger**: that section's span attribute tables are renamed or removed. ## Memory observability gap diff --git a/plugins/autonomy/skills/setup/context/guardrail-slice.md b/plugins/autonomy/skills/setup/context/guardrail-slice.md index 6b27a953742..b38a61bac90 100644 --- a/plugins/autonomy/skills/setup/context/guardrail-slice.md +++ b/plugins/autonomy/skills/setup/context/guardrail-slice.md @@ -120,9 +120,6 @@ from memory. - **Pointer**: when rating it, fetch live. -- **As of**: 2026-10-11 -- **Recheck trigger**: a Claude Code changelog entry changes what runs outside the sandbox, or that - section is renamed or removed. **Escalation transports.** The [runner escalation leaf](../../../reference/runner/escalation.md)'s channel leg binds to a hook @@ -133,11 +130,7 @@ that posts to an endpoint, and its push leg to the agent's own push-notification live for the opt-in, and live for the `PushNotification` row of its tools table, which says where push delivery is unavailable. That table has no section - anchor as of this date, so the pointer names the row. -- **As of**: 2026-10-11 -- **Recheck trigger**: the hooks page drops the HTTP hook type, the tools reference drops or - renames the `PushNotification` row, a release note names either surface, or either anchored - section is renamed or removed. + anchor, so the pointer names the row. **Pause and resume.** The escalation leaf's deferred mid-run interrupt would build on Claude Code's permission modes and on session and subagent resume, as the sections below define them. @@ -146,6 +139,3 @@ permission modes and on session and subagent resume, as the sections below defin , , and live. -- **As of**: 2026-10-11 -- **Recheck trigger**: a release note names an await-human-input pause, or the resume rule changes - on either the sessions or the subagents page. diff --git a/plugins/autonomy/skills/setup/context/prerequisite-resolution-slice.md b/plugins/autonomy/skills/setup/context/prerequisite-resolution-slice.md index 8e2974c5fb1..4b22f28ac4b 100644 --- a/plugins/autonomy/skills/setup/context/prerequisite-resolution-slice.md +++ b/plugins/autonomy/skills/setup/context/prerequisite-resolution-slice.md @@ -66,9 +66,6 @@ record holds the upstream pointer for the platform bound the - **Pointer**: when a proposal depends on whether a session sees `AGENTS.md`, fetch and live. -- **As of**: 2026-10-11 -- **Recheck trigger**: a Claude Code release note names `AGENTS.md` loading or the Project - instructions setting, or either section is renamed or removed. ## Project server enablement @@ -78,9 +75,6 @@ the config-audit surface. This record holds the upstream pointer for the enablem - **Pointer**: when deciding what enables a project server, fetch live. -- **As of**: 2026-11-03 -- **Recheck trigger**: that section adds, removes or renames a setting that approves or rejects a - project server. ## Binding section shape diff --git a/plugins/autonomy/skills/setup/context/trigger-dispatch-slice.md b/plugins/autonomy/skills/setup/context/trigger-dispatch-slice.md index 4a9728e361c..2eb34f7816c 100644 --- a/plugins/autonomy/skills/setup/context/trigger-dispatch-slice.md +++ b/plugins/autonomy/skills/setup/context/trigger-dispatch-slice.md @@ -40,8 +40,7 @@ slice and its templates. The contract stays surface-class vocabulary only. live for the version floor and what the flag denies, and live for what - `--bare` skips. **As of**: 2026-10-11. **Recheck trigger**: either section drops its flag or - changes what it skips or denies. + `--bare` skips. 3. **Advise plan-gated native integrations.** Vendor-hosted channel agents and native tracker automations that carry a plan/seat cost: steps + cost surfaced, explicit opt-in, never the default path. Zero paid dependencies on the default path. diff --git a/plugins/autonomy/skills/setup/templates/ci-otlp-artifact.md b/plugins/autonomy/skills/setup/templates/ci-otlp-artifact.md index 46b69e6c82c..aa126c564b4 100644 --- a/plugins/autonomy/skills/setup/templates/ci-otlp-artifact.md +++ b/plugins/autonomy/skills/setup/templates/ci-otlp-artifact.md @@ -62,8 +62,7 @@ and writes JSON-lines into the same artifact directory. - **Pointer**: when checking how the agent CLI exports telemetry, fetch [monitoring: configuration details](https://code.claude.com/docs/en/monitoring-usage#configuration-details) - live. **As of**: 2026-11-03. **Recheck trigger**: that section adds an exporter that writes to a - file. + live. Config shape: @@ -103,8 +102,6 @@ export OTEL_RESOURCE_ATTRIBUTES=autonomy.work_item.url= - **Pointer**: when setting the telemetry variables, fetch [monitoring: quick start](https://code.claude.com/docs/en/monitoring-usage#quick-start) live. - **As of**: 2026-11-03. **Recheck trigger**: the quick start renames or adds a variable the - session needs to export. ## Artifact upload + verification diff --git a/plugins/autonomy/skills/setup/templates/trigger-adapters.md b/plugins/autonomy/skills/setup/templates/trigger-adapters.md index 061c488860f..72536de607f 100644 --- a/plugins/autonomy/skills/setup/templates/trigger-adapters.md +++ b/plugins/autonomy/skills/setup/templates/trigger-adapters.md @@ -46,9 +46,7 @@ A platform event workflow (marked example, GitHub Actions class: `on: issues` ty `labeled`/`assigned`, `on: issue_comment` type `created` for @-mention forms, `on: pull_request`, with the workflow file on the default branch; for which branch's file an event runs, see -[Events that trigger workflows](https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#issues), -as of 2026-11-10, rechecked when that section changes which branch's workflow file an issue event -runs): +[Events that trigger workflows](https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#issues)): 1. Filter to the signal condition (`` applied, assignment to ``, @-mention token). @@ -136,24 +134,18 @@ Vendor facts this shape depends on: [Get repository permissions for a user](https://docs.github.com/en/rest/collaborators/collaborators#get-repository-permissions-for-a-user) and the "Metadata" section of [Permissions required for fine-grained personal access tokens](https://docs.github.com/en/rest/authentication/permissions-required-for-fine-grained-personal-access-tokens). - As of: 2026-10-04. Recheck trigger: the endpoint's role mapping or required permission changes. - **Routine triggers.** Pointer: [Add an API trigger](https://code.claude.com/docs/en/routines#add-an-api-trigger) and - [Supported events](https://code.claude.com/docs/en/routines#supported-events). As of: - 2026-11-10. Recheck trigger: the supported GitHub events change, or `/fire` leaves its beta - header. + [Supported events](https://code.claude.com/docs/en/routines#supported-events). - **App actions on a user's behalf.** Pointer: [Authenticating with a GitHub App on behalf of a user](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-with-a-github-app-on-behalf-of-a-user). - As of: 2026-10-04. Recheck trigger: GitHub changes how user access token activity is - attributed. ## temporal: scheduled drain + poll-detector Two shapes on the same scheduled surface (marked example: `schedule` cron, whose interval floor, delays and auto-disable rules are in [schedule](https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule), -as of 2026-11-10, rechecked when that section changes them, plus `workflow_dispatch` for manual -kicks): +plus `workflow_dispatch` for manual kicks): - **Drain** (dispatch, not an adapter): invoke the work-item queue capability's autonomous drain mode via the invocation-adapter seam, where the seam lease claims race-safely; the drain @@ -209,9 +201,5 @@ Vendor facts this shape depends on, for Slack, where Claude ships as two separat - **Claude Tag.** Pointer: [Plans that include Claude Tag](https://claude.com/docs/claude-tag/overview#plans-that-include-claude-tag). - As of: 2026-11-10. Recheck trigger: Claude Tag leaves public beta, or the plans that include it - change. - **Claude Code in Slack, the earlier version.** Pointer: - [Access and permissions](https://code.claude.com/docs/en/slack#access-and-permissions). As of: - 2026-11-10. Recheck trigger: the page retires this version, or the plans or workspaces it - answers change. + [Access and permissions](https://code.claude.com/docs/en/slack#access-and-permissions). diff --git a/plugins/bugs/README.md b/plugins/bugs/README.md index f1264b7a3e7..da797f4d8ec 100644 --- a/plugins/bugs/README.md +++ b/plugins/bugs/README.md @@ -95,8 +95,7 @@ lane; a non-local or security-relevant one, and every finding from an unattended the output the plugin relies on to outlive the session, and it is what the next rotation reads back. When checking where the plugin data directory lives and how long it is kept, fetch [plugins manifest reference: Environment variables](https://code.claude.com/docs/en/plugins/manifest-reference#environment-variables) -live (as of 2026-11-03; recheck trigger: that section changes where `${CLAUDE_PLUGIN_DATA}` lives -or when it is deleted). +live. ## Configuration @@ -111,8 +110,7 @@ Two surfaces with two different owners. Changes to it go through Claude Code's own plugin configuration. When checking when Claude Code prompts for the value and where it stores it, fetch [plugins manifest reference: User configuration](https://code.claude.com/docs/en/plugins/manifest-reference#user-configuration) -live (as of 2026-11-03; recheck trigger: that section changes when an option is prompted for or -where its value is stored). +live. **Team, the tracked `docs/conventions/bugs.yaml`**, which `/bugs:scan` reads for its lanes (`lanes`), checked against @@ -186,8 +184,7 @@ gh issue create --type Bug --body-file Let `gh` prompt for the title interactively. On a repository without native Issue Types, omit `--type Bug` and add a `type: bug` label instead. When checking what `--type` takes, fetch -[gh issue create: Options](https://cli.github.com/manual/gh_issue_create#options) live (as of -2026-11-03; recheck trigger: that section renames or drops `--type`). If filing +[gh issue create: Options](https://cli.github.com/manual/gh_issue_create#options) live. If filing non-interactively, never paste the reporter's title text into the command string. Write it to a file and pass `--title "$(cat )"`: the substitution result is a quoted argument value and is not re-parsed, so backticks or `$( )` in reporter text cannot execute. diff --git a/plugins/bugs/skills/scan/SKILL.md b/plugins/bugs/skills/scan/SKILL.md index e4ead4b1eec..852b4b76421 100644 --- a/plugins/bugs/skills/scan/SKILL.md +++ b/plugins/bugs/skills/scan/SKILL.md @@ -25,9 +25,6 @@ shell invocation"); which commands a worktree-isolated session refuses is read a [worktrees: how Claude Code enforces isolation](https://code.claude.com/docs/en/worktrees#how-claude-code-enforces-isolation), and how injected commands run at [skills: how injected commands run](https://code.claude.com/docs/en/skills#how-injected-commands-run). -As of: 2026-11-10. Recheck triggers: the gather-block section moves, is renamed, or changes how the -block is composed; the worktrees section changes which commands it refuses; the skills section -changes how a block's commands are run. ## Pre-computed context @@ -70,9 +67,6 @@ the next run has no filed item to read back. - **Pointer**: when deciding whether `${CLAUDE_PLUGIN_DATA}` outlives a run, fetch [plugins manifest reference § Environment variables](https://code.claude.com/docs/en/plugins/manifest-reference#environment-variables) live. -- **As of**: 2026-11-03 -- **Recheck trigger**: that section changes where the plugin data directory lives or when it is - deleted. ## Modes @@ -178,16 +172,12 @@ below). With no role map, each gate passes the session's level. Pointer: for the `effort` and its precedence, see ; for which model the session's level reaches, see . -As of: 2026-11-04. Recheck trigger: either section changes precedence, which spawns honor `effort`, -or which model the session's level reaches. Name the model and effort each stage was dispatched with in the run metadata: the level passed, or `unset` when none was. A dispatch the harness rejects means the role map names an alias this session cannot use: report it rather than substitute one. The metadata names the model asked for, not proof of the model that ran. Pointer: for the model order, how a spawn's `model` alias resolves and what happens to a blocked one, see . -As of: 2026-11-04. Recheck trigger: that section changes the order, what can replace a passed model, -how an alias resolves or how a blocked value is handled. **Breadth by scope.** After Step 1 enumerates the files (test suites excluded), classify the scope: @@ -210,7 +200,6 @@ an effort level, the body was read directly instead of skill-loaded: treat the r Pointer: the substitution and the values it can take are read at [skills: available string substitutions](https://code.claude.com/docs/en/skills#available-string-substitutions). -As of: 2026-10-11. Recheck trigger: that section renames the variable or changes its values. Effort scales the **recall stage only**. The gate never relaxes with effort: every candidate faces a separate fresh-context refuting subagent at every effort level, and "if uncertain, it is NOT a finding" binds at diff --git a/plugins/bugs/skills/setup/SKILL.md b/plugins/bugs/skills/setup/SKILL.md index d77516ee041..d2493c838ae 100644 --- a/plugins/bugs/skills/setup/SKILL.md +++ b/plugins/bugs/skills/setup/SKILL.md @@ -19,8 +19,6 @@ reconfiguration routes through the native flow. Pointer: where option values are stored and which settings files they are read from are read at [plugins manifest reference: user configuration](https://code.claude.com/docs/en/plugins/manifest-reference#user-configuration) and [settings reference: `pluginConfigs`](https://code.claude.com/docs/en/settings-reference#pluginconfigs). -As of: 2026-10-11. Recheck trigger: either section changes where option values are stored or which -settings files they are read from. Keys, layers, merge semantics, the `output_dir` partition rule, and the file format live in [`${CLAUDE_PLUGIN_ROOT}/reference/config.md`](../../reference/config.md). Read it before checking or @@ -61,9 +59,6 @@ Modify nothing. Report both surfaces, then one remediation line per gap. when a saved value applies, fetch [plugin CLI reference § plugin configure](https://code.claude.com/docs/en/plugins/cli-reference#plugin-configure) live. - - **As of**: 2026-11-11 - - **Recheck trigger**: that section changes the command's flags, how it reports a saved or - refused value, or when a saved value applies. ### B. `docs/conventions/bugs.yaml` (tracked lane config) @@ -158,7 +153,7 @@ by re-reading it, for `output_dir` by a rerun in a fresh session. - **Verify a reconfiguration only in a fresh session.** When checking when a saved value reaches skill content, fetch [plugins manifest reference § Reference a saved value](https://code.claude.com/docs/en/plugins/manifest-reference#reference-a-saved-value) and [skills § Available string substitutions](https://code.claude.com/docs/en/skills#available-string-substitutions) - live (as of 2026-11-03; recheck trigger: either section changes when a substitution is applied). + live. - **Never uninstall to reconfigure.** Reconfigure through `check` step A4; what an uninstall deletes is linked from the convention section that step cites. - **Check the headless route's own failure signal** before reporting a value saved, as the diff --git a/plugins/bugs/skills/write/SKILL.md b/plugins/bugs/skills/write/SKILL.md index df4438cbbe4..912a492e7cc 100644 --- a/plugins/bugs/skills/write/SKILL.md +++ b/plugins/bugs/skills/write/SKILL.md @@ -20,7 +20,6 @@ Keep the pipe in the command: a read-time cap ("read only the first 5 entries") because the result is already formed. Pointer: how much of a command's output reaches the result, and in what form, is read at [tools reference: output limits](https://code.claude.com/docs/en/tools-reference#output-limits). -As of: 2026-10-11. Recheck trigger: that section changes the inline ceiling or what arrives past it. A failure (not a repository, git unavailable) is an unknown value; carry on. These stay body Bash calls rather than pre-compute lines. The dated record for how the pre-compute block is composed is @@ -29,9 +28,6 @@ shell invocation"); which commands a worktree-isolated session refuses is read a [worktrees: how Claude Code enforces isolation](https://code.claude.com/docs/en/worktrees#how-claude-code-enforces-isolation), and how injected commands run at [skills: how injected commands run](https://code.claude.com/docs/en/skills#how-injected-commands-run). -As of: 2026-11-10. Recheck triggers: the gather-block section moves, is renamed, or changes how the -block is composed; the worktrees section changes which commands it refuses; the skills section -changes how a block's commands are run. ## Pre-computed context @@ -118,8 +114,7 @@ defect is visual and none came with the description, ask the reporter for one. A screenshot or image path backs Expected vs actual like the reporter's own words; name it under Notes so it is attached when filed. Ask for a screenshot or a few still frames, not a video (which file types Read handles: -[tools reference: Read tool behavior](https://code.claude.com/docs/en/tools-reference#read-tool-behavior), -as of 2026-11-10; recheck when that section adds a video type). A repo that wants a screenshot on every rendered-output report says so in its consumer +[tools reference: Read tool behavior](https://code.claude.com/docs/en/tools-reference#read-tool-behavior)). A repo that wants a screenshot on every rendered-output report says so in its consumer gotchas. If it's motion, use a frame-state capture. Find the frame where something needs fixing, copy the @@ -152,8 +147,7 @@ this order, and always tell the user the final path: another repository's report on the same symbol. When checking what the data directory is keyed by, fetch [plugins manifest reference § Environment variables](https://code.claude.com/docs/en/plugins/manifest-reference#environment-variables) - live (as of 2026-11-03; recheck trigger: that section changes what `${CLAUDE_PLUGIN_DATA}` is - keyed by). + live. 3. If neither resolves, `${CLAUDE_PROJECT_DIR}/.bug-reports/`, stating clearly where the file landed. Filename: an ISO basic UTC timestamp with no colons (Windows-safe), then a kebab-case slug of the @@ -178,7 +172,7 @@ Recommend the next step; do not invoke it yourself: so backticks or `$( )` in the reporter's text cannot execute. On a repo without native Issue Types, drop `--type Bug` and add a `type: bug` label when the repo defines one. When checking what `--type` takes, fetch [gh issue create: Options](https://cli.github.com/manual/gh_issue_create#options) - live (as of 2026-11-03; recheck trigger: that section renames or drops `--type`). If neither path + live. If neither path applies and a work-item tracker MCP tool is available, use it. - **A fix is next.** Diagnose first when the root cause is unknown (`/debugging:debug` when installed); when the report names the cause, go to the fix (`/implementation:implement` when @@ -208,8 +202,7 @@ severity cannot be calibrated from context, ask one question rather than invent - **`/bug` (built-in command)**: reports a problem with Claude Code itself. What it includes and where the report goes are read live from its row. Pointer: the second row of [context/native-bug.md](context/native-bug.md#the-built-in-bug-command-verification-record) - carries that record. As of: 2026-10-11. Recheck trigger: that row moves or stops carrying its own - pointer and trigger. + carries that record. - **This skill**: a five-field report for a defect in the person's code, grounded in their repository, filed nowhere unless they ask. diff --git a/plugins/bugs/skills/write/context/native-bug.md b/plugins/bugs/skills/write/context/native-bug.md index 4bd0ebb834b..7a20be1f39a 100644 --- a/plugins/bugs/skills/write/context/native-bug.md +++ b/plugins/bugs/skills/write/context/native-bug.md @@ -1,14 +1,14 @@ # The built-in `/bug` command: verification record Detail behind the `/bug` Boundary section in [SKILL.md](../SKILL.md). Each row is a four-part -record: the claim, the basis it rests on, the date it was checked, and the event that makes it +record: the claim, the basis it rests on, the date it was checked (left empty on pointer rows), and the event that makes it worth checking again. "The extraction" below is the `/harness-ops:inventory` extraction of the installed 2.1.284 binary, 2026-09-29. | Claim | Basis | As of | Recheck when | |---|---|---|---| | `bug` is a built-in command of type `local-jsx`, alias `share`, argument hint `[report]`, described as "Report a bug or share your conversation". User-invocable only (not model-invocable), not hidden, not gated | The extraction | 2026-09-29 | A release renames it, changes its alias, or changes its invocability | -| We route defects in Claude Code itself to `/bug` and never describe its destination or contents ourselves; both are read from its row | Pointer: the `/bug` row of [commands: all commands](https://code.claude.com/docs/en/commands#all-commands) | 2026-10-11 | That row changes or is removed | +| We route defects in Claude Code itself to `/bug` and never describe its destination or contents ourselves; both are read from its row | Pointer: the `/bug` row of [commands: all commands](https://code.claude.com/docs/en/commands#all-commands) | | | ## Why the verdict is complementary diff --git a/plugins/computer-use/README.md b/plugins/computer-use/README.md index ead933c7916..22c2c88fe36 100644 --- a/plugins/computer-use/README.md +++ b/plugins/computer-use/README.md @@ -31,8 +31,7 @@ documented upstream: clicking, and cannot recover itself once it does. Measured, not inferred. - **`zoom` is the lever for screenshot detail**, not the display: it re-captures a region at full resolution. For how screenshots are downscaled, see - [Computer use: Screenshots are downscaled automatically](https://code.claude.com/docs/en/computer-use#screenshots-are-downscaled-automatically) - (as of 2026-11-03; recheck when that section changes how the target size is set). + [Computer use: Screenshots are downscaled automatically](https://code.claude.com/docs/en/computer-use#screenshots-are-downscaled-automatically). - **Capture and input failures are environment state**, not tool defects, and each has a distinct signature worth reading rather than retrying past. @@ -56,8 +55,7 @@ platform-neutral material only. Surfaces are not interchangeable, and the skill says so: the Claude Code CLI and the Desktop app differ in the platforms they run computer use on and in how they enable it, so guidance written for one is wrong on the other. The skills read that split live from -[Computer use: Differences from the Desktop app](https://code.claude.com/docs/en/computer-use#differences-from-the-desktop-app) -(as of 2026-10-11; recheck when that section's table changes). +[Computer use: Differences from the Desktop app](https://code.claude.com/docs/en/computer-use#differences-from-the-desktop-app). ## What it deliberately does not do @@ -74,6 +72,4 @@ for one is wrong on the other. The skills read that split live from The `computer-use` MCP server must be enabled, on an eligible setup, with OS-level permissions granted. `/computer-use:setup` probes all of it and reports what is missing; installing and enabling remain the operator's. For which plans, providers and session modes are eligible, see -[Computer use: Troubleshooting](https://code.claude.com/docs/en/computer-use#troubleshooting) -(as of 2026-10-11; recheck when that section changes the plans, providers or session modes it -names). +[Computer use: Troubleshooting](https://code.claude.com/docs/en/computer-use#troubleshooting). diff --git a/plugins/computer-use/skills/diagnose/SKILL.md b/plugins/computer-use/skills/diagnose/SKILL.md index 80ba87914e0..91377cc6696 100644 --- a/plugins/computer-use/skills/diagnose/SKILL.md +++ b/plugins/computer-use/skills/diagnose/SKILL.md @@ -65,9 +65,6 @@ offers are the upstream page's to state; read them there rather than from this s - **Pointer**: when the surface, its platforms or its enabling path matters to a diagnosis, fetch [Computer use: Differences from the Desktop app](https://code.claude.com/docs/en/computer-use#differences-from-the-desktop-app) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: that section's table adds, drops or changes a row, or a release note names - computer use on either surface. ## Gotchas @@ -77,8 +74,6 @@ offers are the upstream page's to state; read them there rather than from this s - **Pointer**: for how screenshots are downscaled, fetch [Computer use: Screenshots are downscaled automatically](https://code.claude.com/docs/en/computer-use#screenshots-are-downscaled-automatically) live. - - **As of**: 2026-11-03 - - **Recheck trigger**: that section changes how the target size is set. - **`zoom` re-captures; it does not crop.** It therefore fails when capture is failing, and it recovers genuine detail when capture is healthy. Both follow from the same fact. - **A tool error naming an unexpected app is the safety gate working**, not a defect. Nothing was diff --git a/plugins/computer-use/skills/diagnose/reference/failure-diagnostics.md b/plugins/computer-use/skills/diagnose/reference/failure-diagnostics.md index ae209d6a452..85a68654b9e 100644 --- a/plugins/computer-use/skills/diagnose/reference/failure-diagnostics.md +++ b/plugins/computer-use/skills/diagnose/reference/failure-diagnostics.md @@ -2,8 +2,7 @@ Our content, measured 2026-08-10 on Windows 11 / Claude Desktop. This file exists because upstream's troubleshooting does not cover screenshot failures. Pointer: -[Troubleshooting](https://code.claude.com/docs/en/computer-use#troubleshooting). As of: 2026-11-10. -Recheck trigger: that section adds an entry for capture failures. +[Troubleshooting](https://code.claude.com/docs/en/computer-use#troubleshooting). The governing rule: **a capture or input failure is almost always environment state, not a tool defect.** Retrying an action that failed for an environmental reason will fail identically. @@ -47,8 +46,7 @@ Walk it in order; stop at the first hit. screensaver is *not* a lock and *not* display sleep. They are three separate settings. 2. **Is the workstation locked?** The secure desktop blocks capture and input wholesale. 3. **Is the display asleep / powered off?** Upstream is explicit that the machine must be awake - ([Cowork computer use](https://support.claude.com/en/articles/14128542-let-claude-use-your-computer-in-cowork), - verified 2026-08-10; recheck when that article stops requiring an awake machine). + ([Cowork computer use](https://support.claude.com/en/articles/14128542-let-claude-use-your-computer-in-cowork)). 4. **Are you pinned to a monitor that is off?** An explicit `switch_display` persists until reset. Return to `auto` and retry before concluding anything. diff --git a/plugins/computer-use/skills/diagnose/reference/screenshots-and-zoom.md b/plugins/computer-use/skills/diagnose/reference/screenshots-and-zoom.md index d6d641cd769..b88b4e74854 100644 --- a/plugins/computer-use/skills/diagnose/reference/screenshots-and-zoom.md +++ b/plugins/computer-use/skills/diagnose/reference/screenshots-and-zoom.md @@ -11,8 +11,6 @@ never a lower display resolution. - **Pointer**: for the downscale and the absence of a size setting, see [Screenshots are downscaled automatically](https://code.claude.com/docs/en/computer-use#screenshots-are-downscaled-automatically). -- **As of**: 2026-08-10 -- **Recheck trigger**: that section documents a setting that changes the target size. ## The target is a pixel budget, not a scale factor @@ -41,8 +39,6 @@ image. - **Pointer**: for the `zoom` action, see [Available actions](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#available-actions). -- **As of**: 2026-08-10 -- **Recheck trigger**: the `zoom` row in that table stops describing a full-resolution capture. Local behavior matches: while capture is failing, `zoom` returns `Screenshot capture failed after 3 attempts` rather than a blurry crop. A crop of the @@ -70,8 +66,6 @@ one. Zoom is read-only inspection. [Screenshots are downscaled automatically](https://code.claude.com/docs/en/computer-use#screenshots-are-downscaled-automatically); for keyboard use on hard targets, see [Optimize model performance with prompting](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#optimize-model-performance-with-prompting). -- **As of**: 2026-08-10 -- **Recheck trigger**: either section drops or reverses its remedy. ## The API-side resolution guidance, and how it applies here @@ -89,16 +83,11 @@ translate the API advice into a display-settings change on a Claude Code machine and [Diagnose click issues](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#diagnose-click-issues) (correlate with [best practices](https://claude.com/blog/best-practices-for-computer-and-browser-use-with-claude)). -- **As of**: 2026-08-10 -- **Recheck trigger**: either section changes its recommended resolutions, or the Claude Code - computer-use page documents a setting to change the target size. The wider implementation advice on the same page has its own record: - **Pointer**: for the wider implementation advice, see [Follow implementation best practices](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#follow-implementation-best-practices). -- **As of**: 2026-10-11 -- **Recheck trigger**: that section changes its screenshot, resolution or click-accuracy advice. ## `save_to_disk` is not an escape hatch diff --git a/plugins/computer-use/skills/setup/SKILL.md b/plugins/computer-use/skills/setup/SKILL.md index e74c4c10c98..fca22272b24 100644 --- a/plugins/computer-use/skills/setup/SKILL.md +++ b/plugins/computer-use/skills/setup/SKILL.md @@ -34,8 +34,6 @@ Determine which surface is in play, because the answer changes what is even poss - **Pointer**: when deciding the surface, fetch [Computer use: Differences from the Desktop app](https://code.claude.com/docs/en/computer-use#differences-from-the-desktop-app) live. - - **As of**: 2026-10-11 - - **Recheck trigger**: that section's Platforms or Enable row changes. Report the surface as INFO. It is context for everything below, not a pass/fail. @@ -44,8 +42,7 @@ Report the surface as INFO. It is context for everything below, not a pass/fail. Confirm the computer-use tools are actually reachable in this session. Call `list_granted_applications`: it is this check's probe. For what it returns, read its description in the `computer-use` server's tool listing (`/mcp`); no docs page names the -computer-use tools (as of 2026-11-03; recheck when a docs page documents them, or the server -renames or drops `list_granted_applications`). +computer-use tools. - Tools reachable → PASS, and report what the probe returned as INFO. - Tools absent → FAIL. Remediation: enable the `computer-use` MCP server for this project, and @@ -56,16 +53,12 @@ renames or drops `list_granted_applications`). live for the CLI's eligibility checks, and [Desktop: Let Claude use your computer](https://code.claude.com/docs/en/desktop#let-claude-use-your-computer) for the Desktop surface. - - **As of**: 2026-10-11 - - **Recheck trigger**: either section changes which plans, providers or session modes it names. Do **not** call `request_access` during a check: a check stays read-only, and an access request is not. - **Pointer**: for what an app-access request does, see [Computer use: Approve apps per session](https://code.claude.com/docs/en/computer-use#approve-apps-per-session). -- **As of**: 2026-11-03 -- **Recheck trigger**: that section changes how an app is approved for a session. ### 3. Session-killing timeouts (the one that actually bites) @@ -118,8 +111,6 @@ blocker: in our measurement the gate refused the action rather than sending it t - **Pointer**: for the per-app approval gate such a window runs into, see [Computer use: Approve apps per session](https://code.claude.com/docs/en/computer-use#approve-apps-per-session). -- **As of**: 2026-11-03 -- **Recheck trigger**: that section changes which apps Claude may act on in a session. ## Reporting diff --git a/plugins/context7/skills/lookup/SKILL.md b/plugins/context7/skills/lookup/SKILL.md index 5703fdfbc93..3618f8b54f6 100644 --- a/plugins/context7/skills/lookup/SKILL.md +++ b/plugins/context7/skills/lookup/SKILL.md @@ -44,8 +44,6 @@ Or through the MCP server, when configured: `mcp__context7__resolve-library-id`, - **Pointer**: for each MCP tool's parameters, fetch [Context7: MCP Tools](https://github.com/upstash/context7#mcp-tools) live. -- **As of**: 2026-11-03 -- **Recheck trigger**: that section renames a tool or changes which parameters it requires. - Always resolve first; the docs step rejects anything but a resolved ID, unless the user supplied one in `/org/project` form. - One concept per query; run a separate lookup per independent topic, and at most 3 lookup commands per topic. When Context7 does not cover it, answer from training knowledge and say so. @@ -73,19 +71,13 @@ never hand a `${…}` token from those files to the Bash tool. carries, fetch [Where each variable resolves](https://code.claude.com/docs/en/plugins/manifest-reference#where-each-variable-resolves) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: that table adds supporting files to where a `${…}` reference resolves, or the - Bash tool's environment starts carrying the plugin variables. ## Gotchas - **Windows Git Bash** rewrites `ctx7 docs /org/project` into `C:/Program Files/Git/org/project`. Always prefix `ctx7 docs`, and `ctx7 search --library /org/project`, with `MSYS_NO_PATHCONV=1`; `ctx7 library` is unaffected. Detail: [context/cli.md](context/cli.md). - **Pointer**: for how an MSYS2-based shell rewrites a `/org/project` argument, see [MSYS2: Automatic Unix ⟶ Windows Path Conversion](https://www.msys2.org/docs/filesystem-paths/#automatic-unix-windows-path-conversion). - - **As of**: 2026-11-03 - - **Recheck trigger**: that section changes which arguments are converted. - For more content per call, use the MCP server. Which flags `ctx7 docs` takes is - [Context7 CLI § Query Library Documentation](https://context7.com/docs/clients/cli#query-library-documentation) - (as of 2026-11-10; recheck when that section adds a depth or token flag). + [Context7 CLI § Query Library Documentation](https://context7.com/docs/clients/cli#query-library-documentation). - Never run `ctx7 setup`, or `ctx7 skills install` if a guide names it: this plugin owns the lookup surface, and a second copy of Upstash's `find-docs` fragments lookups and drifts on its own. - This skill retrieves library docs only. Architecture decisions and other questions that need cross-checked sources go to a research workflow. diff --git a/plugins/context7/skills/lookup/context/cli.md b/plugins/context7/skills/lookup/context/cli.md index a90bb635c30..59d7207e178 100644 --- a/plugins/context7/skills/lookup/context/cli.md +++ b/plugins/context7/skills/lookup/context/cli.md @@ -25,7 +25,7 @@ export CONTEXT7_API_KEY="" Set it wherever your project manages local environment variables (shell profile, a gitignored local settings file, or your secret manager). Never commit the key. -**Prefer the env var over `ctx7 login`.** How `login` authenticates and where it keeps its token is [Context7 CLI § Authentication](https://context7.com/docs/clients/cli#authentication) (as of 2026-11-10; recheck when that section changes how `login` stores a token). The env-var approach is simpler, cross-machine-portable, and doesn't pollute the user profile. If `login` was run anyway, it's harmless but redundant. Delete `~/.ctx7/` to revert. +**Prefer the env var over `ctx7 login`.** How `login` authenticates and where it keeps its token is [Context7 CLI § Authentication](https://context7.com/docs/clients/cli#authentication). The env-var approach is simpler, cross-machine-portable, and doesn't pollute the user profile. If `login` was run anyway, it's harmless but redundant. Delete `~/.ctx7/` to revert. ## Commands @@ -43,8 +43,6 @@ Set it wherever your project manages local environment variables (shell profile, - **Pointer**: for whether the CLI has either, run `ctx7 --help` and `ctx7 skills` on the installed CLI and fetch [upstash/context7#3425](https://github.com/upstash/context7/pull/3425) live. -- **As of**: 2026-11-03 -- **Recheck trigger**: `ctx7 --help` lists `skills` or `generate`. **Lookups default to `ctx7 library`, then `ctx7 docs`; `ctx7 search` is an option.** The selection, ambiguity-probe and version-specific-ID steps in [lookup.md](lookup.md) are built on @@ -56,9 +54,6 @@ the two steps. its calls count, run `ctx7 --help` and `ctx7 search --help` on the installed CLI, and read [Search API or Context API?](https://context7.com/docs/search-api#search-api-or-context-api) and [Search API: Pricing](https://context7.com/docs/search-api#pricing) live. -- **As of**: 2026-11-03 -- **Recheck trigger**: `ctx7 search --help` adds or drops a flag, the Context7 MCP server gains a - one-step search tool, or either docs section changes. ## Flags @@ -77,7 +72,7 @@ the two steps. | `--json` | Structured JSON output (vs. formatted text). Useful for scripts / `jq` extraction | | `--language ` | `docs` only: passed with the user's language when the installed CLI lists it; the probe and its pointer record are in [lookup.md](lookup.md#step-2-query-documentation) | -**For more content per call, prefer MCP.** Which flags `docs` takes is [Context7 CLI § Query Library Documentation](https://context7.com/docs/clients/cli#query-library-documentation) (as of 2026-11-10; recheck when that section adds a depth or token flag). Use MCP (`mcp__context7__query-docs`); the measured ratio is in [mcp.md](mcp.md). +**For more content per call, prefer MCP.** Which flags `docs` takes is [Context7 CLI § Query Library Documentation](https://context7.com/docs/clients/cli#query-library-documentation). Use MCP (`mcp__context7__query-docs`); the measured ratio is in [mcp.md](mcp.md). ### Setup / install flags (why this plugin doesn't use them) @@ -94,7 +89,7 @@ the two steps. | `CONTEXT7_API_KEY` | Higher rate limits + priority | | `CTX7_TELEMETRY_DISABLED` | Set to `1` to disable the CLI's anonymous usage telemetry | -Whether and what the CLI sends as telemetry is [Context7 CLI § Telemetry](https://context7.com/docs/clients/cli#telemetry) (as of 2026-11-10; recheck when that section changes the default or the opt-out variable). In privacy-sensitive environments, disable it per invocation (`CTX7_TELEMETRY_DISABLED=1 ctx7 docs ...`) or permanently by exporting the variable in your shell profile. +Whether and what the CLI sends as telemetry is [Context7 CLI § Telemetry](https://context7.com/docs/clients/cli#telemetry). In privacy-sensitive environments, disable it per invocation (`CTX7_TELEMETRY_DISABLED=1 ctx7 docs ...`) or permanently by exporting the variable in your shell profile. ## Windows Git Bash gotcha (REQUIRED for `docs`) diff --git a/plugins/context7/skills/lookup/context/lookup.md b/plugins/context7/skills/lookup/context/lookup.md index 4dd176ecd2e..f0fb705a5b9 100644 --- a/plugins/context7/skills/lookup/context/lookup.md +++ b/plugins/context7/skills/lookup/context/lookup.md @@ -18,8 +18,8 @@ mcp__context7__resolve-library-id(libraryName: "", query: "") ## Result fields -The fields each result carries are listed in [Context7 CLI § Query Library Documentation](https://context7.com/docs/clients/cli#query-library-documentation) -(as of 2026-11-10; recheck when that section's result fields change). How this skill reads them: +The fields each result carries are listed in [Context7 CLI § Query Library Documentation](https://context7.com/docs/clients/cli#query-library-documentation). +How this skill reads them: - **Library ID**: the `/org/project` identifier the next step passes - **Code Snippets**: higher means better coverage @@ -58,9 +58,8 @@ MSYS_NO_PATHCONV=1 ctx7 docs /websites/twilio "How to send an SMS" --language Ru - **Pointer**: when deciding whether `--language` exists and what it changes, read the installed CLI's `ctx7 docs --help` output live (the probe above). -- **As of**: 2026-10-13 -- **Recheck trigger**: that help output renames or drops `--language`, or this plugin starts - requiring a minimum `ctx7` version, which would let the probe go. +- **Recheck trigger**: this plugin starts requiring a minimum `ctx7` version, which would let the + probe go. ### Version-specific IDs diff --git a/plugins/context7/skills/lookup/context/mcp.md b/plugins/context7/skills/lookup/context/mcp.md index 07ecefc8c30..e8cdf204bea 100644 --- a/plugins/context7/skills/lookup/context/mcp.md +++ b/plugins/context7/skills/lookup/context/mcp.md @@ -12,9 +12,6 @@ Context7 HTTP MCP server, reading the same backend as the `ctx7` CLI. This plugi [Environment variable expansion in `.mcp.json`](https://code.claude.com/docs/en/mcp#environment-variable-expansion-in-mcp-json) and [Unset variables without a default](https://code.claude.com/docs/en/mcp#unset-variables-without-a-default) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: any of those sections changes where server entries are read from or what - happens to an unset variable. ## Configuration (consumer-side, optional) @@ -32,8 +29,7 @@ Add to the consuming project's `.mcp.json` (or user-scope MCP config). Anonymous ``` With an API key (higher limits), add the `CONTEXT7_API_KEY` request header (the header name Context7's server expects). Only use this form once `CONTEXT7_API_KEY` is actually set in your environment (or add a `${VAR:-default}` fallback): an unset variable shows up as failed auth, not as a config error (the Unset variables without a default pointer at the top of this file, which sits under no -section heading, has the detail; as of 2026-10-11; recheck when that pointer moves, is dropped, -or its as-of date changes): +section heading, has the detail): ```json { @@ -60,8 +56,6 @@ Same input shape as CLI, same backend, and same output substance. Only the trans - **Pointer**: for what each tool does and the arguments it takes, fetch [Context7: MCP Tools](https://github.com/upstash/context7#mcp-tools) live. -- **As of**: 2026-11-03 -- **Recheck trigger**: that section renames a tool or changes which arguments it requires. ## Why prefer MCP over CLI for most lookups diff --git a/plugins/context7/skills/setup/SKILL.md b/plugins/context7/skills/setup/SKILL.md index 49c5da687ae..5a1e7be9b44 100644 --- a/plugins/context7/skills/setup/SKILL.md +++ b/plugins/context7/skills/setup/SKILL.md @@ -21,7 +21,7 @@ MCP availability: if `mcp__context7__resolve-library-id` and `mcp__context7__que `/context7:lookup` works through either of two paths: the **CLI** (`ctx7` via npm) or the **Context7 MCP server** (configured by the consuming project). `CONTEXT7_API_KEY` is optional for -both; what it changes is [Context7 CLI § When is authentication required?](https://context7.com/docs/clients/cli#when-is-authentication-required) (as of 2026-11-10; recheck when that section makes a key required). +both; what it changes is [Context7 CLI § When is authentication required?](https://context7.com/docs/clients/cli#when-is-authentication-required). - No argument or `check`: run the check. - `apply`: run the check, then the guidance-only remediations (auth, MCP). diff --git a/plugins/discipline/evals/swa-fork-off-degrades/prompt.md b/plugins/discipline/evals/swa-fork-off-degrades/prompt.md index d0435c517a0..fc4e0b175d8 100644 --- a/plugins/discipline/evals/swa-fork-off-degrades/prompt.md +++ b/plugins/discipline/evals/swa-fork-off-degrades/prompt.md @@ -1,5 +1,5 @@ --- -description: "Legacy sweep-all 9, its prompt behind the slash command (narration: a case can set only EVAL_ variables, so CLAUDE_CODE_FORK_SUBAGENT=0 is stated, not set). Stage 1b short-circuits on an explicit 0 before the canary, and the degrade path's first line is the exact token (reference/inheritance-preflight.md lines 40-44 and 120-140). first-line-token anchors the token at the reply's start, no-dispatch forbids any Agent call, zero-audits-stated needs no audits and no corrections said, digest-tiers the core, situational and never tiers, no-inline-correctors any corrector Skill call, no-corrector-body-read a Read of a corrector SKILL.md beyond its frontmatter. Pass --disallow-tools Grep if a run Greps the plugin dir." +description: "Legacy sweep-all 9, its prompt behind the slash command (narration: a case can set only EVAL_ variables, so CLAUDE_CODE_FORK_SUBAGENT=0 is stated, not set). Stage 1b short-circuits on an explicit 0 before the canary, and the degrade path's first line is the exact token (reference/inheritance-preflight.md lines 37-41 and 115-135). first-line-token anchors the token at the reply's start, no-dispatch forbids any Agent call, zero-audits-stated needs no audits and no corrections said, digest-tiers the core, situational and never tiers, no-inline-correctors any corrector Skill call, no-corrector-body-read a Read of a corrector SKILL.md beyond its frontmatter. Pass --disallow-tools Grep if a run Greps the plugin dir." tags: [discipline, sweep-all, outcome, narration, no-network] max_turns: 12 timeout_seconds: 300 diff --git a/plugins/discipline/skills/be-ambitious/SKILL.md b/plugins/discipline/skills/be-ambitious/SKILL.md index 8c22584312f..0ff69773c53 100644 --- a/plugins/discipline/skills/be-ambitious/SKILL.md +++ b/plugins/discipline/skills/be-ambitious/SKILL.md @@ -147,24 +147,16 @@ when the question is whether finished work is sound. (impossible-task results by prompt variant) and . - As of 2026-10-30. Recheck when that docs section or the paper is revised. - **Scope any red team to correctness and the stated requirements.** Topic: padded adversarial findings. Pointer: . - As of 2026-10-30. Recheck when that section drops or changes its scoping - callout. - **Ask for a specialist's work, never a persona.** Topic: expert-persona prompting and accuracy. Pointers: and - . As of 2026-10-16. Recheck when either paper - is revised or a study of persona prompts in coding agents appears. + . - **Every raised request carries the scope fence.** Topic: vendor guidance on overeager scope. Pointer: . - As of 2026-11-10. Recheck when that section changes how a scope-limiting - rule interacts with broader instructions, or when the model it is written - for is no longer current. - **A hard target never outranks the specification.** The abort line always travels with it. Topic: impossible tasks and specification-first prompts. Pointers: and . - As of 2026-10-16. Recheck when either paper is revised or replicated. diff --git a/plugins/discipline/skills/do-your-research/SKILL.md b/plugins/discipline/skills/do-your-research/SKILL.md index 454c33c09e1..8eab8def5da 100644 --- a/plugins/discipline/skills/do-your-research/SKILL.md +++ b/plugins/discipline/skills/do-your-research/SKILL.md @@ -147,8 +147,6 @@ out. - **Pointer**: whether a fork's Agent tool can spawn, [Available tools](https://code.claude.com/docs/en/sub-agents#available-tools). -- **As of**: 2026-10-10. -- **Recheck trigger**: that section changes whether a fork's Agent tool can spawn. **Depth**, resolved once before enumerating: the invocation argument (`tiered` or `full`) wins, except that a `strict` verification level resolves `full` ahead of it; otherwise the configured default, diff --git a/plugins/discipline/skills/recheck-against-upstream/SKILL.md b/plugins/discipline/skills/recheck-against-upstream/SKILL.md index c90beba21fa..52f54cf7156 100644 --- a/plugins/discipline/skills/recheck-against-upstream/SKILL.md +++ b/plugins/discipline/skills/recheck-against-upstream/SKILL.md @@ -102,8 +102,6 @@ leaving fan-out tiers out. - **Pointer**: whether a fork's Agent tool can spawn, [Available tools](https://code.claude.com/docs/en/sub-agents#available-tools). -- **As of**: 2026-10-10. -- **Recheck trigger**: that section changes whether a fork's Agent tool can spawn. Then read [reference/fan-out-tier.md](reference/fan-out-tier.md) before enumerating surfaces: it owns the doc-by-doc dispatch, the mid-run checkpoint, diff --git a/plugins/discipline/skills/recheck-against-upstream/reference/fan-out-tier.md b/plugins/discipline/skills/recheck-against-upstream/reference/fan-out-tier.md index ca8d04cfba2..a14ae289884 100644 --- a/plugins/discipline/skills/recheck-against-upstream/reference/fan-out-tier.md +++ b/plugins/discipline/skills/recheck-against-upstream/reference/fan-out-tier.md @@ -18,7 +18,7 @@ subsystem, framework, or repo doc-by-doc, which one context cannot cover from wi paths in the brief, so the subagent never depends on a plugin variable resolving in its shell (where plugin variables resolve: fetch [Where each variable resolves](https://code.claude.com/docs/en/plugins/manifest-reference#where-each-variable-resolves) - live; as of 2026-10-11; recheck when that table changes what reaches the Bash tool). The subagent + live). The subagent runs `bash "/fetch-docs.sh" --cache --profile --out "$out" ` as the procedure's step 1 gives it. The read that settles a verdict follows the procedure's step 6: re-fetch with `--max-age 0`, so a cached copy never stands in for the current docs, and read diff --git a/plugins/discipline/skills/scrutinize-dont-coast/SKILL.md b/plugins/discipline/skills/scrutinize-dont-coast/SKILL.md index b60a1bb991c..7982367e0c7 100644 --- a/plugins/discipline/skills/scrutinize-dont-coast/SKILL.md +++ b/plugins/discipline/skills/scrutinize-dont-coast/SKILL.md @@ -76,9 +76,6 @@ exclude it.) live for what a fork inherits; for the skill-side `context: fork` contrast, fetch live. -- **As of**: 2026-10-11 -- **Recheck trigger**: either section changes what a fork inherits from the main - session, or whether a skill run with `context: fork` starts without conversation history. The findings return to this thread, and remediation proceeds *with* the user (delta 2). diff --git a/plugins/discipline/skills/setup/SKILL.md b/plugins/discipline/skills/setup/SKILL.md index 78409cdcfec..ec42b70740e 100644 --- a/plugins/discipline/skills/setup/SKILL.md +++ b/plugins/discipline/skills/setup/SKILL.md @@ -22,9 +22,7 @@ default of `do-your-research`'s fan-out tier (`research_deep_verification`) and `lever_scope`. They are personal options, held in user settings, and this skill reads only their rendered values (`check` step 1). How Claude Code collects and stores them, and which settings files it reads them from, are read live -from [plugin manifest reference: where values are stored](https://code.claude.com/docs/en/plugins/manifest-reference#where-values-are-stored) -(as of 2026-11-03; recheck when that section changes where options are stored or which -files they are read from). +from [plugin manifest reference: where values are stored](https://code.claude.com/docs/en/plugins/manifest-reference#where-values-are-stored). The plugin owns one tracked consumer file, `docs/conventions/discipline.yaml`, the repository layer of `lever_scope` (keys, values and layers: @@ -47,8 +45,7 @@ Official contract: live. - - **As of**: 2026-10-11 - - **Recheck trigger**: that section changes which sessions have fork mode on by default, - its version floor, or the variable that overrides it. `sweep-all` preflights this itself and degrades when the fan-out cannot inherit; that runbook owns the behavior; report the prerequisite here only so an unavailable fan-out reads as expected rather than as a misconfiguration, and do not restate what @@ -119,15 +113,11 @@ Official contract: live, and for skills run with `context: fork`, the Note under . - - **As of**: 2026-10-11 - - **Recheck trigger**: that section changes which subagent kinds receive the - main conversation's history, or the Note changes whether a skill run with - `context: fork` starts without conversation history. - **Audit in the forks, correct on the main thread.** Parallel forks that wrote would race and re-dilute salience; the value is one ordered correction pass. @@ -157,9 +152,6 @@ never/core/unknown promote warning in that report, never silently drop them. - **Pointer**: when deciding whether a fork's tools can be restricted, fetch and live. - - **As of**: 2026-10-11 - - **Recheck trigger**: either section starts letting a fork's tool set differ - from the main session's, or adds a filter that applies to forks. Never present the audit fan-out's read-only posture as harness-enforced. If you want assurance that the fan-out honored it, capture the working tree's state @@ -179,10 +171,6 @@ never/core/unknown promote warning in that report, never silently drop them. for which writes into this checkout a worktree refuses, fetch live. - - **As of**: 2026-10-11 - - **Recheck trigger**: that section starts carrying uncommitted changes into - a subagent worktree, or the enforcement section starts refusing shell - commands that write into the main checkout. - **The preflight is the guard, not an optimization.** Skipping it does not make the sweep cheaper. It makes every ledger unfalsifiable, and the batched pass's step 4 writes those ledgers' remedies to the working tree. @@ -193,10 +181,6 @@ never/core/unknown promote warning in that report, never silently drop them. - **Pointer**: when estimating a fork's model, context and cache reuse, fetch live. - - **As of**: 2026-10-11 - - **Recheck trigger**: that section changes which model a fork runs on, how - much of the main session's context it receives, or whether a fork shares - the main session's prompt cache. Keeping the `never` tier and every member's fan-out tier out, and relevance-gating the situational tier, are what hold diff --git a/plugins/discipline/skills/sweep-all/reference/batched-pass.md b/plugins/discipline/skills/sweep-all/reference/batched-pass.md index c02147a2f29..6467e755d88 100644 --- a/plugins/discipline/skills/sweep-all/reference/batched-pass.md +++ b/plugins/discipline/skills/sweep-all/reference/batched-pass.md @@ -27,8 +27,7 @@ unchanged and bind every member. typed subagent and a skill-level `context: fork` are not used for it (what each one starts with: fetch [How forks differ from other subagents](https://code.claude.com/docs/en/sub-agents#how-forks-differ-from-other-subagents) - live; as of 2026-10-11; recheck when that section changes what a fork or a - typed subagent inherits). The dated record for every fork claim in this pass is + live). The dated record for every fork claim in this pass is [`inheritance-preflight.md`](inheritance-preflight.md), whose stamp opens that file. The forks read the live working tree. Do NOT isolate them (see Gotchas: isolation would hide the uncommitted work in flight, which is @@ -71,8 +70,7 @@ unchanged and bind every member. (the discipline plugin's `scripts/fetch-docs.sh --cache`, following its `reference/docs-lookup-procedure.md`; both sit two levels above this skill's directory), rather than - from this file (as of 2026-10-02; recheck when that section - changes the default, what takes a slot, or the exemptions). The concurrency + from this file. The concurrency and depth limits are the only ones to plan around. - **Pointer**: when planning the wave against these limits, fetch the @@ -82,17 +80,11 @@ unchanged and bind every member. [Variables](https://code.claude.com/docs/en/env-vars#variables) and [Concurrent subagent limit](https://code.claude.com/docs/en/sub-agents#concurrent-subagent-limit) live; correlate with . - - **As of**: 2026-11-10 - - **Recheck trigger**: a per-session subagent total starts to apply, or the - concurrency variable starts to cap how many subagents are dispatched - rather than how many run at once. - **Pointer**: when deciding whether the session running this pass can spawn forks at all, fetch [Turn fork mode off](https://code.claude.com/docs/en/sub-agents#turn-fork-mode-on-or-off) - live. **As of**: 2026-10-11. **Recheck trigger**: that section changes - which sessions have fork mode on by default, or how - `CLAUDE_CODE_FORK_SUBAGENT` overrides it. + live. So even a fully-admitted set, every core plus every situational corrector, dispatches in one wave in an otherwise-quiet session. @@ -115,8 +107,7 @@ unchanged and bind every member. failure: a spawn refused at the concurrent subagent limit. For that error's wording and how the harness handles it, read [Concurrent subagent limit](https://code.claude.com/docs/en/sub-agents#concurrent-subagent-limit) - live (as of 2026-10-11; recheck when that section changes the error or its - retry guidance). That is a capacity race, not a failed audit. Wait for + live. That is a capacity race, not a failed audit. Wait for capacity and dispatch, rather than retrying into the same wall. A retry is anchored by construction, one wave or many: it spawns after other members' ledgers have landed, so it inherits them. There is no un-anchored rerun available inside this conversation; re-running the whole pass would inherit MORE, not less, since every ledger diff --git a/plugins/discipline/skills/sweep-all/reference/inheritance-preflight.md b/plugins/discipline/skills/sweep-all/reference/inheritance-preflight.md index d4f4a61bbdc..f92f40f4be1 100644 --- a/plugins/discipline/skills/sweep-all/reference/inheritance-preflight.md +++ b/plugins/discipline/skills/sweep-all/reference/inheritance-preflight.md @@ -34,9 +34,6 @@ what stage 2 finds; it never replaces stage 2 and never aborts on its own. and [Agent tool behavior](https://code.claude.com/docs/en/tools-reference#agent-tool-behavior) live; for how fork mode relates to an omitted `run_in_background`, fetch [the SDK's Agent tool reference](https://code.claude.com/docs/en/agent-sdk/python#agent) live. -- **As of**: 2026-11-04 -- **Recheck trigger**: a page documents how fork mode shows in the `Agent` tool's - schema, or makes the parameter's presence in a schema depend on fork mode. **Stage 1b. Explicit fork-off short-circuit (zero dispatch).** We read `CLAUDE_CODE_FORK_SUBAGENT` explicitly `0` as fork mode off. Do not dispatch the @@ -49,8 +46,6 @@ in every case but the explicit `0` above stage 2 remains the authoritative test. [Turn fork mode off](https://code.claude.com/docs/en/sub-agents#turn-fork-mode-on-or-off) and the [`CLAUDE_CODE_FORK_SUBAGENT` row](https://code.claude.com/docs/en/env-vars#variables) live. -- **As of**: 2026-11-04 -- **Recheck trigger**: that section or row changes what turns fork mode off. **Stage 2, an inheritance-proof canary. The decider, and it costs one fork.** Dispatch ONE fork alone, ahead of the first wave, that answers the proof diff --git a/plugins/discipline/skills/use-your-skills/SKILL.md b/plugins/discipline/skills/use-your-skills/SKILL.md index 340839831b2..3d2f50ce907 100644 --- a/plugins/discipline/skills/use-your-skills/SKILL.md +++ b/plugins/discipline/skills/use-your-skills/SKILL.md @@ -23,15 +23,12 @@ skills already available. A skill listing is loaded into context so the model knows which **model-invocable** skills are available; what the listing carries for each skill, and when the full body loads: -[Control who invokes a skill](https://code.claude.com/docs/en/skills#control-who-invokes-a-skill), -as of 2026-11-10; recheck when that section changes what the listing carries -or when a skill's body enters context. +[Control who invokes a skill](https://code.claude.com/docs/en/skills#control-who-invokes-a-skill). A **manual-only** skill never reaches the model's listing; which frontmatter makes a skill manual-only, and which only hides it from the `/` menu while leaving it model-visible: -[Control who invokes a skill](https://code.claude.com/docs/en/skills#control-who-invokes-a-skill), -as of 2026-10-14; recheck when that section changes which flag removes a skill -from the model's listing. This corrector therefore audits only what the model +[Control who invokes a skill](https://code.claude.com/docs/en/skills#control-who-invokes-a-skill). +This corrector therefore audits only what the model could actually have reached: a **model-visible** skill that sat in the listing and went unused, its procedure reinvented or skipped instead of invoked. It does not fault the model for not auto-firing a manual-only skill. @@ -57,9 +54,6 @@ The discipline, at each of the three surfaces where skills apply: live; for what a non-fork subagent's context holds at startup, fetch live. - - **As of**: 2026-10-11 - - **Recheck trigger**: either section changes which skills a subagent can - preload or invoke, or what a non-fork subagent receives at startup. ## Audit. What to look for @@ -93,9 +87,8 @@ those: - **The listing budget across all installed skills.** On overflow, descriptions are dropped, so a real skill can silently lose its triggering keywords (how the budget is set and what gets dropped: - [Skill descriptions are cut short](https://code.claude.com/docs/en/skills#skill-descriptions-are-cut-short), - as of 2026-10-13; recheck when that section changes the budget or the drop - order). That machine-level overflow is a configuration concern; route to + [Skill descriptions are cut short](https://code.claude.com/docs/en/skills#skill-descriptions-are-cut-short)). + That machine-level overflow is a configuration concern; route to `/harness-config:audit`, invoked via the Skill tool (degrade to prose). `/doctor` estimates the listing's cost. - **Deterministic per-prompt routing.** A `UserPromptSubmit` hook that injects a diff --git a/plugins/event-storming/skills/methodology/SKILL.md b/plugins/event-storming/skills/methodology/SKILL.md index 62db48e8033..4a8a987cde7 100644 --- a/plugins/event-storming/skills/methodology/SKILL.md +++ b/plugins/event-storming/skills/methodology/SKILL.md @@ -52,8 +52,6 @@ denotes that tool under whichever prefix the gate found. and [Server names, tool names, and reloads](https://code.claude.com/docs/en/plugins/components#server-names-tool-names-and-reloads) live. -- **As of**: 2026-11-10 -- **Recheck trigger**: either section changes the MCP tool-name format. When Miro IS available, query it for recent boards with that prefix's `miro_list_boards`. Look for boards with EventStorming-related names (containing "Big Picture", "Process Model", "Design-Level", "EventStorming", or domain-specific names from prior sessions). Sort by last modified. diff --git a/plugins/event-storming/skills/simulation/SKILL.md b/plugins/event-storming/skills/simulation/SKILL.md index f64da949dc3..e27e3ac4521 100644 --- a/plugins/event-storming/skills/simulation/SKILL.md +++ b/plugins/event-storming/skills/simulation/SKILL.md @@ -48,7 +48,7 @@ merely happens to be called `miro`. Every `miro_*` tool named in this skill and denotes that tool under whichever prefix the gate found. Naming basis: `reference/miro-integration.md` "Tool namespace"; for the prefix format, fetch [Server names, tool names, and reloads](https://code.claude.com/docs/en/plugins/components#server-names-tool-names-and-reloads) -live (as of 2026-11-03; recheck when that section changes the MCP tool-name format). +live. - **Miro available** → run normally: create boards, place stickies, screenshot-verify each phase. - **Miro absent** → do NOT fail. Tell the user the `miro` plugin isn't enabled, then offer two paths @@ -200,5 +200,4 @@ never with `cd`, `ls`, `cat` or `sed` in a shell. Never write generated state in the plugin's own installed directory (`${CLAUDE_PLUGIN_ROOT}`) or into the consumer's project tree. For what each directory guarantees, fetch [Reference plugin paths and store data](https://code.claude.com/docs/en/plugins/components#path-variables-and-persistent-data) -live (as of 2026-11-10; recheck when that section changes what survives a plugin update or where a -plugin may write state). +live. diff --git a/plugins/event-storming/skills/simulation/reference/agentic-simulation.md b/plugins/event-storming/skills/simulation/reference/agentic-simulation.md index 6a9291eaa5e..420c8bf13d3 100644 --- a/plugins/event-storming/skills/simulation/reference/agentic-simulation.md +++ b/plugins/event-storming/skills/simulation/reference/agentic-simulation.md @@ -280,7 +280,7 @@ You are [ROLE NAME], participating in an EventStorming workshop to explore [DOMA ### Persona Persistence Across Rounds -Each persona is a separate Agent tool invocation, and this skill hands it its earlier rounds only through the prompt (for what a spawned agent starts with, fetch [Agent tool behavior](https://code.claude.com/docs/en/tools-reference#agent-tool-behavior) live; as of 2026-11-10; recheck when that section changes what a spawned agent inherits). Without persistence, a persona in Round 3 has no memory of what they wrote in Round 1, leading to inconsistent identity, vocabulary drift, and lost incremental knowledge. +Each persona is a separate Agent tool invocation, and this skill hands it its earlier rounds only through the prompt (for what a spawned agent starts with, fetch [Agent tool behavior](https://code.claude.com/docs/en/tools-reference#agent-tool-behavior) live). Without persistence, a persona in Round 3 has no memory of what they wrote in Round 1, leading to inconsistent identity, vocabulary drift, and lost incremental knowledge. **Solution: Temp profile files loaded into each agent prompt.** @@ -353,7 +353,7 @@ Use `{domain}-{date}-{random4}` format, e.g., `devconf-20260321-a7f2`, where `{r At session end, ask user: "Delete persona temp files? (They can be archived for session replay.)" - If yes: delete the session directory recursively with the host shell's remover, `rm -rf "{session_dir}/"` on POSIX/Git Bash, `Remove-Item -LiteralPath "{session_dir}" -Recurse -Force` on PowerShell; keep the path quoted, it may contain spaces (`{session_dir}` is the path the temp primitive returned at session start, not a path you recompute here) -- If no: archive to `${CLAUDE_PLUGIN_DATA}/sessions/{session_id}/` (the per-plugin data directory). Session archives are per-run state, not skill source; never write them into the plugin's own installed directory (`${CLAUDE_PLUGIN_ROOT}`) or into the consumer's project tree. For what each directory guarantees, fetch [Reference plugin paths and store data](https://code.claude.com/docs/en/plugins/components#path-variables-and-persistent-data) live (as of 2026-11-10; recheck when that section changes what survives a plugin update or where a plugin may write state) +- If no: archive to `${CLAUDE_PLUGIN_DATA}/sessions/{session_id}/` (the per-plugin data directory). Session archives are per-run state, not skill source; never write them into the plugin's own installed directory (`${CLAUDE_PLUGIN_ROOT}`) or into the consumer's project tree. For what each directory guarantees, fetch [Reference plugin paths and store data](https://code.claude.com/docs/en/plugins/components#path-variables-and-persistent-data) live --- diff --git a/plugins/event-storming/skills/simulation/reference/miro-integration.md b/plugins/event-storming/skills/simulation/reference/miro-integration.md index c24bf290f66..ae8d1c1cad3 100644 --- a/plugins/event-storming/skills/simulation/reference/miro-integration.md +++ b/plugins/event-storming/skills/simulation/reference/miro-integration.md @@ -17,7 +17,7 @@ Miro MCP server. > a third-party remote MCP. The decision record is the miro record in the marketplace repo's > `docs/adr/0093-record-plugin-acceptance-security-reviews.md`; the carry verdict is `docs/adr/0092-carry-only-the-miro-mcp-server-in-a-plugin.md`. For the tools Miro's hosted server exposes, fetch > [MCP Tools and Capabilities](https://developers.miro.com/docs/mcp-intro#-mcp-tools-and-capabilities) -> live (as of 2026-11-03; recheck when that list adds a board-delete tool). +> live. ### Tool namespace @@ -35,9 +35,6 @@ reference docs denotes that tool under whichever prefix is live; the availabilit [Plugin-provided MCP servers](https://code.claude.com/docs/en/mcp#plugin-provided-mcp-servers) and [Server names, tool names, and reloads](https://code.claude.com/docs/en/plugins/components#server-names-tool-names-and-reloads) live. -- **As of**: 2026-11-10 -- **Recheck trigger**: either section changes the MCP tool-name format, or a Claude Code changelog - entry mentions MCP tool naming. ### Setup @@ -53,14 +50,10 @@ marketplace first, then enabled** (enabling alone does not install it). item, connector and tag endpoints the bundled server's tools call, and nothing broader: any extra scope only widens what a leaked token exposes. Take the scope names from the OAuth guide that [Authorization Info](https://developers.miro.com/docs/rest-api-reference-guide#authorization-info) - links (as of 2026-11-03; recheck when that section moves or stops linking the authorization - guide, or when the bundled server's tools call an endpoint outside board, item, connector and - tag). + links. - **Pointer**: when a user asks how the token is collected or stored, fetch [User configuration](https://code.claude.com/docs/en/plugins/manifest-reference#user-configuration) (the `sensitive` option) live. - - **As of**: 2026-10-11 - - **Recheck trigger**: that section changes how a `sensitive` option is prompted for or stored. 4. **Verify:** in a session with the plugin enabled, the `miro_*` tools are callable. Test with "List my Miro boards". @@ -73,8 +66,7 @@ marketplace first, then enabled** (enabling alone does not install it). The colors the sticky tools accept are the `miro` plugin's `STICKY_NOTE_COLORS` list in `plugins/miro/server/src/tools/sticky-notes.ts` in the marketplace repository; the mapping below gives each of them one EventStorming role. Correlate that list with Miro's own -[`StickyNoteStyle.fill_color`](https://miroapp.github.io/api-clients/python/miro_api/models/sticky_note_style.html#StickyNoteStyle.fill_color) -(as of 2026-11-03; recheck when that field's allowed values change). +[`StickyNoteStyle.fill_color`](https://miroapp.github.io/api-clients/python/miro_api/models/sticky_note_style.html#StickyNoteStyle.fill_color). ### EventStorming → Miro Color + Shape Mapping (Every Color Assigned) @@ -106,7 +98,7 @@ gives each of them one EventStorming role. Correlate that list with Miro's own - No sticky note rotation, so you can't rotate 45° for phase names. Use `cyan` color + `[PHASE]` prefix instead - No size control via MCP, so every sticky takes Miro's default size. For the REST API's size fields, fetch [Create sticky note item](https://developers.miro.com/reference/create-sticky-note-item-1) - live (as of 2026-11-03; recheck when that page changes the sticky note's geometry fields) + live - No magenta color, so `red` is closest for Hot Spots --- @@ -126,8 +118,7 @@ Create a Miro board with this layout: ### Positioning Strategy (Tested Values) For the board's coordinate origin and a sticky note's default size, fetch -[Create sticky note item](https://developers.miro.com/reference/create-sticky-note-item-1) live -(as of 2026-11-03; recheck when that page changes the board origin or the default sticky size). +[Create sticky note item](https://developers.miro.com/reference/create-sticky-note-item-1) live. **Horizontal spacing: 400px between items on the main flow.** This gives ~200px of clear space between stickies. 200px is too tight (stickies touch, text overlaps). For Problems/Opportunities zones with longer text, use 300px minimum. @@ -232,7 +223,7 @@ Next Event x=1600 row: Domain Events coordinate computed against the y-coordinate tables above. Keeping the legend stickies parentless also means they survive deletion of the legend frame. For how a parent changes an item's position, fetch [Create sticky note item](https://developers.miro.com/reference/create-sticky-note-item-1) - live (as of 2026-11-03; recheck when that page changes how `parent` affects position) + live **Spacing summary:** @@ -290,7 +281,7 @@ The `miro` plugin's server supports bulk creation (up to 20 items per batch) via - **Frame z-order**: frames created AFTER stickies render ON TOP, hiding them behind the white frame background. **Only use frames that are created BEFORE their content items and never need resizing.** The legend frame (created once, content placed inside) works well. Timeline frames that grow with each round should be SKIPPED entirely. Rely on coordinate-based organization instead. If you delete and recreate a frame, it covers all existing stickies - **Practical recommendation**: use frames ONLY for the legend (static, created once). For the evolving timeline and content areas, skip frames and let the y-coordinate layering organize the board visually. This avoids all z-order issues - **Deleting frames with children**: if stickies were created with `parent_id` pointing to a frame, deleting the frame deletes all children. Stickies created WITHOUT `parent_id` survive frame deletion but may be hidden under newly created frames -- **Board sharing via API**: use `sharing_access: "view"` parameter on `miro_create_board` to create public boards. The `miro_update_board` tool can also change sharing after creation. For the REST sharing payload behind both, fetch [Boards](https://developers.miro.com/docs/rest-api-reference-guide#boards) live (as of 2026-11-03; recheck when that section changes the Create Board or Update Board sharing fields) +- **Board sharing via API**: use `sharing_access: "view"` parameter on `miro_create_board` to create public boards. The `miro_update_board` tool can also change sharing after creation. For the REST sharing payload behind both, fetch [Boards](https://developers.miro.com/docs/rest-api-reference-guide#boards) live --- diff --git a/plugins/firecrawl/skills/firecrawl/SKILL.md b/plugins/firecrawl/skills/firecrawl/SKILL.md index 90c368d56c2..8fb3cf6ddef 100644 --- a/plugins/firecrawl/skills/firecrawl/SKILL.md +++ b/plugins/firecrawl/skills/firecrawl/SKILL.md @@ -154,7 +154,7 @@ The second line turns off the CLI's background self-update, so the CLI changes o Authenticate via the `FIRECRAWL_API_KEY` environment variable (OS user scope); the CLI reads it automatically. Avoid `firecrawl login`. It writes a separate user-level config that diverges from the env-var flow. -Do not run `firecrawl init --all --browser`. It sets up upstream's own skills as a parallel install that shadows nothing but duplicates this plugin's capability and drifts from it. What `init` installs: the README's [Setup Skills, Workflows, and MCP](https://github.com/firecrawl/cli#setup-skills-workflows-and-mcp) section (as of 2026-11-10; recheck when `/firecrawl:update` reports a CLI release). This plugin is the maintained integration; updates arrive through `/plugin marketplace update`. +Do not run `firecrawl init --all --browser`. It sets up upstream's own skills as a parallel install that shadows nothing but duplicates this plugin's capability and drifts from it. What `init` installs: the README's [Setup Skills, Workflows, and MCP](https://github.com/firecrawl/cli#setup-skills-workflows-and-mcp) section. This plugin is the maintained integration; updates arrive through `/plugin marketplace update`. ## Updating the skill and CLI @@ -167,11 +167,11 @@ Keeping in sync is a **maintainer-facing** concern, split into its own sibling s - **`-o` is mandatory for anything larger than a paragraph.** Streaming to stdout wastes the whole token-efficiency advantage. If a command lacks `-o` in this skill's examples, it's because the output is truly small (e.g., `credit-usage`). Everything else, scrape, search, crawl, interact, agent, writes to disk. - **Credits are a shared resource.** Every call charges the account. Use `map` before `crawl`, use `--limit` aggressively on search, and skip Firecrawl entirely when a plain fetch would do. - **`firecrawl login` creates a second source of truth.** Auth via the `FIRECRAWL_API_KEY` env var; the login command writes to a user-level config dir. Mixing them leaves two sources of truth. -- **A global install updates itself unless turned off.** Run `firecrawl update --disable-auto` after installing (Prerequisites above; `/firecrawl:update` does it on every upgrade), so CLI upgrades happen only through `/firecrawl:update`. Don't run a bare `firecrawl update`. The update controls are in the README's [CLI updates](https://github.com/firecrawl/cli#cli-updates) section, including which install methods update themselves (as of 2026-11-10; recheck when `/firecrawl:update` reports a CLI release). +- **A global install updates itself unless turned off.** Run `firecrawl update --disable-auto` after installing (Prerequisites above; `/firecrawl:update` does it on every upgrade), so CLI upgrades happen only through `/firecrawl:update`. Don't run a bare `firecrawl update`. The update controls are in the README's [CLI updates](https://github.com/firecrawl/cli#cli-updates) section, including which install methods update themselves. - **A failed job: run `firecrawl doctor ` before guessing.** It asks Firecrawl's support endpoint why that run failed and suggests the parameters to fix, instead of retrying with flags changed by trial and error. - **Transient DNS 503 on `api.firecrawl.dev` from sandboxed sessions.** Some cloud egress proxies intermittently return "DNS cache overflow". Retry after ~30s. This affects both the CLI and direct curl; it's an egress issue, not a Firecrawl outage. -- **Windows tmp paths depend on which shell the Bash tool is.** Where it is Git Bash, `${TMPDIR:-/tmp}` resolves through the `/tmp` mount to the user's Windows temp directory (`%TEMP%`, by default under `%LOCALAPPDATA%\Temp`), and both path forms work for `Read` with no normalization on the agent side. On a Windows host **without** Git Bash the PowerShell tool runs instead and `mktemp` does not exist. Fall back to a user-scoped temp under `%LOCALAPPDATA%\Temp`. The skill's `shell: bash` frontmatter does **not** cover the Bash tool calls this skill's body issues (what that field governs: the `shell` row of [Frontmatter reference](https://code.claude.com/docs/en/skills#frontmatter-reference), as of 2026-11-10; recheck when that row changes what the field applies to). -- **Self-hosted Firecrawl.** Set `FIRECRAWL_API_URL` as an OS user environment variable to switch the CLI to a local instance (the default endpoint: [Self-hosted / Local Development](https://github.com/firecrawl/cli#self-hosted--local-development), as of 2026-11-10; recheck when `/firecrawl:update` reports a CLI release). Only override when running against a self-hosted stack. +- **Windows tmp paths depend on which shell the Bash tool is.** Where it is Git Bash, `${TMPDIR:-/tmp}` resolves through the `/tmp` mount to the user's Windows temp directory (`%TEMP%`, by default under `%LOCALAPPDATA%\Temp`), and both path forms work for `Read` with no normalization on the agent side. On a Windows host **without** Git Bash the PowerShell tool runs instead and `mktemp` does not exist. Fall back to a user-scoped temp under `%LOCALAPPDATA%\Temp`. The skill's `shell: bash` frontmatter does **not** cover the Bash tool calls this skill's body issues (what that field governs: the `shell` row of [Frontmatter reference](https://code.claude.com/docs/en/skills#frontmatter-reference)). +- **Self-hosted Firecrawl.** Set `FIRECRAWL_API_URL` as an OS user environment variable to switch the CLI to a local instance (the default endpoint: [Self-hosted / Local Development](https://github.com/firecrawl/cli#self-hosted--local-development)). Only override when running against a self-hosted stack. - **CLI and `mcp__firecrawl__*` MCP tools overlap**. Running both wastes context and splits configuration. If the consuming project also has the Firecrawl MCP registered, pick one surface. ## Related diff --git a/plugins/firecrawl/skills/firecrawl/context/commands.md b/plugins/firecrawl/skills/firecrawl/context/commands.md index f061bf4c894..15497e6ab3f 100644 --- a/plugins/firecrawl/skills/firecrawl/context/commands.md +++ b/plugins/firecrawl/skills/firecrawl/context/commands.md @@ -53,7 +53,7 @@ firecrawl search "" --limit --json -o firecrawl search "" --limit --scrape --scrape-formats markdown --json -o ``` -`--limit 5` suffices for research (the default and maximum: [Search Options](https://github.com/firecrawl/cli#search-options), as of 2026-11-10; recheck when `/firecrawl:update` reports a CLI release). `--scrape` is a **boolean** enabling result scraping; `--scrape-formats` controls which scrape formats are included (markdown/html/links/etc., comma-separated). No `--format` or `--pretty` flag. Use `--json` for structured output, pipe through `jq` for pretty-printing. +`--limit 5` suffices for research (the default and maximum: [Search Options](https://github.com/firecrawl/cli#search-options)). `--scrape` is a **boolean** enabling result scraping; `--scrape-formats` controls which scrape formats are included (markdown/html/links/etc., comma-separated). No `--format` or `--pretty` flag. Use `--json` for structured output, pipe through `jq` for pretty-printing. ## crawl: follow links from a seed URL @@ -118,7 +118,7 @@ Flags: `-p/--prompt` is the long form of the positional prompt; `-c/--code` swit firecrawl agent "" [--model ] -o ``` -Hosted agent (different from the Anthropic model running this conversation). Use for "find me the latest X and summarize" tasks where Firecrawl plans the browse path. Which models it takes and which is the default: [Agent Options](https://github.com/firecrawl/cli#agent-options) (as of 2026-11-10; recheck when `/firecrawl:update` reports a CLI release). +Hosted agent (different from the Anthropic model running this conversation). Use for "find me the latest X and summarize" tasks where Firecrawl plans the browse path. Which models it takes and which is the default: [Agent Options](https://github.com/firecrawl/cli#agent-options). ## monitor: scheduled scrapes + change tracking diff --git a/plugins/firecrawl/skills/firecrawl/context/configuration.md b/plugins/firecrawl/skills/firecrawl/context/configuration.md index aed421760f1..66fe44dbd3d 100644 --- a/plugins/firecrawl/skills/firecrawl/context/configuration.md +++ b/plugins/firecrawl/skills/firecrawl/context/configuration.md @@ -7,7 +7,7 @@ Env vars, global flags, and built-in defaults for the `firecrawl-cli` binary. SK | Var | Purpose | Default | |---|---|---| | `FIRECRAWL_API_KEY` | Cloud API auth | (required) | -| `FIRECRAWL_API_URL` | Override API endpoint (self-hosted) | Firecrawl's cloud API; see [Self-hosted / Local Development](https://github.com/firecrawl/cli#self-hosted--local-development) (as of 2026-11-10; recheck when `/firecrawl:update` reports a CLI release) | +| `FIRECRAWL_API_URL` | Override API endpoint (self-hosted) | Firecrawl's cloud API; see [Self-hosted / Local Development](https://github.com/firecrawl/cli#self-hosted--local-development) | | `FIRECRAWL_NO_TELEMETRY` | Disable usage analytics | telemetry on | **Global flags** apply to every subcommand: @@ -23,7 +23,7 @@ Env vars, global flags, and built-in defaults for the `firecrawl-cli` binary. SK | `-V`, `--version` | CLI version only | | `-h`, `--help` | Subcommand help | -**Built-in defaults** (knobs NOT exposed as env vars). Their current values are in the README's [Check Status](https://github.com/firecrawl/cli#check-status) example and per-command option tables such as [Search Options](https://github.com/firecrawl/cli#search-options) (as of 2026-11-10; recheck when `/firecrawl:update` reports a CLI release): +**Built-in defaults** (knobs NOT exposed as env vars). Their current values are in the README's [Check Status](https://github.com/firecrawl/cli#check-status) example and per-command option tables such as [Search Options](https://github.com/firecrawl/cli#search-options): - **Concurrency**: the CLI throttles itself; `firecrawl --status` shows the real limit for the account - **Retry / backoff**: built in. If you need deterministic control, fail-fast with `--timeout` and handle retry in the agent turn diff --git a/plugins/firecrawl/skills/firecrawl/context/native-web-tools.md b/plugins/firecrawl/skills/firecrawl/context/native-web-tools.md index 3dd4c7bad40..5de144f2031 100644 --- a/plugins/firecrawl/skills/firecrawl/context/native-web-tools.md +++ b/plugins/firecrawl/skills/firecrawl/context/native-web-tools.md @@ -1,14 +1,14 @@ # The built-in `WebFetch` and `WebSearch` tools: verification record Detail behind the Boundary section in [SKILL.md](../SKILL.md). Each row is a four-part record: -the claim, the basis it rests on, the date it was checked, and the event that makes it worth +the claim, the basis it rests on, the date it was checked (left empty on pointer rows), and the event that makes it worth checking again. | Claim | Basis | As of | Recheck when | |---|---|---|---| | `WebFetch` and `WebSearch` are built-in tools, model-invocable, gated, and deferred (they load through tool search) | The `/harness-ops:inventory` extraction of the installed 2.1.285 binary (`builtin_tools.WebFetch`, `builtin_tools.WebSearch`) | 2026-09-29 | A release renames or removes either tool, or changes its gating or loading | -| What `WebFetch` returns and which hosts it refuses, which decides when a page needs this skill instead | Pointer: when choosing between `WebFetch` and this skill, fetch [WebFetch tool behavior](https://code.claude.com/docs/en/tools-reference#webfetch-tool-behavior) live | 2026-11-10 | That section changes how WebFetch returns content or which hosts it refuses | -| What `WebSearch` returns, which decides when a search needs this skill's `search` instead | Pointer: when choosing between `WebSearch` and this skill, fetch [WebSearch tool behavior](https://code.claude.com/docs/en/tools-reference#websearch-tool-behavior) live | 2026-11-10 | That section changes what WebSearch returns | +| What `WebFetch` returns and which hosts it refuses, which decides when a page needs this skill instead | Pointer: when choosing between `WebFetch` and this skill, fetch [WebFetch tool behavior](https://code.claude.com/docs/en/tools-reference#webfetch-tool-behavior) live | | | +| What `WebSearch` returns, which decides when a search needs this skill's `search` instead | Pointer: when choosing between `WebSearch` and this skill, fetch [WebSearch tool behavior](https://code.claude.com/docs/en/tools-reference#websearch-tool-behavior) live | | | ## Why the verdict is complementary diff --git a/plugins/firecrawl/skills/update/SKILL.md b/plugins/firecrawl/skills/update/SKILL.md index eb245683029..5bc53b1697c 100644 --- a/plugins/firecrawl/skills/update/SKILL.md +++ b/plugins/firecrawl/skills/update/SKILL.md @@ -42,7 +42,7 @@ These are the invariants an integration run must keep in the `/firecrawl:firecra in this exact form: - Single-line YAML `description` with `Use when:` and skip guidance phrase lists -- Frontmatter fields: `description`, `argument-hint`, `user-invocable: true`, `disable-model-invocation: false` (no `name`; how a skill is named without it: the `name` row of [Frontmatter reference](https://code.claude.com/docs/en/skills#frontmatter-reference), as of 2026-11-10; recheck when that row's default changes) +- Frontmatter fields: `description`, `argument-hint`, `user-invocable: true`, `disable-model-invocation: false` (no `name`; how a skill is named without it: the `name` row of [Frontmatter reference](https://code.claude.com/docs/en/skills#frontmatter-reference)) - Pre-computed context block at top, using `firecrawl --status` for the health line - "Core pattern. Write to disk, Read selectively" rule: every non-trivial example writes to a `mktemp`-created spill file with `-o`, `Read`s selectively, and the spill file is removed after the Read (kept only when the user asked for the file itself) - "When NOT to use this skill" section with the doc-site-reader-first and synthesis-tool escalation ordering diff --git a/plugins/fleet/skills/reach/SKILL.md b/plugins/fleet/skills/reach/SKILL.md index f069894d852..df2f9d6c9b1 100644 --- a/plugins/fleet/skills/reach/SKILL.md +++ b/plugins/fleet/skills/reach/SKILL.md @@ -76,8 +76,6 @@ on every lane; no `Bash(ssh …)` rule is added, and the posture below stands fo - **Pointer**: for what `fleet-converge` checks and how it reaches each lane, read dotfiles [docs/design-decisions.md, "Converging a lane: `fleet-converge`"](https://github.com/melodic-software/dotfiles/blob/main/docs/design-decisions.md#converging-a-lane-fleet-converge). - **As of**: 2026-10-23 (dotfiles `1108233`). **Recheck trigger**: that section changes or the - command is renamed. ## Verify the hop before you trust it @@ -89,8 +87,7 @@ expired-OAuth-session authentication error routed correctly and is signed out: s travels in a prompt. - **Pointer**: when matching a lane's answer to a signed-out state, fetch - [Login expired](https://code.claude.com/docs/en/errors#login-expired) live. **As of**: - 2026-10-11. **Recheck trigger**: that entry's message text changes. + [Login expired](https://code.claude.com/docs/en/errors#login-expired) live. ## Verbs @@ -121,8 +118,7 @@ dated measurement and how to re-measure it). When a script can do the job, run t - **Pointer**: for how an idle notice is delivered and what a `-p` session can receive, fetch [Get a notice when another session goes idle](https://code.claude.com/docs/en/cross-session-messaging#get-a-notice-when-another-session-goes-idle) and [Non-interactive sessions](https://code.claude.com/docs/en/cross-session-messaging#non-interactive-sessions) - live. **As of**: 2026-11-03. **Recheck trigger**: either section says a `-p` sender receives - the notice before its turn ends. + live. - **Multi-turn versus one open pipe.** The pipe keeps context in one process while the connection stays open; per-turn `--resume` survives a disconnect. `--resume` ids belong to the lane that made them, so resume against the same row. `--session-id` picks the id up front, so nothing @@ -140,15 +136,13 @@ dated measurement and how to re-measure it). When a script can do the job, run t reference. `logs` prints raw TUI output, so read a reply from the transcript (`--resume `). - **Pointer**: when deciding whether a lane can take a session name in place of the id, fetch [CLI reference: CLI commands](https://code.claude.com/docs/en/cli-reference#cli-commands) live. - **As of**: 2026-10-10. **Recheck trigger**: the `claude logs` or `claude attach` row changes. - A `-p` receiver needs `crossSessionInbound: accept`. For a session that must stay up, use a background session, not a `-p` receiver. Give either one standing instructions as its prompt: what to do with each message and when to stop. Delivery rules and the pointer are in [reference/relay.md](reference/relay.md#a-named-receiver). - **Pointer**: for when a `-p` run ends after its turn, fetch [Run Claude Code programmatically: Background tasks at exit](https://code.claude.com/docs/en/headless#background-tasks-at-exit) - live. **As of**: 2026-11-04. **Recheck trigger**: that section changes what keeps a `-p` run - open after its turn. + live. - Use `--bare` for prompts, never for a receiver: a bare session cannot receive messages or be listed. - Remote Control is interactive only: `-p --remote-control` does not connect. Keep it out of @@ -162,10 +156,7 @@ dated measurement and how to re-measure it). When a script can do the job, run t [Control inbound messages](https://code.claude.com/docs/en/cross-session-messaging#control-inbound-messages), [Non-interactive sessions](https://code.claude.com/docs/en/cross-session-messaging#non-interactive-sessions), [Start faster with bare mode](https://code.claude.com/docs/en/headless#start-faster-with-bare-mode) - and [CLI flags](https://code.claude.com/docs/en/cli-reference#cli-flags) live. **As of**: - 2026-11-10. **Recheck - trigger**: a release note names `crossSessionInbound`, `--bare`, `--bg`, `--session-id` or - Remote Control, or a route fails its hop check. + and [CLI flags](https://code.claude.com/docs/en/cli-reference#cli-flags) live. ## Accounts are per lane @@ -188,9 +179,6 @@ inside the target lane. Do not propose sharing an account: the split is the deci and [Message sessions on other machines](https://code.claude.com/docs/en/cross-session-messaging#message-sessions-on-other-machines) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: either section changes which sessions a session can see or reach across - platforms, machines or accounts. ## Port 22 is not an agent lane @@ -205,8 +193,7 @@ on-demand tasks FLEET.md lists. run, delegate or hand over. A script is judged on its own content. When a prompt's cause is in doubt, fetch [Eliminate prompts with auto mode](https://code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode) - live (as of 2026-10-11; recheck when that section changes what the classifier lets through - for remote commands). + live. - There is no `Bash(ssh ...)` allow rule anywhere in this fleet, and adding one is not the fix for a prompt. If asked to stop the prompting, say what the rule would cost and decline. - Neither side runs `bypassPermissions`. @@ -239,8 +226,7 @@ on-demand tasks FLEET.md lists. with no prompt argument the piped text is the prompt: see "Pipe data through Claude" and the stdin-only example under "Customize the system prompt" in [Run Claude Code programmatically](https://code.claude.com/docs/en/headless#pipe-data-through-claude), - and the piped-content row of [CLI commands](https://code.claude.com/docs/en/cli-reference#cli-commands) - (as of 2026-11-06; recheck when either changes how `-p` reads stdin). + and the piped-content row of [CLI commands](https://code.claude.com/docs/en/cli-reference#cli-commands). - **Escape apostrophes in ``.** Every SSH row single-quotes the prompt in `printf '%s\n' ''`, and R4 single-quotes the whole command, on the LOCAL shell, so a `'` in the prompt ("what's") closes that quote early. The rule follows the origin shell, not the @@ -260,12 +246,10 @@ on-demand tasks FLEET.md lists. - **Use `wsl.exe --exec`, not `--`.** The quoting rules above assume `--exec`. For what each option does, run `wsl.exe --help` on that machine, as [Basic commands: Help command](https://learn.microsoft.com/en-us/windows/wsl/basic-commands#help-command) - directs (as of 2026-11-03 the page has no section of its own for `--exec`; recheck when it adds - one). + directs (the page has no section of its own for `--exec`). - **Probe interop by absolute path.** `cmd.exe /c` prints nothing inside an sshd session and reads as "interop is broken" when it is not; run the `.exe` by absolute path. - **Parse the JSON, not the stream.** Treat stdout as able to carry lines that are not the JSON result, and extract the object first, for example `grep '^{' | jq -r .session_id`. What a - session-end hook can print is in [Hooks: SessionEnd](https://code.claude.com/docs/en/hooks#sessionend) - (as of 2026-11-03; recheck when that section says where a `SessionEnd` hook's output goes). + session-end hook can print is in [Hooks: SessionEnd](https://code.claude.com/docs/en/hooks#sessionend). - **A session name is not an address.** Hostname and lane, always. diff --git a/plugins/fleet/skills/reach/reference/relay.md b/plugins/fleet/skills/reach/reference/relay.md index 135f7980233..eb6d121dbe1 100644 --- a/plugins/fleet/skills/reach/reference/relay.md +++ b/plugins/fleet/skills/reach/reference/relay.md @@ -42,9 +42,6 @@ with `cmd.exe /c`. - **Pointer**: for how a Windows tool started from WSL picks its working directory, fetch [Run Windows tools from Linux](https://learn.microsoft.com/en-us/windows/wsl/filesystems#run-windows-tools-from-linux) live. -- **As of**: 2026-11-03 -- **Recheck trigger**: that section changes its working-directory exceptions or how a `.exe` is - run from WSL. **Windows to this machine's WSL (R4).** Take the distro name from `wsl.exe -l -q`, and run the account's login shell so `claude` is on `PATH`: @@ -94,9 +91,6 @@ claude -p -n --settings '{"crossSessionInbound":"accept"}' " --settings '{"crossSessionInbound":"accept"}' "` instead. - **Pointer**: when deciding whether a lane can take a session name in place of the id, fetch [CLI reference: CLI commands](https://code.claude.com/docs/en/cli-reference#cli-commands) live. - - **As of**: 2026-10-10 - - **Recheck trigger**: the `claude logs` or `claude attach` row changes. - Never combine `--bg` with `-p`. A later relay turn in that lane can list and message a running background session. `claude --resume --bg ""` continues a finished one. @@ -177,15 +164,11 @@ For a session that outlives the hop, the target lane's own supervisor hosts it: - Where agent view's background sessions run, and when they stop: its limits section. - **Pointer**: [Agent view: Limitations](https://code.claude.com/docs/en/agent-view#limitations), fetched live. - - **As of**: 2026-11-10 - - **Recheck trigger**: that section drops the research-preview label or changes its limits, or a - release note names `--bg` or `claude agents`. ## Mechanisms not used here Each fails the fleet's per-lane account split or needs a human; see the linked page before -reconsidering one. As of 2026-11-10; recheck when a release note names the mechanism or a linked -section changes. +reconsidering one. Recheck when a release note names the mechanism or a linked section changes. - **Remote Control and cross-machine `SendMessage`**: fails the account split. In our probe `claude -p --remote-control` did not connect (the flag took the next word as a session name, and @@ -226,9 +209,8 @@ printf '%s\n' 'echo ok' | 'cd /mnt/c/Users// && An expired-OAuth-session authentication error means the route worked and the Windows lane on the target is signed out (for the message's wording, fetch -[Login expired](https://code.claude.com/docs/en/errors#login-expired) live; as of 2026-10-11; -recheck when that entry's message changes). The fix is `/login` at that machine's console -(or over RDP, which is always the console account). Do not try to fix it remotely, and never move a +[Login expired](https://code.claude.com/docs/en/errors#login-expired) live). The fix is `/login` at that +machine's console (or over RDP, which is always the console account). Do not try to fix it remotely, and never move a credential through a prompt or a copy. ## Verified behavior @@ -248,9 +230,6 @@ also rests on documented flag behavior. [CLI flags](https://code.claude.com/docs/en/cli-reference#cli-flags) and [Dispatch an agent from your shell](https://code.claude.com/docs/en/agent-view#dispatch-an-agent-from-your-shell) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: a release note names any of those flags, or one of those sections changes - them. | Route | Result | |---|---| @@ -264,7 +243,7 @@ also rests on documented flag behavior. | Port 22 script hop | Not probed in this pass | | `notify_when_idle` from a `-p` sender | Message delivered; the notice never reached the sender, whose turn ended first | | `-p --remote-control` | Did not connect; Remote Control is interactive only | -| Cost | Most of each one-line `-p` turn's cost was SessionStart hooks and context loading; measure a turn per , as of 2026-10-02; recheck when that section renames or replaces its tracking commands | +| Cost | Most of each one-line `-p` turn's cost was SessionStart hooks and context loading; measure a turn per | ## What the relay does not change diff --git a/plugins/mcp-tools/README.md b/plugins/mcp-tools/README.md index 484fba4ed1b..52566b2a4a9 100644 --- a/plugins/mcp-tools/README.md +++ b/plugins/mcp-tools/README.md @@ -26,7 +26,7 @@ behavior, which the Claude Code page documents rather than mandates: - **Description**. States what / when / returns, fits within the skill's length floor for tool descriptions and server instructions alike (the number sits in the checklist's C4 row; its "Description length record" points at where Claude Code states the length), leaks no implementation detail. - **Parameters**. Every parameter described, guidance and format examples, documented optional defaults. - **Naming**. Valid name charset/length (spec), outcome-driven, service-namespaced. -- **Annotations**. `readOnlyHint`, `destructiveHint`, `idempotentHint`. A missing annotation is WARN, never FAIL. Pointer: when checking whether the spec requires them, read the [Tool data type](https://modelcontextprotocol.io/specification/2026-07-28/server/tools#tool) live. As of 2026-11-03; recheck trigger: a spec revision changes how the Tool data type lists `annotations`. +- **Annotations**. `readOnlyHint`, `destructiveHint`, `idempotentHint`. A missing annotation is WARN, never FAIL. Pointer: when checking whether the spec requires them, read the [Tool data type](https://modelcontextprotocol.io/specification/2026-07-28/server/tools#tool) live. - **Granularity**. Workflow-shaped consolidation, not one tool per raw API call. - **Schema**. Callable from the schema alone, with a valid `inputSchema`. - **Claude Code `_meta` annotations**. `anthropic/maxResultSizeChars`, `anthropic/requiresUserInteraction`, `anthropic/alwaysLoad`. Missing is at most an info advisory; a declared value Claude Code ignores or caps is the defect. @@ -39,8 +39,7 @@ Language-agnostic: it discovers tools in Python (`mcp`), TypeScript (`@modelcont A bundled script reads the MCP configuration Claude Code resolves (every [MCP installation scope](https://code.claude.com/docs/en/mcp#mcp-installation-scopes), managed -configuration included, plus any file you pass; as of 2026-10-11, recheck when that section adds -or moves a scope) and emits a dated inventory: scope, whether the entry is effective, transport, +configuration included, plus any file you pass) and emits a dated inventory: scope, whether the entry is effective, transport, launcher, package, pin state, publisher, and whether it runs in the Claude Code sandbox (every stdio row reads `no`; the posture checklist's "Sandbox coverage" record holds that decision and its pointer). The skill then evaluates five criteria: diff --git a/plugins/mcp-tools/skills/audit-posture/SKILL.md b/plugins/mcp-tools/skills/audit-posture/SKILL.md index 799e3901b22..bd03bcc8371 100644 --- a/plugins/mcp-tools/skills/audit-posture/SKILL.md +++ b/plugins/mcp-tools/skills/audit-posture/SKILL.md @@ -41,8 +41,6 @@ tool: we treat every one of them as holding values that must not reach the trans - **Pointer**: when deciding what a scope's file can hold, fetch [MCP installation scopes](https://code.claude.com/docs/en/mcp#mcp-installation-scopes) live. -- **As of**: 2026-11-03 -- **Recheck trigger**: that section adds, moves or renames a scope or the file it is stored in. The script emits only the columns the audit needs, and only values that fully match a strict grammar for their kind: npm, Python, and image specs; @@ -97,9 +95,6 @@ organization-provided servers from user-configured ones, and no P1-P5 criterion - **Pointer**: when explaining an organization-provided row or what happens on removal, fetch [Provide servers through managed settings](https://code.claude.com/docs/en/managed-mcp#provide-servers-through-managed-settings) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: that section changes how organization-provided servers are attributed or - removed, or is renamed. ### Phase 2: Evaluate P1-P5 @@ -187,8 +182,6 @@ changed rows. - Every stdio row reads `sandboxed = no`. This is expected; the checklist's [sandbox record](reference/checklist.md#sandbox-coverage) gives the decision and its pointer. - As of 2026-10-11. Recheck trigger: that record moves, or its decision stops marking stdio rows - unsandboxed. - A container image tag is mutable. Only an `@sha256:` digest counts as pinned, so a fixed tag such as `:1.4` reads `mutable-tag`, not `exact`. - Local-scope rows are found by project path. When the operator runs from a different directory @@ -199,6 +192,3 @@ changed rows. - **Pointer**: when checking how local scope is stored or which server sources exist beyond the config files, fetch [MCP installation scopes](https://code.claude.com/docs/en/mcp#mcp-installation-scopes) live. - - **As of**: 2026-10-11 - - **Recheck trigger**: that section changes where local scope is stored, or names a server - source the coverage footer does not. diff --git a/plugins/mcp-tools/skills/audit-posture/reference/checklist.md b/plugins/mcp-tools/skills/audit-posture/reference/checklist.md index f64d1f5b6f4..667b024b803 100644 --- a/plugins/mcp-tools/skills/audit-posture/reference/checklist.md +++ b/plugins/mcp-tools/skills/audit-posture/reference/checklist.md @@ -2,7 +2,7 @@ Criteria P1-P5 for `/mcp-tools:audit-posture`. Each criterion names its severity rule and what it reads from the inventory. The decisions behind the criteria are in [Source records](#source-records), -each with a pointer to where the fact lives, an as-of stamp and a recheck trigger. +each with a pointer to where the fact lives. ## Contents @@ -33,8 +33,7 @@ inventory table and get no findings, because Claude Code does not launch them fr `rejected-by-client` is a `managedMcpServers` entry that fails the entry checks the script applies, so the audit treats it as not loaded; the [managed precedence record](#managed-precedence) points at where those checks are -defined, and `inventory.sh` encodes them. As of 2026-10-11. Recheck trigger: that record moves or -stops pointing at the entry checks. +defined, and `inventory.sh` encodes them. P2, P3, and P4 depend on facts outside the config. A result reached without a lookup the operator asked for carries the label `unverified`. @@ -60,9 +59,6 @@ Reads the `launcher` and `pin` columns. Mechanical: no judgment beyond this tabl whether the npm registry lets a published version change, fetch the [npm unpublish policy, Considerations](https://docs.npmjs.com/policies/unpublish#considerations) live. -- **As of**: 2026-11-03 -- **Recheck trigger**: either section changes how a spec without a version resolves or whether a - used `package@version` can be published again. - `local` launchers (`pin` = `local-path` or `not-a-package`) and `remote` rows (`pin` = `n/a`) are `n/a` for P1. Name a `local-path` row in the details so the operator knows the code on disk is theirs to track. @@ -145,9 +141,6 @@ started by Claude Code itself, outside the scope of the commands the sandbox cov - **Pointer**: for which commands the sandbox covers and the protected paths that keep a command from adding an MCP server, see (the page introduction) and . -- **As of**: 2026-09-26 -- **Recheck trigger**: that page changes which commands the sandbox covers, or a Claude Code - release note names sandboxing together with MCP servers. ### Anthropic does not audit MCP servers @@ -156,8 +149,6 @@ server as vetted by Anthropic. - **Pointer**: for Anthropic's position on MCP server review, see . -- **As of**: 2026-09-26 -- **Recheck trigger**: that section changes what Anthropic reviews. ### Registry moderation @@ -166,9 +157,6 @@ gives a registry listing no weight as evidence of safety, including for known vu - **Pointer**: for what the registry moderates, and its preview status, see . -- **As of**: 2026-09-26 -- **Recheck trigger**: that page changes what the registry moderates or removes, or the registry - leaves preview. ### Docker sandboxes and local MCP servers @@ -177,8 +165,6 @@ MCP server. - **Pointer**: for how Docker's sandbox model places local MCP servers, see . -- **As of**: 2026-09-26 -- **Recheck trigger**: that page changes where local stdio MCP servers run. ### Postmark @@ -186,8 +172,6 @@ P3's worked case: the audit treats `postmark-mcp` on npm as a package under Post Postmark did not publish. - **Pointer**: . -- **As of**: 2026-09-26 -- **Recheck trigger**: that post changes what it says about who published the package. ### Configuration sources @@ -201,10 +185,6 @@ precedence they name. `inventory.sh` encodes both; this record says where to re- , , and . -- **As of**: 2026-10-11 -- **Recheck trigger**: a Claude Code release note naming an MCP scope, `managed-mcp.json`, or - `managedMcpServers`, or a re-fetch of any of those sections diverging from what `inventory.sh` - reads. ### Managed precedence @@ -220,9 +200,6 @@ case handling. see and ; for the entry checks, . -- **As of**: 2026-09-26 -- **Recheck trigger**: the managed-mcp page changes precedence or the entry checks, or a Claude - Code release note names `managedMcpServers` precedence or its entry checks. ### SDK entries diff --git a/plugins/mcp-tools/skills/audit/reference/checklist.md b/plugins/mcp-tools/skills/audit/reference/checklist.md index 94dec359964..32ebacb8252 100644 --- a/plugins/mcp-tools/skills/audit/reference/checklist.md +++ b/plugins/mcp-tools/skills/audit/reference/checklist.md @@ -27,9 +27,6 @@ upfront, honored only for the server sources the per-tool pointer names. per-tool deferral and which server sources honor `false`, see ; for the server-level field, see . -- **As of**: 2026-10-11 -- **Recheck trigger**: the page moves any of these values, or changes which server sources honor a - per-tool `false`, or a release note names MCP `_meta` annotations. **Description length record.** C4 holds each tool description and each server `instructions` field to a floor this skill chose; the number sits in the C4 row as this skill's own rule. C4 warns @@ -152,8 +149,7 @@ advisory that the server could benefit), and for C19 not a finding at all. Two d - **Declared but ineffective**. Claude Code caps or ignores the value (C17 past the ceiling or on content outside the annotation; C18 set to anything but the effective value; both per the [Client-behavior record](#mcp-tool-audit-checklist), a bold paragraph under the title with no - heading of its own; as of 2026-10-11, recheck when that record moves or changes what C17 or C18 - reads at its pointer). WARN + heading of its own). WARN generally, FAIL for `anthropic/requiresUserInteraction`, where a silently ignored value ships a consent gate that never fires. - **Declared, honored, and unwarranted**. Claude Code applies the value exactly as asked, and that is @@ -167,7 +163,7 @@ the value's JSON type, so read it in that language's own syntax. | # | Criterion | Authority | Severity | How to evaluate | |---|-----------|-----------|----------|-----------------| -| C17 | **`anthropic/maxResultSizeChars` on inherently-large-output tools**. A tool whose text results are inherently large (full schemas, file trees, whole-board dumps) declares its own result-size ceiling | OPINION | info (WARN if set ineffectively) | Missing on a large-output tool = info: the tool's large text results fall back to the client's default handling ([Client-behavior record](#mcp-tool-audit-checklist), a bold paragraph under the title; as of 2026-10-11, recheck when that record moves or changes what C17 reads at its pointer). Set past the ceiling, or on a tool returning content outside the annotation, both read at the record's pointer = WARN | +| C17 | **`anthropic/maxResultSizeChars` on inherently-large-output tools**. A tool whose text results are inherently large (full schemas, file trees, whole-board dumps) declares its own result-size ceiling | OPINION | info (WARN if set ineffectively) | Missing on a large-output tool = info: the tool's large text results fall back to the client's default handling ([Client-behavior record](#mcp-tool-audit-checklist), a bold paragraph under the title). Set past the ceiling, or on a tool returning content outside the annotation, both read at the record's pointer = WARN | | C18 | **`anthropic/requiresUserInteraction` set, to the effective value, where per-call consent is the point**. A tool that exists to collect a person's go-ahead (granting access, accepting terms), so that approving it without a prompt would defeat its purpose, declares it | OPINION | info (FAIL if set to any value other than the value the Client-behavior record's pointer names) | Missing on a consent-shaped tool = info. Declared with any value other than the value the Client-behavior record's pointer names, read in its JSON type so a string or number spelling of it does not match = FAIL, because the intended consent gate silently never applies. How an honored annotation behaves in each permission mode is read at the Client-behavior record's pointer, not restated here | | C19 | **`anthropic/alwaysLoad` reserved for genuinely always-needed tools**. `"anthropic/alwaysLoad": true` opts that one tool out of tool-search deferral | OPINION | info (WARN if over-declared) | Absence is never a finding. Deferral is the correct default, and "needed on every turn" is not inferable from source. Declared `true` on a tool with no every-turn case, or on many of a server's tools (defeating deferral, since each upfront tool spends context), = WARN. Declared `false` is never a finding: it keeps a heavy tool deferred when a user configures the whole server to load upfront, on the server sources the Client-behavior record's pointer names, so it is the opt-out to suggest for a large tool on a server whose docs recommend the server-level `alwaysLoad`. Its absence is not a finding either: make that suggestion in the fix guidance, unscored, never as an info count. That server-level config field itself is client configuration, outside this audit | diff --git a/plugins/mcp-tools/skills/audit/reference/server-discovery.md b/plugins/mcp-tools/skills/audit/reference/server-discovery.md index 50013076a2a..3183a31154f 100644 --- a/plugins/mcp-tools/skills/audit/reference/server-discovery.md +++ b/plugins/mcp-tools/skills/audit/reference/server-discovery.md @@ -61,8 +61,7 @@ same shape. `meta-extraction` locates the tool's protocol `_meta` object, the sole input to C17-C19. Record each key's **JSON type**, not just its presence: C18 grades on the type ([checklist.md, Client-behavior record](checklist.md#mcp-tool-audit-checklist), a bold paragraph -under the title with no heading of its own; as of 2026-10-11, recheck when that record moves or -stops grading C18 on the JSON type), so the language's own `true` literal has to be told apart +under the title with no heading of its own), so the language's own `true` literal has to be told apart from a quoted string or a number written in that language's syntax. - **Pointer**: when reading how an SDK attaches `_meta` to a tool, fetch the reference each diff --git a/plugins/miro/README.md b/plugins/miro/README.md index f1899c6c9a5..c386e3201d5 100644 --- a/plugins/miro/README.md +++ b/plugins/miro/README.md @@ -16,9 +16,7 @@ instead of starting, and its stderr names the cause and the one shell line that `/mcp` shows the server's status; to read that stderr, start a session with `claude --debug` (or `claude --debug=mcp`) and open the debug log at `~/.claude/debug/.txt`. Basis: [Troubleshoot plugins, Server is configured but never connects](https://code.claude.com/docs/en/plugins/troubleshooting#server-is-configured-but-never-connects) -and [Debug your configuration, Check MCP servers](https://code.claude.com/docs/en/debug-your-config#check-mcp-servers), -verified 2026-10-24; recheck when either section changes where server stderr is shown or the debug -flag that captures it. +and [Debug your configuration, Check MCP servers](https://code.claude.com/docs/en/debug-your-config#check-mcp-servers). ## Install @@ -45,9 +43,7 @@ instruction. Enter it with `/plugin configure miro@melodic-software` (masked inp `MIRO_API_TOKEN` environment variable at launch. When Claude Code prompts for options, and where it keeps a sensitive value, are its own to define: see [Plugins reference: User configuration](https://code.claude.com/docs/en/plugins/manifest-reference#user-configuration) -and [Where values are stored](https://code.claude.com/docs/en/plugins/manifest-reference#where-values-are-stored) -(as of 2026-10-11; recheck when either section changes when the prompt appears or where -sensitive values are kept). +and [Where values are stored](https://code.claude.com/docs/en/plugins/manifest-reference#where-values-are-stored). Run `/miro:setup` to check enablement and MCP availability or, with explicit confirmation, perform a minimal read-only API credential check. The setup skill never reads or exposes the @@ -93,8 +89,7 @@ and launches a different server process instead. 2. Locate this plugin's cached server entry point, `server/src/launch.ts` inside the installed `miro` plugin's cache directory, and locate it again after every `miro` update. For where that directory is, see - [Plugin loading reference: Find plugins on disk](https://code.claude.com/docs/en/plugins/loading#find-plugins-on-disk) - (as of 2026-11-03; recheck when that section changes the cache path layout). + [Plugin loading reference: Find plugins on disk](https://code.claude.com/docs/en/plugins/loading#find-plugins-on-disk). 3. Add a **user-scope** stdio MCP server whose command wraps that path with `vault-exec`. A directly configured server does not receive `CLAUDE_PLUGIN_DATA`, so pass it with `-e`; the plugin's data directory is `~/.claude/plugins/data/miro-`: @@ -113,10 +108,9 @@ and launches a different server process instead. 4. Because that command differs from the plugin's own `node ${CLAUDE_PLUGIN_ROOT}/...` entry, the two servers can both run (whether Claude Code collapses them is read live from the pointer below; the `dometrain` plugin's README covers a case where it does, under - [Getting the MCP server](../dometrain/README.md#getting-the-mcp-server), as of 2026-10-11; - recheck when that heading is renamed or stops covering duplicate servers). Disable the - plugin's own `miro` server with `/mcp` so only the wrapped one runs, and repeat that once in - every project where you use `miro`. + [Getting the MCP server](../dometrain/README.md#getting-the-mcp-server)). Disable the plugin's + own `miro` server with `/mcp` so only the wrapped one runs, and repeat that once in every + project where you use `miro`. Tool names move from `mcp__plugin_miro_miro__` (plugin-provided) to `mcp__miro__` (directly configured) once the override is active. Update any permission rule written against the @@ -129,9 +123,6 @@ old prefix. (when servers are deduplicated) and [MCP: Disable a server without removing it](https://code.claude.com/docs/en/mcp#disable-a-server-without-removing-it) (where `/mcp` records a disabled server, which is why the step repeats per project) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: any of those sections changes the plugin tool-name prefix, the - deduplication rule, or the scope of a disabled-server choice. `event-storming` 0.6.14 and later detect Miro under either prefix, so its live-board path keeps working with this override. Earlier versions probe only `mcp__plugin_miro_miro__*` and fall back @@ -152,9 +143,8 @@ client; the request/response and error-shaping logic lives in `server/src/`. The TypeScript in `server/src/` is what runs: there is no build step and no committed build output. For how Node runs a `.ts` file, see -[Node.js: Type stripping](https://nodejs.org/api/typescript.html#type-stripping) (as of -2026-11-03; recheck when that section changes which TypeScript syntax runs without a flag). The -repo follows the +[Node.js: Type stripping](https://nodejs.org/api/typescript.html#type-stripping). The repo +follows the [on-demand dependencies convention](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/contracts/on-demand-dependencies/README.md): no third-party code is committed. `server/src/launch.ts` installs the runtime dependencies on first launch and then starts `index.ts`: @@ -181,8 +171,6 @@ pin from the same lockfile. - **Pointer**: when deciding where a plugin's Node project may live, fetch [Plugin loading: Node.js package dependencies](https://code.claude.com/docs/en/plugins/loading#node-js-package-dependencies) live for what triggers that install and whether it can be turned off. -- **As of**: 2026-10-11 -- **Recheck trigger**: that section changes what triggers the install or adds a way to turn it off. ## Development diff --git a/plugins/miro/skills/setup/SKILL.md b/plugins/miro/skills/setup/SKILL.md index 8bd4df13621..6d23e6de189 100644 --- a/plugins/miro/skills/setup/SKILL.md +++ b/plugins/miro/skills/setup/SKILL.md @@ -26,9 +26,6 @@ Official contracts: [Plugins reference: User configuration](https://code.claude.com/docs/en/plugins/manifest-reference#user-configuration) and [Default enablement](https://code.claude.com/docs/en/plugins/manifest-reference#defaultenabled) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: either section changes how options are prompted for, stored or delivered, or - what `defaultEnabled: false` does at install. ## Task @@ -50,9 +47,6 @@ Official contracts: - **Pointer**: for where a plugin MCP server's startup error is recorded, see and . - - **As of**: 2026-10-24 - - **Recheck trigger**: either section changing where server stderr is shown or the debug flag - that captures it. After configuration, require `/reload-plugins` or a new session before rechecking tool availability. 4. When the scoped Miro tools are present, report only that the server started. The server starts @@ -90,8 +84,6 @@ command's default. Each command's scope flag spelling and default are read live: [`plugin marketplace add`](https://code.claude.com/docs/en/plugins/cli-reference#plugin-marketplace-add), [`plugin install`](https://code.claude.com/docs/en/plugins/cli-reference#plugin-install) and [`plugin enable`](https://code.claude.com/docs/en/plugins/cli-reference#plugin-enable) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: any of those sections changes its scope option, short form or default. Registering at `user` while installing at `project` leaves the marketplace declaration out of the project's checked-in @@ -100,9 +92,7 @@ to resolve it from. **The enable step is not optional.** This plugin ships `defaultEnabled: false`, so no `miro` tool is available until the enable step runs. Pointer: [Default -enablement](https://code.claude.com/docs/en/plugins/manifest-reference#defaultenabled). As of: -2026-11-10. Recheck trigger: that section says an install enables a plugin that ships -`defaultEnabled: false`. +enablement](https://code.claude.com/docs/en/plugins/manifest-reference#defaultenabled). Passing the scope to `claude plugin enable` explicitly keeps the sequence deterministic in CI. A bootstrap that stops after `install` looks successful and delivers no tools. @@ -132,9 +122,6 @@ tools. when a saved value applies, fetch [plugin CLI reference § plugin configure](https://code.claude.com/docs/en/plugins/cli-reference#plugin-configure) live. -- **As of**: 2026-11-11 -- **Recheck trigger**: that section changes the command's flags, how it reports a saved or - refused value, or when a saved value applies. **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 @@ -154,8 +141,6 @@ reveal the contents of wherever it keeps them. - **Pointer**: when a user asks where the token is stored, fetch [Plugins reference: Where values are stored](https://code.claude.com/docs/en/plugins/manifest-reference#where-values-are-stored) live and give them its answer. -- **As of**: 2026-10-11 -- **Recheck trigger**: that section changes where sensitive values are kept. ## Boundaries diff --git a/plugins/multi-agent/README.md b/plugins/multi-agent/README.md index 75768928999..7b856721847 100644 --- a/plugins/multi-agent/README.md +++ b/plugins/multi-agent/README.md @@ -70,9 +70,6 @@ here, not in the agent bodies, so neither agent spends a fetch on it. [sub-agents: supported frontmatter fields](https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields) and [sub-agents: what loads at startup](https://code.claude.com/docs/en/sub-agents#what-loads-at-startup) live. -- **As of**: 2026-10-10 -- **Recheck trigger**: the sub-agents `omitClaudeMd` row or the startup - section changes what the field drops or keeps. A `PreToolUse` hook on `WebFetch` (`hooks/drift-checker-fetch-gate.mjs`) makes the host rule a gate: inside a `drift-checker` subagent it denies any fetch @@ -96,8 +93,6 @@ through. live; for what `onFailure` does with a failed gate and which Claude Code release honors it, fetch [hooks: Block the action when a hook fails](https://code.claude.com/docs/en/hooks#block-the-action-when-a-hook-fails) live. -- **As of:** 2026-11-03. -- **Recheck trigger:** either section changes how an undecided call or a failed hook is handled. The row is always-on: it fires on every `Bash` call, at a budget of one process (`node`) per call, ratcheted in `.performance/ratchets.json` as `multi-agent-pretooluse-bash-docs-fetcher-gate-spawns`. @@ -108,8 +103,6 @@ relative to mod hooks is read live: - **Pointer:** [mods events: where settings hooks run in the order](https://code.claude.com/docs/en/plugins/mods/events#where-settings-hooks-run-in-the-order) and [mods events: approve or refuse a tool call before the user is asked](https://code.claude.com/docs/en/plugins/mods/events#approve-or-refuse-a-tool-call-before-the-user-is-asked). -- **As of:** 2026-10-11. -- **Recheck trigger:** either section changes where settings hooks run relative to mod hooks. ## The fan-out guard diff --git a/plugins/multi-agent/agents/docs-fetcher.md b/plugins/multi-agent/agents/docs-fetcher.md index bbc99b83e30..5856f67529e 100644 --- a/plugins/multi-agent/agents/docs-fetcher.md +++ b/plugins/multi-agent/agents/docs-fetcher.md @@ -3,7 +3,7 @@ name: docs-fetcher description: "Runs the fetch stage of the multi-agent:drift-audit workflow: one fresh raw read of one first-party docs page through the plugin's docs-raw.sh, returned verbatim. Its Bash runs that one command and nothing else, held there by a PreToolUse gate. No web tools, no file access, no edits. Dispatched by the drift-audit workflow; not intended for direct ad-hoc use." tools: "Bash" model: inherit # reason: the drift-audit workflow passes model and effort per stage from the role map -maxTurns: 4 # what a capped run returns: https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields, maxTurns row (as of 2026-10-11; recheck when that row changes what a capped subagent returns) +maxTurns: 4 # what a capped run returns: https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields, maxTurns row omitClaudeMd: true # reason: one gated fetch of an untrusted page follows only its prompt; record in README "The drift-audit workflow" --- You run the fetch stage of the `multi-agent:drift-audit` workflow. The prompt gives one URL and, diff --git a/plugins/multi-agent/agents/drift-checker.md b/plugins/multi-agent/agents/drift-checker.md index 0f45c4d49f3..f12724ba57d 100644 --- a/plugins/multi-agent/agents/drift-checker.md +++ b/plugins/multi-agent/agents/drift-checker.md @@ -3,7 +3,7 @@ name: drift-checker description: "Runs the judging stages of the multi-agent:drift-audit workflow (a finder or a skeptic): checks claims and default values against the upstream pages the prompt lists, with WebFetch only. No search, no file access, no shell, no edits. Dispatched by the drift-audit workflow, whose prompt names the stage; not intended for direct ad-hoc use." tools: "WebFetch" model: inherit # reason: the drift-audit workflow passes model and effort per stage from the role map -maxTurns: 30 # what a capped run returns: https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields, maxTurns row (as of 2026-10-11; recheck when that row changes what a capped subagent returns) +maxTurns: 30 # what a capped run returns: https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields, maxTurns row omitClaudeMd: true # reason: a WebFetch-only judge over untrusted pages follows only its prompt; record in README "The drift-audit workflow" --- You run one judging stage of the `multi-agent:drift-audit` workflow. The workflow prompt names the diff --git a/plugins/multi-agent/agents/drift-reader.md b/plugins/multi-agent/agents/drift-reader.md index 74dfccffc0d..d93a255a458 100644 --- a/plugins/multi-agent/agents/drift-reader.md +++ b/plugins/multi-agent/agents/drift-reader.md @@ -3,7 +3,7 @@ name: drift-reader description: "Runs the read stage of the multi-agent:drift-audit workflow: lifts model, effort, subagent and workflow claims out of the repository files the prompt lists, with Read, Grep and Glob only. No web access, no shell, no edits. Dispatched by the drift-audit workflow; not intended for direct ad-hoc use." tools: "Read, Grep, Glob" model: inherit # reason: the drift-audit workflow passes model and effort per stage from the role map -maxTurns: 20 # what a capped run returns: https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields, maxTurns row (as of 2026-10-11; recheck when that row changes what a capped subagent returns) +maxTurns: 20 # what a capped run returns: https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields, maxTurns row --- You run the read stage of the `multi-agent:drift-audit` workflow. The workflow prompt lists the files to read and the structure to return. Return exactly that structure and nothing else. diff --git a/plugins/multi-agent/evals/as-disabled-switch-downgrade/prompt.md b/plugins/multi-agent/evals/as-disabled-switch-downgrade/prompt.md index 9902115cb93..abb19f7daab 100644 --- a/plugins/multi-agent/evals/as-disabled-switch-downgrade/prompt.md +++ b/plugins/multi-agent/evals/as-disabled-switch-downgrade/prompt.md @@ -1,5 +1,5 @@ --- -description: "Scaffold: the workspace's .claude/settings.json sets disableWorkflows true, a switch workflow-availability.sh reports as off; the CLAUDE_CODE_DISABLE_WORKFLOWS variable of legacy assess 2 cannot reach a run, since only EVAL_ variables pass. assess SKILL.md lines 72-74: workflow becomes subagent and the reason names the switch; legacy assess 2: the verdict does not suggest unsetting it. reason-names-switch needs disableWorkflows or .claude/settings.json on the reason line, words the prompt lacks; no-unset-suggestion fails a reply that proposes removing, flipping or re-enabling the switch. ran-availability-script is a with-only indicator. Needs --scaffold --allow-tools Bash." +description: "Scaffold: the workspace's .claude/settings.json sets disableWorkflows true, a switch workflow-availability.sh reports as off; the CLAUDE_CODE_DISABLE_WORKFLOWS variable of legacy assess 2 cannot reach a run, since only EVAL_ variables pass. assess SKILL.md lines 66-68: workflow becomes subagent and the reason names the switch; legacy assess 2: the verdict does not suggest unsetting it. reason-names-switch needs disableWorkflows or .claude/settings.json on the reason line, words the prompt lacks; no-unset-suggestion fails a reply that proposes removing, flipping or re-enabling the switch. ran-availability-script is a with-only indicator. Needs --scaffold --allow-tools Bash." tags: [multi-agent, assess, outcome, availability, no-network] runs: 3 max_turns: 8 diff --git a/plugins/multi-agent/evals/su-apply-guard-off-confirms/prompt.md b/plugins/multi-agent/evals/su-apply-guard-off-confirms/prompt.md index 43c67ce287a..208cbf07423 100644 --- a/plugins/multi-agent/evals/su-apply-guard-off-confirms/prompt.md +++ b/plugins/multi-agent/evals/su-apply-guard-off-confirms/prompt.md @@ -1,5 +1,5 @@ --- -description: "setup apply that turns fanout.frontier_guard off previews without writing, states the frontier fan-out consequence, and asks for that key's confirmation separately. Also covers legacy setup 3: links-cost-pages needs the pricing or costs page SKILL.md lines 95-100 link, no-price-figure fails a dollar, USD or per-MTok figure (link the rates, never state them). The legacy 'narrower local layer is offered ... when the scope is one repository' is held on #8635: this run sits at a home root asking for a machine-wide value, where setup refuses local (SKILL.md 59), so the condition never arises." +description: "setup apply that turns fanout.frontier_guard off previews without writing, states the frontier fan-out consequence, and asks for that key's confirmation separately. Also covers legacy setup 3: links-cost-pages needs the pricing or costs page SKILL.md lines 95-99 link, no-price-figure fails a dollar, USD or per-MTok figure (link the rates, never state them). The legacy 'narrower local layer is offered ... when the scope is one repository' is held on #8635: this run sits at a home root asking for a machine-wide value, where setup refuses local (SKILL.md 59), so the condition never arises." tags: [multi-agent, setup, outcome, write-posture] runs: 3 max_turns: 10 diff --git a/plugins/multi-agent/hooks/drift-checker-fetch-gate.mjs b/plugins/multi-agent/hooks/drift-checker-fetch-gate.mjs index bc1f4db4edd..b301ea712d5 100755 --- a/plugins/multi-agent/hooks/drift-checker-fetch-gate.mjs +++ b/plugins/multi-agent/hooks/drift-checker-fetch-gate.mjs @@ -7,8 +7,7 @@ // through untouched. // // The hook input carries agent_type when the hook fires inside a subagent: -// https://code.claude.com/docs/en/hooks#common-input-fields (as of 2026-10-02; -// recheck when that table changes the agent_type field). +// https://code.claude.com/docs/en/hooks#common-input-fields. // // Fail-closed inside drift-checker (a URL it cannot parse is denied); // fail-open everywhere else. diff --git a/plugins/multi-agent/reference/config.md b/plugins/multi-agent/reference/config.md index eb3145a60a2..3cef41e4dff 100644 --- a/plugins/multi-agent/reference/config.md +++ b/plugins/multi-agent/reference/config.md @@ -54,23 +54,18 @@ note. resolves to per provider, see [model config: model aliases](https://code.claude.com/docs/en/model-config#model-aliases); for the model an agent with no `model` runs on, see -[workflows: cost](https://code.claude.com/docs/en/workflows#cost). Both as of -2026-10-02; recheck when either section changes. +[workflows: cost](https://code.claude.com/docs/en/workflows#cost). The subagent `model` field accepts the aliases `sonnet`, `opus`, `haiku` and `fable`, a full model ID, or `inherit`, and a subagent with none falls back to the main conversation's model after the per-invocation parameter and the `CLAUDE_CODE_SUBAGENT_MODEL` variable; see -[sub-agents: choose a model](https://code.claude.com/docs/en/sub-agents#choose-a-model), -as of 2026-10-18; recheck when that section adds or drops an alias or changes -the resolution order. +[sub-agents: choose a model](https://code.claude.com/docs/en/sub-agents#choose-a-model). The `effort` values are the full set this resolver accepts; which of them a spawn can use depends on the model it runs on. For each model's supported levels, see -[model config: adjust effort level](https://code.claude.com/docs/en/model-config#adjust-effort-level), -as of 2026-10-10; recheck when that section changes the levels or which models -support them. +[model config: adjust effort level](https://code.claude.com/docs/en/model-config#adjust-effort-level). `pointer*`, `basis_*`, `claim_*`, `reason_*`, `as_of` and `recheck` record where each bundled default's basis lives. A role's `basis_model` and @@ -109,9 +104,6 @@ level is its own `lanes[].effort`, not the `orchestrator` role. - Pointer: [sub-agents: choose an effort level](https://code.claude.com/docs/en/sub-agents#choose-an-effort-level), [sub-agents: supported frontmatter fields](https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields) and [model config: effort level of subagents and teammates](https://code.claude.com/docs/en/model-config#effort-level-of-subagents-and-teammates) -- As of: 2026-11-04 -- Recheck: any of those sections changes which source wins for a subagent's - effort, or what an unset `effort` field inherits on either model. ## Hard cap @@ -124,9 +116,6 @@ alongside it, and the lower of the two wins. - Pointer: [settings reference: `maxEffortLevel`](https://code.claude.com/docs/en/settings-reference#maxeffortlevel); [model config: organization effort limits](https://code.claude.com/docs/en/model-config#organization-effort-limits) -- As of: 2026-10-04 -- Recheck: either entry changes which scopes can set the cap, how scopes - combine, or which effort sources it covers. ## The fan-out guard @@ -138,9 +127,8 @@ or that names a frontier alias, takes `fanout.model` instead. So the resolver never emits a frontier session's own model for a fan-out stage. What the agent runs on is the harness's call: see [sub-agents: choose a model](https://code.claude.com/docs/en/sub-agents#choose-a-model) and -[run every subagent on one model](https://code.claude.com/docs/en/sub-agents#run-every-subagent-on-one-model) -(as of 2026-10-31; recheck when either section changes how an alias, a blocked -value or a forced model resolves). Under an Opus session `opus` and `inherit` +[run every subagent on one model](https://code.claude.com/docs/en/sub-agents#run-every-subagent-on-one-model). +Under an Opus session `opus` and `inherit` name the same model, so the guard changes nothing there. Setting `fanout.frontier_guard: false` is an explicit opt-in to frontier diff --git a/plugins/multi-agent/reference/routing-rubric.md b/plugins/multi-agent/reference/routing-rubric.md index afa2e818d66..8f92a0ec779 100644 --- a/plugins/multi-agent/reference/routing-rubric.md +++ b/plugins/multi-agent/reference/routing-rubric.md @@ -59,27 +59,17 @@ ran it at `high`, so the eval did not measure the guide's starting point. - **Pointer**: when choosing an effort level for a role, fetch [model config: adjust effort level](https://code.claude.com/docs/en/model-config#adjust-effort-level) live. -- **As of**: 2026-10-10 -- **Recheck trigger**: a Claude Code release that changes the effort levels or - which models accept them. - **Pointer**: when checking what the `haiku` alias resolves to on a provider, fetch [model config: model aliases](https://code.claude.com/docs/en/model-config#model-aliases) live. -- **As of**: 2026-10-10 -- **Recheck trigger**: a new Haiku model, or a change to the alias table. - **Pointer**: when deciding whether evidence justifies changing a role's model, fetch [choosing a model: decide whether to upgrade or change models](https://platform.claude.com/docs/en/about-claude/models/choosing-a-model#decide-whether-to-upgrade-or-change-models) live. -- **As of**: 2026-11-09 -- **Recheck trigger**: a new model row in that page's selection matrix. - **Pointer**: when an advisor pairing is proposed for a Haiku role, read [anthropics/claude-code#91715](https://github.com/anthropics/claude-code/issues/91715) live. -- **As of**: 2026-10-10 -- **Recheck trigger**: that issue closes, or a release note adds a - per-subagent advisor setting. diff --git a/plugins/multi-agent/scripts/allowed-tools-pairing.test.sh b/plugins/multi-agent/scripts/allowed-tools-pairing.test.sh index 131e748605e..8d47766be60 100755 --- a/plugins/multi-agent/scripts/allowed-tools-pairing.test.sh +++ b/plugins/multi-agent/scripts/allowed-tools-pairing.test.sh @@ -4,8 +4,7 @@ # # A Bash permission rule is matched against the literal command string, and # `bash` is NOT one of the wrappers Claude Code strips before matching (list: -# , as of 2026-10-02; recheck when -# that list changes). So `Bash(bash :*)` is interpreter-led, while a rule written without +# ). So `Bash(bash :*)` is interpreter-led, while a rule written without # `bash` stops matching the moment the body still says `bash `. Only the # paired form (direct invocation in the body, direct path in the rule) is both # non-interpreter-led AND live. Quoting counts too: an unquoted rule does not @@ -14,8 +13,7 @@ # This gate requires `${CLAUDE_SKILL_DIR}` in a grant, and that is a repo # convention rather than a platform limit: the skills page documents # `${CLAUDE_PLUGIN_ROOT}` substituting in a plugin skill's `allowed-tools` -# (, as of 2026-10-02; recheck when that -# page changes where the token substitutes). The reason the rule still holds: +# (). The reason the rule still holds: # the docs establish substitution, not that such a rule matches at runtime on # every host, and this # repo does not ship a grant on docs alone diff --git a/plugins/multi-agent/skills/assess/SKILL.md b/plugins/multi-agent/skills/assess/SKILL.md index d1a83b91281..58389555585 100644 --- a/plugins/multi-agent/skills/assess/SKILL.md +++ b/plugins/multi-agent/skills/assess/SKILL.md @@ -38,17 +38,11 @@ The comparison this rule rests on lives upstream; read it there when a case is close rather than recalling it: - Pointer: -- As of: 2026-10-02 -- Recheck: the page changes its comparison of subagents, skills, agent teams - and workflows, or adds a scale or interruption row. For a close call between `subagent` and `single`, read the subagent page's comparison live: - Pointer: -- As of: 2026-10-24 -- Recheck: that section changes its criteria for a subagent or the main - conversation. ## Steps @@ -64,9 +58,8 @@ comparison live: of them. A name in a grant or in this text does not count. The tool's absence covers every switch the script cannot see. Where the switches are documented: - (as of - 2026-10-02; recheck when a new switch appears there). End this step able to - say `available` or name the switch or the missing tool. + . End this step + able to say `available` or name the switch or the missing tool. 2. **Size the task.** Name the item count or the context it needs, and whether the steps depend on each other. Read only what you need to count. 3. **Verdict.** Apply the rule. When workflows are unavailable, `workflow` diff --git a/plugins/multi-agent/skills/audit-defaults/SKILL.md b/plugins/multi-agent/skills/audit-defaults/SKILL.md index 527818000f1..0f5eaea1ce0 100644 --- a/plugins/multi-agent/skills/audit-defaults/SKILL.md +++ b/plugins/multi-agent/skills/audit-defaults/SKILL.md @@ -48,8 +48,7 @@ web access. Workflow tool is in this session's toolset (listed or loadable). If availability cannot be positively confirmed, take the main-thread fallback below. For the switches that turn workflows off, see - [Turn workflows off](https://code.claude.com/docs/en/workflows#turn-workflows-off) - (as of 2026-10-02; recheck when those switches are renamed). + [Turn workflows off](https://code.claude.com/docs/en/workflows#turn-workflows-off). 2. **Roles.** When `/multi-agent:route` resolves in this session, invoke it as `/multi-agent:route all session=` and keep the `roles` object of the JSON it prints. Otherwise omit `args.roles`; the @@ -86,8 +85,7 @@ web access. If the workflow is interrupted, relaunch it with the same `args`; which agents return saved results is in -[Resume after a pause](https://code.claude.com/docs/en/workflows#resume-after-a-pause) -(as of 2026-10-02; recheck when the resume rules change). +[Resume after a pause](https://code.claude.com/docs/en/workflows#resume-after-a-pause). ## Main-thread fallback (workflows unavailable) diff --git a/plugins/multi-agent/skills/route/SKILL.md b/plugins/multi-agent/skills/route/SKILL.md index 6a71c0c5d01..ecf9b009553 100644 --- a/plugins/multi-agent/skills/route/SKILL.md +++ b/plugins/multi-agent/skills/route/SKILL.md @@ -76,11 +76,6 @@ passes its effort as `effort`. [sub-agents: choose a model](https://code.claude.com/docs/en/sub-agents#choose-a-model) and [model config: set the effort level](https://code.claude.com/docs/en/model-config#set-the-effort-level) live. -- **As of**: 2026-10-31 -- **Recheck trigger**: either sub-agents section changes which source wins - for a subagent's model or effort or when a family alias resolves to the - session's model, or the model-config section states - whether an effort cap limits the per-call `effort`. ## What this skill does NOT do @@ -101,9 +96,7 @@ Rechecks a default that looks wrong for the current models. ## Gotchas - Only aliases are accepted. A full model id in a layer is rejected and the - layer below supplies the key. Why aliases: [Model aliases](https://code.claude.com/docs/en/model-config#model-aliases); - as of 2026-11-10; recheck when that section changes how an alias resolves per - provider. + layer below supplies the key. Why aliases: [Model aliases](https://code.claude.com/docs/en/model-config#model-aliases). - `fanout` and `single` differ only under a frontier or unknown session. Under an Opus session both say `inherit`, and `opus` would name the same model. - The map never routes a named agent (`agentType`, or an Agent dispatch by diff --git a/plugins/multi-agent/skills/setup/SKILL.md b/plugins/multi-agent/skills/setup/SKILL.md index 9e93732a35d..221727d52bd 100644 --- a/plugins/multi-agent/skills/setup/SKILL.md +++ b/plugins/multi-agent/skills/setup/SKILL.md @@ -96,8 +96,7 @@ recorded beside the key in parallel worker then runs on the session model, so a frontier session runs every agent of the stage on the frontier model (rates: [Pricing: model pricing](https://platform.claude.com/docs/en/about-claude/pricing#model-pricing); usage: -[Manage costs: Track your costs](https://code.claude.com/docs/en/costs#track-your-costs); -as of 2026-10-11, recheck when either page moves the section linked here). +[Manage costs: Track your costs](https://code.claude.com/docs/en/costs#track-your-costs)). Before writing it, say this and ask the user to confirm that specific key, separately from the rest of the change. Recommend the narrowest layer that covers what they mean: `local` for one checkout, `user` for one machine, `team` diff --git a/plugins/mutation-testing/skills/audit/SKILL.md b/plugins/mutation-testing/skills/audit/SKILL.md index 9143682020f..b466a203497 100644 --- a/plugins/mutation-testing/skills/audit/SKILL.md +++ b/plugins/mutation-testing/skills/audit/SKILL.md @@ -19,15 +19,13 @@ invocation: The pipe is the bound and belongs in the command. A read-time cap ("read only the first 20 entries") comes too late for whatever the command has already returned inline. What a result returns inline, -and when it arrives as a saved file instead, is [Tools reference § Output limits](https://code.claude.com/docs/en/tools-reference#output-limits) -(as of 2026-10-11; recheck when that section changes what a valid result returns inline). +and when it arrives as a saved file instead, is [Tools reference § Output limits](https://code.claude.com/docs/en/tools-reference#output-limits). Treat a failure (not a repository, git unavailable) as an unknown value and carry on. Keep these as separate body Bash calls rather than pre-compute lines, one command per call. The dated record for why is the -[gather-block convention § The pre-compute block runs as one shell invocation](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/gather-block/README.md#the-pre-compute-block-runs-as-one-shell-invocation) -(as of 2026-10-11; recheck when that section's record changes). How injected commands run is -[Extend Claude with skills § How injected commands run](https://code.claude.com/docs/en/skills#how-injected-commands-run) -(as of 2026-10-11; recheck when that section changes the per-command shell, timeout, or output-handling behavior it documents). +[gather-block convention § The pre-compute block runs as one shell invocation](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/gather-block/README.md#the-pre-compute-block-runs-as-one-shell-invocation). +How injected commands run is +[Extend Claude with skills § How injected commands run](https://code.claude.com/docs/en/skills#how-injected-commands-run). ## Variables @@ -67,7 +65,7 @@ The user config layer, rendered from this plugin's `userConfig` (empty or a lite Caller effort for this run is `${CLAUDE_EFFORT}`. If that still reads as a literal placeholder (a dollar sign and braces around the variable name) rather than an effort level, this body was read directly instead of skill-loaded, so the substitution never ran: treat the run as `high` and leave the cap to the config. -The substitution and the levels it yields are [Extend Claude with skills § Available string substitutions](https://code.claude.com/docs/en/skills#available-string-substitutions) (as of 2026-10-11; recheck when that section renames the effort substitution or changes its levels). +The substitution and the levels it yields are [Extend Claude with skills § Available string substitutions](https://code.claude.com/docs/en/skills#available-string-substitutions). Effort supplies a **default cap only when nothing else sets one**. The precedence is `--max` first, then the configured `max-mutants`, then this table; effort never lowers a cap the caller or the @@ -214,7 +212,7 @@ difference it exists to detect. working file whole once, or apply and revert it per mutant? Read the project's config and installed tool version against that tool's row in the `principles` skill's [`tooling.md`](../principles/reference/tooling.md) table. Pointer: for StrykerJS, fetch [configuration: inPlace](https://stryker-mutator.io/docs/stryker-js/configuration/#inplace-boolean) -live. As of: 2026-11-03. Recheck trigger: that section changes where mutants are written. Resolve +live. Resolve the regime from what this project configured, never from the tool's reputation. State the resolved regime in the scope report. Refuse when the regime is in-tree per mutant and the tool offers neither per-mutant observability nor interrupt safety: the gate that regime requires cannot be run, and a @@ -300,7 +298,7 @@ Every surviving mutant is one of three things, and the difference is a judgment: **This judgment is delegated to a fresh-context (non-fork) subagent, mandatorily.** It is the `self-grade` bias class: a context that generated the mutants and ran them is the weakest place to decide whether its own findings are worth reporting, and a fork inherits that reasoning rather than -removing it ([what a fork inherits](https://code.claude.com/docs/en/sub-agents#how-forks-differ-from-other-subagents), as of 2026-11-01; recheck when that section changes). +removing it ([what a fork inherits](https://code.claude.com/docs/en/sub-agents#how-forks-differ-from-other-subagents)). Hand over the artifact, the mutated line, its surrounding code, and the tests that covered it, never the reasoning that produced the mutant. The brief says it is done when every handed-over survivor has one of the three verdicts or is marked unclassified, and that it returns early rather than guess when the handed-over code is not enough to decide. Before dispatching it, run `bash "${CLAUDE_PLUGIN_ROOT}/lib/read-verification.sh" --plugin mutation-testing --skill audit --file docs/conventions/mutation-testing.yaml` and copy its line into the report ([levels](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/contracts/verification-level/README.md)); `standard` and `strict` are this phase as written. Triage is this audit's product, so `light`, and `off`, which acts as `light` here, keep every survivor but label it: dispatch no triage subagent, never triage in this context instead, and report each survivor *unclassified* with the reason `verification: skipped ()`, which withholds none. @@ -433,7 +431,7 @@ the consumer surfaces such a row to a human rather than auto-applying it. The sp counterexample as an explicit example so the kill replays whatever the generator draws. Pointer: Hypothesis [`settings.derandomize`](https://hypothesis.readthedocs.io/en/latest/reference/api.html#hypothesis.settings.derandomize); fast-check `examples` in [Run against custom values](https://fast-check.dev/docs/configuration/user-definable-values/#run-against-custom-values) - and its seed in . As of 2026-11-10; recheck when either tool's major release redefines those settings. + and its seed in . - **Verify the new test actually kills the mutant**. Re-run this skill scoped to that file. This is the property that makes the loop trustworthy: the agent that wrote the test cannot grade itself into a pass, because the harness re-runs the mutant. A test that does not turn the mutant red has diff --git a/plugins/mutation-testing/skills/principles/reference/scaling-and-suppression.md b/plugins/mutation-testing/skills/principles/reference/scaling-and-suppression.md index 187ec7af61d..5838ba6e6b0 100644 --- a/plugins/mutation-testing/skills/principles/reference/scaling-and-suppression.md +++ b/plugins/mutation-testing/skills/principles/reference/scaling-and-suppression.md @@ -30,7 +30,6 @@ established tools support this directly; [tooling.md](tooling.md) lists which: its target and default: [§ since.target](https://stryker-mutator.io/docs/stryker-net/configuration/#sincetarget-committish)). - **StrykerJS** uses `--incremental`; what it reuses from the last run: [incremental § Incremental mode](https://stryker-mutator.io/docs/stryker-js/incremental/#incremental-mode). - Both pointers as of 2026-11-10; recheck under the Sources trigger above. - **Infection** uses `--git-diff-lines`. - **PIT** uses incremental analysis; its own front page recommends running "frequently against only the code that has been changed" as "the most effective way" to use it. diff --git a/plugins/mutation-testing/skills/principles/reference/theory.md b/plugins/mutation-testing/skills/principles/reference/theory.md index 46e142448c8..7ecc3646a2e 100644 --- a/plugins/mutation-testing/skills/principles/reference/theory.md +++ b/plugins/mutation-testing/skills/principles/reference/theory.md @@ -97,7 +97,7 @@ answer: can it fail at all? Recent work on LLM-written properties uses mutation Vikram et al. measure property coverage with mutants (, 2024), and PROBE generates counter-implementations that satisfy a property while being wrong (, ACL 2026 Findings). Two independent studies, -abstract and conference page read on 2026-10-06, so treat this as MEDIUM: mutation is one way 2024-2026 +abstract and conference page read, so treat this as MEDIUM: mutation is one way 2024-2026 research shows a generated property can fail, not an established standard. The same limit as above applies, a property that restates the implementation can still kill mutants. Recheck when either study is revised or a mutation tool's docs address property tests. diff --git a/plugins/mutation-testing/skills/principles/reference/tooling.md b/plugins/mutation-testing/skills/principles/reference/tooling.md index 3a5a2e84f8b..d563ca2af0d 100644 --- a/plugins/mutation-testing/skills/principles/reference/tooling.md +++ b/plugins/mutation-testing/skills/principles/reference/tooling.md @@ -43,8 +43,8 @@ read, because the regime is a constant for that tool. Evidence classes differ pe collapsed across tools: - **StrykerJS `inPlace`** is a documented option - ([configuration § inPlace](https://stryker-mutator.io/docs/stryker-js/configuration/#inplace-boolean), - as of 2026-11-10; recheck when that section changes what `true` writes). `false` is out-of-tree; `true` + ([configuration § inPlace](https://stryker-mutator.io/docs/stryker-js/configuration/#inplace-boolean)). + `false` is out-of-tree; `true` rewrites the working file once under mutant schemata (in-tree whole-file), not per-mutant apply/revert cycles. - **Stryker.NET / Stryker4s / Infection `none`** are negatives by enumerating the published options diff --git a/plugins/mutation-testing/skills/setup/SKILL.md b/plugins/mutation-testing/skills/setup/SKILL.md index 993891ccd85..336675937f8 100644 --- a/plugins/mutation-testing/skills/setup/SKILL.md +++ b/plugins/mutation-testing/skills/setup/SKILL.md @@ -251,9 +251,6 @@ Steps 1 to 10 are the `team` flow. The other two layers change what is written: when a saved value applies, fetch [plugin CLI reference § plugin configure](https://code.claude.com/docs/en/plugins/cli-reference#plugin-configure) live. - - **As of**: 2026-11-11 - - **Recheck trigger**: that section changes the command's flags, how it reports a saved or - refused value, or when a saved value applies. Say that steps 7 to 10 were skipped because nothing in the repository was written, so `git status` is unchanged, and that a diff --git a/plugins/prototype/skills/explore-directions/SKILL.md b/plugins/prototype/skills/explore-directions/SKILL.md index 4d7a4edcbe0..bd6da856691 100644 --- a/plugins/prototype/skills/explore-directions/SKILL.md +++ b/plugins/prototype/skills/explore-directions/SKILL.md @@ -33,7 +33,7 @@ invocation: The pipe is the bound and belongs in the command: a read-time cap ("read only the first 10 entries") comes after the command has already returned its output inline. What a result returns inline, and -when it arrives as a saved file instead, is [Tools reference § Output limits](https://code.claude.com/docs/en/tools-reference#output-limits) (as of 2026-11-10; recheck when that section changes what a valid result returns inline). +when it arrives as a saved file instead, is [Tools reference § Output limits](https://code.claude.com/docs/en/tools-reference#output-limits). Treat a failure (not a repository, git unavailable) as an unknown value and carry on. Keep these as separate body Bash calls rather than pre-compute lines ([gather-block convention](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/gather-block/README.md#the-pre-compute-block-runs-as-one-shell-invocation), @@ -426,7 +426,7 @@ One native Claude Code surface drafts layouts as this skill does, and the two ge the intent selector lands on the HTML mockup substrate: - **`design` (bundled skill)**: drafts artboards on one canvas and publishes the canvas as a - Claude Design Artifact; how that canvas persists, is shared and is edited is [Artifacts § Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas) (as of 2026-11-10; recheck when that section changes the canvas lifecycle). + Claude Design Artifact; how that canvas persists, is shared and is edited is [Artifacts § Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas). It is reserved for the person to run as `/design`; the model does not invoke it. - **This skill (marketplace plugin).** Throwaway variants as a local HTML mockup by default, or on the real stack on request, switchable from a control bar; only the winning-variant key survives. @@ -436,7 +436,7 @@ the intent selector lands on the HTML mockup substrate: the verification record in [reference/design-canvas.md](reference/design-canvas.md)), you can run `/design ` instead of or alongside this skill for a hand-editable design canvas. State the lifecycle difference with it; the design-canvas subsection above carries the offer -shape. A local skill named `design` at any level shadows the bundled command (precedence: [Skills § Resolve skills that share a name](https://code.claude.com/docs/en/skills#resolve-skills-that-share-a-name), as of 2026-11-10; recheck when that section stops letting a local skill replace a bundled one), and the +shape. A local skill named `design` at any level shadows the bundled command (precedence: [Skills § Resolve skills that share a name](https://code.claude.com/docs/en/skills#resolve-skills-that-share-a-name)), and the bundled one never appears in your skill listing, so a `design` entry in that listing is a shadowing local skill: do not make the offer, and tell the user a local `design` skill shadows the bundled canvas command. A local `design` skill that disables model invocation shadows it too and diff --git a/plugins/prototype/skills/explore-directions/reference/bundled-design.md b/plugins/prototype/skills/explore-directions/reference/bundled-design.md index cc6c46e0570..9125163520a 100644 --- a/plugins/prototype/skills/explore-directions/reference/bundled-design.md +++ b/plugins/prototype/skills/explore-directions/reference/bundled-design.md @@ -1,17 +1,17 @@ # The bundled `design` skill: verification record Detail behind the `## Boundary` section in [SKILL.md](../SKILL.md). Each row is a four-part -record: the claim, the basis it rests on, the date it was checked, and the event that makes it +record: the claim, the basis it rests on, the date it was checked (left empty on pointer rows), and the event that makes it worth checking again. The `visualization` plugin's `visualize` skill keeps its own record against the same surface in its decision-matrix catalog. | Claim | Basis | As of | Recheck when | |---|---|---|---| -| `/design` drafts a hand-editable design canvas published as an Artifact, and is gated. What it drafts, how the person edits and exports it, and its gates are read live, not from this row | Pointer: when offering `/design` or answering what it produces or requires, fetch [Artifacts: Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas) and its parent [Start from a Slides, Design, or Docs template](https://code.claude.com/docs/en/artifacts#start-from-a-slides-design-or-docs-template) live | 2026-10-11 | Either section changes what `/design` drafts, its gate, or its version floor | -| The canvas inherits every artifacts availability condition; this skill never lists them | Pointer: when deciding whether the canvas can be offered, fetch [Artifacts: Availability](https://code.claude.com/docs/en/artifacts#availability) live | 2026-10-11 | The Availability table adds, drops or changes a row | +| `/design` drafts a hand-editable design canvas published as an Artifact, and is gated. What it drafts, how the person edits and exports it, and its gates are read live, not from this row | Pointer: when offering `/design` or answering what it produces or requires, fetch [Artifacts: Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas) and its parent [Start from a Slides, Design, or Docs template](https://code.claude.com/docs/en/artifacts#start-from-a-slides-design-or-docs-template) live | | | +| The canvas inherits every artifacts availability condition; this skill never lists them | Pointer: when deciding whether the canvas can be offered, fetch [Artifacts: Availability](https://code.claude.com/docs/en/artifacts#availability) live | | | | History: the 2.1.263 binary carried two `design` registrations, a model-invocable canvas skill and a model-invocation-disabled Claude Design hub, each behind its own enablement gates | Probe: the `design` and `design-sync` records in `docs/native-surfaces/records.json` (string search of the installed 2.1.263 binary) | 2026-09-11 | Superseded for routing by the next row and kept as history; recheck when the `design` or `design-sync` records in `docs/native-surfaces/records.json` drop, rewrite or re-date their 2.1.263 probe entry | | The 2.1.285 binary resolves one bundled `design` registration, model-invocation-disabled, user-invocable and gated. It supersedes the history row for routing: the model never lists or invokes `design`, so this skill offers `/design` to the person instead. It is a user-only design-Artifact creator, not the hub (the hub's text now belongs to the separate `ClaudeDesign` tool); its identity string, which the offer quotes, is held in the probe record | Probe: the `design` records in `docs/native-surfaces/records.json` (binary extraction of the installed 2.1.285 build, 2026-09-29, plus a targeted string search of the same binary, 2026-09-30) | 2026-09-30 | A release makes the `design` registration model-invocable, changes its description (the identity string the offer quotes), changes its gating, or splits or merges its registrations | -| Settings can remove the skill | Pointer: when a person asks how to turn `/design` off, fetch [`disableBundledSkills`](https://code.claude.com/docs/en/settings-reference#disablebundledskills) and [`skillOverrides`](https://code.claude.com/docs/en/settings-reference#skilloverrides) live | 2026-10-11 | Either setting is renamed or changes what it removes | +| Settings can remove the skill | Pointer: when a person asks how to turn `/design` off, fetch [`disableBundledSkills`](https://code.claude.com/docs/en/settings-reference#disablebundledskills) and [`skillOverrides`](https://code.claude.com/docs/en/settings-reference#skilloverrides) live | | | | No release note names a design-family surface, so the only version floor is the one the first row's pointer reads | Probe: the changelog cross-check in the `design` records of `docs/native-surfaces/records.json` | 2026-09-11 | A changelog entry names `/design` or the hub | Earlier probe history (verified 2026-08-31): the 2.1.251 binary carried the same canvas diff --git a/plugins/prototype/skills/explore-directions/reference/combine-matrix.md b/plugins/prototype/skills/explore-directions/reference/combine-matrix.md index 923d39643f0..ad4e6e188ab 100644 --- a/plugins/prototype/skills/explore-directions/reference/combine-matrix.md +++ b/plugins/prototype/skills/explore-directions/reference/combine-matrix.md @@ -75,8 +75,6 @@ Code that tool is `AskUserQuestion`. If the tool caps options per question, spli questions in matrix order and ask about modes as a second question over the rows they ticked. Pointer: [AskUserQuestion tool behavior](https://code.claude.com/docs/en/tools-reference#askuserquestion-tool-behavior). -As of 2026-10-29. Recheck when that section renames the tool or changes how a question takes -several options. The floor is a numbered markdown table in chat with a reply grammar under it: `1, 3m, 4`, row numbers, `m` for mode. Never go below the floor. Asking "which ones do you want?" in prose puts diff --git a/plugins/prototype/skills/explore-directions/reference/design-canvas.md b/plugins/prototype/skills/explore-directions/reference/design-canvas.md index 7414d71b5d3..f9d2fce689a 100644 --- a/plugins/prototype/skills/explore-directions/reference/design-canvas.md +++ b/plugins/prototype/skills/explore-directions/reference/design-canvas.md @@ -12,9 +12,8 @@ skill builds the HTML mockup either way: one canvas, published as a Claude Design Artifact. Name the lifecycle difference in the offer: unlike the throwaway local mockup, the canvas persists, losing variants included, unless the user deletes or re-seeds it. How a canvas is shared, edited and exported is - [Artifacts § Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas) - (as of 2026-11-10; recheck when that section changes how a canvas persists, is shared or is - edited). These user-run, hand-editable + [Artifacts § Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas). + These user-run, hand-editable artboards have no structured decision capture; [review mode](../SKILL.md#review-mode) collects per-screen decisions from several reviewers and reads back a compiled report. diff --git a/plugins/prototype/skills/pressure-test/SKILL.md b/plugins/prototype/skills/pressure-test/SKILL.md index 7d08433a490..aa3901573d4 100644 --- a/plugins/prototype/skills/pressure-test/SKILL.md +++ b/plugins/prototype/skills/pressure-test/SKILL.md @@ -25,8 +25,7 @@ invocation: The pipe is the bound and belongs in the command: a read-time cap ("read only the first 10 entries") comes after the command has already returned its output inline. What a result returns inline, and -when it arrives as a saved file instead, is [Tools reference § Output limits](https://code.claude.com/docs/en/tools-reference#output-limits) -(as of 2026-11-10; recheck when that section changes what a valid result returns inline). +when it arrives as a saved file instead, is [Tools reference § Output limits](https://code.claude.com/docs/en/tools-reference#output-limits). Treat a failure (not a repository, git unavailable) as an unknown value and carry on. Keep these as separate body Bash calls rather than pre-compute lines ([gather-block convention](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/gather-block/README.md#the-pre-compute-block-runs-as-one-shell-invocation), @@ -140,8 +139,8 @@ Constraints (the same set as explore-directions' HTML mockup substrate): write the page inside it, echoing the directory in the same call: `d=$(mktemp -d "${TMPDIR:-/tmp}/pressure-test-XXXXXX"); echo "$d"`, then write to `/pressure-test.html`. Echo it: whether a shell variable carries to the next Bash - call is [Tools reference § What persists between commands](https://code.claude.com/docs/en/tools-reference#what-persists-between-commands) - (as of 2026-11-10; recheck when that section says shell variables persist). Keep the temp root in the positional template with the `XXXXXX` trailing, and give the + call is [Tools reference § What persists between commands](https://code.claude.com/docs/en/tools-reference#what-persists-between-commands). + Keep the temp root in the positional template with the `XXXXXX` trailing, and give the page a fixed name inside the generated directory, the mktemp dialect traps behind those two rules (GNU vs BSD `-p`/`-t` divergence, trailing-X-only substitution on BSD/macOS) are unpacked in [`explore-directions`](../explore-directions/SKILL.md)'s HTML mockup substrate section; the diff --git a/plugins/rate-limit-guard/README.md b/plugins/rate-limit-guard/README.md index 8cbfa4f7e55..4a96fffbc68 100644 --- a/plugins/rate-limit-guard/README.md +++ b/plugins/rate-limit-guard/README.md @@ -13,15 +13,13 @@ after the reset. Three parts: a Claude Code build that can run mods; older builds are unsupported. **Pointer**: when deciding which build that is, fetch [mods overview: turn mods on or off](https://code.claude.com/docs/en/plugins/mods/overview#turn-mods-on-or-off) - live. **As of**: 2026-10-11. **Recheck trigger**: the terminal version that section names for - mods changes. + live. - **StopFailure hook** (`hooks/record-rate-limit-stop.sh`), the reactive fallback. When a turn ends on a rate-limit API error, it appends a detection record to `~/.claude/rate-limit-guard/stop-events.jsonl`. The hook is side-effect-only by design: the record is its one output, and it returns no decision. **Pointer**: when deciding whether a StopFailure hook's output can do anything, fetch - [hooks: StopFailure](https://code.claude.com/docs/en/hooks#stopfailure) live. **As of**: - 2026-10-11. **Recheck trigger**: the StopFailure section gives the event decision control. + [hooks: StopFailure](https://code.claude.com/docs/en/hooks#stopfailure) live. - **Reader contract** (`reference/reader-contract.md`), the authoritative consumer contract: the fixed file path, the opt-in 95%-of-either-window pause threshold, the staleness rule, pause-end semantics, capability-detect fail-open, and drain-then-pause. @@ -126,9 +124,6 @@ options when it starts its session, for example through `--settings` with the pl the [`pluginConfigs`](https://code.claude.com/docs/en/settings-reference#pluginconfigs) entry, and the `pluginConfigs` row of [mods reference: settings and environment variables](https://code.claude.com/docs/en/plugins/mods/reference#settings-and-environment-variables). -- **As of**: 2026-11-03. -- **Recheck trigger**: that section changes which keys `--settings` can set, or the - `pluginConfigs` scope changes. ### The /rate-limit-guard command, band row and status tool @@ -165,8 +160,6 @@ debug log. - **Pointer**: for where a mod's hooks run, read [mods overview: where mods run](https://code.claude.com/docs/en/plugins/mods/overview#where-mods-run). -- **As of**: 2026-11-03. -- **Recheck trigger**: that table adds or drops a place a mod's hooks run. ### Where mods are off @@ -183,8 +176,6 @@ through unchanged. [mods overview: turn mods on or off](https://code.claude.com/docs/en/plugins/mods/overview#turn-mods-on-or-off) and [troubleshoot: check whether mods can load](https://code.claude.com/docs/en/plugins/mods/troubleshoot#check-whether-mods-can-load) live. -- **As of**: 2026-10-11. -- **Recheck trigger**: either section adds or drops a way mods get turned off. ## Behavior @@ -250,17 +241,13 @@ result. - **Pointer**: for when an installed plugin loads into a session, read [plugin commands: /reload-plugins](https://code.claude.com/docs/en/plugins/cli-reference#reload-plugins). -- **As of**: 2026-11-03. -- **Recheck trigger**: that section changes which plugin changes it applies to a running session. ## Requirements - A Claude Code build at or above the terminal version mods need, with mods on, for the module. Below that floor, or with mods off, only the StopFailure hook runs. `prerequisites.json` holds the floor as data, in `detect.version.min` of the entry with `"id": "claude"`, which the check - skill compares against (relayed 2026-10-11; recheck when that key moves); the pointer below is - where to - re-derive it. + skill compares against; the pointer below is where to re-derive it. - [Node.js](https://nodejs.org/en/download) on `PATH`, installed on its own: the `StopFailure` hook launches through `node hooks/exec-bash.mjs`, and the module writes the file by running `node`, and we never count on Claude Code's install to provide it. Without it the hook records nothing @@ -278,10 +265,6 @@ result. live; when deciding which auth exposes subscription windows, fetch [status line: rate limit usage](https://code.claude.com/docs/en/statusline#rate-limit-usage) live. -- **As of**: 2026-10-11. -- **Recheck trigger**: the terminal version that section names for mods changes, the setup - page says the installed binary runs on Node.js, or the rate limit usage section changes which - accounts or gateways the `rate_limits` object appears for. `node "/lib/prerequisites.mjs" check ""` reports whether `node` resolves, and `bash "/scripts/check-mod-load.sh"` whether the module can load. Both @@ -318,8 +301,6 @@ for a number, a number for a switch) is Claude Code's to handle before the modul `userConfig`, fetch [troubleshoot: options do not fit plugin.json userConfig](https://code.claude.com/docs/en/plugins/mods/troubleshoot#options-do-not-fit-plugin-json-userconfig) live. -- **As of**: 2026-10-11. -- **Recheck trigger**: that section changes what Claude Code does with a refused option value. The module reads its options when it loads. Claude Code reloads a module when its options change, so a switch turned off takes effect from the next event, with no restart. The StopFailure hook @@ -342,9 +323,6 @@ command prints and writes for an installed plugin; its verified-version record l [plugin commands: plugin install](https://code.claude.com/docs/en/plugins/cli-reference#plugin-install); for what an uninstall removes, read [what an uninstall deletes and keeps](https://code.claude.com/docs/en/plugins/cli-reference#what-an-uninstall-deletes-and-keeps). -- **As of**: 2026-11-03. -- **Recheck trigger**: either section changes what `--config` writes or what an uninstall - deletes. The file path and the 95% pause threshold an opted-in lane applies are deliberately **not** configurable: they are contract constants that cross-plugin consumers inline from the diff --git a/plugins/rate-limit-guard/hooks/record-rate-limit-stop.sh b/plugins/rate-limit-guard/hooks/record-rate-limit-stop.sh index 3986a0bab5c..ae452890051 100755 --- a/plugins/rate-limit-guard/hooks/record-rate-limit-stop.sh +++ b/plugins/rate-limit-guard/hooks/record-rate-limit-stop.sh @@ -5,8 +5,7 @@ # SIDE-EFFECT-ONLY by design: this hook's one job is the record it appends, # and it returns no decision. Pointer: when deciding whether StopFailure # output can do anything, fetch https://code.claude.com/docs/en/hooks#stopfailure -# live. As of: 2026-10-11. Recheck trigger: the StopFailure section gives the -# event decision control. +# live. # The record is the reactive-fallback signal consumers read when the # module's snapshot carries no usable window data (see # ../reference/reader-contract.md). The payload carries no reset or quota diff --git a/plugins/rate-limit-guard/reference/reader-contract.md b/plugins/rate-limit-guard/reference/reader-contract.md index ab3706bd779..311e8c9acde 100644 --- a/plugins/rate-limit-guard/reference/reader-contract.md +++ b/plugins/rate-limit-guard/reference/reader-contract.md @@ -7,8 +7,7 @@ alike, and `hooks/record-rate-limit-stop.sh` (reactive detection records). The m Claude Code build that can run mods and runs only where mods are on (**Pointer**: when deciding which build that is, fetch [mods overview: turn mods on or off](https://code.claude.com/docs/en/plugins/mods/overview#turn-mods-on-or-off) -live. **As of**: 2026-10-11. **Recheck trigger**: the terminal version that section names for mods -changes.) Readers are loop-lane session +live.) Readers are loop-lane session bodies; an installed plugin cannot read a sibling plugin's files at runtime, so **consumers inline the operable floor below verbatim** and cite this file for provenance only. The inline-floor rule, and the requirement that the inlined values stay byte-identical across consumers, is owned by the @@ -116,9 +115,7 @@ paused lane's own Monitor tick). `captured_at` is the time the module wrote the window is written: a gateway's `spend_limit` and any further window the reading reports reach Claude only through the module's `mcp__rate-limit-guard__status` tool. The ranges and units above are this file's contract, which readers check against; the field names follow the status - line's (Pointer: [status line: rate limit usage](https://code.claude.com/docs/en/statusline#rate-limit-usage). - As of: 2026-10-11. Recheck trigger: that section changes a window's range or unit, at which - point the writer and this bullet are re-checked together). + line's (Pointer: [status line: rate limit usage](https://code.claude.com/docs/en/statusline#rate-limit-usage)). - `session_id`: the writing session's id. After `/branch` the file takes the new session's id at its first write. The file carries no `session_name` and no other session field. - `account`: `{"email": "
"}`, the account whose windows this snapshot describes. Present @@ -158,9 +155,6 @@ record below points at which). A consumer classifies its guard mode before every - **Pointer**: when deciding which auth exposes subscription windows, fetch [status line: rate limit usage](https://code.claude.com/docs/en/statusline#rate-limit-usage) live. -- **As of**: 2026-10-11. -- **Recheck trigger**: that section changes which accounts or gateways the `rate_limits` object - appears for. The scope column decides how far a failure reaches: only the whole-guard rows drop the guard to reactive-only. Absurd @@ -242,9 +236,6 @@ past 200). fetch [hooks: StopFailure](https://code.claude.com/docs/en/hooks#stopfailure) and [hooks: emit terminal notifications](https://code.claude.com/docs/en/hooks#emit-terminal-notifications) live. -- **As of**: 2026-10-11. -- **Recheck trigger**: the StopFailure section gives the event decision control, or names an - output field beyond the terminal-notification one that Claude Code honors. Read cadence: a reactive-only consumer reads the file on entering reactive-only mode and again before each new work claim. The recency baseline starts at the consumer's own start time, so records @@ -295,7 +286,6 @@ versions used, once it is older than 60 seconds. [plugin manifest reference: fields](https://code.claude.com/docs/en/plugins/manifest-reference#fields) and [plugin manifest reference: monitors](https://code.claude.com/docs/en/plugins/manifest-reference#monitors) live. - - **As of**: 2026-10-11. - **Recheck trigger**: that page moves monitors out of `experimental`, or a release note names the monitors component. - **Fixed constants.** The snapshot path and the 95% threshold are contract constants, deliberately not diff --git a/plugins/rate-limit-guard/scripts/check-mod-load.sh b/plugins/rate-limit-guard/scripts/check-mod-load.sh index 7052c8d19d4..4f4720f73b3 100755 --- a/plugins/rate-limit-guard/scripts/check-mod-load.sh +++ b/plugins/rate-limit-guard/scripts/check-mod-load.sh @@ -7,13 +7,11 @@ # The session row is INFO because only the agent sees its own tool list; a child # process never sees this session's flags or settings overlay. # What turns mods off, and the floor's source: -# https://code.claude.com/docs/en/plugins/mods/overview#turn-mods-on-or-off (as -# of 2026-10-11; recheck when that section changes the version or adds a way). +# https://code.claude.com/docs/en/plugins/mods/overview#turn-mods-on-or-off. # The tool's full name: https://code.claude.com/docs/en/plugins/mods/api#add-a-tool # (as of 2026-10-03; recheck when the full tool name form changes). # Reading `claude plugin test`: # https://code.claude.com/docs/en/plugins/mods/troubleshoot#check-whether-mods-can-load -# (as of 2026-10-03; recheck when that table changes a message). set -uo pipefail if [[ $# -gt 0 ]]; then diff --git a/plugins/rate-limit-guard/skills/setup/SKILL.md b/plugins/rate-limit-guard/skills/setup/SKILL.md index ccaeeceb3c8..d0f9c74b235 100644 --- a/plugins/rate-limit-guard/skills/setup/SKILL.md +++ b/plugins/rate-limit-guard/skills/setup/SKILL.md @@ -49,9 +49,6 @@ qualify it: when a saved value applies, fetch [plugin CLI reference § plugin configure](https://code.claude.com/docs/en/plugins/cli-reference#plugin-configure) live. - - **As of**: 2026-11-11 - - **Recheck trigger**: that section changes the command's flags, how it reports a saved or - refused value, or when a saved value applies. - **External prerequisites**: `node` and the Claude Code version, which `check` probes and whose install is the person's. @@ -81,9 +78,6 @@ line. yourself and restart Claude Code. - **Pointer**: when whether a Claude Code install supplies `node` is in doubt, fetch [setup § Install with npm](https://code.claude.com/docs/en/setup#install-with-npm) live. - - **As of**: 2026-11-10 - - **Recheck trigger**: that page says the native binary bundles Node, or the hook row stops - using `node`. 2. **Module state.** The plugin's module (`hooks/register.tsx`) writes the snapshot file and sends the rate-limit lines; it loads only where mods can. Decide this session's state from inside this session, never from a separate process: a `claude` you launch through Bash reads neither this @@ -174,9 +168,6 @@ line. - **Pointer**: for when a saved value reaches skill content and hook processes, fetch [plugins manifest reference § Reference a saved value](https://code.claude.com/docs/en/plugins/manifest-reference#reference-a-saved-value) live. - - **As of**: 2026-11-11 - - **Recheck trigger**: that section changes where or when a saved value is substituted or - exported. ## Uninstalling diff --git a/plugins/skill-quality/README.md b/plugins/skill-quality/README.md index 35a348ed541..ec925246b92 100644 --- a/plugins/skill-quality/README.md +++ b/plugins/skill-quality/README.md @@ -40,20 +40,15 @@ the reviewer to confirm the description still names that intent, or to restore t findings. - **Record**: the parse-failure behavior is recorded in the unquoted-description comment under the `# --- Check 1` header of `scripts/check-skill.sh`, and the name cap in the comment above - `NAME_MAX_LEN=` there (a script, so no section anchor). **As of**: 2026-10-11. **Recheck - trigger**: that header, that comment's pointer, or `NAME_MAX_LEN` being renamed or moved. + `NAME_MAX_LEN=` there (a script, so no section anchor). - **Pointer**: when a `compatibility`, `name`, or reserved-word finding is in doubt, fetch , and live. - **As of**: 2026-10-11. **Recheck trigger**: the spec's validator, the upload requirements, or - a Claude Code release changing either rule. - `description` + `when_to_use` within the **per-skill** listing-entry cap. A different, narrower limit from the shared budget below. - **Pointer**: for the cap's default, fetch - live. **As of**: - 2026-10-11. **Recheck trigger**: that section moving the default, which re-derives - `DESC_CHAR_CAP` in `scripts/check-skill.sh`. + live. - `description` alone within the Agent Skills spec's `description` field maximum, counted in **codepoints**. A separate limit at a separate layer from the listing-entry cap above: a description can sit under the combined cap and still breach the field maximum on its own. Over @@ -65,9 +60,7 @@ the reviewer to confirm the description still names that intent, or to restore t repo-relative skill path per line; those downgrade to a WARN, and a row whose skill no longer breaches FAILs as stale, so the list can only shrink. - **Pointer**: for the field maximum, fetch - live. **As of**: 2026-10-11. - **Recheck trigger**: the spec moving the field maximum, which re-derives `DESC_FIELD_CAP` in - `scripts/check-skill.sh`. + live. - Trigger-keyword preservation vs `HEAD` (advisory: a dropped phrase warns naming it and never fails the run; a phrase moved to a sibling skill warns naming the host; skipped for a new, uncommitted skill). @@ -88,8 +81,6 @@ the reviewer to confirm the description still names that intent, or to restore t form, so a path authored on Windows loads on every platform. - **Pointer**: for which component paths Claude Code rejects at load, fetch live. - **As of**: 2026-10-11. **Recheck trigger**: that section dropping or widening the backslash - rule. - `markdownlint-cli2` clean (advisory-skips when `npx` is absent). - `scripts/*.test.sh` pass where present and inside the current repository. Known limit: if a home-directory repository tracks a file inside an installed plugin's skills root, untracked @@ -181,9 +172,7 @@ exits 0. - **Pointer**: for the budget's basis, default, and override, fetch and - live. **As of**: - 2026-10-11. **Recheck trigger**: either section changing the basis, the default, or the - override, which re-derives the constants in `scripts/check-listing-budget.sh`. + live. Only **listing-eligible** skills are counted: the report skips a skill with `disable-model-invocation: true`, so a description that never reaches the listing does not inflate @@ -192,9 +181,7 @@ repository content cannot reveal, so the reported figure is an upper bound for a - **Pointer**: for which skills' descriptions reach the listing, fetch and - live. **As - of**: 2026-10-11. **Recheck trigger**: either section changing which frontmatter or setting - keeps a description out of the listing. + live. `check` also takes one or more skills roots as positionals, so several trees are gated in one run. Each root is walked on its own under its own header and the run ends with a single diff --git a/plugins/skill-quality/reference/invocation-probes.md b/plugins/skill-quality/reference/invocation-probes.md index 432a9bd5933..ca2d4fe55f1 100644 --- a/plugins/skill-quality/reference/invocation-probes.md +++ b/plugins/skill-quality/reference/invocation-probes.md @@ -215,9 +215,7 @@ interval has zero width, so read the probe count before trusting it. how many times a case runs by default, fetch , and - live. **As of**: - 2026-11-02. **Recheck trigger**: any of those sections changing what one run loads, how - `plugins` paths resolve, or the default run count. + live. - **Pointer**: the plugin-evals page does not say which directories a case's `plugins` may name; the CLI's load error does ("outside the containment root ... Only plugins under it can be loaded"), so a case naming a sibling plugin runs against the directory holding `plugins/`. diff --git a/plugins/skill-quality/scripts/check-listing-budget.sh b/plugins/skill-quality/scripts/check-listing-budget.sh index 1f42d8e6508..29657289393 100755 --- a/plugins/skill-quality/scripts/check-listing-budget.sh +++ b/plugins/skill-quality/scripts/check-listing-budget.sh @@ -7,8 +7,7 @@ # each turn. Two independent limits apply to it: # - Per-entry cap (skillListingMaxDescChars): check-skill.sh check 2 already # guards this, and the comment above `DESC_CHAR_CAP=` in check-skill.sh -# owns that constant (a script, so no section anchor; as of 2026-10-11; -# recheck trigger: that constant being renamed or its pointer changing). +# owns that constant (a script, so no section anchor). # - Shared/aggregate cap (skillListingBudgetFraction): NOTHING checks this # before now. An overflowing aggregate degrades some skills' # auto-invocation with no local signal that it happened. @@ -16,8 +15,7 @@ # https://code.claude.com/docs/en/settings-reference#skilllistingbudgetfraction, # https://code.claude.com/docs/en/settings-reference#skilllistingmaxdescchars # and https://code.claude.com/docs/en/skills#skill-descriptions-are-cut-short -# live. As of: 2026-10-11. Recheck trigger: any of those sections changing a -# default, the budget's basis, or what an overflow drops. +# live. # # What counts, and what deliberately does not: # - This models DESCRIPTION characters only. Names are a floor this report @@ -28,12 +26,9 @@ # it would overstate the aggregate. Pointer: for which skills' # descriptions reach the listing, fetch # https://code.claude.com/docs/en/skills#control-who-invokes-a-skill live. -# As of: 2026-10-11. Recheck trigger: that section changing whether that -# frontmatter keeps a description out of the listing. # - A consumer's `skillOverrides` can free further description characters -# (pointer: https://code.claude.com/docs/en/skills#override-skill-visibility-from-settings, -# as of 2026-10-11; recheck trigger: that section changing what an override -# frees). That is consumer settings.json state, not repository content, so +# (pointer: https://code.claude.com/docs/en/skills#override-skill-visibility-from-settings). +# That is consumer settings.json state, not repository content, so # a static check cannot observe it; this report is therefore an UPPER # bound for any consumer who sets it. # diff --git a/plugins/skill-quality/scripts/check-skill.sh b/plugins/skill-quality/scripts/check-skill.sh index 4d3d1081312..e78efd6cf7f 100755 --- a/plugins/skill-quality/scripts/check-skill.sh +++ b/plugins/skill-quality/scripts/check-skill.sh @@ -705,8 +705,7 @@ if [[ ! -d "$SKILL_DIR" ]]; then # Pointer: when locating an installed copy or judging which versions stay on # disk, fetch https://code.claude.com/docs/en/plugins/loading#find-plugins-on-disk # and https://code.claude.com/docs/en/plugins/loading#cleanup-of-previous-versions - # live. As of: 2026-10-11. Recheck trigger: either section changing the - # cache layout or how long a previous version stays on disk. + # live. # Note the cache is a COPY, not a git checkout, so the # git-backed checks (3 trigger-preservation, 8 vendor, 9 stale-metadata) # correctly no-op there — a "new skill / skipped" result is expected, not a @@ -898,8 +897,7 @@ else # The checker treats `name` as optional and resolves a skill by its # directory either way (pointer: for the field's default, see - # https://code.claude.com/docs/en/skills#frontmatter-reference; as of - # 2026-10-11; recheck trigger: the `name` row changing its default). A DIVERGENT name is + # https://code.claude.com/docs/en/skills#frontmatter-reference). A DIVERGENT name is # the defect this branch exists for: it silently relocates the invocation the # doctrine says the skill has. A matching one is merely redundant — and in a # plugin skill, not inert (see the warning below). @@ -925,9 +923,8 @@ else # In a PLUGIN skill a matching `name` is not inert: this check treats a # declared name as registering a bare `/` alias (pointer: for how a # skill gets its command name, see - # https://code.claude.com/docs/en/skills#how-a-skill-gets-its-command-name; - # as of 2026-10-11; recheck trigger: that section changing whether a - # declared name adds a command), and the picker appends that alias in + # https://code.claude.com/docs/en/skills#how-a-skill-gets-its-command-name), + # and the picker appends that alias in # parentheses to any row whose typed prefix matches it: # `/plugin:deploy (deploy)` (observed in 2.1.225). # Omitting the field leaves the namespaced command identical and drops both. @@ -938,8 +935,7 @@ else # Spec portability limbs on the EFFECTIVE name: the declared field when there # is one, else the directory leaf, which this check takes as the name when - # the field is absent (pointer: https://code.claude.com/docs/en/skills#frontmatter-reference; - # as of 2026-10-11; recheck trigger: the `name` row changing its default). + # the field is absent (pointer: https://code.claude.com/docs/en/skills#frontmatter-reference). # Run outside the chain above so an over-long or reserved directory leaf is # caught even with no `name:` line. Pointer, and the measurement that Claude # Code enforces neither rule: NAME_MAX_LEN above. Counted in codepoints by the @@ -965,8 +961,7 @@ else # time when the named model is unsupported is not a finding here. # Pointer: for the values the field accepts, see # https://code.claude.com/docs/en/skills#frontmatter-reference, the `model` - # row. As of: 2026-09-29. Recheck trigger: that row defines a grammar for - # the value. + # row. if grep -qE '^model:' <<<"$FRONTMATTER"; then RAW_MODEL="$(skill_frontmatter::field model <<<"$FRONTMATTER")" CUR_MODEL="$(skill_frontmatter::strip_quotes "$RAW_MODEL")" @@ -985,9 +980,7 @@ else # quoted scalar or a block scalar may contain it. This check fails it because # an unparsable frontmatter loads the skill with no fields set (pointer: for # frontmatter parse failures, see - # https://code.claude.com/docs/en/skills#frontmatter-reference; as of - # 2026-10-11; recheck trigger: that section changing what happens to a skill - # whose frontmatter does not parse). This is the plugin's one record for + # https://code.claude.com/docs/en/skills#frontmatter-reference). This is the plugin's one record for # that behavior; the summary contract below and the README point here. desc_lines="$(awk ' !seen && /^description:/ { seen = 1; sub(/^description:[[:space:]]*/, ""); sub(/[[:space:]]+#.*$/, ""); print; next } @@ -1304,8 +1297,8 @@ done < <( # A backslash-separated pointer is a defect in its own right, not a miss: this # check treats a plugin component path containing a backslash as one Claude # Code rejects at load on macOS and Linux. Pointer: for plugin path rules, see -# https://code.claude.com/docs/en/plugins/loading#paths-that-escape-the-plugin-directory. As of: -# 2026-10-07. Recheck trigger: that section dropping or widening the rule. The resolve loop above never sees such a path (its +# https://code.claude.com/docs/en/plugins/loading#paths-that-escape-the-plugin-directory. +# The resolve loop above never sees such a path (its # char-class has no backslash), so without this limb a Windows-authored # `scripts\helper.py` skipped the check silently and shipped. The pattern is # deliberately tight: a known internal dir token, one or more backslash-led @@ -1570,9 +1563,7 @@ fi # `firecrawl:update`, `playbooks:update`, and `github:setup` are all # `disable-model-invocation: true`, and this check treats such a skill's # description as absent from the model's context (pointer: -# https://code.claude.com/docs/en/skills#control-who-invokes-a-skill, as of -# 2026-10-11; recheck trigger: that section changing whether such a skill's -# description reaches the model), so trigger phrasing on them can never route anything. Each was re-checked for a STRANDED +# https://code.claude.com/docs/en/skills#control-who-invokes-a-skill), so trigger phrasing on them can never route anything. Each was re-checked for a STRANDED # phrase (one a user would type that no model-invocable skill can receive) and # none is stranded: the two `update` skills are maintainer-only with # consumer-facing siblings that carry the phrases, `github:setup` is a declared @@ -2226,8 +2217,7 @@ done # every reader recovers, whether it reads with a real YAML parser or a regex. # This check treats a value a parser rejects as costing the skill its whole # frontmatter (record: the unquoted-description comment under the -# `# --- Check 1` header above; as of 2026-10-11; recheck trigger: that -# comment's pointer or its stated parse-failure behavior changing). +# `# --- Check 1` header above). # Requiring a plain, unquoted, colon-free scalar is the largest subset a regex # reader can recover exactly, which is why it is stricter than YAML alone. # diff --git a/plugins/skill-quality/skills/check/SKILL.md b/plugins/skill-quality/skills/check/SKILL.md index 2645fe8983e..b8235a9f64a 100644 --- a/plugins/skill-quality/skills/check/SKILL.md +++ b/plugins/skill-quality/skills/check/SKILL.md @@ -51,8 +51,6 @@ the `skills` dir of the installed version you mean: - **Pointer**: when locating an installed version on disk, or judging which versions stay there, fetch and live. - **As of**: 2026-10-11. **Recheck trigger**: either section changing the cache layout or how - long a previous version stays on disk. ```shell CHECK_SKILL_SKILLS_ROOT=/skills \ @@ -200,31 +198,24 @@ inputs no repository file records (the budget's basis: pointer below). Point `/d encoded constants are recorded once each: in the comment above `DESC_CHAR_CAP=` in [`${CLAUDE_PLUGIN_ROOT}/scripts/check-skill.sh`](../../scripts/check-skill.sh) and in the header of [`${CLAUDE_PLUGIN_ROOT}/scripts/check-listing-budget.sh`](../../scripts/check-listing-budget.sh) -(scripts, so no section anchor; as of 2026-10-11; recheck trigger: `DESC_CHAR_CAP` being renamed -or either record's pointer changing). +(scripts, so no section anchor). - **Pointer**: when you need the per-entry cap, the shared budget's basis, its default, or its override, fetch , and - live. **As of**: - 2026-10-11. **Recheck trigger**: any of those sections changing a default, the budget's basis, - or the override. + live. **Only listing-eligible skills count.** The report skips a skill with `disable-model-invocation: true` and counts the rest, so a skill whose description never reaches the listing does not inflate the aggregate. The reported figure is an upper bound for a consumer who sets `skillOverrides`, which repository content cannot reveal (what it frees: -[Skills, "Skill descriptions are cut short"](https://code.claude.com/docs/en/skills#skill-descriptions-are-cut-short), -as of 2026-11-10; recheck when that section stops letting `skillOverrides` change listing -characters). A missing explicit root and a nonnumeric override are both +[Skills, "Skill descriptions are cut short"](https://code.claude.com/docs/en/skills#skill-descriptions-are-cut-short)). +A missing explicit root and a nonnumeric override are both environment errors (exit 2), never a silent skip or a coerced-to-zero budget. - **Pointer**: when deciding which skills' descriptions reach the listing, fetch and - live. **As - of**: 2026-10-11. **Recheck trigger**: either section changing which frontmatter or setting - keeps a description out of the listing, or a release note naming the skill listing budget or - `skillOverrides`. + live. ## Action: measure-invocation @@ -256,9 +247,7 @@ Model-graded `claude plugin eval` cases are emitted on demand. Contract: checks that the target skill fired through a `tool_used` grader on the `Skill` tool. - **Pointer**: when an emitted case fails to load or its grader shape is in doubt, fetch and - live. **As of**: 2026-10-11. - **Recheck trigger**: either section changing the case layout, the `prompt.md` fields, or the - `tool_used` grader fields. + live. 3. Report per skill, per split (`train` and `validation`): `trigger_rate` and `false_trigger_rate`, sample size, and the method name. A rewrite is compared with `compare` against `probes/baselines/listing-overlap.json` beside the scored probes directory (or a later @@ -282,10 +271,7 @@ and review against the invariant. - **Pointer**: when deciding whether the Skill tool can reach a target, or how many skills one call runs, fetch live (the - tools reference's `Skill` row links to it and has no section anchor of its own). **As of**: - 2026-10-11. **Recheck trigger**: that section or the `Skill` row changing how many skills one - call runs or which frontmatter blocks Skill-tool invocation, or a release note naming the Skill - tool. + tools reference's `Skill` row links to it and has no section anchor of its own). ## Next @@ -316,8 +302,7 @@ and review against the invariant. - **Check 6 defers to the skill's own repo markdownlint config.** The checker runs `markdownlint-cli2` from the top level of the git repo holding the skill, so a repo-root `.markdownlint-cli2.jsonc` applies whichever directory or root you started from (where it discovers config: - [markdownlint-cli2 README, "Configuration"](https://github.com/DavidAnson/markdownlint-cli2#configuration), - as of 2026-11-10; recheck when the repo's `markdownlint-cli2` pin changes major or minor version). A skill in no git repo (a marketplace-installed skill in the plugin cache, which has + [markdownlint-cli2 README, "Configuration"](https://github.com/DavidAnson/markdownlint-cli2#configuration)). A skill in no git repo (a marketplace-installed skill in the plugin cache, which has no config) is linted where the checker stands, and markdownlint applies its DEFAULTS, so rules a repo deliberately disables (commonly `MD013` line-length for injection blocks and tables, `MD041` first-line-heading for a frontmatter/H2 start, `MD060` table-pipe style) fire as spurious failures on a skill that passes in-repo. This is the @@ -340,9 +325,7 @@ and review against the invariant. empty or whitespace-containing value. The field is optional. What the runtime does with a named model it will not use is runtime behavior, not a second finding. - **Pointer**: when the accepted values or the runtime fallback are in doubt, fetch - (the `model` row) live. **As - of**: 2026-10-11. **Recheck trigger**: that row defining a grammar for the value or changing - its fallback. + (the `model` row) live. - Check 1 also fails an unquoted plain `description` with a colon followed by a space on any line, or a line ending in a colon (a YAML mapping indicator). A quoted or block-scalar description may contain it. @@ -388,8 +371,7 @@ and review against the invariant. - Check 24 (explicit invocation mode) FAILs a marketplace plugin skill (`plugins/*/skills/*`) whose frontmatter omits `disable-model-invocation`, and only WARNs anywhere else, so a consumer's own skill is informed by this fleet's convention rather than broken by it (the key's default: - [Skills, "Frontmatter reference"](https://code.claude.com/docs/en/skills#frontmatter-reference), - as of 2026-11-10; recheck when that section changes the key's default). A non-boolean value FAILs everywhere: the check reads the bare scalar, so a quoted + [Skills, "Frontmatter reference"](https://code.claude.com/docs/en/skills#frontmatter-reference)). A non-boolean value FAILs everywhere: the check reads the bare scalar, so a quoted `"false"` fails as the YAML string it is, while a trailing `# comment` naming the exception class is fine. The rubric that owns the decision, the model-invoked default and the only three exception classes a `true` may claim, is diff --git a/plugins/skill-quality/skills/setup/SKILL.md b/plugins/skill-quality/skills/setup/SKILL.md index 8545d938830..3bcca605610 100644 --- a/plugins/skill-quality/skills/setup/SKILL.md +++ b/plugins/skill-quality/skills/setup/SKILL.md @@ -16,8 +16,7 @@ surface: Claude Code prompts for it and stores it. This skill never writes it. - **Pointer**: when deciding which settings file holds the stored value, or which scopes Claude Code reads it from, fetch - live. **As of**: 2026-10-11. **Recheck trigger**: that section or its table row changing the - scopes it lists for `pluginConfigs`, or a release note naming `pluginConfigs` scope. + live. Action routing: no argument or `check` runs the check. Non-interactive, never prompts. @@ -58,9 +57,6 @@ surface, which setup must not hand-edit (Check-only carve-out, native `userConfi when a saved value applies, fetch [plugin CLI reference § plugin configure](https://code.claude.com/docs/en/plugins/cli-reference#plugin-configure) live. - - **As of**: 2026-11-11 - - **Recheck trigger**: that section changes the command's flags, how it reports a saved or - refused value, or when a saved value applies. - **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. @@ -69,9 +65,8 @@ 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: a same-session rerun still resolves the OLD root and would report a correct write as a failure (when Claude Code substitutes `${user_config.skills_root}`: -[Plugins reference, "Reference a saved value"](https://code.claude.com/docs/en/plugins/manifest-reference#reference-a-saved-value), -as of 2026-11-10; recheck when that section says a changed value reaches a skill already loaded in -the session). Re-running `check` when the root resolves and enumerates changes nothing and reports +[Plugins reference, "Reference a saved value"](https://code.claude.com/docs/en/plugins/manifest-reference#reference-a-saved-value)). +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/user-experience/README.md b/plugins/user-experience/README.md index 4a211e0e33d..d747a546032 100644 --- a/plugins/user-experience/README.md +++ b/plugins/user-experience/README.md @@ -33,8 +33,7 @@ cap. `/user-experience:evaluate` dispatches it; it is not for direct use. - **Pointer**: when changing those frontmatter values, fetch [Supported frontmatter fields](https://code.claude.com/docs/en/sub-agents#supported-frontmatter-fields) - live. **As of**: 2026-10-11. **Recheck trigger**: that section changes what `model`, `effort` or - `maxTurns` does. + live. A flow ready for screens goes to `/user-interface:design` when that plugin is installed. The plugin writes research instruments but diff --git a/plugins/user-experience/reference/ai-features.md b/plugins/user-experience/reference/ai-features.md index d6f70e0eebe..48f3918c225 100644 --- a/plugins/user-experience/reference/ai-features.md +++ b/plugins/user-experience/reference/ai-features.md @@ -35,12 +35,8 @@ measured on end users. - **Pointer**: for Apple's current guidance on generative AI features, read the Human Interface Guidelines, Generative AI, at . -- **As of**: 2026-10-04 -- **Recheck trigger**: the page's change log shows an update. - **Pointer**: for Google's chapters on user needs, mental models, trust, feedback and errors, read the People + AI Guidebook at . -- **As of**: 2026-10-04 -- **Recheck trigger**: PAIR publishes a new guidebook version or re-dates its principles. ## Chat and answer interfaces diff --git a/plugins/user-experience/reference/deliverable.md b/plugins/user-experience/reference/deliverable.md index 4e5e72abf0a..de2f5214c98 100644 --- a/plugins/user-experience/reference/deliverable.md +++ b/plugins/user-experience/reference/deliverable.md @@ -25,8 +25,6 @@ Analyst: (optional) - **Pointer**: for what the disclosure must cover, read the ICC/ESOMAR International Code (2025), Articles 7(e) and 9(b), at . - - **As of**: 2026-10-09 - - **Recheck trigger**: ICC/ESOMAR publish a revised Code, or renumber those articles. - **Analyst.** Name the role that reviews or decides (for example "product designer"), never a person. diff --git a/plugins/user-experience/reference/discovery-phase.md b/plugins/user-experience/reference/discovery-phase.md index c73cb6a4792..329a5d55dc1 100644 --- a/plugins/user-experience/reference/discovery-phase.md +++ b/plugins/user-experience/reference/discovery-phase.md @@ -51,15 +51,11 @@ judgment for the stage reading. - **Pointer**: for the current wording of point 8, read the GOV.UK Service Standard, "Iterate and improve frequently", at . - - **As of**: 2026-10-04 - - **Recheck trigger**: GDS publishes a new version of the Service Standard, or renumbers point 8. - **Pointer**: for the current phase guidance, including typical durations, read the GOV.UK Service Manual's discovery phase and alpha pages at and . Written for UK government services; other organizations adopt them by analogy. -- **As of**: 2026-10-04 -- **Recheck trigger**: GDS revises either page, or restructures the agile delivery section. ## Assumptions and what to test first diff --git a/plugins/user-experience/reference/evaluation.md b/plugins/user-experience/reference/evaluation.md index af465157aa8..c5bc45eb21a 100644 --- a/plugins/user-experience/reference/evaluation.md +++ b/plugins/user-experience/reference/evaluation.md @@ -44,8 +44,6 @@ MEDIUM). - **Pointer**: for the heuristics themselves when `/user-interface:design` is not installed, read Nielsen's "10 Usability Heuristics for User Interface Design" at . - - **As of**: 2026-10-04 - - **Recheck trigger**: NN/g revises the page or its review date moves. - Three to five evaluators each work through the interface alone, because any one evaluator overlooks problems; then merge and de-duplicate their findings. Basis: judgment over MEDIUM evidence ([nng-heuristic-eval]). diff --git a/plugins/user-experience/reference/first-run.md b/plugins/user-experience/reference/first-run.md index d6d4e2c5760..ab716e34c66 100644 --- a/plugins/user-experience/reference/first-run.md +++ b/plugins/user-experience/reference/first-run.md @@ -54,15 +54,9 @@ Basis: judgment. - **Pointer**: for Apple's rules on when to ask and on any screen shown before the system alert, read the Human Interface Guidelines, Privacy, at . - - **As of**: 2026-10-04 - - **Recheck trigger**: the page's change log shows an update, or Apple changes App Tracking - Transparency review rules. - **Pointer**: for Android's rules on asking in context, the educational screen before the system dialog and repeated denial, read "Request runtime permissions" at . - - **As of**: 2026-10-04 - - **Recheck trigger**: the page's last-updated date moves, or a new Android release changes the - permission model. - When local privacy law requires a consent screen, or the app cannot work without a permission, check Apple's current rules on where that screen or request may sit (around the system alert, or inside onboarding) before placing it in the first run. Basis: [apple-privacy], HIGH (single @@ -71,8 +65,6 @@ Basis: judgment. Interface Guidelines, Onboarding, at ; for the consent screen and the tracking alert, the Privacy page in the record above. - - **As of**: 2026-10-04 - - **Recheck trigger**: the Onboarding page's change log shows an update. ## First-run flow specification diff --git a/plugins/user-experience/reference/flows-ia.md b/plugins/user-experience/reference/flows-ia.md index b9b2f62cb3f..9d4c5813198 100644 --- a/plugins/user-experience/reference/flows-ia.md +++ b/plugins/user-experience/reference/flows-ia.md @@ -60,8 +60,6 @@ evidence ([nng-task-analysis]). - **Pointer**: for Baymard's current checkout benchmark figures (average steps and fields, the field count most sites need, and the step count past which usability suffers), read . - - **As of**: 2026-10-04 - - **Recheck trigger**: Baymard publishes a new checkout benchmark. - **Errors at every step boundary.** Give a clearly marked way out of an unwanted action, and prevent error-prone conditions or confirm before the person commits. Error pages: explain what went wrong and offer a specific recovery action. "Something went wrong" + a back button ends the @@ -72,8 +70,6 @@ evidence ([nng-task-analysis]). - **Pointer**: for the current wording of heuristics 3, 5 and 9, read Nielsen's "10 Usability Heuristics for User Interface Design" at . - - **As of**: 2026-10-04 - - **Recheck trigger**: NN/g revises the page or its review date moves. - **Keep the destructive action apart.** Never place "Delete" directly beside "Confirm". Proximity implies equivalence; separate destructive actions with whitespace and a visual break. The flow records which step offers the destructive action and where its confirmation sits; the spacing @@ -105,8 +101,6 @@ evidence ([nng-task-analysis]). - **Pointer**: for which files create a public route and how intercepting routes behave in the Next.js App Router, read ; for another framework, read its own routing docs. - - **As of**: 2026-10-04 - - **Recheck trigger**: a Next.js major release changes the App Router file conventions. - **Observed flow, from the running app.** Drive the app with a browser tool when one is installed (the routes `detect.mjs` reports) and record the screens and transitions actually seen. Basis: judgment. @@ -171,8 +165,6 @@ flowchart TD too far to either extreme will backfire." Basis: [nng-flat-deep], HIGH (single source). - **Pointer**: for the current wording of both lines, read "Flat vs. Deep Website Hierarchies" at . - - **As of**: 2026-10-29 - - **Recheck trigger**: NN/g revises the article. - **Tabs are for views of the same thing.** "This week / This month / This year" is the textbook-correct use. "Account / Billing / Notifications" tabs pass when they are views of one account's settings; destinations that are not views of one thing go in the navigation, not in @@ -218,9 +210,6 @@ tone of interface text belong to `/user-interface:design`. Basis: judgment. read and . Written for UK government services; other organizations adopt them by analogy. - - **As of**: 2026-10-04 - - **Recheck trigger**: GDS updates either page, or moves form guidance into the GOV.UK Design - System. - **The user's own words.** Take labels and terms from research (interview vocabulary, search queries, support tickets), and mark a term with no such source as an assumption. Name things by the user's mental model, not internal jargon: "Send messages in the background", not "Enable diff --git a/plugins/user-experience/reference/journeys.md b/plugins/user-experience/reference/journeys.md index 4cdc84ffd2c..7a44d0fc3f2 100644 --- a/plugins/user-experience/reference/journeys.md +++ b/plugins/user-experience/reference/journeys.md @@ -95,9 +95,6 @@ judgment. and . Written for UK government services; other organizations adopt them by analogy. - - **As of**: 2026-10-04 - - **Recheck trigger**: GDS publishes a new version of the Service Standard, or renumbers either - point. For each handoff between channels (web, app, email, text message, phone, letter, in person, support), record as judgment: diff --git a/plugins/user-experience/reference/measurement.md b/plugins/user-experience/reference/measurement.md index f4bbedd6d89..ba6bb596974 100644 --- a/plugins/user-experience/reference/measurement.md +++ b/plugins/user-experience/reference/measurement.md @@ -81,9 +81,6 @@ owner. Read the current list at the pointer below rather than from here. Basis: - **Pointer**: for the current list and how each indicator is defined, read the GOV.UK Service Manual, "Data you must publish", at . -- **As of**: 2026-10-04 -- **Recheck trigger**: GDS updates that page or the Service Standard point on publishing - performance data. ## By stage diff --git a/plugins/user-experience/reference/research-methods.md b/plugins/user-experience/reference/research-methods.md index 0bea24f80c6..251b1384e2f 100644 --- a/plugins/user-experience/reference/research-methods.md +++ b/plugins/user-experience/reference/research-methods.md @@ -111,9 +111,6 @@ includes them. Basis: judgment. - **Pointer**: for who to involve, when, and how user involvement relates to conformance evaluation, read W3C WAI "Involving Users in Evaluating Web Accessibility" at . - - **As of**: 2026-10-04 - - **Recheck trigger**: WAI revises that page, or publishes involvement guidance for apps beyond - the web. An inclusive-research plan covers, as judgment over the WAI guidance: diff --git a/plugins/visualization/skills/present/SKILL.md b/plugins/visualization/skills/present/SKILL.md index a9f2480d342..740defbba13 100644 --- a/plugins/visualization/skills/present/SKILL.md +++ b/plugins/visualization/skills/present/SKILL.md @@ -60,9 +60,6 @@ names no parameter beyond the two above and reads the rest from the quickstart r - **Pointer**: when the quickstart call is refused or its result reads differently from this step, fetch [Artifacts: Start from a Slides, Design, or Docs template](https://code.claude.com/docs/en/artifacts#start-from-a-slides-design-or-docs-template) live and follow the tool's own result. -- **As of**: 2026-10-11 -- **Recheck trigger**: a Claude Code release changes the Artifact tool's `quickstart` action or its - `intent` values, or that section changes how a deck starts from the Slides template. ## 4. Write the deck locally, then gate it @@ -93,8 +90,7 @@ notice. Deliver by the output's `publishes`: instructs. Give the user the link, and say sharing is their choice. - **Pointer**: when the user asks who can see the deck or how to share it, fetch [Artifacts: Share an artifact](https://code.claude.com/docs/en/artifacts#share-an-artifact) - live. **As of**: 2026-10-11. **Recheck trigger**: that section changes who can see an - unshared artifact. + live. - `publishes` false: publish nothing. Give the outline and the `reason`, and the `opt_in` when there is one (this plugin's `medium` option set to `artifact`). - Exit 1 (a deck refused) or 2 with JSON on stdout: publish nothing; fix the named title or rewrite the named slide as diff --git a/plugins/visualization/skills/visualize/SKILL.md b/plugins/visualization/skills/visualize/SKILL.md index 2599b77b951..a48ff17e033 100644 --- a/plugins/visualization/skills/visualize/SKILL.md +++ b/plugins/visualization/skills/visualize/SKILL.md @@ -102,8 +102,7 @@ medium keeps delivery on the machine (its `publishes` is false), do not offer it Where the medium permits publishing, offer it as an explicit alternative, never a silent default: the canvas is a published, persistent Artifact the person edits and shares (how, per the pointer in -[the catalog's design canvas section](context/decision-matrix.md#design-canvas-bundled-design-skill-presence-gated-preview), -as of 2026-10-11; recheck when that heading is renamed or its pointer moves), where +[the catalog's design canvas section](context/decision-matrix.md#design-canvas-bundled-design-skill-presence-gated-preview)), where this skill's page paths are throwaway or plain-static. The Boundary section below carries the sentence to offer and its gate basis; the canvas surface facts and their verified-on/recheck record live in the catalog spoke. @@ -148,8 +147,7 @@ default" for auto. **Surface gate: the rich page is a capability that can be absent.** A published Artifact is gated; [the catalog's availability entry](context/decision-matrix.md#availability-gating-why-the-surface-is-often-absent) -points at the live conditions (as of 2026-10-11; recheck when that heading is renamed -or its pointer moves). So when a page is warranted: +points at the live conditions. So when a page is warranted: publish an Artifact only if that surface is available; otherwise write a self-contained local HTML file and open it; if neither page surface is available, degrade **visibly** to the best terminal form with a one-line notice. Never assume @@ -164,8 +162,7 @@ instead of a page, except for a diagram that will be committed (Step 2). A canva for a page, so a resolved medium with no page (`page` false) draws none, and one that keeps delivery on the machine (`publishes` false) uses a local server only, as under `deny` below. The surface facts behind this rule, and the optional servers a person can install, are in -[the catalog's canvas section](context/decision-matrix.md#mcp-app-canvas-connected-canvas-server) -(as of 2026-11-10; recheck when that heading is renamed or its pointer moves). +[the catalog's canvas section](context/decision-matrix.md#mcp-app-canvas-connected-canvas-server). Before drawing on a canvas, resolve `hosted_canvas` (`allow` or `deny`) from three layers: the option `${user_config.hosted_canvas}` (empty, or still an unsubstituted placeholder, is unset); @@ -240,8 +237,8 @@ create a private run directory and echo it in the same call, page to `/visualize.html`. Echo it in that call: the directory name is random, so an unechoed path is unrecoverable in the call that writes the file (what carries between Bash calls: -[Tools reference, "What persists between commands"](https://code.claude.com/docs/en/tools-reference#what-persists-between-commands), -as of 2026-11-10; recheck when that section says shell variables persist between calls). Carry the temp root in the positional template, the one form GNU and BSD `mktemp` accept identically, since `-p`/`--tmpdir`/`-t` differ between the dialects and a bare relative template silently creates the file in the **current directory**, the consumer's repository. Keep the `XXXXXX` placeholders **trailing**. BSD `mktemp` (macOS) substitutes only trailing Xs, so an extension after them is not portable. +[Tools reference, "What persists between commands"](https://code.claude.com/docs/en/tools-reference#what-persists-between-commands)). +Carry the temp root in the positional template, the one form GNU and BSD `mktemp` accept identically, since `-p`/`--tmpdir`/`-t` differ between the dialects and a bare relative template silently creates the file in the **current directory**, the consumer's repository. Keep the `XXXXXX` placeholders **trailing**. BSD `mktemp` (macOS) substitutes only trailing Xs, so an extension after them is not portable. That is why the page takes a fixed name inside the generated directory rather than a `visualize-XXXXXX.html` template, which macOS cannot create at all. On Windows, a user-scoped temp under @@ -252,9 +249,8 @@ Linux) and report the absolute path. A **mermaid diagram** is the sharp case. A local HTML file renders it only if the page **embeds** a mermaid renderer inline. What a published Artifact page may load -is in [Artifacts: Page constraints](https://code.claude.com/docs/en/artifacts#page-constraints) -(as of 2026-11-03; recheck when that table changes what a page may load). Keep -the file self-contained; never load a renderer from the network, which breaks offline use and, for output kept local or otherwise sensitive, +is in [Artifacts: Page constraints](https://code.claude.com/docs/en/artifacts#page-constraints). +Keep the file self-contained; never load a renderer from the network, which breaks offline use and, for output kept local or otherwise sensitive, would expose the page to a third party. A plain file with a bare `mermaid` block does not render. So if no mermaid-capable surface is reachable and no trusted renderer can be embedded, deliver the mermaid **source** fence in the terminal and @@ -282,9 +278,8 @@ only (why: [the catalog's Published Artifact entry](context/decision-matrix.md#p - The gate uses `mmdc` only at the minimum version in `prerequisites.json` or newer, found on PATH or at `node_modules/.bin/mmdc` under the working directory. An older one is treated as absent. A failure that is not a parse error (no Chrome) falls back to source with the failure as the - reason. Pointer: . As of 2026-10-03. - Recheck when the Artifact runtime's Mermaid version (see `context/decision-matrix.md`) moves to - a different major. + reason. Pointer: . Recheck when the + Artifact runtime's Mermaid version (see `context/decision-matrix.md`) moves to a different major. - Check the prerequisites with `node "${CLAUDE_PLUGIN_ROOT}/lib/prerequisites.mjs" check "${CLAUDE_PLUGIN_ROOT}" --data-dir "${CLAUDE_PLUGIN_DATA}"`. @@ -311,8 +306,7 @@ first, when either is genuinely ambiguous: The pasted-code case honors `${user_config.thin_context_prompt}`. Read an empty value, or one that still reads as an unsubstituted `${user_config…}` placeholder, as unset, and apply `auto` (how a saved option reaches skill content: -[Reference a saved value](https://code.claude.com/docs/en/plugins/manifest-reference#reference-a-saved-value), -as of 2026-11-03; recheck when that section says what an unset option renders). +[Reference a saved value](https://code.claude.com/docs/en/plugins/manifest-reference#reference-a-saved-value)). `auto` is the behavior above; `always` offers the ranked menu on any bare code paste; `never` renders the recommended form without asking. Any other value is reported and treated as `auto`. @@ -377,9 +371,8 @@ hand-tweakable layouts, so a request for a mockup or a one-pager can mean either - **`design` (bundled skill)**: drafts artboards on one canvas the person keeps and edits (what it publishes and where it is edited: - [Artifacts: Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas), - as of 2026-11-10; recheck when that section changes what a canvas publishes or where it is - edited). It is reserved for the person to run; the model does not invoke it. + [Artifacts: Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas)). + It is reserved for the person to run; the model does not invoke it. - **This skill (marketplace plugin)**: picks the form and medium and renders a throwaway or plain-static page. @@ -388,9 +381,8 @@ render this skill's page and tell the person: If /design is available in your se basis: the verification record below), you can run it instead of or alongside this skill for a hand-editable design canvas. Treat a `design` entry in your skill listing as a local skill shadowing the bundled command (how same-name skills resolve: -[Skills, "Resolve skills that share a name"](https://code.claude.com/docs/en/skills#resolve-skills-that-share-a-name), -as of 2026-11-10; recheck when that section lets a bundled skill and a local one of the same name -both appear): do not make the offer, and tell the person a local +[Skills, "Resolve skills that share a name"](https://code.claude.com/docs/en/skills#resolve-skills-that-share-a-name)): +do not make the offer, and tell the person a local `design` skill shadows the bundled canvas command. A local `design` skill that disables model invocation shadows it too and is hidden from you, so every offer adds that `/design`'s description should read "Make a new Design artifact from a brief"; anything else is a local skill, not the @@ -406,8 +398,7 @@ bundled `design` registration as model-invocation-disabled, user-invocable and g why this skill only ever offers it. Settings can remove it; which settings, and how, are read from the pointers in the catalog spoke's design canvas section ([context/decision-matrix.md](context/decision-matrix.md#design-canvas-bundled-design-skill-presence-gated-preview)), -which owns the remaining surface facts (as of 2026-10-11; recheck when that heading is renamed or -its settings pointers move). +which owns the remaining surface facts. - **Pointer**: probe: the `design` records in `docs/native-surfaces/records.json`. - **As of**: 2026-09-29 @@ -421,8 +412,7 @@ then it means that project, not a new render: - **`ClaudeDesign` (built-in tool)**: the editor for a claude.ai/design project the person already has; the model calls it by name. A new Design artifact comes from the bundled `design` skill above, which the person runs - ([Artifacts: Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas), - as of 2026-11-03; recheck when that section changes how a new design canvas is made). + ([Artifacts: Draft a design canvas](https://code.claude.com/docs/en/artifacts#draft-a-design-canvas)). - **This skill (marketplace plugin)**: picks the form and medium and renders its own output. **Routing:** when the person names or links an existing claude.ai/design project, or asks for the @@ -434,8 +424,7 @@ editor; this skill is the form and medium router. to the project the person named, and only after they asked for the change. When the tool asks for an approval or refuses a write, report it and never retry around it. The approval and refusal cases are probed behavior recorded in -[context/claude-design-tool.md](context/claude-design-tool.md#the-built-in-claudedesign-tool-verification-record) -(as of 2026-10-11; recheck when that record's approval and denial row changes or moves). +[context/claude-design-tool.md](context/claude-design-tool.md#the-built-in-claudedesign-tool-verification-record). ## What this skill does NOT do diff --git a/plugins/visualization/skills/visualize/context/decision-matrix.md b/plugins/visualization/skills/visualize/context/decision-matrix.md index e33b91f25fd..101feeedac0 100644 --- a/plugins/visualization/skills/visualize/context/decision-matrix.md +++ b/plugins/visualization/skills/visualize/context/decision-matrix.md @@ -42,9 +42,6 @@ against those sources before relying on a time-sensitive detail; the platform mo on the page-size cap, fetch [Artifacts: Page constraints](https://code.claude.com/docs/en/artifacts#page-constraints) live. - - **As of**: 2026-10-10 - - **Recheck trigger**: the "Page constraints" section changes its external - requests or rendered size row. - **Theme-aware** (light/dark), **responsive**, and **favicon required**: this plugin builds every published page to these three rules, and follows the Artifact tool's own description in the session where it asks for more. An artifact-design @@ -61,9 +58,6 @@ against those sources before relying on a time-sensitive detail; the platform mo (including its "How connector calls work for viewers" subsection) and [Control connector calls from artifacts](https://code.claude.com/docs/en/artifacts#control-connector-calls-from-artifacts) live. - - **As of**: 2026-10-11 - - **Recheck trigger**: either section changes its plan, version, approval, - sharing or organization-control statements. ### Availability gating (why the surface is often absent) @@ -74,9 +68,6 @@ local HTML file** instead. - **Pointer**: when deciding whether the published-Artifact tier can be offered, fetch [Artifacts: Availability](https://code.claude.com/docs/en/artifacts#availability) live. -- **As of**: 2026-10-11 -- **Recheck trigger**: the Availability table adds, drops or changes a row, or the - section stops naming a local HTML file as the fallback. **Delivery tiers** are the medium registry's fallback chain (`lib/view-registry.mjs`), richest first, each step down more available. The local HTML file is the always-available rich tier and @@ -101,9 +92,6 @@ and never widens this rule: where it would not draw, the skill falls back to `au - **Pointer**: when deciding whether this session's surface renders a canvas, fetch [Add an interactive UI to your MCP server: See the UI render in Claude](https://claude.com/docs/connectors/building/mcp-apps/quickstart#see-the-ui-render-in-claude) live. -- **As of**: 2026-11-10 -- **Recheck trigger**: that section lists Claude Code as a host that renders MCP Apps, or the - section is renamed or moves. This plugin bundles no canvas server. A person who wants one can install an official server at user level; each repository's README says how and which variants run locally or remotely: @@ -200,17 +188,13 @@ person edits and exports it. live; for removing a bundled skill by settings, fetch [`disableBundledSkills`](https://code.claude.com/docs/en/settings-reference#disablebundledskills) and [`skillOverrides`](https://code.claude.com/docs/en/settings-reference#skilloverrides). -- **As of**: 2026-10-11 -- **Recheck trigger**: either artifacts section changes what `/design` drafts, its - gate or its version floor, or either settings entry changes what it removes. **Reserved for the person to run** (probed behavior): our binary extraction of v2.1.285 reads the `design` registration as model-invocation-disabled and user-invocable, so the model never lists or invokes it and the person runs `/design`. A local skill named `design` can collide with the bundled one; which skill wins a shared name is read live from -[Skills: Resolve skills that share a name](https://code.claude.com/docs/en/skills#resolve-skills-that-share-a-name) -(as of 2026-10-11; recheck when that section changes which skill wins a shared name). +[Skills: Resolve skills that share a name](https://code.claude.com/docs/en/skills#resolve-skills-that-share-a-name). - **Pointer**: probe: the `design` records in `docs/native-surfaces/records.json`. - **As of**: 2026-09-30 @@ -239,8 +223,8 @@ the identity string). The design-sync family's registry disposition (defer, observed-only) also lives in `docs/native-surfaces/records.json` (its `design-sync` records), which keeps the -v2.1.263 registration evidence as history (as of 2026-10-11; recheck when a release -note first names a design-family surface, or those records change disposition). +v2.1.263 registration evidence as history (as of 2026-10-11; recheck when a release note first names a +design-family surface, or those records change disposition). ## Third-party visualization plugins @@ -263,9 +247,8 @@ owned by the plugin README's future-change section. ## Sources and verification -Verified 2026-07-22 via a research fan-out over official documentation; re-fetch -before relying on a time-sensitive detail, and recheck when the interactive-mode page changes -what terminal Markdown rendering covers. +Gathered by a research fan-out over official documentation; re-fetch before relying on a +time-sensitive detail. - Terminal Markdown rendering (code-block syntax highlighting, hyperlinks): the page documents the syntax-highlighting toggle and clickable issue references, but no general statement about @@ -276,9 +259,6 @@ what terminal Markdown rendering covers. fetch [Issue reference links](https://code.claude.com/docs/en/interactive-mode#issue-reference-links) live. - - **As of**: 2026-10-18 - - **Recheck trigger**: the page adds a section that enumerates the Markdown constructs the - terminal renders, or changes either section above. - Mermaid emitted as source, not terminal-rendered: no official page documents terminal mermaid rendering, and the shipped binary showed no terminal-side renderer. @@ -298,24 +278,16 @@ what terminal Markdown rendering covers. - Artifact CSP, page size, source file types, availability gating and connector-backed live data: each is read live from the pointer in its own entry under [Published Artifact](#published-artifact) and - [Availability gating](#availability-gating-why-the-surface-is-often-absent) - (as of 2026-10-11; recheck when either entry's pointer changes its target - section or one of those headings is renamed). + [Availability gating](#availability-gating-why-the-surface-is-often-absent). - Artifact native mermaid, favicon requirement, theme-awareness (`prefers-color-scheme` / `data-theme`), and responsive rules: the Artifact - tool's own description in the session (no public docs section covers them as of - 2026-10-11; recheck when the artifacts page adds a section on mermaid rendering, - favicons, theming or responsive layout, or the Artifact tool's description drops - one of them). + tool's own description in the session (no public docs section covers them). - Mermaid diagram families: `https://mermaid.js.org/intro/` and the stable sidebar at `https://mermaid.js.org/syntax/flowchart.html`. - Plugin manifest `userConfig` fixed-value fields, which this plugin's options use: - **Pointer**: when adding or changing a fixed-value option, fetch [Plugins reference: Limit a field to fixed options](https://code.claude.com/docs/en/plugins/manifest-reference#limit-a-field-to-fixed-options) live. - - **As of**: 2026-10-11 - - **Recheck trigger**: that section renames `options`, extends it to other field - types, or moves its version floor. - Third-party survey: `https://code.claude.com/docs/en/plugins/install`, the community catalog at `https://raw.githubusercontent.com/anthropics/claude-plugins-community/main/.claude-plugin/marketplace.json`, @@ -331,9 +303,7 @@ UNVERIFIED / low-confidence (flagged, not asserted): (present upstream in the bundled version; see the Published Artifact record): verify empirically before use. - Public sharing of an artifact is reported to fail for pages containing mermaid - blocks, SVG `data:` URIs, or AVIF images (anthropics/claude-code#79824 open, - #81410 a sibling, as of 2026-09-04); the mechanism is unconfirmed; private and - org sharing are unaffected. Recheck when either issue closes or a changelog - entry names artifact public sharing. + blocks, SVG `data:` URIs, or AVIF images (anthropics/claude-code#79824, #81410 a + sibling); the mechanism is unconfirmed; private and org sharing are unaffected. - Third-party repo maintenance signals (last-commit dates, exact star counts) and the AntV egress claim (from its README, not empirically exercised).