models.json may describe native, upstream model capabilities with an optional
per-model object:
"native_capabilities": {
"web_search": true
}native_capabilities.web_search is deliberately three-state:
true: model-level evidence or an explicit, recorded maintainer declaration identifies the exact provider/model pair as supporting native web search.false: reliable model-level evidence explicitly says the exact model cannot invoke that tool.- absent: unknown. Absence must not be interpreted as
false.
This is model metadata, not a provider-wide default. Do not infer support from a provider name, model-family substring, nearby model, input modalities, or a newer synthetic/future-looking model ID. Maintainer declarations are explicit catalog snapshots, not wildcard rules or claims of live verification. Native support also does not guarantee that every proxy, API protocol, account, plan, region, or request path exposes or successfully executes the capability.
The repository's codex_client_models.json is the
model-level Codex client template. An exact slug match with
supports_search_tool: true is the evidence for the following catalog entries:
| Catalog section | web_search: true model IDs |
|---|---|
codex-free |
gpt-5.6-terra, gpt-5.6-luna, codex-auto-review |
codex-team |
gpt-6-astra, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, codex-auto-review |
codex-plus |
gpt-5.3-codex-spark, gpt-6-astra, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, codex-auto-review |
codex-pro |
gpt-5.3-codex-spark, gpt-6-astra, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, codex-auto-review |
gpt-reserve appears in the client template but not in models.json, so no
catalog entry is created for it. No model currently has an evidence-backed
web_search: false mapping.
The exact assertions and provenance are recorded in
native-capabilities-evidence.json:
| Catalog section | Exact model ID | Declaration | Evidence |
|---|---|---|---|
claude |
claude-opus-5 |
true |
Anthropic's Web search tool documentation includes native search requests with this exact model, including web_search_20250305. |
claude |
claude-opus-5-5 |
true |
Maintainer declaration for Anthropic-native Claude; Antigravity-hosted Claude remains unsupported. |
claude |
claude-sonnet-5-5 |
true |
Maintainer declaration for Anthropic-native Claude; Antigravity-hosted Claude remains unsupported. |
claude |
claude-haiku-5-5 |
true |
Maintainer declaration for Anthropic-native Claude; Antigravity-hosted Claude remains unsupported. |
xai |
grok-4.6 |
true |
The Grok 4.6 model page lists web search; the official Responses examples use this exact ID with web_search. |
xai |
grok-4.7 |
true |
The Grok 4.7 model page lists web search; a live Responses probe verified web_search. |
xai |
grok-4.7-build-fast |
true |
Live Responses probe through a local CPA xAI route returned web_search_call items and url_citation annotations. |
These documentation excerpts were retrieved through Context7's indexes of the
first-party sites (/websites/platform_claude_en and /websites/x_ai). Unless
the evidence entry records a live invocation, they are not live upstream test results. Direct HTTP retrieval can redirect to unrelated
landing pages; such pages were not used as proof of model support.
Other Claude, xAI, and Kimi IDs remain unknown: these exact examples are not blanket provider/family declarations. Missing evidence is never converted into a false capability claim.
gemini-native-search-declaration.json
records the maintainer's explicit decision to mark all 56 existing Gemini
entries as native_capabilities.web_search: true, including image models and
aliases:
| Catalog section | Declared Gemini entries |
|---|---|
gemini |
13 |
vertex |
15 |
gemini-cli |
7 |
aistudio |
15 |
antigravity |
6 |
The declaration enumerates exact provider/model pairs. It is not official model-by-model documentation or a live upstream test result, and it does not apply to future IDs or non-Gemini models in these sections.
Clients must send Gemini search requests through the Gemini
generateContent protocol with tools: [{"googleSearch": {}}]. Sending a
Responses web_search tool through protocol conversion can discard that tool.
The native capability declaration does not assert support for the Responses
path, nor guarantee availability for every account, region, or proxy route.
Clients should verify returned grounding evidence rather than accept ordinary
text as proof of search execution.
To synchronize the explicitly declared entries into the catalog:
node scripts/apply-gemini-search-declaration.mjsThe synchronizer preserves other model metadata and does not discover or implicitly enable additional models.
Run:
node scripts/validate-native-capabilities.mjs
node --test scripts/validate-native-capabilities.test.mjsThe validator checks the schema and requires every Codex plan annotation to be
an exact ID match for boolean supports_search_tool metadata in the local
Codex client template. Other annotations must match the exact provider/model
pair in the official evidence file or the explicit Gemini maintainer declaration.
It never infers support by prefix and rejects missing or contradictory annotations,
duplicate declarations, and declarations without a matching catalog entry.
CPA must additionally check every registration's actual request path, including aliases, prefixes, and mixed account/provider mappings. A Responses-path capability flag must not be mistaken for Gemini-native search support. A catalog with no capability fields remains unknown; it must not silently establish a provider-level default.