Updates model catalogs and cheapest-model references for all CLI backends (copilot, agy, claude, codex, llama). Researches current model IDs and pricing from official sources, updates the per-CLI JSON files, refreshes cheapest_models.json/md if the cheapest pick changed, then propagates all copies via sync_cheapest_models.py. Trigger with "update cli models", "refresh model prices", "model costs are stale", "sync model catalog", or "update copilot/agy/claude model list".
Scanned 9/2/2026
Install to Claude Code
npx -y skills add richfrem/agent-plugins-skills --skill update-cli-models --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Update Cli Models?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/richfrem-update-cli-models)More formats (shields.io, HTML) on the badges page.
---
name: update-cli-models
plugin: cli-agents
description: >
Updates model catalogs and cheapest-model references for all CLI backends
(copilot, agy, claude, codex, llama). Researches current model IDs and
pricing from official sources, updates the per-CLI JSON files, refreshes
cheapest_models.json/md if the cheapest pick changed, then propagates all
copies via sync_cheapest_models.py. Trigger with "update cli models",
"refresh model prices", "model costs are stale", "sync model catalog",
or "update copilot/agy/claude model list".
argument-hint: "[cli-name or 'all']"
allowed-tools: Bash, Read, Write
---
# update-cli-models: Model Catalog Update Protocol
When triggered, **execute all steps below in order**. This is an active update
run — not a reference. Fetch live data, diff against current JSON files,
write changes, and sync at the end.
---
## Reference Files (master copies — only these are ever edited directly)
| File | CLI | Key field |
|---|---|---|
| `plugins/cli-agents/references/copilot-models.json` | `copilot` | `cli_id` uses **dot** notation e.g. `claude-sonnet-4.6` |
| `plugins/cli-agents/references/agy-models.json` | `agy` | Gemini models with thinking levels |
| `plugins/cli-agents/references/claude-models.json` | `claude` | `cli_id` uses **dash** notation e.g. `claude-sonnet-5` — more models than Copilot |
| `plugins/cli-agents/references/codex-models.json` | `codex` | OpenAI models via codex CLI |
| `plugins/cli-agents/references/cheapest_models.json` | all | **Master** cheapest pick per backend |
| `plugins/cli-agents/references/cheapest_models.md` | all | **Master** human-readable cheapest + Copilot tier table |
> Copies under individual skills are **never edited directly** — the sync script handles them.
---
## Step 1 — Fetch current data from official sources
Fetch each source using `read_url_content`. Use the markdown API endpoints
where available — do NOT scrape raw HTML.
| CLI | Fetch URL |
|---|---|
| `copilot` pricing | `https://docs.github.com/api/article/body?pathname=/en/copilot/reference/copilot-billing/models-and-pricing` |
| `copilot` model IDs | `https://docs.github.com/api/article/body?pathname=/en/copilot/reference/ai-models/supported-models` |
| `agy` (Gemini) | `https://ai.google.dev/pricing` |
| `claude` | `https://platform.claude.com/docs/en/about-claude/models/overview` |
| `codex` (OpenAI) | Try `https://openai.com/api/pricing/` — if 403, use `search_web` for "OpenAI API pricing [current year] per million tokens" |
For each source extract:
- Exact CLI identifier (not display name)
- Input / output price per 1M tokens
- Cached input price
- Cache write cost (Anthropic only)
- Context window (if available)
- Long context pricing tiers and thresholds
- Status: GA / preview / withdrawn / deprecated
---
## Step 2 — Diff against current JSON and update
For each CLI backend, compare fetched data to the current JSON:
**New model?** → Add full entry to `models[]` array, add to appropriate `cost_tiers` bucket.
**Price changed?** → Update `pricing_usd_per_1m` and `credits_per_1m` fields.
**Model withdrawn/deprecated?** → Set `"status": "withdrawn"` or `"status": "deprecated"`, `"available": false`. Do NOT delete the entry.
**Long context tier missing?** → Add `long_context_pricing_usd_per_1m` field with `threshold_note`.
**After any changes**, update `_meta.updated` to today's date on that JSON file.
### CLI-specific rules
- **copilot**: Claude IDs use **dots** (`claude-sonnet-4.6`). Prices in AI Credits (`credits_per_1m`). See `_meta.credits_formula`.
- **claude**: Claude IDs use **dashes** (`claude-sonnet-5`). Has more models than Copilot — the files intentionally differ.
- **agy**: Each thinking level (Low/Med/High) is a separate `cli_id` entry. Do not collapse them.
- **codex**: OpenAI models only. Matches OpenAI API pricing (not Copilot AI Credits).
---
## Step 3 — Check if cheapest pick has changed
Compare current `cheapest_models.json` entries against what Step 1 found:
| CLI | Current cheapest | Verification question |
|---|---|---|
| `copilot` | `gpt-5.4-nano` (20 cr/1M input) | Is there anything cheaper in the catalog? |
| `agy` | `gemini-3.5-flash` (Low) | Is Flash (Low) still the cheapest Gemini? |
| `claude` | `claude-haiku-4-5` ($1/1M input) | Is Haiku still cheapest current Claude? |
| `codex` | `gpt-5-mini` ($0.25/1M input) | Is there anything cheaper? |
| `llama` | `gemma-4-12b` (free, self-hosted) | Always free — no change expected |
If cheapest changed for any CLI:
1. Edit `plugins/cli-agents/references/cheapest_models.json` — update `model` and `description`
2. Edit `plugins/cli-agents/references/cheapest_models.md` — update main table row; if Copilot changed, update the Copilot tiers table too
---
## Step 4 — Run sync script
After ALL JSON updates are done, run:
```bash
python3 plugins/cli-agents/scripts/sync_cheapest_models.py
```
Verify output shows `updated: N files` with no errors. This propagates the
master `cheapest_models.json` and `.md` to all copies across the repo.
---
## Step 5 — Report
Summarise what changed:
```
✅ update-cli-models complete — [DATE]
Updated JSON files:
- copilot-models.json: [N new models, M price changes]
- agy-models.json: [changes or "no changes"]
- claude-models.json: [changes or "no changes"]
- codex-models.json: [changes or "no changes"]
Cheapest model changes:
- [cli]: [old model] → [new model] (or "no changes")
Sync: [N] copies of cheapest_models updated across repo.
```
---
## Common Failures
- **Display name vs CLI ID**: Copilot shows "GPT-5.4 nano" — CLI arg is `gpt-5.4-nano`. Always use CLI identifier.
- **Dot vs dash notation**: `claude-sonnet-4.6` (Copilot) ≠ `claude-sonnet-4-6` (direct API). Wrong notation silently fails at runtime.
- **agy thinking levels**: `gemini-3.5-flash` (medium) ≠ `gemini-3.5-flash-low`. Separate `cli_id` entries.
- **Long context pricing**: Always capture both tiers when a model has them.
- **OpenAI 403**: `openai.com/api/pricing/` blocks fetchers. Use `search_web` fallback.
- **Symlinks**: Some copies of `cheapest_models.json` are symlinks — `sync_cheapest_models.py` skips them automatically.
- **Do not delete entries**: Mark withdrawn models with `"available": false`, `"status": "withdrawn"`. Deletion breaks history.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!