CAFleet Model List Refresh
Refresh the repository's model list — the per-backend model tables of
skills/cafleet/reference/model-list.md — from the approved official
sources, under explicit maintainer review. The repository file is the release
source: a running Director reads only its deployed skill replica, so a refresh
reaches Directors exclusively through the release/deployment transaction below.
Approved sources (exhaustive allowlist)
Fetch only these five official pages. Search results, third-party price
sites, and social posts are never model-list authority. The first four are
pricing and availability authority; the fifth is capability authority for the
claude backend's context windows and Claude Code model-string syntax, and
is never used to price a model.
| Source |
What it feeds |
URL |
| Anthropic pricing |
claude prices |
https://platform.claude.com/docs/en/about-claude/pricing.md |
| OpenAI pricing |
codex prices |
https://developers.openai.com/api/docs/pricing |
| Codex model availability |
codex availability |
https://learn.chatgpt.com/docs/models.md |
| OpenCode Zen models and pricing |
opencode prices and availability |
https://opencode.ai/docs/zen.md |
| Claude Code model configuration |
claude context windows and [1m] applicability |
https://code.claude.com/docs/en/model-config.md |
Refresh procedure
Fetch all five approved sources. If any source cannot be fetched or
parsed, stop: leave the model list unchanged, report the error, and
let it become stale rather than fabricating values.
Extract pricing facts only: the currently effective standard input and
output prices (USD per MTok) and availability/deprecation qualifiers. Do
not copy long provider text into the repository, and do not present the
pricing pages as benchmark evidence — they are pricing/availability
sources only.
Refresh the claude and codex tables from their provider pricing
pages, and refresh the opencode table with the dedicated procedure
below — the Zen catalog behaves differently from the provider pages, so
follow that procedure exactly. For codex, pricing and availability come
from different pages: price each model from the OpenAI pricing page, but
take Codex availability from the Codex models page
(https://learn.chatgpt.com/docs/models.md) — the table carries only the
models Codex currently offers in its model picker. A model absent there
or demoted to a legacy model (reachable only via codex -m /
config.toml) is removed from the table even when the pricing page
still prices it; legacy models remain manual pass-through --model
values.
Reapply the capability classes explicitly. The Class descriptions
and the most-to-least-capable row ordering are reviewed maintainer
judgment, not provider benchmark claims; changing a class or the ordering
requires reviewed policy approval in the same pull request. Every row
carries both prices from its approved source. Re-derive the Monitor and
reviewer defaults table from the refreshed backend tables, and mirror its
values into each backend section's {monitor_model} and {reviewer_model}
rows (skills/cafleet/reference/coding-agent-overlays.md).
Re-verify every claude row's context window on every refresh, even
when the prices are unchanged. Take each window from the Claude Code model
configuration page's Extended context section and record it in the
claude table's Context column. That page is also the authority for
whether a row's --model value carries the [1m] suffix, which is a
Claude Code model-string suffix stripped before the request reaches the
provider — it is meaningless for the codex and opencode tables, whose
values never carry it. Apply the suffix only where it changes the window a
member actually gets:
- A model the page lists as always running at 1M on the Anthropic API
carries no suffix — the window is already 1M and the suffix is inert.
- A model the page gives no 1M variant carries no suffix.
- A model without 1M support carries no suffix; appending it there is a
malformed value.
- Where the page shows the window is opt-in for the reader's plan, the
suffix belongs in the page's note rather than the row, so the Director
applies it per spawn against the operator's plan instead of every
spawn inheriting a credit-billed window.
A suffixed value must be single-quoted everywhere it appears in a command,
because [1m] is a glob pattern that fails an unquoted zsh invocation.
Propose, then apply atomically. Generate a concise proposed diff and
require explicit maintainer approval before rewriting the tables in
skills/cafleet/reference/model-list.md. Preserve the prescribed preamble
verbatim; update the preamble's last refreshed date only after approval.
That date is part of the page contract — the Director's staleness check
reads it, so every refresh keeps it present and current. A failed refresh
makes no edit.
OpenCode Zen procedure (the opencode table)
The opencode backend is priced by the OpenCode Zen page, and its catalog
behaves differently from the two provider pages: model IDs differ from
display names, the page lists many models while cafleet curates a few, and
free stealth/preview models appear and disappear. On every refresh, even
when the claude/codex prices are unchanged:
- Price from the Zen page only. Zen's own USD-per-MTok rates are the
billing rates for the
opencode backend. Never price a Zen model from the
upstream vendor's page (Anthropic, OpenAI, DeepSeek, …) — the Zen rate is
the one cafleet members are billed at.
- Copy the Zen model ID exactly; never slugify the display name. The
page shows a display name ("GLM 5.2", "Kimi K2.7 Code") and a distinct
model ID (
glm-5.2, kimi-k2.7-code). The row's --model value is
opencode/<zen-model-id> — the literal opencode/ prefix followed by the
ID copied verbatim from the page. A hand-derived slug that does not match
the Zen ID fails at spawn time.
- Re-verify every curated row against the page. For each existing row,
confirm the model is still listed on Zen and its price is current. A
delisted model's row is removed in the same refresh.
- Handle free models by their published price. A model Zen offers free
for a limited time is priced
0.00 in both columns. When the free offer
ends: update the row to the newly published Zen price, or remove the row
if the model disappears or has no published price.
- Keep the table a curated subset. Do not mirror the full Zen catalog —
keep a handful of reviewed models spanning the price range. Adding or
removing a curated model is a reviewed policy change, approved in the same
pull request like any class or ordering change.
Cadence and staleness
Refresh the model list at least every 30 days and whenever the user asks for
a refresh. A stale list disables cost efficiency mode — the Director relays
an operator choice for those spawns — until a maintainer refreshes the model
list, commits the repository source, and completes the release/deployment
transaction.
Release-coupled deployment
There is no model-list-only sync path: a committed source file alone does not
refresh a running Director's asset copy. To deploy a refreshed model list, the
maintainer:
- Bumps the CAFleet release version.
- Builds the wheel and
cafleet-assets-v<version>.zip containing the
repository skills/ tree — the model list rides inside
skills/cafleet/reference/ like every other reference page.
- Publishes the release. Each active backend upgrades to that CLI version and
runs
cafleet setup, which overwrites its installed cafleet skill
replica, model list included.
Ownership boundary
This skill owns model-list maintenance; the CAFleet Director owns per-spawn
selection by reading the list; cafleet member create remains the execution
boundary.
1---2name: cafleet-model-list-refresh3description: Refresh the CAFleet model list at skills/cafleet/reference/model-list.md from the approved official pricing and capability sources. Use when a maintainer asks to refresh, update, or re-verify the model list, its token prices, its context windows, or its freshness, or when a Director reports the list was last refreshed more than 30 days ago. Maintainer-invoked only — never run automatically during a member spawn.4---56# CAFleet Model List Refresh78Refresh the repository's model list — the per-backend model tables of9`skills/cafleet/reference/model-list.md` — from the approved official10sources, under explicit maintainer review. The repository file is the release11source: a running Director reads only its deployed skill replica, so a refresh12reaches Directors exclusively through the release/deployment transaction below.1314## Approved sources (exhaustive allowlist)1516Fetch **only** these five official pages. Search results, third-party price17sites, and social posts are never model-list authority. The first four are18pricing and availability authority; the fifth is capability authority for the19`claude` backend's context windows and Claude Code model-string syntax, and20is never used to price a model.2122| Source | What it feeds | URL |23|---|---|---|24| Anthropic pricing | `claude` prices | `https://platform.claude.com/docs/en/about-claude/pricing.md` |25| OpenAI pricing | `codex` prices | `https://developers.openai.com/api/docs/pricing` |26| Codex model availability | `codex` availability | `https://learn.chatgpt.com/docs/models.md` |27| OpenCode Zen models and pricing | `opencode` prices and availability | `https://opencode.ai/docs/zen.md` |28| Claude Code model configuration | `claude` context windows and `[1m]` applicability | `https://code.claude.com/docs/en/model-config.md` |2930## Refresh procedure31321. **Fetch** all five approved sources. If any source cannot be fetched or33 parsed, **stop**: leave the model list unchanged, report the error, and34 let it become stale rather than fabricating values.352. **Extract pricing facts only**: the currently effective standard input and36 output prices (USD per MTok) and availability/deprecation qualifiers. Do37 not copy long provider text into the repository, and do not present the38 pricing pages as benchmark evidence — they are pricing/availability39 sources only.403. **Refresh the `claude` and `codex` tables** from their provider pricing41 pages, and **refresh the `opencode` table** with the dedicated procedure42 below — the Zen catalog behaves differently from the provider pages, so43 follow that procedure exactly. For `codex`, pricing and availability come44 from different pages: price each model from the OpenAI pricing page, but45 take Codex availability from the Codex models page46 (`https://learn.chatgpt.com/docs/models.md`) — the table carries only the47 models Codex currently offers in its model picker. A model absent there48 or demoted to a **legacy model** (reachable only via `codex -m` /49 `config.toml`) is removed from the table even when the pricing page50 still prices it; legacy models remain manual pass-through `--model`51 values.524. **Reapply the capability classes explicitly.** The `Class` descriptions53 and the most-to-least-capable row ordering are reviewed maintainer54 judgment, not provider benchmark claims; changing a class or the ordering55 requires reviewed policy approval in the same pull request. Every row56 carries both prices from its approved source. Re-derive the *Monitor and57 reviewer defaults* table from the refreshed backend tables, and mirror its58 values into each backend section's `{monitor_model}` and `{reviewer_model}`59 rows (`skills/cafleet/reference/coding-agent-overlays.md`).605. **Re-verify every `claude` row's context window on every refresh**, even61 when the prices are unchanged. Take each window from the Claude Code model62 configuration page's *Extended context* section and record it in the63 `claude` table's `Context` column. That page is also the authority for64 whether a row's `--model` value carries the `[1m]` suffix, which is a65 Claude Code model-string suffix stripped before the request reaches the66 provider — it is meaningless for the `codex` and `opencode` tables, whose67 values never carry it. Apply the suffix only where it changes the window a68 member actually gets:69 - A model the page lists as always running at 1M on the Anthropic API70 carries **no** suffix — the window is already 1M and the suffix is inert.71 - A model the page gives no 1M variant carries **no** suffix.72 - A model without 1M support carries **no** suffix; appending it there is a73 malformed value.74 - Where the page shows the window is opt-in for the reader's plan, the75 suffix belongs in the page's note rather than the row, so the Director76 applies it per spawn against the operator's plan instead of every77 spawn inheriting a credit-billed window.7879 A suffixed value must be single-quoted everywhere it appears in a command,80 because `[1m]` is a glob pattern that fails an unquoted zsh invocation.816. **Propose, then apply atomically.** Generate a concise proposed diff and82 require explicit maintainer approval before rewriting the tables in83 `skills/cafleet/reference/model-list.md`. Preserve the prescribed preamble84 verbatim; update the preamble's *last refreshed* date only after approval.85 That date is part of the page contract — the Director's staleness check86 reads it, so every refresh keeps it present and current. A failed refresh87 makes **no** edit.8889## OpenCode Zen procedure (the `opencode` table)9091The `opencode` backend is priced by the OpenCode Zen page, and its catalog92behaves differently from the two provider pages: model IDs differ from93display names, the page lists many models while cafleet curates a few, and94free stealth/preview models appear and disappear. On **every** refresh, even95when the claude/codex prices are unchanged:96971. **Price from the Zen page only.** Zen's own USD-per-MTok rates are the98 billing rates for the `opencode` backend. Never price a Zen model from the99 upstream vendor's page (Anthropic, OpenAI, DeepSeek, …) — the Zen rate is100 the one cafleet members are billed at.1012. **Copy the Zen model ID exactly; never slugify the display name.** The102 page shows a display name ("GLM 5.2", "Kimi K2.7 Code") and a distinct103 model ID (`glm-5.2`, `kimi-k2.7-code`). The row's `--model` value is104 `opencode/<zen-model-id>` — the literal `opencode/` prefix followed by the105 ID copied verbatim from the page. A hand-derived slug that does not match106 the Zen ID fails at spawn time.1073. **Re-verify every curated row against the page.** For each existing row,108 confirm the model is still listed on Zen and its price is current. A109 delisted model's row is removed in the same refresh.1104. **Handle free models by their published price.** A model Zen offers free111 for a limited time is priced `0.00` in both columns. When the free offer112 ends: update the row to the newly published Zen price, or remove the row113 if the model disappears or has no published price.1145. **Keep the table a curated subset.** Do not mirror the full Zen catalog —115 keep a handful of reviewed models spanning the price range. Adding or116 removing a curated model is a reviewed policy change, approved in the same117 pull request like any class or ordering change.118119## Cadence and staleness120121Refresh the model list at least every 30 days and whenever the user asks for122a refresh. A stale list disables cost efficiency mode — the Director relays123an operator choice for those spawns — until a maintainer refreshes the model124list, commits the repository source, and completes the release/deployment125transaction.126127## Release-coupled deployment128129There is no model-list-only sync path: a committed source file alone does not130refresh a running Director's asset copy. To deploy a refreshed model list, the131maintainer:1321331. Bumps the CAFleet release version.1342. Builds the wheel and `cafleet-assets-v<version>.zip` containing the135 repository `skills/` tree — the model list rides inside136 `skills/cafleet/reference/` like every other reference page.1373. Publishes the release. Each active backend upgrades to that CLI version and138 runs `cafleet setup`, which overwrites its installed `cafleet` skill139 replica, model list included.140141## Ownership boundary142143This skill owns model-list maintenance; the CAFleet Director owns per-spawn144selection by reading the list; `cafleet member create` remains the execution145boundary.