feat(skill-management): subagent-driven audit + residual review suggestions for migrate-config-to-opus-5 - #564
Conversation
…onfig-to-opus-5 Applies the two github-actions[bot] inline suggestions from PR #562 that were not fully adopted before merge: - Model-ID grep now also matches fable/mythos tier IDs, and the current-IDs list mentions claude-fable-5 for top-tier use - Dead-weight deletion now requires a clean tree on git surfaces, and routes non-git dead weight to the Step 3 interview Patch bump skill-management 1.1.0 -> 1.1.1. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
📚 Documentation Check ✅Verdict: Passed Plugin version was correctly bumped (1.1.0→1.2.0) in both plugin.json and the root CLAUDE.md version table, with an appropriate minor-bump magnitude for a backward-compatible feature enhancement. Plugin CLAUDE.md and README.md were both updated consistently to describe the new subagent fan-out behavior. No missing or inconsistent documentation found. All required documentation updates for this PR are present and internally consistent:\n\n- Version bump: Missing Updates
✨ No Documentation Updates NeededAll documentation appears to be up to date with the code changes. 🤖 Generated by Claude Documentation Validator | Mode: |
|
● Reviewed · against Note Approved — one open note on the Notion marketplace description. Makes Step 2 of Suggestions
Iteration history · 5 reviews2026-08-05 14:46 UTC · ✅ approved · 0 findings ·
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f5893c433a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - **Context-window logic:** scripts branching on model ID for window size. All current non-Haiku models are 1M; Haiku 4.5 is 200K. Keying "haiku → 200K, else 1M" beats enumerating model names. Test with synthetic payloads for both branches. | ||
| - **API params:** `budget_tokens` is rejected with a 400 on the Claude 5 family — replace `thinking: {type: "enabled", budget_tokens: N}` with `thinking: {type: "adaptive"}`. Also flag hardcoded `temperature` alongside thinking, and Priority Tier assumptions (not supported on Opus 5). | ||
| - **Dead weight:** vendored commands referencing nonexistent agents, archive directories, `.backup`/`.bak` settings snapshots (these often pin old models), marketplace entries pointing at dead repos. Delete outright only when the surface is a git repo — git holds history there. On a non-git surface (a plain `~/.claude` is the common case) deletion is unrecoverable, so treat dead-weight removal as a user decision, or confirm an external backup (Time Machine, sync) before deleting. | ||
| - **Dead weight:** vendored commands referencing nonexistent agents, archive directories, `.backup`/`.bak` settings snapshots (these often pin old models), marketplace entries pointing at dead repos. Delete outright only when the surface is a git repo with a clean tree — git holds history there. On a non-git surface (a plain `~/.claude` is the common case) deletion is unrecoverable, so list the candidates for the Step 3 interview instead of deleting, or confirm an external backup (Time Machine, sync) first. |
There was a problem hiding this comment.
Keep dead-weight deletion rules consistent
When the selected surface is a git repo with uncommitted or untracked dead-weight files, this tightened reference says to delete only with a clean tree, but the actual execution step still says to delete dead things outright whenever the surface is a git repo (packages/plugins/skill-management/skills/migrate-config-to-opus-5/SKILL.md:54). Agents following the later Step 4 instruction can still remove unrecoverable dirty-tree content, so the clean-tree/Step 3 routing needs to be mirrored in the executable workflow text as well.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Note
✅ Approved — see full review in the sticky comment ↑
…ep 4 Codex review flagged that the executable workflow text still permitted outright deletion on any git repo while the reference required a clean tree. Both now agree: clean tree required, dirty/non-git dead weight routes to the Step 3 interview. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…fig-to-opus-5 Step 2 now mandates a subagent fan-out that reads each in-scope file in full, audits it against references/audit-patterns.md, and reports structured per-file findings (quoted text, proposed change, classification, rationale) back to the main thread. Grep sweeps are demoted to a completeness cross-check — a hit in an unreported file means a missed batch, never a patch source. Bump becomes minor (1.1.1 -> 1.2.0) since this is a feature-level enhancement; plugin CLAUDE.md and README updated to match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
| The audit itself is read-every-file, not search. Grep finds only what a pattern anticipates (model IDs, API params); the behavioral deltas live in prose that no regex matches — a reviewer prompt's confidence filter, a rule's verification ceremony, a delegation nudge. Deploy subagents to do the reading: | ||
|
|
||
| - Partition the Step 1 inventory into batches of related files (a rules directory, one plugin's skills, the CI scripts) — one subagent per batch, sized so each agent reads every assigned file in full. | ||
| - Give each subagent its file list, the full text of `references/audit-patterns.md`, and this contract: read each file completely, audit it against the reference's deltas, mechanical checks, and user-decision settings, and report back per-file structured findings — file, location, quoted current text, proposed specific change (replacement text, "delete", or "keep as policy"), classification (the four buckets below), and a one-line rationale. A file with no findings is reported as audited-clean, not skipped. No subagent may judge a file it did not read. |
There was a problem hiding this comment.
audit-patterns.md) doesn't include the four classification buckets, but the contract asks each subagent to classify into "the four buckets below" — those live at lines 49-52 of this file, which the subagent never sees, and audit-patterns.md doesn't define them. Each subagent invents its own labels and the main thread re-classifies.
| - Give each subagent its file list, the full text of `references/audit-patterns.md`, and this contract: read each file completely, audit it against the reference's deltas, mechanical checks, and user-decision settings, and report back per-file structured findings — file, location, quoted current text, proposed specific change (replacement text, "delete", or "keep as policy"), classification (the four buckets below), and a one-line rationale. A file with no findings is reported as audited-clean, not skipped. No subagent may judge a file it did not read. | |
| - Give each subagent its file list, the full text of `references/audit-patterns.md`, the four classification buckets defined below, and this contract: read each file completely, audit it against the reference's deltas, mechanical checks, and user-decision settings, and report back per-file structured findings — file, location, quoted current text, proposed specific change (replacement text, "delete", or "keep as policy"), classification (one of the four buckets), and a one-line rationale. A file with no findings is reported as audited-clean, not skipped. No subagent may judge a file it did not read. |
…load AI review caught that the contract referenced 'the four buckets below' while the enumerated payload omitted them — subagents never see the rest of SKILL.md, so each would invent its own labels. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
| behavioral changes. Interviews for scope first (global `~/.claude` vs the current project), | ||
| inventories the surface, classifies findings (fix mechanically / rewrite / user decision / leave | ||
| alone), and executes with granular commits plus a verification probe. Bundles | ||
| inventories the surface, fans out subagents that read every in-scope file in full and report |
There was a problem hiding this comment.
🔵 info · plugin-conventions — The skill's described behavior changed materially (subagent fan-out replacing the grep scan), so the Notion marketplace doc's migrate-config-to-opus-5 description is stale. Component counts are unaffected — nothing was added, removed, or renamed.
| - For shared/synced files, apply the machine-agnostic path rule from Step 0. | ||
| - When editing `settings.json`, validate with `python3 -c "import json; json.load(open('...'))"` after every edit, and check `git diff` first so pre-existing drift from other sessions is named in the commit message rather than silently swept in. | ||
| - Delete dead things outright (superseded commands, archives, backup files) when the surface is a git repo — git history is the recovery path, and "kept for recovery" copies keep loading into context. On a non-git surface, deletion is unrecoverable: confirm the user has a backup (Time Machine, sync) or ask before deleting. | ||
| - Delete dead things outright (superseded commands, archives, backup files) when the surface is a git repo with a clean tree — git history is the recovery path, and "kept for recovery" copies keep loading into context. Uncommitted or untracked dead weight has no history to fall back on: commit it first or route it to the Step 3 interview. On a non-git surface, deletion is unrecoverable: list the candidates for the Step 3 interview instead, or confirm the user has a backup (Time Machine, sync) before deleting. |
There was a problem hiding this comment.
🔵 info · workflow-ordering — Step 4 routes dirty-tree and non-git dead weight "to the Step 3 interview", but Step 3 has already run by the time an agent reaches this branch. The git case has commit it first as a forward path; the non-git case needs one too — e.g. "raise it with the user now" rather than pointing back at a completed step.
…dead weight Step 4 routed dirty-tree/non-git dead weight back to the Step 3 interview, which has already run by then. Now a follow-up AskUserQuestion, with Step 3 as the ideal earlier surfacing point. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Summary
Follow-up to #562, now three parts:
1. Residual github-actions[bot] inline suggestions from #562 (the other two inline comments were already addressed pre-merge):
fable/mythostier IDs, and the current-IDs list mentionsclaude-fable-5where the top tier is wanted. (comment)2. Subagent read-every-file audit (the feature, hence minor bump): Step 2 now mandates a subagent fan-out that reads each in-scope file in full, audits it against
references/audit-patterns.md, and reports structured per-file findings (quoted text, proposed specific change, classification, rationale) back to the main thread. Grep sweeps are demoted to a completeness cross-check — a hit in a file no subagent reported on means a missed batch, never a patch source. Behavioral compensations live in prose no regex matches; reading every file is the only audit that catches them.3. Version/docs:
skill-management1.1.0 → 1.2.0 (minor — feature-level enhancement), root CLAUDE.md version table, plugin CLAUDE.md, and README updated to match.Test plan
node scripts/validate-plugin.cjs packages/plugins/skill-management→ PASSEDbunx markdownlint-cli2on touched markdown → 0 errors🤖 Generated with Claude Code