Repository navigation
Add a config flag to keep native/* models out of the Claude Desktop model list #767
Description
Area
Proxy and routing
What are you trying to accomplish?
I use OpenCodex to route Claude Desktop through the proxy, and I want Claude Desktop's model list to contain only the proxy-routed models. Today the Claude Desktop config keeps getting native/* entries added back, which I do not want there: they bypass the proxy, so they are absent from the request log, from usage accounting, and from the routing rules I configured. Having both sets present also makes the model picker ambiguous — two entries that look equivalent but behave differently.
What prevents this today?
There is no way to opt out. show, export and apply all reinsert native/* models into the Claude Desktop configuration, and the only way I have found to keep them out is to patch the code locally. That patch is the single change I would most like to stop maintaining, because it has to be re-applied on every release.
What should OpenCodex do?
Honour a boolean configuration flag that suppresses native/* entries when writing the Claude Desktop model list. Everything else stays as it is; when the flag is absent or true, behaviour is unchanged, so this is backwards compatible.
The flag needs to be respected by every path that writes that list, not just one command — in my local patch the enforcement points are the desktop profile export and the CLI's Claude Desktop command.
Example usage or interface
In ~/.opencodex/config.json:
{
"claudeCode": {
"enabled": true,
"desktopNativeModels": false,
"authMode": "proxy"
}
}With desktopNativeModels: false:
$ ocx claude-desktop show
models routed through the proxy:
<provider>/<model> (proxy)
...
(no native/* entries)
A dashboard toggle alongside the existing Claude switch would be a natural home for it too, but the config key alone would be enough for me.
Alternatives or workarounds
- Patching the package locally. What I do now: a small change adding the config key plus the two enforcement points. It works, but it is lost on every
npm install -gand has to be re-applied and re-verified after each release. - Editing the Claude Desktop config by hand after each sync. Does not hold, because the next
show/export/applyputs the entries straight back. - Disabling the Claude integration entirely. Removes the feature I actually want.
Additional context
I am happy to open a PR for this if the config key name and placement are agreeable — say the word on whether you would prefer claudeCode.desktopNativeModels or something else, and whether you would want the dashboard toggle in the same change or separately.
Checks
- I searched existing issues and documentation.
- This request describes a concrete OpenCodex workflow rather than merely naming a desired technology.
- I removed secrets and personal data.
Activity
github-actions commentedon Jul 30, 2026
Automated translation bookkeeping — detected language: unknown.
Wibias commentedon Jul 30, 2026
[shipping-github] Research review
Claim: Add a config flag to omit
native/*models from the Claude Desktop model list so only proxy-routed models appear.Checked against: dev@be177ea5
claudeCode.desktopNativeModels(or equivalent) flag; export/show/apply paths keep reinserting native entriesEvidence: No matches for
desktopNativeModelsinsrc/. Claude Desktop routes under/api/claude-desktop*and CLI desktop commands still manage native inclusion without an opt-out.Gaps: Preferred key name / whether GUI toggle ships in same change still open (reporter asked).
Wibias commentedon Jul 30, 2026
[shipping-github] Opened PR #783 to address this.
feat(claude): opt out of native/* models in the Claude Desktop list (#…
lidge-jun commentedon Jul 31, 2026
Implemented on
dev(verified atbf9bc1ac8), landed inf72610027.The flag is
claudeCode.desktopNativeModels. Setting it tofalsekeepsnative/*out of the Claude Desktop model list:src/codex/catalog/metadata.ts:126-129—desktopVisibleNativeSlugs()returns an empty list when the flag is off.src/server/management/shared.ts:224-248— also strips native assignments and defaults, not just the list.The second part is what makes it stick. Filtering the list alone would still have let a native model return as a default or an existing assignment, which is how the original report described it reappearing after show/export/apply. Every CLI and API writer path goes through the same helper.
Closing as implemented.
docs(plan): disposition all 41 open issues against dev head
feat(claude): opt out of native/* models in the Claude Desktop list (l…
docs(plan): disposition all 41 open issues against dev head