Client or integration
Claude Desktop 3P profile
Area
Claude Desktop integration · Dashboard / configuration UX
Summary
Applying an OpenCodex Claude Desktop profile through Claude → Desktop → Save and apply silently replaces Claude Desktop's native first-party model catalog instead of adding routed models alongside it.
Before applying the profile, the Desktop picker contains the user's normal Claude subscription models (for example Fable 5, Opus 5, Sonnet 5, and Haiku 4.5). After applying, those entries disappear and the picker contains only the static OpenCodex gateway models.
The user reasonably interprets “Save and apply” as enabling the selected OpenCodex routes, not as replacing the entire native catalog. The UI currently provides no prominent destructive-effect warning and no one-click “Restore native Claude configuration” action.
Even if native first-party and gateway catalogs cannot technically coexist in the current Claude Desktop configuration model, OpenCodex should make that limitation explicit and make the operation safely reversible.
Reproduction
- Start with Claude Desktop signed in normally and confirm its native models are visible.
- Configure several routed models in OpenCodex.
- Open the OpenCodex dashboard.
- Go to Claude → Desktop and assign routed models to the Opus/Fable/Sonnet/Haiku families.
- Click Save and apply.
- Fully quit and reopen Claude Desktop.
- Open the model picker.
Actual behavior
The native Claude models disappear. The applied configuration has this effective shape:
{
"inferenceProvider": "gateway",
"modelDiscoveryEnabled": false,
"inferenceModels": ["OpenCodex-generated static entries"]
}
The config library metadata selects only the OpenCodex entry:
{
"appliedId": "<opencodex-config-id>",
"entries": [
{
"id": "<opencodex-config-id>",
"name": "opencodex"
}
]
}
There is no visible restore action in OpenCodex. In addition, once claudeCode.desktopProfile exists, desktopAutoApply defaults to enabled and provider changes can reapply the profile in static mode, so manually reverting the Desktop config can be undone later.
Expected behavior
At minimum:
- Before applying, show an explicit warning such as:
This switches Claude Desktop to the OpenCodex gateway and replaces the native Claude model catalog. It does not add models alongside your existing Claude subscription models.
- Require explicit confirmation for the replacement.
- Preserve enough prior applied-state metadata to offer a reliable Restore native Claude configuration action.
- Provide a CLI equivalent for restore/unapply.
- Do not silently auto-reapply a static Desktop profile after the user restores the native configuration.
- Clearly explain what
static, hybrid, and discovery-only do, including that hybrid does not necessarily merge the first-party Claude subscription catalog.
Ideally, if technically possible, provide a supported profile-switching or native-passthrough design that lets users access native Claude models and routed OpenCodex models without losing either catalog. If Claude Desktop's single-provider model makes this impossible, the UI should say so rather than implying additive model installation.
Technical evidence
Current implementation defaults to static mode:
parseDesktop3pModeArgs() returns static when no mode flag is supplied.
generateDesktop3pConfig() sets inferenceProvider: "gateway".
- Static mode sets
modelDiscoveryEnabled: false and writes a complete inferenceModels list.
autoApplyDesktopBestEffort() also calls writeDesktop3pConfig(..., "static", ...).
The source comment itself notes that the static list “OVERRIDES discovery (no merge).”
Environment
- OpenCodex: 2.8.0
- OS: macOS
- Claude client: Claude Desktop app
- OpenCodex Claude auth mode: subscription
- Example routed models: DeepSeek, GPT, and an OpenAI-compatible relay model
Impact
This is surprising and potentially disruptive for subscription users:
- Their expected native models disappear.
- They may believe their Claude subscription or account access is broken.
- Reverting is not discoverable.
- Auto-apply can restore the unwanted gateway configuration later.
- Users must understand undocumented internal files such as
Claude-3p/configLibrary/_meta.json to recover.
Checks
Client or integration
Claude Desktop 3P profile
Area
Claude Desktop integration · Dashboard / configuration UX
Summary
Applying an OpenCodex Claude Desktop profile through Claude → Desktop → Save and apply silently replaces Claude Desktop's native first-party model catalog instead of adding routed models alongside it.
Before applying the profile, the Desktop picker contains the user's normal Claude subscription models (for example Fable 5, Opus 5, Sonnet 5, and Haiku 4.5). After applying, those entries disappear and the picker contains only the static OpenCodex gateway models.
The user reasonably interprets “Save and apply” as enabling the selected OpenCodex routes, not as replacing the entire native catalog. The UI currently provides no prominent destructive-effect warning and no one-click “Restore native Claude configuration” action.
Even if native first-party and gateway catalogs cannot technically coexist in the current Claude Desktop configuration model, OpenCodex should make that limitation explicit and make the operation safely reversible.
Reproduction
Actual behavior
The native Claude models disappear. The applied configuration has this effective shape:
{ "inferenceProvider": "gateway", "modelDiscoveryEnabled": false, "inferenceModels": ["OpenCodex-generated static entries"] }The config library metadata selects only the OpenCodex entry:
{ "appliedId": "<opencodex-config-id>", "entries": [ { "id": "<opencodex-config-id>", "name": "opencodex" } ] }There is no visible restore action in OpenCodex. In addition, once
claudeCode.desktopProfileexists,desktopAutoApplydefaults to enabled and provider changes can reapply the profile instaticmode, so manually reverting the Desktop config can be undone later.Expected behavior
At minimum:
static,hybrid, anddiscovery-onlydo, including thathybriddoes not necessarily merge the first-party Claude subscription catalog.Ideally, if technically possible, provide a supported profile-switching or native-passthrough design that lets users access native Claude models and routed OpenCodex models without losing either catalog. If Claude Desktop's single-provider model makes this impossible, the UI should say so rather than implying additive model installation.
Technical evidence
Current implementation defaults to static mode:
parseDesktop3pModeArgs()returnsstaticwhen no mode flag is supplied.generateDesktop3pConfig()setsinferenceProvider: "gateway".modelDiscoveryEnabled: falseand writes a completeinferenceModelslist.autoApplyDesktopBestEffort()also callswriteDesktop3pConfig(..., "static", ...).The source comment itself notes that the static list “OVERRIDES discovery (no merge).”
Environment
Impact
This is surprising and potentially disruptive for subscription users:
Claude-3p/configLibrary/_meta.jsonto recover.Checks