Client or integration
OpenCodex dashboard (Integrations -> Claude tab, clientId=claude-desktop), backed by GET/PUT /api/claude-desktop and POST /api/claude-desktop/apply.
Area
Dashboard
Summary
The Claude Desktop integration page cannot remove models that are no longer available. Stale claudeCode.desktopProfile.assignments accumulate forever: reconcileDesktopProfile only adds new routes and never prunes, while PUT /api/claude-desktop rejects any change touching an unavailable route. There is no supported dashboard path to delete a closed or renamed model. I expected to be able to delete unavailable assignments (or to have a prune action), while still forbidding adding or reassigning unavailable routes.
Reproduction
- Let
claudeCode.desktopProfile.assignments accumulate stale routes (renamed providers such as GMI/*, Opencode_Go/*, opencode-zen/*, old nested CommandCode/meta/*, retired native/gpt-5.6-*). In my case: 38 assignments, 21 flagged available=false by GET /api/claude-desktop.
- In the dashboard Claude tab, or via API, submit a profile that removes the 21 unavailable routes and keeps only the 17 available ones (defaults unchanged, still pointing at available members).
- The request fails; nothing is saved.
- Root cause in code:
PUT /api/claude-desktop in src/server/management/agent-settings-routes.ts compares current.profile.assignments[route] vs parsed.assignments[route] for every model with available=false and throws on any difference; reconcileDesktopProfile in src/claude/desktop-profile.ts only appends missing available models and preserves all stored assignments.
Workaround used (manual, disruptive): back up ~/.opencodex/config.json and the Claude-3p library profile, edit claudeCode.desktopProfile.assignments on disk to keep only the available routes, ocx restart (required because a direct file edit while the proxy runs gets overwritten by the in-memory config on the next apply), then POST /api/claude-desktop/apply, then fully quit and reopen Claude Desktop (it only reads the profile at launch). Verified: GET /api/claude-desktop went from models:38 unavailable:21 to models:17 unavailable:0; library inferenceModels 16 -> 17 (including newly appeared opencode-go/glm-5.3-flash).
Version
2.49.0
Operating system
macOS 26.6.2 (25G83)
Provider and model
Not provider-specific (affects any retired/renamed route wired to Claude Desktop; observed with CommandCode / Stepfun / google-antigravity / nvidia / opencode-go / sensenova / volcengine-agent-plan / xai catalog).
Logs or error output
{"error": "\ud604\uc7ac \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \ubaa8\ub378\uc740 \uc62e\uae38 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: CommandCode/deepseek/deepseek-v4-flash-vision-exp"}
Redacted configuration
{
"claudeCode.desktopProfile.defaults": {
"opus": "CommandCode/deepseek/deepseek-v4-flash",
"fable": "native/gpt-6-astra",
"sonnet": "CommandCode/meituan/LongCat-2.0:free",
"haiku": "Stepfun/step-3.7-flash"
},
"assignments_before": 38,
"unavailable_before": 21,
"assignments_after": 17,
"unavailable_after": 0
}
Checks
Client or integration
OpenCodex dashboard (Integrations -> Claude tab,
clientId=claude-desktop), backed byGET/PUT /api/claude-desktopandPOST /api/claude-desktop/apply.Area
Dashboard
Summary
The Claude Desktop integration page cannot remove models that are no longer available. Stale
claudeCode.desktopProfile.assignmentsaccumulate forever:reconcileDesktopProfileonly adds new routes and never prunes, whilePUT /api/claude-desktoprejects any change touching an unavailable route. There is no supported dashboard path to delete a closed or renamed model. I expected to be able to delete unavailable assignments (or to have a prune action), while still forbidding adding or reassigning unavailable routes.Reproduction
claudeCode.desktopProfile.assignmentsaccumulate stale routes (renamed providers such asGMI/*,Opencode_Go/*,opencode-zen/*, old nestedCommandCode/meta/*, retirednative/gpt-5.6-*). In my case: 38 assignments, 21 flaggedavailable=falsebyGET /api/claude-desktop.PUT /api/claude-desktopinsrc/server/management/agent-settings-routes.tscomparescurrent.profile.assignments[route]vsparsed.assignments[route]for every model withavailable=falseand throws on any difference;reconcileDesktopProfileinsrc/claude/desktop-profile.tsonly appends missing available models and preserves all stored assignments.Workaround used (manual, disruptive): back up
~/.opencodex/config.jsonand the Claude-3p library profile, editclaudeCode.desktopProfile.assignmentson disk to keep only the available routes,ocx restart(required because a direct file edit while the proxy runs gets overwritten by the in-memory config on the next apply), thenPOST /api/claude-desktop/apply, then fully quit and reopen Claude Desktop (it only reads the profile at launch). Verified:GET /api/claude-desktopwent frommodels:38 unavailable:21tomodels:17 unavailable:0; libraryinferenceModels16 -> 17 (including newly appearedopencode-go/glm-5.3-flash).Version
2.49.0
Operating system
macOS 26.6.2 (25G83)
Provider and model
Not provider-specific (affects any retired/renamed route wired to Claude Desktop; observed with CommandCode / Stepfun / google-antigravity / nvidia / opencode-go / sensenova / volcengine-agent-plan / xai catalog).
Logs or error output
{"error": "\ud604\uc7ac \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \ubaa8\ub378\uc740 \uc62e\uae38 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: CommandCode/deepseek/deepseek-v4-flash-vision-exp"}Redacted configuration
{ "claudeCode.desktopProfile.defaults": { "opus": "CommandCode/deepseek/deepseek-v4-flash", "fable": "native/gpt-6-astra", "sonnet": "CommandCode/meituan/LongCat-2.0:free", "haiku": "Stepfun/step-3.7-flash" }, "assignments_before": 38, "unavailable_before": 21, "assignments_after": 17, "unavailable_after": 0 }Checks