Uh oh!
There was an error while loading. Please reload this page.
Assign Claude model tiers to skill wrappers - #34
Conversation
Give every Claude wrapper under `claude/` an explicit, alias-based model tier so routine skills stop billing at the session model: - `haiku` for script-driven pipelines (`update-copyright`, `run-build`, `api-discovery`, `check-links`) and the `dependency-audit` agent — replacing its dated `claude-haiku-4-5-20251001` pin, which would rot as consumers float to `master`. - `sonnet` for procedural edits and checklist reviews (`bump-version`, `bump-gradle`, `version-bumped`, `dependency-update`, `move-files`, `which-fixer`, and the `spine-code-review`, `review-docs`, and `gradle-review` agents). - Session model, deliberately, for deep-reasoning work (`pre-pr`, `java-to-kotlin`, `raise-coverage`, `write-docs`, and the `kotlin-engineer` agent). New wrappers extend coverage: agents for `check-links` and `gradle-review`, commands for `check-links`, `which-fixer`, `version-bumped`, and `api-discovery`. The `pre-pr` command now lists the `check-links` dispatch its skill already required. The tier convention, the alias-only rule, and the inline-by-design skills are documented in `docs/authoring-skills.md`. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR standardizes Claude Code wrapper metadata by explicitly assigning model tiers (via aliases) for commands and agents under claude/, adds missing wrappers so all skills have an intentional model decision, and documents the tiering conventions in docs/authoring-skills.md (including a pre-PR validation check).
Changes:
- Adds/updates
model:frontmatter across Claude command and agent wrappers to enforce tier choices (haiku/sonnet/inherit). - Introduces new Claude wrappers for
api-discovery,check-links,which-fixer,version-bumped, plus new reviewer agentscheck-linksandgradle-review. - Updates documentation and the
pre-prwrapper to include thecheck-linksdispatch rule and alias-only validation guidance.
Reviewed changes
Copilot reviewed 18 out of 18 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| docs/authoring-skills.md | Documents Claude wrapper tiering conventions and adds a pre-PR validation bullet for alias-only models. |
| claude/commands/which-fixer.md | New command wrapper with model: sonnet for the which-fixer skill. |
| claude/commands/version-bumped.md | New command wrapper with model: sonnet for the version-bumped skill. |
| claude/commands/update-copyright.md | Sets model: haiku to avoid inheriting the session model for routine work. |
| claude/commands/run-build.md | Sets model: haiku for deterministic build routing. |
| claude/commands/review-docs.md | Sets model: sonnet for procedural documentation review. |
| claude/commands/pre-pr.md | Extends wrapper dispatch rules to include check-links with sentinel short-circuit behavior. |
| claude/commands/move-files.md | Sets model: sonnet for procedural refactoring/rename work. |
| claude/commands/dependency-update.md | Sets model: sonnet for dependency refresh workflow. |
| claude/commands/check-links.md | New command wrapper with model: haiku for Hugo/Lychee link checking. |
| claude/commands/bump-version.md | Sets model: sonnet for version bump workflow. |
| claude/commands/bump-gradle.md | Sets model: sonnet for Gradle wrapper upgrade workflow. |
| claude/commands/api-discovery.md | New command wrapper with model: haiku for deterministic artifact source resolution. |
| claude/agents/spine-code-review.md | Sets agent wrapper model: sonnet instead of inheriting. |
| claude/agents/review-docs.md | Sets agent wrapper model: sonnet instead of inheriting. |
| claude/agents/gradle-review.md | New reviewer agent wrapper with model: sonnet. |
| claude/agents/dependency-audit.md | Replaces dated pinned model ID with alias haiku. |
| claude/agents/check-links.md | New reviewer agent wrapper with model: haiku. |
Comments suppressed due to low confidence (1)
claude/commands/check-links.md:20
- The wrapper’s not-applicable and sentinel instructions don’t match the
check-linksskill: the skill returns a specificAPPROVE — ...line and exits early without writingcheck-links.okwhen no Hugo site exists (skills/check-links/SKILL.md:58-60). Also, the sentinel is written only after running the build/serve/check pipeline (step 8), not for the not-applicable early exit.
- If no Hugo config exists under `docs/` or `site/`, report the check as
not applicable and stop — do not write a `FAIL` sentinel for that case.
- Always tear the Hugo server down (step 8), even when Lychee fails, and
write the `check-links.ok` sentinel to the repository's git directory.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- Fold the new agents' description lines into `>` YAML scalars and tighten the three new command descriptions, so every added line fits the 100-char `max-line-length` from the coding guideline. - Reword the `gradle-review` wrapper to reference the skill's search recipes instead of naming ripgrep directly. - Clarify that the `check-links` command writes its sentinel only when the pipeline actually runs (not on the not-applicable early exit). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit:c5591d4827
ℹ️ 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".
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Both commands follow tightly specified procedures — the bump policy and its deterministic guard script. They move together deliberately: `version-bumped` runs `bump-version` as its recovery path, so the guard must never sit on a lower tier than the action it embeds. The pairing rule is now recorded in docs/authoring-skills.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- Let /version-bumped complete its advertised auto-recovery: drop the wrapper-level pre-commit stop and defer to the bump-version skill's documented commit policy (the git-commit permission gate still applies). - Make the check-links agent end with the reviewers' one-line verdict (APPROVE / REQUEST CHANGES) so pre-pr aggregates it uniformly. - Use the skill's exact not-applicable response line in the check-links command instead of paraphrasing it. - Fold the three overlong allowed-tools lines into `>-` block scalars (parsed value unchanged) to fit the 100-char limit. All wrapper frontmatters now pass a strict YAML parse; the pre-fold single-line gradle-review description genuinely did not (`Scope:` began a nested mapping), confirming the folded form fixed a latent bug. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The pre-PR validation bullet read as if `inherit` were valid on any wrapper; commands inherit the conversation model by omitting the field. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
- Fold every over-limit description and allowed-tools line in the wrappers this PR touches into `>` / `>-` block scalars, wording and parsed values unchanged. - Pre-approve `git fetch` and `git merge-base` for /bump-version — the skill's idempotency gate runs them routinely. `git commit` stays out of the allowlist deliberately: allowed-tools only pre-approves, and commits are intentionally routed through the repo's ask-gated permission prompt plus the wrapper's stop-and-ask step. Body prose over the limit that predates this PR is left to the separate frontmatter-folding follow-up, as is the untouched kotlin-engineer wrapper. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
Spell out the per-entry fields (file, line, before -> after / reason) instead of the bare list names, matching the skill's Report section. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
The not-applicable early exit writes no sentinel, matching the skill's sequencing; the previous wording read as an unconditional final step. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Master's line-wrapping (PR #35) and this branch's model tiers crossed; the merge keeps master's wrapping style everywhere both sides only differed in wrap points, plus this branch's semantic changes. Doc reconciliation: both new sections are kept — "Claude wrappers and model tiers" (this branch) and "Claude wrapper frontmatter" (master). Master's allowed-tools bullet said folding was unverified and must be avoided; this branch has since verified equivalence (strict YAML parse over every wrapper plus live registration of folded commands), so the bullet now sanctions both the single-line and folded forms. The four new commands' short descriptions are folded per master's convention. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
What
Gives every Claude wrapper under
claude/an explicit, alias-based model tier so routine skills stop billing at the session model, and extends wrapper coverage so every skill has a deliberate model decision:haikuupdate-copyright,run-build,bump-version,version-bumped,api-discovery,check-links; agentcheck-linksanddependency-auditsonnetbump-gradle,dependency-update,move-files,review-docs,which-fixer; agentsspine-code-review,review-docs,gradle-reviewinherit)pre-pr,java-to-kotlin,raise-coverage,write-docs; agentkotlin-engineer* newly created wrapper.
The tier convention — aliases only, cheapest tier that runs the skill reliably, and which skills stay inline by design (
author-skill,co-author-docs,kotlin-jvm-tester,kotlin-engineer-as-a-skill) — is documented in a new "Claude wrappers and model tiers" section ofdocs/authoring-skills.md, with a matching pre-PR validation bullet.Why
model:inherits the conversation model, so an Opus-session developer paid top tier for formulaic work such as a copyright-header refresh.dependency-auditagent was already on Haiku but pinned to the dated IDclaude-haiku-4-5-20251001; since consumers float tomaster, a dated pin ages org-wide and breaks on model retirement. It now uses the floatinghaikualias (same model today).check-linksis dispatched bypre-pras a reviewer but had no agent definition, so it ran as an ad-hoc subagent at session price; it also was missing from thepre-prcommand's dispatch list even though the pre-pr skill requires it. Both are fixed.gradle-reviewwas the only reviewer skill without an agent definition.Notes for the reviewer
pre-pris deliberately left without a model: a command's model applies to the turn that runs it, and subagents declaringinherit(thekotlin-engineerreviewer) inherit from that turn — pinning the orchestrator would silently downgrade the deep Kotlin review. This cascade is documented in the new docs section.kotlin-engineeragent keepsinheriton purpose: it hunts coroutine/Flow subtleties where capability pays; in Sonnet sessions it costs Sonnet anyway.bump-versionandversion-bumpedsit onhaikutogether by maintainer decision: both are tightly specified procedures, and the guard (version-bumped) embeds the action (bump-version) as its recovery path, so the pair must always share a tier — recorded in the docs section.claude/layer; the agent-neutralskills/files (also consumed by Codex and Junie) are untouched.skills/<name>/SKILL.mdsources, and thereview-docsagent reviewed the Markdown diff; its findings (akotlin-engineerwrapper-status contradiction, a missingbump-gradletier example, two line-wrap widows, one phrasing nit) are already applied.grepfor dated model IDs is clean), YAML frontmatter shape check across all wrappers, and the new commands/agents registered successfully in a live Claude Code session.🤖 Generated with Claude Code