Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugins/claude-config/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "claude-config",
"version": "0.21.0",
"version": "0.21.1",
"description": "Five audit skills for a repo's Claude Code configuration: audit (settings.json / .mcp.json / hooks / plugins / permissions drift), audit-automation-gaps (evidence-gated verdicts on automation gaps), audit-permission-grants (allow-rule / allowed-tools grants for auto-mode durability and portability), audit-instructions (locally-owned instruction surfaces vs current model capability — proposes removals/rewrites of instructions the model no longer needs, and detects cross-surface instruction conflicts), and audit-pass (one coordinated, ordered, resumable pass over a named target — three-scope inventory, run-time-derived exclusion set, stable finding identity, suppression memory, resume, one human gate — delegating every check to the plugin that owns it).",
"author": {
"name": "Melodic Software",
Expand Down
49 changes: 49 additions & 0 deletions plugins/claude-config/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,55 @@
All notable changes to the `claude-config` plugin are documented here. Format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning.

## [0.21.1]

### Added

- **`audit-instructions`: row I8-d, short-turn assumptions** (criteria 1.8.0 → 1.9.0). Tier
`behavioral`, `Model scope: fable-5` — the promotion gate is unmet and stays unmet: the claim
appears in one model guide and on no model-agnostic page, so the row is inert on other targets
and reports `skipped-for-target`.

**Detect** is instruction text resting on the premise that a turn is short — a forced
interim-status cadence ("summarize every N tool calls"), a directive to answer quickly, any
progress rhythm pinned to a turn rather than to the work. Individual requests now run for
minutes at higher effort and autonomous runs for hours, so such a rhythm fires on work that has
not reached a reportable boundary and interrupts exactly the long runs the model is used for.
Four fences keep it off legitimate text: an output-length instruction is I8 base's subject, not
this one's (the axis here is the turn's duration, never the reply's size); a latency or duration
requirement the surface genuinely owns — an SLA, a downstream timeout, a human review rhythm — is
a constraint it is entitled to state; a document *about* the pattern is exempt on the same
audience test I8-b, I17, I18 and I20 already use; and a cadence carrying its own explicit
observability or interruptibility rationale is a design the surface is entitled to make — that is
the very guarantee the row's Remediate line protects — exempt unless evidence shows it was
calibrated to an obsolete turn length rather than to the work.

The row is **lane-only, not seeded** by `instruction-scan.sh`, and `SKILL.md` now says so
alongside the existing I8-c disclosure. A pattern family was considered and declined: the
phrasings are too varied for a rule that would earn its false-positive rate, and the one
candidate string in this repository resolves to the exempt meta case, so the family would have
shipped with a known false positive and no true one.

The guide pairs this behavior with advice to adjust **client timeouts, streaming, and progress
indicators**. That half is harness client configuration rather than instruction content, so the
row states plainly that it is out of scope and that no row claims it — the shape that *would*
reach this catalog is instruction text prescribing a short client timeout, and none is attested.

### Changed

- **`audit-instructions`: I8's base row gains one named worked instance — the delegation
throttle.** A cap on concurrent workers, a one-at-a-time rule, or an instruction to block until
each subagent returns, *where the surface's own ground is that subagent handling is unreliable*.
Current guidance runs the other way (readier dispatch, asynchronous orchestrator-to-worker
communication), so such a throttle is the base row's generic case with a name on it — which is
why it lands as recognition material inside I8 rather than as a fourth rule competing with it.
The qualifier is the whole fence: **a cap carrying its own non-model rationale is not this
instance.** Reviewability of returns, rate limits, cost, and shared mutable state each justify a
bound on their own terms, and that justification belongs to the surface making it. The base row's
Source gains the guide's "Parallel subagents" sentence as the instance's basis; the row restates
no volatile literal and so owes no per-row verification stamp under the catalog's own
binds-on-touch rule.

## [0.21.0]

### Added
Expand Down
4 changes: 3 additions & 1 deletion plugins/claude-config/skills/audit-instructions/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,9 @@ bash "${CLAUDE_PLUGIN_ROOT}/skills/audit-instructions/scripts/instruction-scan.s
It emits `file:line:check-id` candidate rows for I6 (bare prohibitions lacking a rationale
marker), I10 (reasoning-echo directives), and the I8 families under per-family ids — `I8-a`
instructed self-check, `I8-b` conservative-reporting, `I8-c` don't-think / don't-reason (I8-c's
tag-naming sub-detect is lane-only, not seeded); `--count` prints the row count. Advisory — a
tag-naming sub-detect is lane-only, not seeded, as are I8's base row and `I8-d` short-turn
assumptions, whose phrasings are too varied for a pattern that would earn its false-positive rate);
`--count` prints the row count. Advisory — a
grep cannot judge whether a rationale is genuinely present, whether a restraint clause is a
reporting gate, or which model a row targets, so the lane refines every candidate against the
catalog's fences and the run's resolved target model.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
version: 1.8.0
version: 1.9.0
last-updated: 2026-08-03
---

Expand Down Expand Up @@ -240,18 +240,30 @@ so this fires for every target model.

Tier `behavioral` · Authority `ANTHROPIC-DOCS` · Severity `warning` · Surfaces: all.

The base row and rows I8-a and I8-c carry their own `Model scope` (single-model guide sources;
The base row and rows I8-a, I8-c and I8-d carry their own `Model scope` (single-model guide sources;
promotion gate unmet). Row I8-b is unscoped — two model guides converge on it (see the row).

**Base row** · Model scope: `fable-5`.

- **Detect:** prior-model workarounds and over-prescriptive step lists — instructions enumerating
behaviors a current model handles from a brief instruction, or scaffolding that pins an approach.
**One named worked instance, offered for recognition rather than as a separate rule: a delegation
throttle** — a cap on concurrent workers, a one-at-a-time rule, or an instruction to block until
each subagent returns before dispatching the next — where the surface's own ground for it is that
subagent handling is unreliable. Current guidance runs the other way, asking for readier
dispatch and asynchronous orchestrator-to-worker communication, so a throttle resting on that
premise is the generic case with a name on it. **A cap carrying its own non-model rationale is
not this instance** — reviewability of returns, rate limits, cost, or shared mutable state each
justify a bound on their own terms, and that justification is the surface's to make, not this
row's to override.
- **Remediate:** propose removal or a briefer instruction; verify via the delete-and-watch loop
that default performance holds or improves.
- **Bounded by:** the **Stopping condition** below, which is enabled by default.
- **Source:** Fable 5 guide — "Skills developed for prior models are often too prescriptive for
Claude Fable 5 and can degrade output quality."
Claude Fable 5 and can degrade output quality." The worked instance's basis is the same guide,
"Parallel subagents" — "Claude Fable 5 dispatches parallel subagents more readily than prior
models. Use subagents frequently … and prefer asynchronous communication between orchestrator and
subagents over blocking until each subagent returns."

**Row I8-a: instructed self-check removal** · Tier `behavioral` · Model scope: `opus-5`.

Expand Down Expand Up @@ -319,6 +331,41 @@ three trigger phrases (see Source), so this fires for every target model.
rule instructing the model not to think or not to reason, remove it; that kind of instruction
increases tag leakage"; naming thinking tags is "less effective than the general form."

**Row I8-d: short-turn assumptions** · Tier `behavioral` · Model scope: `fable-5`.

- **Detect:** instruction text resting on the premise that a turn is short — a forced interim-status
cadence ("summarize every N tool calls", "check in after each file"), a directive to answer
quickly or keep turns brief, or any required progress rhythm pinned to a turn rather than to the
work. Individual requests now run for many minutes at higher effort and autonomous runs for hours,
so a rhythm calibrated to the old turn length fires as noise on work that has not reached a
reportable boundary, and it interrupts precisely the long uninterrupted runs the model is being
used for.
Comment thread
kyle-sexton marked this conversation as resolved.
- **Remediate:** name the guarantee the cadence was protecting — that the user can see progress,
that a long run stays interruptible — and either state that outcome and let the model meet it, or
move it to a mechanism rather than an instructed rhythm. Verify via the delete-and-watch loop.
- **Bounded by:** the **Stopping condition** below, which is enabled by default.
- **Must NOT flag: an output-length instruction.** Brevity of the *reply* is a different subject and
belongs to I8 base; this row's subject is the cadence and duration of the *turn*.
- **Must NOT flag: a latency or duration requirement the surface genuinely owns** — a product SLA, a
timeout a downstream contract imposes, a rhythm a human review process depends on. Those are
constraints the surface is entitled to state, not assumptions about how long a model takes.
- **Must NOT flag: a document *about* the pattern** — this row, a model-adaptation delta chapter
counter-steering it for a different model, a verification record quoting it — on the same audience
test I8-b applies.
- **Must NOT flag: a cadence carrying its own explicit observability or interruptibility
rationale** — a rhythm the surface states exists so a long autonomous run stays visible or
interruptible names the very guarantee the Remediate line protects, and that design is the
surface's to make — unless evidence shows the cadence was calibrated to an obsolete turn length
rather than to the work.
- **Scope, and what is deliberately outside it:** the guide pairs this behavior with advice to adjust
**client timeouts, streaming, and progress indicators** before migrating. That half is harness
client configuration rather than instruction content, so it is not audited here and no row claims
it; a surface whose *instruction text* prescribes a short client timeout is the shape that would
reach this catalog, and none is attested.
- **Source:** Fable 5 guide, "Longer turns by default" — "Individual requests on hard tasks can run
for many minutes at higher effort settings … and autonomous runs can extend for hours. This is one
of the largest shifts teams encounter when adjusting to Claude Fable 5."

### I9: Example hygiene

Tier `behavioral` · Authority `ANTHROPIC-DOCS` · Severity `info` · Surfaces: all.
Expand Down
2 changes: 1 addition & 1 deletion plugins/playbooks/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "playbooks",
"version": "0.6.8",
"version": "0.6.9",
"description": "Doctrine and knowledge playbooks as on-demand skills, plus a maintainer-facing update skill. boris — Boris Cherny's Claude Code workflow tips (howborisusesclaudecode.com); skill-authoring — Anthropic's internal skill-authoring playbook; fable-5 — Claude Fable 5's operating doctrine (self-authored, no upstream). The boris and skill-authoring packs vendor a verbatim upstream baseline; /playbooks:update drift-checks and syncs those baselines centrally (maintainers).",
"author": {
"name": "Melodic Software",
Expand Down
78 changes: 78 additions & 0 deletions plugins/playbooks/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,84 @@ All notable changes to the `playbooks` plugin are recorded here. The `version` i
`.claude-plugin/plugin.json` is the delivery vehicle — a consumer receives a change
only after that version increases.

## [0.6.9]

### Fixed

- **`fable-5`'s late-session decay response could be triggered by a number, which is the
behavior the guide it is built from tells you to suppress.**
`skills/fable-5/context/context-economy.md` §"Detecting late-session quality decay" lists three
behavioral tripwires and then escalates to "hand off — write the resume note and tell the user a
fresh session will outperform continuing". Nothing said a remaining-context count is not one of
those tripwires, so the cheapest signal to notice — a countdown, a percentage — could enter the
ladder in place of the three that actually measure decay. The section now carries a fourth
bullet naming the number as a **non**-signal and bounding what it governs: only the ladder that
follows it, never the success-path reset earlier in the chapter, a stop the user asked for, or
an operator mechanism that gates on the window — each of those keeps its own trigger untouched.

Sourced from the guide's "Rare cases of context-budget concern", re-fetched and byte-identical
on 2026-08-03: the failure it describes is a session wound down early because a count looked
low, and the remedy it offers is a reassurance, not a new stopping rule. The chapter's
thinking-cost material is deliberately untouched — it concerns what a long session *costs*, not
when to end one, and the two were never in tension.

**The bullet governs your own initiative and nothing else**, and that scope is load-bearing rather
than decorative. Sibling plugins in this marketplace deliberately gate on the window — a
context-zone hook, a retro that shortens past a threshold, a workflow step that hands off when
context grows heavy — and an absolute rule here would contradict every one of them for any
consumer who installs both, which is exactly the cross-surface conflict `audit-instructions` I15
reports. So the bullet defers to an instructed stop under meta-rule 1: the user, operator
configuration, and the project's own conventions already outrank this playbook, and a mechanism
built to gate on the window is doing what it was built to do. What remains is the failure the
guide actually describes — winding down unprompted because a number looked low.

### Added

- **`fable-5`: the assessment-versus-change gate the model-adaptation chapter already pointed at
but no chapter held.** `reference/model-adaptation/opus-4-8.md` names "Assessment vs change" as
a Fable behavior to emulate and routes the reader to "(Communication chapter.)" — which had no
such section. `skills/fable-5/context/communication.md` now opens with
§"Assessment is a deliverable; a fix is a different one", stating what the pointer promised: when
the user describes a problem, asks a question, or thinks out loud, the deliverable is the
assessment; offer the fix rather than apply it. It covers the artifacts left behind unasked
(branches, backups, drafts) and the evidence bar before a state-changing command, and states its
own precedence — it runs *before* §"Decide, or ask", which allocates a choice once a change is
already in scope rather than deciding whether one was requested.

- **`fable-5`: non-blocking orchestration.** `skills/fable-5/context/orchestration.md` gains
§"Keep working while workers run". The chapter specced workers well and adjudicated their
returns, but every path through it read dispatch-then-wait: the closest existing line
("a wave of four costs roughly one worker's wall-clock") is about workers running concurrently
with *each other*, never about the orchestrator continuing. The new section takes the guide's
"Parallel subagents" posture directly — dispatch is not a blocking call, check a running wave
against the drift signals rather than waiting it out, and continue an already-oriented worker on
a shared subject instead of respawning one to re-read the same material, with the fresh-context
verifier carved out because holding no context is its entire value.

- **`fable-5`: a bound on defensive over-building.**
`skills/fable-5/context/execution.md` gains §"Build for what can happen, not what cannot".
§"Smallest correct change vs. right design" governs escalating *to* a redesign and
§"Scope fencing" governs absorbing adjacent problems, but neither reaches the guard, layer, or
option added inside the requested change: validation on internal callers and framework
guarantees, cleanup around a bug fix, an abstraction ahead of its second caller, a flag or
compatibility shim where changing the code is available. The guide files this under higher
effort specifically, so the section says so — the more room there is to deliberate, the more
defensible each unrequested addition looks from inside. The cleanup clause defers explicitly to
§"Scope fencing"'s absorb bar — in the section and in its core-doctrine line — so the two never
issue contradictory instructions for a qualifying in-file, under-two-minute, behavior-preserving
cleanup.

- **Core-doctrine lines for all four**, in `skills/fable-5/SKILL.md`. Chapters load at their
triggers; the core doctrine is what a bare-armed session carries. Three of these four fire
before their chapter's trigger plausibly would — an unrequested fix lands before any
turn-ending message is composed, and a context count is noticed before a long-session read — so
chapter-only placement would have shipped them where they cannot act.

- **A re-verification line on `reference/model-adaptation/opus-4-8.md`'s Sources block**, scoped to
the Fable 5 guide only: re-fetched 2026-08-03, byte-identical to a 2026-07-29 capture. It states
its own limits rather than letting one date cover both guides — no comparison against the
2026-07-06 reading exists, and the Opus 4.8 guide has not been re-read at all.

## [0.6.8]

### Fixed
Expand Down
4 changes: 4 additions & 0 deletions plugins/playbooks/reference/model-adaptation/opus-4-8.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,8 @@ Official Anthropic prompting guides, fetched 2026-07-06:
- <https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-4-8> — literalism, effort strictness, tool-use triggering, subagent spawning, review-recall harness effect, progress updates, response-length calibration
- <https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-fable-5> — strong instruction following, act-when-enough-info, grounded progress claims, boundaries, parallel-subagent readiness, memory-system guidance, final-summary readability

The Fable 5 guide was re-fetched 2026-08-03 and is byte-identical to a 2026-07-29 capture of the
same page; it has not been compared against the 2026-07-06 reading above, and the Opus 4.8 guide has
not been re-read at all since then.

Behavioral claims here decay with model/doc revisions — re-verify against these URLs before propagating them elsewhere.
Loading