{"id":"87670671-daaa-488c-b814-daa24f067013","slug":"modelscout","kind":"skill","name":"modelscout","summary":"Knows which AI models you actually have, picks the right one for every task, routes it to a best-fit subagent, and proves what that saved. One open Agent Skills plugin for Claude Code, Codex, ChatGPT,","owner":"iknowterry","repoUrl":"https://github.com/iknowterry/modelscout","license":"MIT","licenseTier":"permissive","trust":"community","stars":1,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-07-09T10:36:06.000Z","addedAt":"2026-11-08T07:14:40.286Z","logoUrl":"https://avatars.githubusercontent.com/u/4714377?u=454206c5a9c665069dabacaa2bcf81176e6a43bf&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools","productivity"],"tags":["cost-optimization","token-optimization","ai-agents","claude-code","llm","model-selection","openrouter","chatgpt"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-11-08T07:14:57.416Z","sample":false,"url":"https://conduits.dev/tools/modelscout","language":"Python","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<p align=\"center\"><img src=\"plugins/modelscout/assets/icon.svg\" width=\"112\" alt=\"ModelScout logo\"></p>\n\n# ModelScout 🔭\n\n**Stop paying frontier-model prices for find-and-replace work.**\n**On a subscription? Stop burning your usage limits on it.**\n\nEvery AI subscription and API key you own has a lineup of models behind it —\nand most people run everything on the biggest one. That's like taking a truck\nto buy coffee. Whatever you pay with, the spread is not small:\n\n- **API users** pay in dollars — the price gap between tiers is 5–10×.\n- **Subscribers** (Claude Max/Pro, ChatGPT Plus, Gemini Advanced) pay in\n  **quota**: every frontier-model request burns your rate limit ~5× faster than\n  an economy model doing the same job. Tier-right routing is the difference\n  between coding until midnight and hitting the \"you've reached your limit\"\n  wall at 4pm.\n\n| The task | What most people use | What it needed | Price gap |\n|---|---|---|---|\n| Rename a variable across files | Opus-class ($5/$25 per 1M) | Haiku-class ($1/$5) | **~5×** |\n| Summarize a doc | GPT frontier | A mini/flash model | **~10×** |\n| Actually-hard debugging | ...the big one. Correctly. | The big one | 1× — and ModelScout will say so |\n\n**ModelScout knows which models *you* actually have, picks the right one for\nevery task, and proves what that saved, across every agent you use.**\n\nIt's an open [Agent Skills](https://agentskills.io) plugin. On every task, it\nanswers the question you'd otherwise guess at:\n\n> *\"Which model should I use for this?\"*\n\nThen it acts on the answer: it hands the task to a subagent on that model and\nchecks the result.\n\n**Works in:** Claude Code · Codex · the ChatGPT desktop app · Gemini CLI ·\nHermes Agent · claude.ai. It's one package, installed with each host's own plugin command.\n\n## Why it's different\n\nModel routers exist. Most silently swap the model on every request, from a\nfixed list someone configured. ModelScout is built on three things they don't\ncombine:\n\n- 🔍 **Grounded in what you actually have.** One read-only call per provider\n  (Anthropic, OpenAI, Gemini, OpenRouter), or your declared subscriptions,\n  defines exactly which models are available to you. Prices and capabilities\n  come live from the open [models.dev](https://models.dev) catalog. New models\n  show up with no update, and it never recommends a model you can't use.\n- 📊 **Proof, not estimates.** `modelscout: savings` measures the *subagents'\n  own* token usage from real logs. Routers that only read the main session\n  miss exactly the tokens that moved. It's cost-weighted, and it names the\n  price behind every number. For subscribers, the % saved is quota freed.\n- 🌐 **One brain, every agent.** The same skill, settings and card work in\n  Claude Code, Codex, ChatGPT desktop, Gemini CLI, Hermes and claude.ai. Other\n  routers each serve a single host.\n\nAnd on every task:\n\n- 🎓 **It teaches you the pattern.** The card names the tier and the reason:\n  \"T1 mechanical edit, no reasoning needed, so Haiku clears it.\" After a few\n  weeks you'll tier tasks yourself.\n- ⚡ **It acts, then checks.** It starts a subagent on the best-fit model, and\n  your main model verifies the result before reporting.\n- 🚦 **It knows when NOT to cheap out.** It routes *up* for hard work, and\n  when unsure it biases up. A failed cheap run costs more than the right model\n  the first time.\n- ⏳ **Your rate limits last longer.** Mechanical work on light models leaves\n  your frontier-model quota for the work that needs it.\n\n**No API keys needed for subscribers.** Declare what you have once (\"Claude\nMax + ChatGPT Plus\") and ModelScout advises from that — savings framed in what\nyou actually spend: **tokens and rate-limit headroom**, not dollars.\n\n```\ninventory  →  classify  →  recommend\n(what you    (what the     (cheapest model that\n have)        task needs)   clears the bar — and why)\n```\n\n## What you'll actually see\n\n**You don't have to ask.** Every time you start a new task, ModelScout shows a\nsmall card: what kind of task it is, which model fits it best and why, and\nthen it **just gets on with it**, handing the work to a subagent running that\nmodel:\n\n> **You:** rename `organizerId` to `ownerId` across the codebase and fix imports\n>\n> **Claude:**\n>\n> > `🔭 ModelScout` **T1 mechanical** · rename a field across files\\\n> > Best fit: `Haiku` — pattern edits need no deep reasoning · ~1/5 of Opus quota\\\n> > → ⚡ Routing to a `Haiku` subagent\n>\n> …✓ 43 files updated, verified, imports compile.\n\nIt works in both directions. Ask a Haiku session to debug a race condition and\nthe card says *Best fit: Opus* and routes the work **up** to an Opus subagent.\nWhen your current model already fits, the card is one line:\n> `🔭 ModelScout` **T3 hard reasoning** · `Opus` fits — doing it here\n\nand the work continues. Your main session stays on its model, ready\nfor the next hard thing.\n\n### Choose how it behaves: switch, ask, or stay\n\n| Mode | On a mismatch ModelScout… | Set it with |\n|---|---|---|\n| **auto** (default) | routes the task to a best-fit subagent straight away | `modelscout: auto` |\n| **ask** | pops up a choice first (below) | `modelscout: ask` |\n| **inform** | shows the card and stays on your current model | `modelscout: inform` |\n| **off** | stays silent | `modelscout: off` |\n\nIn **ask** mode you get a real popup, and your answer can become the default:\n\n> ┌─ **ModelScout: T1 mechanical task — pattern edits. Who should do it?** ─┐\n> │  ▸ Run in a Haiku subagent (Recommended)                               │\n> │  ▸ Stay on Opus 5.5                                                    │\n> │  ▸ Always use a Haiku subagent for T1 tasks                            │\n> │  ▸ Always stay for T1 tasks                                            │\n> └────────────────────────────────────────────────────────────────────────┘\n\n**Per-tier defaults** override the mode, for example \"auto-route everything,\nbut always ask me on T3 work\":\n\n```text\nmodelscout: auto\nmodelscout: T3 ask\n```\n\nTyping `modelscout: …` changes the setting instantly. It's handled by the hook,\nso it costs no model turn. `modelscout: status` shows your settings,\n`modelscout: reset` restores the defaults, and **`/modelscout:prefs`** opens\nthe same settings as a popup.\n\n**Guardrails.** Routed work is always verified by your main model before it\nreports back, and redone if it's weak. Destructive or outward-facing steps\n(push, deploy, delete, send) and 1–2 step jobs stay on your main session.\nFollow-ups like \"yes\" or \"continue\" never trigger a card.\n\n## How much does it save? Measured, not guessed\n\nType `modelscout: savings` (or ask *\"how much has ModelScout saved me?\"*).\nThe calculator reads your Claude Code session logs and Hermes Agent's session\ndatabase (read-only) and measures every task ModelScout routed. It reports:\n- **Tokens** handled by the lighter model, counted once per API message\n- **Percentage saved** versus running the same tokens on your main model.\n  It's cost-weighted, so cheap cache reads don't inflate it. For subscribers,\n  this is the share of usage-limit quota freed.\n- **Main-model budget freed,** in tokens\n- **Time:** measured subagent run time. No invented speed-up claims.\n\nExample output (illustrative numbers):\n\n```text\n🔭 ModelScout savings — last 30 days\nRouted down to lighter models: 12 task(s), 3.1M tokens, 41.0 min of subagent time\n  Saved: 76% of what the main model would have used (≈ $4.20 at API prices)\n  Main-model budget freed: ≈ 2.4M tokens' worth\n```\n\n**A real sample.** The author's machine over 120 days, counting every\nlighter-model subagent (`savings.py --days 120 --all`). Routing was done by\nhand or by other tools before v0.3.0 added the ModelScout marker.\n\n| Measured over 120 days (n = 68 routed tasks) | Value |\n|---|---|\n| Tokens handled by lighter models | 47.6M |\n| Saved vs. the main model | **76%** ($53 at API prices) |\n| Main-model budget freed | ≈ 36.4M tokens |\n| Routes | Sonnet→Haiku ×26 · Fable→Sonnet ×28 · Fable→Haiku ×9 · Opus→Haiku ×1 |\n\nAssumes the main model would have used the same number of tokens. Prices come\nfrom the models.dev catalog, falling back to the newest same-family price,\nand the report names every price it used. One person's workload is an\nexample, not a benchmark.\n\n## How to invoke it — prompts that work\n\n**Most of the time you don't.** The card appears on every new task by itself.\nFor questions *about* models, these phrasings trigger the full advisor:\n\n| You want | Say (any language works) |\n|---|---|\n| A recommendation for a task | *\"Which model should I use to [task]?\"* · *\"Is Opus overkill for this?\"* |\n| The budget angle | *\"What's the cheapest model that can [task]?\"* |\n| Help with limits | *\"I keep hitting my usage limit\"* · *\"my quota runs out by 4pm\"* |\n| See your inventory | *\"What models do I have access to?\"* · *\"Refresh my model inventory\"* |\n| **Guaranteed trigger** | Start with the name: *\"**ModelScout**, which model for this refactor?\"* |\n\n## Quickstart\n\n### Claude Code (plugin — richest experience)\n\n```bash\nclaude plugin marketplace add iknowterry/modelscout\n```\n\n```bash\nclaude plugin install modelscout@modelscout\n```\n\nRestart Claude Code. You get the per-task card with auto-routing, the\n`/modelscout:prefs` settings popup and the full advisor skill. No settings\nedits are needed: the hooks register themselves. To update later, run\n`claude plugin marketplace update modelscout`, then\n`claude plugin update modelscout@modelscout`.\n\n<details><summary>Manual install (no plugin system)</summary>\n\n```bash\ngit clone https://github.com/iknowterry/modelscout ~/modelscout\ncp -r ~/modelscout/plugins/modelscout/skills/modelscout ~/.claude/skills/\n```\n\nThen add the per-task hook to `~/.claude/settings.json`:\n\n```json\n{\n  \"hooks\": {\n    \"UserPromptSubmit\": [\n      { \"hooks\": [ { \"type\": \"command\",\n          \"command\": \"bash \\\"$HOME/modelscout/plugins/modelscout/hooks/proactive-check.sh\\\" --host=claude\" } ] }\n    ]\n  }\n}\n```\n</details>\n\n### Claude Chat / Cowork (claude.ai)\n\nAdvisory-only (chat can't run the discovery script), but the same brain:\n\n1. Download the skill zip:\n   **[modelscout-claude-ai.zip](https://github.com/iknowterry/modelscout/releases/latest/download/modelscout-claude-ai.zip)**\n2. In claude.ai or the desktop app: **Settings → Skills → Add** → upload the zip.\n3. Ask any chat: *\"which model should I use for X?\"* — it asks once what\n   subscriptions/keys you have, then recommends with live pricing.\n\n(Or build the zip yourself: `cd adapters/claude-ai && zip -r modelscout-claude-ai.zip modelscout`)\n\n### Codex CLI and the ChatGPT desktop app\n\n```bash\ncodex plugin marketplace add iknowterry/modelscout\n```\n\n```bash\ncodex plugin add modelscout@modelscout\n```\n\nStart a new session. The skill gives you the card and the advice right away.\nFor the per-task hook, run `/hooks` once in Codex and trust ModelScout's hooks;\nCodex skips plugin hooks until you do. In Codex, ModelScout tells you the exact\n`/model` command to run. It only routes automatically where the host lets it\nstart a subagent on a chosen model. (Plugins that contain hooks can't be\nlisted in OpenAI's public plugin directory, so install from this repo.)\n\n### Gemini CLI *(untested: Gemini CLI isn't on the author's machine)*\n\n```bash\ngemini skills install https://github.com/iknowterry/modelscout.git --path plugins/modelscout/skills/modelscout\n```\n\nThat installs the skill. The hook script also understands Gemini's\n`BeforeAgent` event if you add it to `~/.gemini/settings.json`.\n\n### Hermes Agent (Nous Research)\n\nModelScout is a native Hermes plugin (since v0.3.7). It registers:\n- a `pre_llm_call` hook that shows the card on each new task;\n- the `modelscout:modelscout` skill;\n- a `/modelscout` command (`status`, `savings`, `auto`, `ask`, `inform`, `off`, `T1 stay`, …).\n\nIt passes `hermes plugins validate` and `hermes plugins doctor` on Hermes v0.23.0.\n\nOnce it's listed in the Hermes plugin catalog:\n\n```bash\nhermes plugins install modelscout --enable\n```\n\nUntil then, install from a clone:\n\n```bash\ngit clone https://github.com/iknowterry/modelscout ~/modelscout && ln -s ~/modelscout/plugins/modelscout ~/.hermes/plugins/modelscout && hermes plugins enable modelscout\n```\n\nHermes gives subagents a model only through its delegation config. Per-task\nauto-routing therefore needs the `advanced-delegation` plugin's `model_map`.\nWithout it, ModelScout recommends the model and tells you how to switch.\n\n<details><summary>Skill only, or the older shell hook</summary>\n\n- **Skill only:** `hermes skills install iknowterry/modelscout/plugins/modelscout/skills/modelscout`\n- **Shell hook:** the plugin replaces it. On older Hermes versions, add this to `~/.hermes/config.yaml`:\n  ```yaml\n  hooks:\n    pre_llm_call:\n      - command: \"~/modelscout/plugins/modelscout/hooks/proactive-check.sh\"\n  ```\n</details>\n\n### Any other Agent Skills host\n\nCopy `plugins/modelscout/skills/modelscout/` into the host's skills folder.\nFor example, `~/.agents/skills/` is read by both Codex and Gemini CLI. The\nskill is self-contained: heuristics, discovery, settings and savings scripts\nare all inside it.\n\n### ChatGPT web (Custom GPT)\n\nFollow [`adapters/chatgpt/INSTRUCTIONS.md`](adapters/chatgpt/INSTRUCTIONS.md):\nupload `heuristics.md` as knowledge and paste the instructions. This route is\nadvisory-only.\n\n### Your own agent / router\n\n**The inventory JSON is the product.** Run the script, read\n`~/.claude/model-inventory.json`, route however you like:\n\n```jsonc\n{\n  \"generated_at\": \"2026-07-09T07:00:00+00:00\",\n  \"declared_subscriptions\": [\"claude-max\"],        // present for no-key users\n  \"providers\": {\n    \"anthropic\": {\n      \"key_present\": true,\n      \"models\": [\n        {\n          \"id\": \"claude-haiku-4-5\",\n          \"display_name\": \"Claude Haiku 4.5\",\n          \"cost_per_1m\": { \"input\": 1, \"output\": 5, \"cache_read\": 0.1, \"cache_write\": 1.25 },\n          \"limit\": { \"context\": 200000, \"output\": 64000 },\n          \"reasoning\": true, \"tool_call\": true, \"structured_output\": true,\n          \"modalities\": { \"input\": [\"text\", \"image\"], \"output\": [\"text\"] },\n          \"enriched\": true      // false = key can access it, but no catalog metadata\n        }\n      ]\n    }\n  }\n}\n```\n\n## How it works\n\nEverything lives in one portable plugin, [`plugins/modelscout/`](plugins/modelscout), so every host shares one brain:\n\n| Part | What it is |\n|---|---|\n| [`scripts/discover-models.sh`](plugins/modelscout/skills/modelscout/scripts/discover-models.sh) | Builds the inventory from your keys (read-only \"list models\" calls — costs $0, sends no prompts) + caches the models.dev catalog for 7 days |\n| [`references/heuristics.md`](plugins/modelscout/skills/modelscout/references/heuristics.md) | Host-agnostic brain: task tiers T1–T4, capability vetoes, price-band mapping, honesty rules, subscription fallback |\n| [`scripts/prefs.py`](plugins/modelscout/skills/modelscout/scripts/prefs.py), [`scripts/savings.py`](plugins/modelscout/skills/modelscout/scripts/savings.py) | Your switch/ask/stay defaults, and the measured savings report |\n| [`hooks/`](plugins/modelscout/hooks) | One prompt hook that speaks Claude Code, Codex and Gemini CLI, and shows the per-task card |\n\n**Do I need API keys?** No. Keys give the most precise inventory (one read-only\nlisting call, never a prompt, $0). Without keys: inside Claude Code the Claude\nlineup is detected automatically, and everything else works via declared\nsubscriptions in `~/.claude/modelscout-profile.json`.\n\n## The heuristics in 20 seconds\n\n1. Tier the task: **T1** mechanical → **T2** standard coding → **T3** hard\n   reasoning → **T4** frontier.\n2. Veto by capability: context size, vision/PDF, tool use, structured output,\n   latency.\n3. Pick the cheapest available model in the tier's price band\n   (T1 ≤ $5/1M out · T2 $5–20 · T3+ > $20 with `reasoning`).\n4. Honesty: bias **up**-tier when uncertain; never recommend a model that isn't\n   in your inventory; always explain the tier so you learn the pattern.\n\nFull rules: [`heuristics.md`](plugins/modelscout/skills/modelscout/references/heuristics.md).\n\n## Roadmap\n\n- [x] **Savings report:** `modelscout: savings` (v0.3.0)\n- [x] Savings report for Hermes Agent sessions (v0.3.4)\n- [x] Native Hermes plugin: hook, skill and `/modelscout` command (v0.3.7)\n- [ ] Savings report for Codex and Gemini session logs\n- [ ] Azure OpenAI / Bedrock / Vertex key detection\n- [ ] `modelscout` CLI wrapper (`npx modelscout` → prints inventory + advice)\n- [ ] Optional Action endpoint for the Custom GPT adapter\n\n## License\n\nMIT\n"}