<!-- llms-explorer concept facts · https://llms-explorer.com/tree/codex-provider-capabilities-struct-and-where-nam/ · pack 2026-10-05 · ~995 tokens -->

# Codex provider capabilities struct and where namespace serialization is gated

> Which commit removed `namespace_tools`, and whether a replacement gate exists in the app-server or in the Chat-Completions bridge.

Parent: [Mac local LLMs: Agent clients, context and compaction](https://llms-explorer.com/tree/mac-local-llms-agent-clients-context-and-compaction/) · 1 facets · 14 facts · page: https://llms-explorer.com/tree/codex-provider-capabilities-struct-and-where-nam/

## Facts

- Which commit removed `namespace_tools`, and whether a replacement gate exists in the app-server or in the Chat-Completions bridge. — source: `asserted`
- `ProviderCapabilities` has four fields: `image_generation`, `web_search`, `external_web_access` and `remote_compaction`. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/model-provider/src/capabilities.rs)
- The struct's default sets `image_generation`, `web_search` and `external_web_access` to true and `remote_compaction` to `Unsupported`. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/model-provider/src/capabilities.rs)
- `from_config` sets `remote_compaction` to `V2` for OpenAI and Azure Responses providers and applies config overrides only to `external_web_access` and `remote_compaction`. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/model-provider/src/capabilities.rs)
- The doc comment calls these capabilities "a provider-owned upper bound" that model and turn settings can further restrict. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/model-provider/src/capabilities.rs)
- `ModelProviderCapabilities` has two `Option` fields, `external_web_access` and `remote_compaction`, and denies unknown fields in its JSON schema. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/model-provider-info/src/capabilities.rs)
- `RemoteCompactionSupport` has two values: `Unsupported` (local compaction) and `V2` (send `compaction_trigger` items over the Responses endpoint). — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/model-provider-info/src/capabilities.rs)
- `ModelProviderInfo` has `capabilities: Option<ModelProviderCapabilities>`, `wire_api`, `supports_websockets` and `supports_standalone_web_search` as separate fields. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/model-provider-info/src/lib.rs)
- The `ModelProvider` trait's default `capabilities()` returns `ProviderCapabilities::default()` and the concrete provider returns `ProviderCapabilities::from_config(&self.info)`. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/model-provider/src/provider.rs)
- `ToolSpec::Namespace` is serialized under the tag `namespace` with no provider condition. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/tools/src/tool_spec.rs)
- `create_tools_json_for_responses_lite` collects `Function`, `Freeform` and default-named namespace specs into one namespace named `DEFAULT_FUNCTION_NAMESPACE` and leaves other specs as they are. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/tools/src/tool_spec.rs)
- In `client.rs`, `use_responses_lite` selects `create_tools_json_for_responses_lite` and an `AdditionalTools` developer item; other requests use `create_tools_raw_json_for_responses_api`; `parallel_tool_calls` is `prompt.parallel_tool_calls && !model_info.use_responses_lite`. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/core/src/client.rs)
- `spec_plan.rs` passes `model_info.supports_search_tool` to `append_mcp_tools` and merges same-named namespace specs in `merge_into_namespaces`. — [source](https://raw.githubusercontent.com/openai/codex/main/codex-rs/core/src/tools/spec_plan.rs)
- The string `namespace_tools` does not appear in `capabilities.rs`, `provider.rs`, `lib.rs` of `codex-model-provider-info`, or `spec_plan.rs` on main. — source: `asserted`
