[CLI] Filter out the Visualize skill when the TUI cannot render visualizations
What version of Codex CLI is running?
codex-cli 0.149.1 (also the current npm version at time of filing)
What subscription do you have?
Signed in with ChatGPT. The exact subscription tier is not exposed by codex login status.
Which model were you using?
Not model-dependent. The problem reproduces with codex debug prompt-input before any model request.
What platform is your computer?
Darwin 25.5.0 arm64 arm
What terminal emulator and version are you using (if applicable)?
Ghostty 1.3.1. The deterministic reproduction uses the non-interactive prompt-debug command and should not depend on the terminal emulator.
Codex doctor report
Relevant fields from codex doctor --json:
{
"codexVersion": "0.149.1",
"platform": "macos-aarch64",
"installMethod": "npm",
"authMode": "chatgpt",
"configLoaded": true,
"terminal": "Ghostty 1.3.1"
}
The full report contains user-specific absolute filesystem paths, so it is not pasted publicly. I can provide a path-redacted full report if needed.
What issue are you seeing?
Codex CLI injects the bundled visualize skill into the model-visible skill list even though the TUI cannot render the skill's inline visualization content reference.
With visualize@openai-bundled 1.0.21 installed and enabled:
codex debug prompt-inputincludesvisualize:visualizein<skills_instructions>;- the skill instructs the model to emit a host-specific
visualizecontent reference; - the CLI/TUI can only display:
Visualization unavailable on this device.
The bundled plugin manifest simultaneously records:
"bundledContentVariant": "live-disabled"
This produces a false capability affordance: the model sees and can select a skill whose required output surface is unavailable. It also consumes prompt budget and can replace an otherwise usable text, Mermaid, or standalone-HTML response with an unusable result.
What steps can reproduce the bug?
- Install the current Codex CLI and enable the bundled Visualize plugin.
- Confirm the plugin state:
``bash``
codex plugin list | rg visualize
It reports visualize@openai-bundled as installed and enabled.
- Inspect the model-visible prompt:
``bash``
codex debug prompt-input 'show a tiny bar chart' \
| rg -- '- visualize:visualize:'
- Observe that the Visualize skill is present even though this CLI surface cannot display its output.
- Explicitly invoke
$visualizein a CLI session and request a small chart. The TUI renders the fallback textVisualization unavailable on this device.
Deterministic control:
codex debug prompt-input \
-c 'plugins."visualize@openai-bundled".enabled=false' \
'show a tiny bar chart' \
| rg -- '- visualize:visualize:'
The control returns no match, confirming that plugin enablement is the source of the injected skill.
What is the expected behavior?
When the active Codex host cannot render inline visualizations, it should omit the Visualize skill from:
- the model-visible skill list;
- implicit skill routing; and
- the CLI skill/plugin invocation UI.
Ideally, plugin/skill discovery should support a required host capability such as inline_visualization, and filter the skill before prompt construction. For this bundled plugin, bundledContentVariant: live-disabled could also act as an authoritative signal that the skill must not be exposed on that host.
If the CLI intentionally exposes the skill, it should provide a usable fallback such as a standalone HTML file/link rather than emitting an unsupported content reference.
Additional information
Current skill metadata supports invocation policy and tool dependencies, but the installed Visualize agents/openai.yaml contains only interface metadata and has no host-surface requirement. There appears to be no documented way for the plugin to declare that it requires the inline visualization renderer.
Related but not duplicates:
- #36234 reports the opposite desktop-side failure: Visualize is
live-disabledand the native path is missing where it should be available. - #36660 proposes adding terminal-native rendering for visualization fences.
- #37313 reports broader UI/runtime capability-state inconsistencies on Windows.
- #33164 covers Visualize over-triggering for standalone HTML, not unsupported-host filtering.
A practical workaround is to disable the plugin only for CLI invocations, but users should not need host-specific profiles to hide a first-party capability that the host cannot render:
codex -c 'plugins."visualize@openai-bundled".enabled=false'