Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Regenerates SDK model constants from the live QVAC registry and opens a [mod] PR. Use when registry models landed and packages/sdk models.ts needs syncing, or when invoking /qv-sdk-update-models. Optional cascade refreshes ai-sdk-provider and sdk-python generated catalogs.
.claude/skills/tetherto-qv-sdk-update-models/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 191% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 1475% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 155% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 155% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 172% | 0% |
Regenerate @qvac/sdk static model constants from the live P2P registry, then open a [mod] PR. Registry sync does not auto-update SDK constants — this skill is the deliberate regen + PR path.
Use when:
are stale.
/qv-sdk-update-models.Do NOT use when:
changes; regen may be a follow-up, not the whole PR).
bun run check-models directly.qv-sdk-changelog after the [mod] PR merges.| Flag | Behavior | |------|----------| | (none) | SDK only: packages/sdk regen + [mod] PR | | --cascade | Also regen @qvac/ai-sdk-provider and packages/sdk-python | | --with-provider | Cascade provider only | | --with-python | Cascade python only (usually after SDK contract:export) | | --check-only | Run check-models and report; do not write or open a PR | | --no-pr | Regen + commit plan only; skip PR creation | | --notask | Allow feat[mod|notask]: … when no ticket is available |
Combine as needed: /qv-sdk-update-models --cascade, /qv-sdk-update-models --check-only.
qvac monorepo root (or resolve paths from it).packages/sdk dependencies installed (bun install in that package if needed).QVAC_REGISTRY_CORE_KEY to target a non-default registry core.--with-python / --cascade: packages/sdk-python/.venv with gen extras(python3 -m venv .venv && .venv/bin/pip install -e ".[gen,dev]").
gh CLI for PR creation (same expectations as qv-sdk-pr-create).Secrets: this skill only needs registry network access. It does not read GH_TOKEN / HF_TOKEN / NPM_TOKEN unless a chained skill does.
explicit user confirmation before regen, commit, push, or gh pr create.
git switch / checkout / stash /pull / merge / rebase without explicit user instruction.
naming.ts, companion logic, schemas, or hand-written APIcode. If those need changes, stop and tell the user this skill is the wrong tool.
baseline CI (same preference as qv-sdk-pr-create).
After a successful bun run update-models in packages/sdk/:
packages/sdk/models/registry/models.tspackages/sdk/models/history/<short-sha>.txt (only when add/update/remove)packages/sdk/contract/models.json (via chained contract:export)packages/sdk/contract/* if export rewrites them — include ifgit status shows them; do not invent diffs.
--with-provider / --cascade)packages/ai-sdk-provider/src/models/constants.tspackages/ai-sdk-provider/models/history/<short-sha>.txt (when delta exists)--with-python / --cascade)packages/sdk-python/src/tetherto/qvac_sdk/_generated/models_registry.py_generated/** files if generate.py rewrites them — include if dirty.If git status shows files outside the active file set, STOP and ask.
QVAC-\d+ / SDK-\d+ from branch name or user message.--notask was passed → use [notask].--notask → ASK for a ticket (or confirm --notask).From monorepo root:
git status -sb and git status --porcelain.expected file set from a prior interrupted run of this skill.
git remote -v) for later PR push (org remote preferred).textPlan: 1. bun run check-models (packages/sdk) 2. bun run update-models (packages/sdk) [needs confirm] 3. [optional] provider / python cascade 4. commit feat[mod] … 5. open PR via qv-sdk-pr-create Ticket: … Cascade: none | provider | python | both
--check-only: run Step 2 only, report, stop.bashcd packages/sdk bun run check-models
| Exit | Meaning | Action | |------|---------|--------| | 0 | Up to date | Report "already synced" and stop (unless user still wants cascade-only — ask) | | 1 | Drift / timeout / error | Read stdout. If it lists new/updated/removed models, continue. If timeout/error, fail-stop | | other | Unexpected | Fail-stop |
Capture Added / Updated / Removed names from the check output when present — useful if history later looks bogus.
After user confirmation:
bashcd packages/sdk bun run update-models
Then:
bashcd packages/sdk bun run contract:check
contract:check must pass (update-models already ran export; this verifies).
Inspect git status. Confirm only the SDK expected file set is dirty.
If --cascade or --with-provider:
bashcd packages/ai-sdk-provider bun run update-models
Note: provider filters engines without OpenAI-shaped endpoints (e.g. VAD). A smaller delta than SDK is expected.
If --cascade or --with-python:
bashcd packages/sdk-python .venv/bin/python3 scripts/generate.py .venv/bin/python3 scripts/generate.py --check
If .venv is missing, fail-stop with the venv setup command from Prerequisites. Do not invent alternate python binaries.
Prefer the newest history file under packages/sdk/models/history/ whose timestamp= is from this run (or the file update-models just printed).
Parse sections:
[added] → ### Added models[updated] → ### Updated models[removed] → ### Removed modelsBogus-history guard: if previous_count=0 and the [added] list is huge relative to a normal incremental sync (e.g. hundreds of names when check-models only reported a handful), do not paste the full history dump into the PR. Fall back to:
check-models / update-models console output, orgit diff on export lines in models.tsDelete empty subsections. Validator requires at least one of Added / Updated / Removed with a fenced code block.
Present:
Default message shapes:
textfeat[mod]: sync model constants from registry
With ticket in branch/PR title later; commit format is prefix[tags]: subject (no ticket in commit). If the user wants the ticket in the commit subject, still keep valid commit format (ticket belongs in the PR title).
Ask: "Commit these files?" — only then:
-F if needed; followrepo bash rules when operating in constrained shells).
git status to verify clean expected state.--no-pr)Chain into qv-sdk-pr-create (read that skill and follow it), with these overrides already decided:
[mod] requiredfeatTICKET feat[mod]: sync model constants from registry (orfeat[mod|notask]: … when --notask)
consumers need updated compile-time constants
models.ts (+ contract / cascade artifacts)via bun run update-models
bun run check-models (exit 0 after regen); bun run contract:check;note cascade checks if run
Still ask before git push / gh pr create (pr-create’s confirmation step).
After success, print the clickable PR URL.
feat[mod]: subjectQVAC-123 feat[mod]: subject or feat[mod|notask]: subject[mod] body must include ## 📦 Models with at least one of Added / Updated /Removed (fenced constant names, one per line)
[api] / [bc] into a puremodel-sync PR (combine tags with | when needed, e.g. [mod|notask])
Validate locally when useful:
bashnode scripts/sdk/validator.cjs --type=commit --msg="feat[mod]: sync model constants from registry"
git status / remotes.update-models if the tree already has a fresh regen from thissession unless the user asks to re-fetch.
Before reporting done:
bun run check-models exits 0 after regen (re-run once to confirm)bun run contract:check exits 0--no-pr / --check-only)/qv-sdk-update-models produced the workbare-sdk deps (only relevant if package.json deps change —not part of a pure model regen).
fork-ci environment on fork PRs.packages/sdk/package.json → update-models / check-modelspackages/sdk/models/update-models/packages/ocr-ggml/.agent/knowledge/registry-models.md (Step 4).cursor/rules/sdk/docs/model-constants-and-sources.mdc.cursor/rules/sdk/commit-and-pr-format.mdc.cursor/skills/qv-sdk-pr-create/SKILL.mdpackages/ai-sdk-provider/models/update-models/README.mdpackages/sdk-python/scripts/generate.py.cursor/rules/devops/agentic-automation.mdc| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 6,503 | 2,575 | -60% | 1 | 1 | 0% | 1,052 | 3,389 | +222% | 0 | 0 | — |
case-06 | fail→pass | 7,609 | 4,062 | -47% | 1 | 1 | 0% | 1,318 | 3,830 | +191% | 0 | 0 | — |
case-02 | fail→fail | 18,974 | 6,244 | -67% | 1 | 1 | 0% | 4,033 | 3,496 | -13% | 0 | 0 | — |
case-03 | fail→fail | 2,896 | 5,180 | +79% | 1 | 1 | 0% | 288 | 3,374 | +1072% | 0 | 0 | — |
case-04 | fail→pass | 2,579 | 4,027 | +56% | 1 | 1 | 0% | 236 | 3,717 | +1475% | 0 | 0 | — |
case-05 | fail→fail | 7,790 | 6,646 | -15% | 1 | 1 | 0% | 1,460 | 3,536 | +142% | 0 | 0 | — |
case-07 | fail→pass | 8,722 | 3,353 | -62% | 1 | 1 | 0% | 1,453 | 3,698 | +155% | 0 | 0 | — |
case-08 | fail→pass | 8,027 | 2,141 | -73% | 1 | 1 | 0% | 1,362 | 3,477 | +155% | 0 | 0 | — |
case-09 | pass→pass | 9,959 | 2,652 | -73% | 1 | 1 | 0% | 1,508 | 3,568 | +137% | 0 | 0 | — |
case-10 | fail→pass | 7,978 | 4,199 | -47% | 1 | 1 | 0% | 1,408 | 3,830 | +172% | 0 | 0 | — |
case-11 | pass→pass | 2,794 | 2,001 | -28% | 1 | 1 | 0% | 384 | 3,429 | +793% | 0 | 0 | — |
case-12 | pass→pass | 9,022 | 2,955 | -67% | 1 | 1 | 0% | 1,433 | 3,659 | +155% | 0 | 0 | — |
case-13 | fail→pass | 8,212 | 4,823 | -41% | 1 | 1 | 0% | 1,258 | 3,843 | +205% | 0 | 0 | — |
case-14 | fail→pass | 10,722 | 3,170 | -70% | 1 | 1 | 0% | 1,832 | 3,672 | +100% | 0 | 0 | — |
case-15 | fail→pass | 11,614 | 1,692 | -85% | 1 | 1 | 0% | 2,026 | 3,407 | +68% | 0 | 0 | — |
case-16 | fail→pass | 10,001 | 2,149 | -79% | 1 | 1 | 0% | 1,938 | 3,466 | +79% | 0 | 0 | — |
case-17 | pass→pass | 7,145 | 2,608 | -63% | 1 | 1 | 0% | 1,240 | 3,524 | +184% | 0 | 0 | — |
case-18 | fail→pass | 12,246 | 4,113 | -66% | 1 | 1 | 0% | 1,965 | 3,783 | +93% | 0 | 0 | — |
case-19 | fail→pass | 11,477 | 1,971 | -83% | 1 | 1 | 0% | 1,724 | 3,368 | +95% | 0 | 0 | — |
case-20 | fail→pass | 5,279 | 2,017 | -62% | 1 | 1 | 0% | 867 | 3,417 | +294% | 0 | 0 | — |
case-21 | fail→pass | 12,597 | 5,282 | -58% | 1 | 1 | 0% | 1,984 | 3,897 | +96% | 0 | 0 | — |
case-22 | pass→pass | 11,141 | 2,985 | -73% | 1 | 1 | 0% | 1,908 | 3,510 | +84% | 0 | 0 | — |
case-23 | fail→pass | 11,608 | 2,920 | -75% | 1 | 1 | 0% | 1,880 | 3,570 | +90% | 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. 23 cases were attempted, and 20 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +61 percentage points is the difference between those two pass rates over the 20 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.