Skill: /model-catalog-refresh
Model preference: #investigate (per horizon_aios_model_prefs.md; overridable by a prompt directive).
Fetch live model data from provider documentation and return a structured catalog
the user (or the model-prefs skill) uses to populate or validate
horizon_aios_model_prefs.local.md. This is a reference document — you, the
agent, perform the fetches and parsing at runtime with your web/bash access. Do
not rely on training-cutoff knowledge of model ids or prices; the entire point is
live data.
Quick Reference
- Purpose: produce a dated, structured catalog of current models + pricing
across Anthropic, OpenAI, Google Gemini, and Ollama, and diff it against an
existing model-preference config.
- Triggers: "refresh model catalog", "update model groups", "check current
models", "what models are current", "validate my model config",
/model-catalog-refresh.
- Companion:
/model-prefs consumes this output to edit the gitignored extend
file. This skill fetches truth; that skill writes config.
When to invoke
Whenever the user wants an up-to-date picture of available models to configure or
sanity-check their groups — e.g. before defining #lowcost/#highcap, after a
provider releases a new model, or to confirm a member id is still valid.
Providers and fetch strategy
Fetch each provider's MODEL LISTING and PRICING separately — they are always two
different pages. Prefer an API/CLI when available over scraping.
1. Anthropic
2. OpenAI
- Preferred: if
OPENAI_API_KEY is set, GET https://api.openai.com/v1/models
and parse directly — more reliable than the docs page.
- Models (fallback): https://developers.openai.com/api/docs/models
- Pricing (scrape; no pricing API): https://openai.com/api/pricing
- Extract: model id, family (gpt-5.x / gpt-oss), open-weight flag, input/output
$/MTok, context window, recommended-for notes.
3. Google Gemini
4. Ollama
- Preferred: if
ollama is on PATH and running, ollama list for what is already
pulled, then ollama show <model> per model for metadata.
- Fallback (no local ollama): fetch https://ollama.com/library and take the top
models by pull count in each relevant category (coding, reasoning, fast/small).
- Extract: exact pull tag (e.g.
qwen2.5-coder:7b), category, VRAM requirement,
parameter count, notable capability notes.
Output schema
Return a plain-text block (not JSON — this lands in config-adjacent context):
Model Catalog —
Anthropic
| model_id | alias | tier | input $/MTok | output $/MTok | ctx | status |
OpenAI
| model_id | family | open_weight | input $/MTok | output $/MTok | ctx | status |
Google
| model_id | tier | input $/MTok | output $/MTok | ctx | ga_or_preview | status |
Ollama (local-available / library-top)
| tag | category | vram | params | notes |
Deprecation / Access Alerts
List any model found suspended, sunset-announced, or access-restricted.
Config Diff (only if a config was provided — see Diff behavior)
Per group in the current config, flag:
- member ids that no longer appear in provider docs
- newer models that better fit the group's intent
- pricing changes vs the member's prior cost
Diff behavior
If the current Horizon AIOS ## Model Groups block is already in context when
invoked, run the Config Diff automatically. If it is not, prompt once:
"Paste your current ## Model Groups block to get a config diff." Do not invent a
config to diff against.
Freshness
- Stamp the output with the fetch date.
- State, per provider, whether you got live data or fell back (scrape / cache /
unavailable).
- If a page is unreachable, say so explicitly for that provider — never return
stale data silently as if it were current.
Populating the config
After presenting the catalog, offer to hand the relevant ids to /model-prefs
(or do it directly if the user asks) to update horizon_aios_model_prefs.local.md.
Use runtime-qualified members: claude:<id|alias> for Anthropic, ollama:<tag>
for local models. Prefer Anthropic aliases (haiku/sonnet/opus/fable) over pinned
full ids unless the user wants a specific version. Never write the base
horizon_aios_model_prefs.md — user choices go only in the extend file.
Known Gotchas
- Ollama tags often omit the size suffix — always use the full tag (
:7b, not
:latest); :latest silently pulls whatever the registry defaults to.
- Google model ids frequently carry date suffixes — never store bare
gemini-3.5-flash without verifying the exact stable string.
- OpenAI open-weight models (
gpt-oss-*) run locally via Ollama/LM Studio AND are
available via the OpenAI API — record both surfaces; they differ in price.
- Anthropic access suspensions (e.g. Fable 5, mid-2026) may not show on the models
overview page — check the changelog and any banner before trusting availability.
- Pricing and model-listing pages are separate fetches for every provider — do
both; a listing without prices is an incomplete catalog.
What this skill must NOT do
- No executable code embedded as the mechanism — you fetch at runtime; the file is
instruction.
- No hardcoded model ids or prices — live fetch only.
- No assumption about which runtime/harness you are in.
Notes for the executing agent
- Run independent provider fetches in parallel where possible; one provider being
down must not block the others.
- This skill is read-only toward provider sources and the base config; the only
thing it may write is the gitignored extend file (and only when the user asks).
- Brains may invoke this — it touches public docs and the user's own extend file
only; no privileged paths.
1---2name: model-catalog-refresh3description: Fetch CURRENT model information from live provider docs (Anthropic, OpenAI, Google Gemini, Ollama) and return a structured catalog the user can use to populate or validate the Horizon AIOS model-preference config. Use when the user types /model-catalog-refresh, or says "refresh model catalog", "update model groups", "check current models", "what models are current", or "validate my model config".4---56# Skill: /model-catalog-refresh78**Model preference:** `#investigate` (per `horizon_aios_model_prefs.md`; overridable by a prompt directive).910Fetch live model data from provider documentation and return a structured catalog11the user (or the `model-prefs` skill) uses to populate or validate12`horizon_aios_model_prefs.local.md`. This is a reference document — you, the13agent, perform the fetches and parsing at runtime with your web/bash access. Do14not rely on training-cutoff knowledge of model ids or prices; the entire point is15live data.1617---1819## Quick Reference2021- **Purpose:** produce a dated, structured catalog of current models + pricing22 across Anthropic, OpenAI, Google Gemini, and Ollama, and diff it against an23 existing model-preference config.24- **Triggers:** "refresh model catalog", "update model groups", "check current25 models", "what models are current", "validate my model config", `/model-catalog-refresh`.26- **Companion:** `/model-prefs` consumes this output to edit the gitignored extend27 file. This skill fetches truth; that skill writes config.2829---3031## When to invoke3233Whenever the user wants an up-to-date picture of available models to configure or34sanity-check their groups — e.g. before defining `#lowcost`/`#highcap`, after a35provider releases a new model, or to confirm a member id is still valid.3637---3839## Providers and fetch strategy4041Fetch each provider's MODEL LISTING and PRICING separately — they are always two42different pages. Prefer an API/CLI when available over scraping.4344### 1. Anthropic45- Models: https://platform.claude.com/docs/en/about-claude/models/overview46- Pricing: https://platform.claude.com/docs/en/about-claude/pricing47- Changelog / notices (for suspensions): check the docs changelog and any banner.48- Extract: full model id string, tier (haiku/sonnet/opus/fable), input & output49 $/MTok, context window, known aliases, deprecation or access-suspension notices.5051### 2. OpenAI52- Preferred: if `OPENAI_API_KEY` is set, `GET https://api.openai.com/v1/models`53 and parse directly — more reliable than the docs page.54- Models (fallback): https://developers.openai.com/api/docs/models55- Pricing (scrape; no pricing API): https://openai.com/api/pricing56- Extract: model id, family (gpt-5.x / gpt-oss), open-weight flag, input/output57 $/MTok, context window, recommended-for notes.5859### 3. Google Gemini60- Models: https://ai.google.dev/gemini-api/docs/models61- Changelog (deprecations): https://ai.google.dev/gemini-api/docs/changelog62- Extract: exact versioned model id (Google uses date suffixes — capture them),63 tier (flash-lite/flash/pro), pricing (note tiered-by-context-length), GA vs64 preview status, shutdown notices.6566### 4. Ollama67- Preferred: if `ollama` is on PATH and running, `ollama list` for what is already68 pulled, then `ollama show <model>` per model for metadata.69- Fallback (no local ollama): fetch https://ollama.com/library and take the top70 models by pull count in each relevant category (coding, reasoning, fast/small).71- Extract: exact pull tag (e.g. `qwen2.5-coder:7b`), category, VRAM requirement,72 parameter count, notable capability notes.7374---7576## Output schema7778Return a plain-text block (not JSON — this lands in config-adjacent context):7980 ## Model Catalog — <YYYY-MM-DD fetched>8182 ### Anthropic83 | model_id | alias | tier | input $/MTok | output $/MTok | ctx | status |8485 ### OpenAI86 | model_id | family | open_weight | input $/MTok | output $/MTok | ctx | status |8788 ### Google89 | model_id | tier | input $/MTok | output $/MTok | ctx | ga_or_preview | status |9091 ### Ollama (local-available / library-top)92 | tag | category | vram | params | notes |9394 ### Deprecation / Access Alerts95 List any model found suspended, sunset-announced, or access-restricted.9697 ### Config Diff (only if a config was provided — see Diff behavior)98 Per group in the current config, flag:99 - member ids that no longer appear in provider docs100 - newer models that better fit the group's intent101 - pricing changes vs the member's prior cost102103---104105## Diff behavior106107If the current Horizon AIOS `## Model Groups` block is already in context when108invoked, run the Config Diff automatically. If it is not, prompt once:109"Paste your current `## Model Groups` block to get a config diff." Do not invent a110config to diff against.111112---113114## Freshness115116- Stamp the output with the fetch date.117- State, per provider, whether you got live data or fell back (scrape / cache /118 unavailable).119- If a page is unreachable, say so explicitly for that provider — never return120 stale data silently as if it were current.121122---123124## Populating the config125126After presenting the catalog, offer to hand the relevant ids to `/model-prefs`127(or do it directly if the user asks) to update `horizon_aios_model_prefs.local.md`.128Use runtime-qualified members: `claude:<id|alias>` for Anthropic, `ollama:<tag>`129for local models. Prefer Anthropic aliases (haiku/sonnet/opus/fable) over pinned130full ids unless the user wants a specific version. Never write the base131`horizon_aios_model_prefs.md` — user choices go only in the extend file.132133---134135## Known Gotchas136137- Ollama tags often omit the size suffix — always use the full tag (`:7b`, not138 `:latest`); `:latest` silently pulls whatever the registry defaults to.139- Google model ids frequently carry date suffixes — never store bare140 `gemini-3.5-flash` without verifying the exact stable string.141- OpenAI open-weight models (`gpt-oss-*`) run locally via Ollama/LM Studio AND are142 available via the OpenAI API — record both surfaces; they differ in price.143- Anthropic access suspensions (e.g. Fable 5, mid-2026) may not show on the models144 overview page — check the changelog and any banner before trusting availability.145- Pricing and model-listing pages are separate fetches for every provider — do146 both; a listing without prices is an incomplete catalog.147148---149150## What this skill must NOT do151152- No executable code embedded as the mechanism — you fetch at runtime; the file is153 instruction.154- No hardcoded model ids or prices — live fetch only.155- No assumption about which runtime/harness you are in.156157---158159## Notes for the executing agent160161- Run independent provider fetches in parallel where possible; one provider being162 down must not block the others.163- This skill is read-only toward provider sources and the base config; the only164 thing it may write is the gitignored extend file (and only when the user asks).165- Brains may invoke this — it touches public docs and the user's own extend file166 only; no privileged paths.