Repository navigation
[Bug]: Vision sidecar is unusable from Codex App - noVisionModels catalog should advertise image input so images reach the proxy #349
Description
Goal / Problem
The vision sidecar feature is advertised as a headline capability ("Give any model superpowers - image understanding via gpt-5.4-mini sidecar"), but it is completely unusable from Codex App -- the most common entry point for users. This is not an edge case; it affects every App user who tries to paste an image while using a text-only routed model.
Concrete user workflow that fails:
- User configures a GLM provider (e.g. Volcengine Ark Agent Plan) with
adapter: anthropic,defaultModel: glm-5.2 - User adds
noVisionModels: ["glm-5.2"]to the provider config (as documented) - User enables vision sidecar:
visionSidecar: { model: "gpt-5.4-mini", backend: "openai" }(as documented) - User opens Codex App, selects
GLM.MacAgent/glm-5.2as the active model - User pastes an image into the conversation
- Codex App immediately rejects the image -- "model does not support image input"
- No request is sent to the OpenCodex proxy
- The vision sidecar never runs
The image never reaches the proxy. The sidecar is dead code for App users.
Why this matters:
- GLM via Volcengine is one of the cheapest high-quality coding models available. Many users route to it through OpenCodex specifically because they want to save OpenAI quota.
- These users have NO way to use images with GLM in Codex App, even though OpenCodex has the infrastructure to make it work.
- The same setup works perfectly in Claude Code -- I have verified this end-to-end. Claude Code does not perform client-side
inputModalitiespre-checks, so the image reaches the proxy, the sidecar describes it viagpt-5.4-mini, and GLM answers based on the text description. This proves the sidecar pipeline is sound; only the App's pre-check blocks it.
Expected behaviour
When noVisionModels is configured for a provider AND the vision sidecar is enabled, OpenCodex should advertise inputModalities: ["text", "image"] in the catalog entry for those specific models. This allows the full pipeline to work:
- Codex App sees image support in catalog -> lets the image through
- Request with image reaches OpenCodex proxy
- Vision sidecar activates:
gpt-5.4-minidescribes the image - Text description is fed to the upstream model (GLM/DeepSeek/etc.)
- User gets image understanding end-to-end
Why this is the right place to fix it
The noVisionModels field already signals "this model cannot see images natively, the sidecar should handle it." But the catalog metadata declares inputModalities: ["text"], which tells the App to block images before they can reach the sidecar. These two configs directly contradict each other. The fix is to reconcile them: if the sidecar is configured to cover a model, the catalog should reflect that image input is effectively supported.
Impact
- Affected models: All text-only routed models with
noVisionModels-- GLM, DeepSeek, and any future text-only model users want to use with images - Affected users: Every Codex App user who routes to a text-only model and expects the advertised vision sidecar to work
- Current workaround: None from the App. Users must switch to Claude Code or CLI to use images with text-only routed models. Manually editing
modelInputModalitiesis fragile and undocumented.
Verification that the sidecar itself works
I tested the exact same configuration in Claude Code (which routes through the same OpenCodex proxy at http://127.0.0.1:10100):
- Model:
claude-ocx-GLM.MacAgent--glm-5.2 - Pasted an image
- Result: Success -- the sidecar described the image, GLM answered correctly based on the description
- This confirms the sidecar pipeline is fully functional; the only blocker is the App's client-side
inputModalitiespre-check
Environment
- opencodex: 2.7.36
- macOS, Apple Silicon
- Codex App + Claude Code (same proxy, same config)
- Provider: GLM.MacAgent (Volcengine Ark Agent Plan, anthropic adapter)
- Sidecar: gpt-5.4-mini via OpenAI (ChatGPT login)
Checks
- I searched existing issues for vision sidecar / noVisionModels / image input / inputModalities.
- I verified the sidecar works end-to-end in Claude Code, proving the issue is specifically the App's client-side pre-check.
- This is a feature request to make an existing advertised feature (vision sidecar) actually usable from Codex App.
Activity
github-actions commentedon Jul 23, 2026
Issue reopened
The report now contains the information required by the automated check. Thanks for updating it.
Wibias commentedon Jul 23, 2026
Sorry for the automatically closing. I am working on that.
[-][Feature]: Vision sidecar is unusable from Codex App - noVisionModels catalog should advertise image input so images reach the proxy[/-][+][Bug]: Vision sidecar is unusable from Codex App - noVisionModels catalog should advertise image input so images reach the proxy[/+]lijianmac commentedon Jul 23, 2026
fix(catalog): advertise image input for noVisionModels custom rows (#349
lidge-jun commentedon Jul 24, 2026
The standard path for this is already fixed on
dev: routednoVisionModelsmodels now advertise["text","image"]in the injected catalog (viaapplyProviderConfigHintsappendingimage, written toopencodex-catalog.json), so the Codex app permits the image upload and it reaches the vision sidecar. The proxy fails closed and strips images to a text marker when no sidecar plan is available, so there's no raw-image-to-text-only-upstream risk. Covered bytests/catalog-vision-sidecar-modalities.test.ts,vision-sidecar-e2e.test.ts, andvision-fail-closed.test.ts.One residual gap remained: customModels overrides bypassed that augmentation, so a
noVisionModels-tagged custom row was re-advertised text-only. Fixed in PR #416 — custom rows now get a narrow image-only augmentation from the registry-enriched provider'snoVisionModels(explicit customcontextWindow/inputModalities/reasoning are preserved). Regression tests added. Closing as fixed once #416 lands; please reopen if you still can't attach an image to a noVisionModels model afterward.fix(web-search): bound sidecar search deadline to 60s + graceful degr…
lidge-jun commentedon Jul 24, 2026
Landed: PR #416 merged to dev (6a0f5b5). The standard-path fix (noVisionModels advertise text,image) plus the customModels-override residual are both in. Closing as fixed — reopen if a noVisionModels model still blocks image attach after updating.
fix(web-search): bound sidecar search deadline to 60s + graceful degr…