fix(skill-review): stop requiring client-specific TodoWrite and Task - #3
Merged
Merged
Conversation
Preflight aborted the review when TodoWrite or Task was missing. Newer models ship without a built-in task-tracking tool, so the skill could not start at all. File read is now the only hard requirement; task tracking and sub-agent delegation are optional capabilities with declared fallbacks. WF12/WF13 and Bingo #21 catch the same lock-in in reviewed skills. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Self-review of the branch found the new fallbacks half-landed: instruction-singlepass.md still claimed it runs only below 500 lines, its algorithm never wrote review-plan.md, and WF12 lost the PASS row its checklist twin has. Shell execution, required for the log timestamp, was missing from the capability table that claims to enumerate what the review needs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Replaces the capability/fallback tables with a single planning mechanism: a markdown checklist copied into the response, the pattern the Anthropic skill authoring guide recommends. No client tool is named anywhere in the skill now, so nothing goes stale when a client renames or gates a tool. - Preconditions keep file read as the only hard requirement - SKILL.md and instruction-singlepass.md each ship a ready-made plan skeleton to copy, with an explicit instruction to check items off - WF12 asks for a planning mechanism that survives a client without a given tool; its signal/verdict table is folded into the question so the check still yields a single verdict - Bingo #21 note reworded without tool names and disambiguated against #16 - Drop the review-plan.md artifact and the invented [~] status Fixed along the way: with logging on, the results folder is created right after the user confirms its path, so single-pass mode has somewhere to write report.md. Previously it was created only on the sub-agent branch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
korchak-aleksandr
self-requested a review
September 17, 2026 19:27
korchak-aleksandr
approved these changes
Sep 17, 2026
…se NONE #21 hung on WF12 alone, and WF12 is gated on "if the workflow is longer than 4 steps". A short skill whose preconditions hard-require a client tool made WF12 N/A, and the row then had to be filled as NONE — a clean verdict for a skill that has exactly this defect. The file's own Scope Fill Rule exists to avoid that false impression of cleanliness. WF15 (preconditions) carries no such gate, so it becomes the second anchor and the row fires whenever the antipattern is applicable at all. This is the same shape #20 already uses: RF12 is gated on "many files", RF06 is not, and the row survives on RF06. Stage 2 -> 3, by the maximum of the anchors, as #15 does with WF22+LC02. It also puts #21 next to #12 and #16 — the other two portability rows, both stage 3, both owned by Workflow. The #16 disambiguation note now splits by signal instead of by breadth: both rows use WF15, so a named client tool goes to #21 and everything else (OS, permissions, packages, paths) to #16. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Type of Change
What was broken
The skill refused to start on current Claude Code models.
SKILL.md § Preconditionssaid: "Before Step 0, checkTask,TodoWrite, and file access for the skill. If anything is missing — stop and report what is lacking." Both names have since moved: the sub-agent tool was renamedTask→Agentin v2.1.63,TodoWritewas superseded byTaskCreate/TaskGet/TaskUpdate/TaskListin v0.2.82, and in v2.1.268 the whole task-tracking family became model-gated (CLAUDE_CODE_ENABLE_TODO_TOOLS=1to restore it). Both preflight conditions fail on a current model, so the review stopped at step zero.references/instruction-singlepass.md § Preconditionsrepeated the same hard gate for the second execution mode.The rest of the skill was built on top of that assumption: a mandatory "TODO plan", statuses
pending/in_progress/completed, delegation "viaTask".Chasing the new names would only reset the clock. The fix removes the dependency instead.
What changed
Planning is one mechanism, described in words. The review plan is a markdown checklist the agent copies into its response and checks off as it goes — the pattern Anthropic's skill authoring guide recommends for complex workflows. Both execution modes ship a ready-made skeleton to copy:
SKILL.md § Mandatory Review Plan(by check group) andinstruction-singlepass.md § Algorithm(by Part A–G). It works in every client and names no tool, so nothing goes stale the next time one is renamed or gated.Planning did not get weaker: an explicit completion gate replaces what the tool used to enforce — no final report while plan items are open, in the
CRITICALblock and in single-passMandatory Rules.No client tool is named anywhere in the skill. File read is the only hard requirement left. A missing sub-agent tool is not a precondition failure — it only selects the execution mode: single-pass regardless of volume, with the missing delegation recorded in
Review Limitations, and a reading strategy for a large skill in one context.The checklist the skill judges other skills by had the same staleness. WF12 now asks for a planning mechanism that does not depend on a tool being present in a particular client; WF13 is worded in terms of open plan items instead of one tool's status names.
Antipattern Bingo #21 "Client tool lock-in" (stage 3, WF12 + WF15, owner Workflow) — added so the reviewer catches this class in other skills. It is anchored to two checks on purpose: WF12 is gated on "workflow longer than 4 steps", so on its own it would have forced a
NONEverdict for a short skill whose preconditions hard-require a tool — a clean verdict for a skill with exactly this defect. WF15 carries no such gate. This is the shape #20 already uses (RF12 gated, RF06 not), and the stage follows the maximum of the anchors as #15 does. The note against #16 Context overfitting splits by signal: a named client tool goes to #21, everything else to #16.Fixed along the way
With logging on, the results folder is now created right after the user confirms its path (step 3d) instead of on the sub-agent branch only (was step 10b) — single-pass mode had nowhere to write
report.md. Pre-existing, unrelated to the tool dependency, two lines.Versions per
CLAUDE.md § Version Policy:plugin.json1.0.0 → 1.1.0,SKILL.md metadata.version1.6.0 → 1.7.0, CHANGELOG entry added.Plugin Checklist
plugin.jsonhasname,description(English),version,authorSKILL.mdfrontmatter complete:name(kebab-case, matches folder),descriptionwith trigger phrases and "Don't use when",metadata.versionmarketplace.jsonupdated — n/a, no new plugin; the existing entry needs no changeREADME.mdplugin table updated — n/a, no new pluginCHANGELOG.mdupdated in plugin rootvalidate.yml) passesSkill Review Results
Run on
bbf9afc, in sub-agent mode (1911 lines, 5 sub-agents).Scope used: Repository (full)
Statistics: FAIL: 2, WARNING: 18, PASS: 45, N/A: 7
That run found three places where the branch had half-landed, all fixed in
bbf9afc:instruction-singlepass.mdstill claimed it runs only below 500 lines while the newfallback routes any volume into it; its algorithm never wrote the plan file; and its
copy of WF12 lacked a row its checklist twin had.
9237e76then replaced the mechanism itself — capability tables out, one copyablechecklist in — and has not been re-reviewed by the skill. The statistics above
predate it. The three issues below were unaffected by either revision.
Top 3 issues (if any): all three predate this branch and are left for separate PRs — this one stays scoped to the tool-dependency fix.
instruction-singlepass.mdand the checklists. The single-pass file carries its own copies of all five checklists, the Bingo table, the report template and the base rules, and the copies have already drifted apart in four places (a Troubleshooting case present only inSKILL.md, a lost word in the base rules, a different RF10 wording, a different report section order). This PR had to edit WF12, WF13 and the Bingo note twice for exactly that reason. Fixing it means designating the checklists as the SSoT and reducing the single-pass file to mode-specific glue.metadata.authorin the frontmatter. Ownership is declared only at package level inplugin.json, while the checklist treatsmetadata.authoras a stage-4 gate. Worth fixing together withvalidate.yml, which today never readsSKILL.mdfrontmatter and so cannot catch it.references/folder with colliding file names, and a sub-agent resolvingreferences/checklist-structure.mdagainst the reviewed folder would read the wrong file. Pass absolute paths, or paths relative to the reviewer's own folder.🤖 Generated with Claude Code