validate-model
Skill1 starsChanged 2 months agoApache-2.0View on GitHub
Validate a model entry (or every model in a provider) in apps/sim/providers/models.ts against the provider's live API docs (no hallucination — reports what cannot be verified)
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 7 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Cite every fact: Every value in the report must show the source URL it was checked against.
- Very specific: line 21
When invoked as /validate-model <provider> [model-id]:
- Very specific: line 23
Read the target entries from models.ts
- Distinctive: line 26
Run the checklist below per model
- Very specific: line 30
If model-id is omitted, validate every model in the provider.
- Very specific: line 38
Use the canonical provider URL table in the add-model skill (.agents/skills/add-model/SKILL.md), Step 1, as the single source of truth — …
- Distinctive: line 42
If a fetch fails (404, timeout, paywall), record the URL attempted and mark dependent fields UNVERIFIED.
- Distinctive: line 136
After reporting, ask: *"Want me to fix the critical and warning items?
- Distinctive: line 165
If, after fetching the documented sources, a field cannot be confirmed:
- Distinctive: line 169
Do NOT mark the validation as passed
- Distinctive: line 170
Ask the user for a docs URL or guidance before changing anything
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Validate Model Skill
You audit one or more model entries in apps/sim/providers/models.ts against the provider's official live API docs. Hallucinated pricing and capabilities are the #1 failure mode in this file. Every numeric and capability claim must be re-derived from a live web fetch in this session — not from memory, not from training data, not from the user's marketing email.
Hard rules (do not skip)
- Live-fetch or report unverified. Each field must be backed by a live WebFetch in this session. If you cannot reach an authoritative URL for a field, mark it UNVERIFIED in the report — do not silently confirm it from memory.
- Cite every fact. Every value in the report must show the source URL it was checked against. No URL → mark UNVERIFIED.
- Two-source rule for pricing. Cross-check input/output/cached against at least one secondary source (OpenRouter, Artificial Analysis, CloudPrice). If sources disagree, the provider's own docs win — flag the disagreement.
- Inspect provider implementation before flagging capability mismatches. A capability flag in
models.tsis dead unless the provider's code underapps/sim/providers/{provider}/consumes it (see Consumption Matrix below). Setting a flag the provider ignores is a warning, not a critical. - Never auto-fix without printing the diff. Show the user the proposed diff before applying. Get confirmation.
Your Task
When invoked as /validate-model <provider> [model-id]:
- Read the target entries from
models.ts - Live-fetch the provider's official models, pricing, and capability/reasoning pages + at least one secondary source for pricing
- Inspect the provider implementation to know which flags are actually consumed
- Run the checklist below per model
- Report findings (critical / warning / suggestion / unverified) with every cell linked to its source URL
- Offer to fix; on confirm, edit
models.tsin a single pass and re-lint
If model-id is omitted, validate every model in the provider.
Step 1: Read entries from models.ts
Capture per model: id, full pricing, full capabilities, contextWindow, releaseDate, recommended, speedOptimized, deprecated.
Step 2: Live-fetch authoritative sources
Use the canonical provider URL table in the add-model skill (.agents/skills/add-model/SKILL.md), Step 1, as the single source of truth — fetch the models index, pricing, and reasoning/parameter caveats pages listed there for the target provider.
Secondary cross-check (use at least one): OpenRouter, Artificial Analysis, CloudPrice.
If a fetch fails (404, timeout, paywall), record the URL attempted and mark dependent fields UNVERIFIED.
Step 3: Build the consumption map for this provider
Re-grep before trusting the snapshot below:
rg "reasoningEffort|reasoning_effort" apps/sim/providers/<provider>/
rg "verbosity" apps/sim/providers/<provider>/
rg "request\.thinking|thinking:" apps/sim/providers/<provider>/
rg "supportsNativeStructuredOutputs|nativeStructuredOutputs" apps/sim/providers/<provider>/Snapshot (verify before relying):
| Capability | Consumed by |
reasoningEffort | openai/core.ts, azure-openai, anthropic/core.ts (mapped via thinking), gemini/core.ts |
verbosity | openai/core.ts, azure-openai/index.ts |
thinking | anthropic/core.ts, gemini/core.ts |
nativeStructuredOutputs | anthropic/core.ts, fireworks/index.ts, openrouter/index.ts |
computerUse | anthropic/core.ts |
temperature | All providers (passthrough) |
A flag set in models.ts but not in the consumption list for this provider = warning: dead flag.
Step 4: Run the checklist
For each model, evaluate every row. Statuses: ✓ matches docs, ✗ disagrees, ⚠️ single-source, ❓ UNVERIFIED (could not fetch).
Identity
idexactly matches provider's API model identifier (case, dots, dashes, prefix for resellers)releaseDatematches launch announcementdeprecated: trueset if provider has announced retirement (or removed from active list)
Pricing (per 1M tokens, USD)
pricing.inputmatches provider pricing pagepricing.outputmatches provider pricing pagepricing.cachedInputmatches provider's documented cached/prompt-cache rate (or is correctly omitted if no caching offered)pricing.updatedAtis recent — warn if older than 60 days
Context & output limits
contextWindowmatches docs (in tokens)capabilities.maxOutputTokensmatches documented output cap (or is correctly omitted if "no output limit")
Capabilities (each must be DOCUMENTED-AS-SUPPORTED and CONSUMED-BY-PROVIDER-CODE)
temperature— provider accepts it for this model (reasoning-always-on models often reject)reasoningEffort.values— list matches docs; omitted for always-reasoning models that reject the parameter (e.g., grok-4.3, where xAI docs explicitly statereasoning_effortis not supported). Verify per model — some always-reasoning models (e.g., OpenAI's o-series) DO acceptreasoning_effortand should keep the flag.verbosity.values— only on OpenAI gpt-5.x family; values match docsthinking.levels+thinking.default— only on Anthropic/Gemini; values match docsthinking.streamed— REQUIRED on Anthropic-family thinking models ('full'for generations returning full thinking deltas,'summary'for omitted-display generations like Opus 4.7+/Sonnet 5/Fable 5 where Sim requestsdisplay: 'summarized'); verify against the provider's thinking-display docs. After any change, runbun run agent-stream-docs:generateso the Agent block docs table stays in sync (CI diffs it)nativeStructuredOutputs— only on anthropic/fireworks/openrouter; provider must document Structured Outputs / JSON-mode for this modeltoolUsageControl— provider supportstool_choicesemanticscomputerUse— provider implements computer-use loop AND model is a computer-use SKUdeepResearch— only on actual deep-research SKUsmemory: false— only when the model genuinely cannot maintain conversation history
Flags
recommended: true— at most one or two per provider; should be current flagshipspeedOptimized: true— only on smallest/fastest tier (nano / flash-lite / haiku class)
Hosting / billing
- If the model is under
openai/anthropic/google, it is automatically ingetHostedModels()→ served with Sim's rotating key and billed viashouldBillModelUsage(). Confirm that is the intent (a BYOK-only model parked under one of these providers is a billing bug — warning). - If the model is hosted, the deployment is expected to have its
{PREFIX}_COUNT/{PREFIX}_1..Nenv vars set (ops concern; note if it looks unset for a model claiming hosted support).
Step 5: Report (mandatory format)
For each model, emit a table with one row per checklist item. Every row that claims ✓ must have a URL.
### Validation — <model-id>
| Field | Repo | Live docs | Source URL | Status |
|---|---|---|---|---|
| `input` | $1.25/M | $1.25/M | https://docs.x.ai/... | ✓ |
| `cachedInput` | $0.50/M | $0.20/M | https://cloudprice.net/... | ✗ stale (price cut not picked up) |
| `reasoningEffort` | low/medium/high | rejected by API | https://docs.x.ai/.../reasoning | ✗ inert — selecting silently no-ops |
| `contextWindow` | 1,000,000 | 1,000,000 | https://docs.x.ai/... + https://openrouter.ai/... | ✓ (2 sources) |
| `releaseDate` | 2026-04-30 | not found in scraped pages | _attempted: docs.x.ai, x.ai/news_ | ❓ UNVERIFIED |
**Findings**
- 🔴 critical — `cachedInput` is wrong: docs say $0.20/M, repo has $0.50/M
- 🟡 warning — `reasoningEffort` is set but provider rejects it for this model (xAI docs explicitly: "reasoning_effort is not supported by grok-4.3")
- 🔵 suggestion — `pricing.updatedAt` is 90 days old; refresh
- ❓ unverified — `releaseDate` could not be confirmed from any fetched page; ask user
**Disagreements between sources**
- _none_ OR _OpenRouter says $X, provider docs say $Y — went with provider docs_End each multi-model run with a summary count: N models checked · X critical · Y warnings · Z suggestions · W unverified.
Step 6: Offer to fix
After reporting, ask: "Want me to fix the critical and warning items? I'll print the diff first." On yes:
- Print the proposed diff (do not apply yet)
- Get user confirmation
- Edit
models.tsin a single pass - Run
bun run lint - Re-run only the failed rows of the checklist on the new state
Severity definitions
- 🔴 critical — wrong number or wrong identifier that misleads users about cost or breaks API calls. Examples: incorrect pricing, wrong model id, wrong context window, capability the API rejects.
- 🟡 warning — dead code or internal inconsistency. Examples: capability flag the provider ignores, multiple
recommended: trueper provider,pricing.updatedAt>60 days old, missingdeprecated: trueon retired model. - 🔵 suggestion — style/consistency. Examples: field order, missing
speedOptimizedon a clearly smallest-tier model. - ❓ unverified — could not fetch an authoritative source for this field. Surface it; never silently confirm.
Common bugs this skill catches
- Pricing drift after a provider price cut (very common — providers cut quarterly)
reasoningEffortset on always-reasoning models that reject the parameter (grok-4.3, o3-pro pattern)nativeStructuredOutputsset on providers that don't consume the flag (dead)thinkingset on non-Anthropic/non-Gemini providersverbosityset on non-gpt-5.x models- Wrong context window (e.g., 128k claimed vs 200k actual)
- Stale
pricing.updatedAt - Multiple
recommended: trueper provider after a flagship swap - Missing
deprecated: trueon retired models (e.g., the xAI batch retiring May 15, 2026)
What "I cannot verify this" looks like
If, after fetching the documented sources, a field cannot be confirmed:
- Mark the row ❓ UNVERIFIED with the URL(s) attempted
- Surface it in the Findings section with severity ❓
- Do NOT mark the validation as passed
- Ask the user for a docs URL or guidance before changing anything
The skill is allowed to say "I could not verify the cached input price for grok-4.3 from the official xAI docs in this session — I attempted [URLs] without finding the value. Third-party sources [URL1, URL2] both report $0.20/M. Confirm before I update." That is correct behavior. Hallucinating a number is not.
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- simstudioai/sim★ 30k88% same
Wrote their own version · 1
- alos-source/openSCADSkill★ 3same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository54 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- .cursor/rules/constitution.mdcCursor rule
- .cursor/rules/emcn-components.mdcCursor rule
- .cursor/rules/global.mdcCursor rule
- .cursor/rules/landing-seo-geo.mdcCursor rule
- .cursor/rules/sim-architecture.mdcCursor rule
- .cursor/rules/sim-components.mdcCursor rule
- .cursor/rules/sim-hooks.mdcCursor rule
- .cursor/rules/sim-imports.mdcCursor rule
- .cursor/rules/sim-integrations.mdcCursor rule
- .cursor/rules/sim-queries.mdcCursor rule
- .cursor/rules/sim-sandbox.mdcCursor rule
- .cursor/rules/sim-stores.mdcCursor rule
- .cursor/rules/sim-styling.mdcCursor rule
- .cursor/rules/sim-testing.mdcCursor rule
- .cursor/rules/sim-typescript.mdcCursor rule
- .cursor/rules/sim-ui-copy.mdcCursor rule
- add-block-previewSkill
- add-blockSkill
- add-column-typeSkill
- add-connectorSkill
- add-enrichmentSkill
- add-feature-flagSkill
- add-hosted-keySkill
- add-integrationSkill
- add-managed-cliSkill
- add-modelSkill
- add-toolsSkill
- add-triggerSkill
- babysitSkill
- cleanupSkill
- councilSkill
- db-migrateSkill
- design-taste-frontendSkill
- emcn-design-reviewSkill
- emil-design-engSkill
- make-interfaces-feel-betterSkill
- memory-load-checkSkill
- migrate-application-operationSkill
- react-query-best-practicesSkill
- shipSkill
- tool-registry-boundarySkill
- v2-api-conventionsSkill
- validate-connectorSkill
- validate-integrationSkill
- validate-triggerSkill
- you-might-not-need-a-callbackSkill
- you-might-not-need-a-commentSkill
- you-might-not-need-a-memoSkill
- you-might-not-need-an-effectSkill
- you-might-not-need-stateSkill
- you-might-not-need-url-stateSkill
- add-settings-pageSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

