Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Bulk-upgrade the model field across .prompt files to the latest version of each prompt's existing family. Use when prompt models have drifted (eg sonnet-4 → sonnet-4-6), after a long pause between framework updates, or as part of a periodic model-freshness pass. Within-family only — never changes provider or tier.
.claude/skills/growthxai-output-dev-upgrade-prompt-models/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -14% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 57% | 0% |
Walks every .prompt file in a project (or scoped subtree), classifies each model into its provider+family bucket, looks up the latest stable model in that bucket via the output-dev-model-selection snapshot, and rewrites the model: line. Provider and family tier are preserved — a Haiku stays a Haiku, an Anthropic stays an Anthropic.
This skill explicitly does not swap providers or escalate tiers (eg Haiku → Sonnet). Those are deliberate human decisions handled separately.
claude-sonnet-4-20250514) have aged outFind every .prompt file under the target scope. Default scope is the project's src/ tree; the user may scope to a single workflow.
For each file, read the YAML frontmatter (between the first pair of --- lines) and pull out provider: and model:.
Match the existing model into a family bucket. Family is preserved across the upgrade.
| Pattern | Family | |---|---| | claude-opus-* | anthropic-opus | | claude-sonnet-* | anthropic-sonnet | | claude-haiku-* | anthropic-haiku | | gpt-*-pro | openai-pro | | gpt-*-mini | openai-mini | | gpt-*-nano | openai-nano | | gpt-N.M (no suffix) | openai-default | | gemini-*-flash-lite* | google-flash-lite | | gemini-*-flash* | google-flash | | gemini-*-pro* | google-pro |
If a model doesn't match any pattern, skip the file and log a warning. Do not guess.
For each prompt, find the latest stable model in the same family by following output-dev-model-selection — fetch its snapshot, apply its filter rules (skip preview/alpha/beta, prefer unversioned aliases), and translate the chosen id to prompt-file form.
Use this family → snapshot-key + id regex map to pin the lookup to the existing tier:
| Family | Snapshot key | id regex | |---|---|---| | anthropic-opus | anthropic | claude-opus- | | anthropic-sonnet | anthropic | claude-sonnet- | | anthropic-haiku | anthropic | claude-haiku- | | openai-pro | openai | -pro$ | | openai-default | openai | ^openai/gpt-[0-9.]+$ | | openai-mini | openai | -mini$ | | openai-nano | openai | -nano$ | | google-pro | google | -pro (excluding -flash) | | google-flash | google | -flash$\|-flash-[0-9] | | google-flash-lite | google | -flash-lite |
If no stable match exists for a family (only pre-release entries available), surface that to the user and skip the file rather than guessing or downgrading to a different family.
Bail loudly on a failed snapshot. If the snapshot fetch itself returned nothing — network down, gateway shape changed, curl or jq missing — abort the run before Step 5. Do not continue with an empty snapshot and report "no upgrades needed", because that lies: the prompts weren't actually checked. Tell the user the snapshot fetch failed, point them at the manual-fallback steps in output-dev-model-selection, and exit.
Build a per-file report comparing the current model to the resolved latest:
src/workflows/foo/prompts/bar@v1.prompt claude-sonnet-4-20250514 → claude-sonnet-4-6
src/workflows/foo/prompts/baz@v1.prompt claude-haiku-4-5 ✓ already latestPrint the full report. Wait for explicit user confirmation before writing. In CI / non-interactive contexts, default to dry-run.
For each confirmed file, edit only the YAML frontmatter:
model: line with the resolved latest ID.# current as of YYYY-MM-DD … comment is present (the convention used in output-dev-prompt-file examples and CLI scaffolds), update its date to today's (date +%Y-%m-%d). Match the comment by the literal current as of prefix and only rewrite the date — leave the trailing text intact.provider:, temperature:, maxTokens:, providerOptions:, and the message body untouched.Refreshing the dated comment in the same edit keeps the "as of" convention coherent — without it, an upgraded prompt would have a fresh model paired with a stale date.
After the batch:
npm run output:worker:build).The Output SDK doesn't validate prompt model IDs at build time (sdk/llm/src/ai_model.js) — invalid IDs only surface at first run. If smoke-tests are available, run at least one workflow per upgraded family.
output-dev-prompt-file.claude-sonnet-4-20250514 becomes the unversioned alias claude-sonnet-4-6. If the pin was load-bearing for reproducibility, surface that and skip the file.@vertex and bedrock namespace suffixes. Models like claude-sonnet-4-20250514@vertex or anthropic.claude-sonnet-4-20250514-v1:0 need manual upgrade. The AI Gateway listing covers direct provider IDs only.calculateLLMCallCost may return total: null for the brand-new model until models.dev catches up. The runtime call still works.output-dev-model-selection — canonical snapshot + selection rules this skill consumesoutput-dev-prompt-file — .prompt file structure| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 11,912 | 6,986 | -41% | 1 | 1 | 0% | 1,737 | 2,864 | +65% | 0 | 0 | — |
case-02 | pass→pass | 7,493 | 4,943 | -34% | 1 | 1 | 0% | 1,195 | 2,587 | +116% | 0 | 0 | — |
case-03 | fail→pass | 13,981 | 3,729 | -73% | 1 | 1 | 0% | 2,074 | 2,303 | +11% | 0 | 0 | — |
case-04 | fail→pass | 11,128 | 3,511 | -68% | 1 | 1 | 0% | 1,622 | 2,328 | +44% | 0 | 0 | — |
case-05 | fail→pass | 11,656 | 4,516 | -61% | 1 | 1 | 0% | 1,775 | 2,389 | +35% | 0 | 0 | — |
case-06 | fail→fail | 4,264 | 3,755 | -12% | 1 | 1 | 0% | 758 | 2,386 | +215% | 0 | 0 | — |
case-07 | fail→pass | 15,213 | 3,157 | -79% | 1 | 1 | 0% | 2,574 | 2,223 | -14% | 0 | 0 | — |
case-08 | pass→pass | 4,320 | 3,124 | -28% | 1 | 1 | 0% | 624 | 2,315 | +271% | 0 | 0 | — |
case-09 | pass→pass | 12,955 | 2,955 | -77% | 1 | 1 | 0% | 1,765 | 2,152 | +22% | 0 | 0 | — |
case-10 | fail→pass | 9,709 | 3,901 | -60% | 1 | 1 | 0% | 1,552 | 2,442 | +57% | 0 | 0 | — |
case-11 | fail→pass | 17,281 | 7,443 | -57% | 1 | 1 | 0% | 3,097 | 3,054 | -1% | 0 | 0 | — |
case-12 | fail→fail | 9,111 | 1,527 | -83% | 1 | 1 | 0% | 1,348 | 1,953 | +45% | 0 | 0 | — |
case-13 | fail→pass | 8,557 | 2,709 | -68% | 1 | 1 | 0% | 1,211 | 2,164 | +79% | 0 | 0 | — |
case-14 | fail→pass | 8,757 | 1,404 | -84% | 1 | 1 | 0% | 1,309 | 1,966 | +50% | 0 | 0 | — |
case-15 | fail→pass | 8,786 | 2,538 | -71% | 1 | 1 | 0% | 1,535 | 2,190 | +43% | 0 | 0 | — |
case-16 | fail→pass | 10,168 | 3,557 | -65% | 1 | 1 | 0% | 1,540 | 2,428 | +58% | 0 | 0 | — |
case-17 | pass→pass | 10,625 | 3,664 | -66% | 1 | 1 | 0% | 1,688 | 2,254 | +34% | 0 | 0 | — |
case-18 | pass→pass | 9,430 | 2,110 | -78% | 1 | 1 | 0% | 1,385 | 2,041 | +47% | 0 | 0 | — |
case-19 | pass→pass | 8,836 | 4,799 | -46% | 1 | 1 | 0% | 1,438 | 2,478 | +72% | 0 | 0 | — |
case-20 | fail→pass | 16,818 | 6,825 | -59% | 1 | 1 | 0% | 2,881 | 2,923 | +1% | 0 | 0 | — |
case-21 | fail→pass | 9,857 | 3,685 | -63% | 1 | 1 | 0% | 1,469 | 2,365 | +61% | 0 | 0 | — |
case-22 | fail→pass | 16,819 | 10,807 | -36% | 1 | 1 | 0% | 2,988 | 3,587 | +20% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +59 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.