[BUG] Desktop: enabling any plugin that ships an output style empties the session "Output style" submenu (built-ins included)

Status Fixed / completed
Reported on v2.1.260
Maintainer reply None cached
Activity 1 comment · opened Sep 10, 2026 · closed Sep 10, 2026

Title: Desktop: enabling any plugin that ships an output style empties the session "Output style" submenu (built-ins included)

Environment

  • Claude desktop (macOS arm64): 1.49585.0, bundled Claude Code 2.1.260
  • macOS: Darwin 25.3.0

What happens
With a plugin enabled that contains an output-styles/*.md file, the per-session menu ⋮ → Output style shows only "New style…". Default, Proactive, Concise, Explanatory, Learning and all custom user styles disappear. Settings → Claude Code → Output style still lists the built-in and user styles correctly (it does not list the plugin's). Disabling the plugin restores the submenu after restart.

Root cause (from main.log and app.asar)
main.log on every session start:

[CCD] output-style list of 8 entries settled as empty: over the 256-entry cap, or at least one entry failed validation

Also, when outputStyle in settings.json is set to the plugin style:

[SettingsResolver] Screened outputStyle from ~/.claude/settings.json — not a valid style name (string, 18 chars)

In app.asar the style-name validator rejects any name containing /, \ or ::

function l0t(e){return typeof e=="string"&&e.length>0&&e.length<=256&&e===e.trim()&&!/[/\\:]|^\.\.?$|^~/.test(e)&& ...}

and captureOutputStyleList is all-or-nothing:

a=Array.isArray(i)&&i.length<=lh&&i.every(t.Dx)?i:[]

Plugin output styles are reported by the CLI as <plugin>:<style>. The colon fails the validator, so one plugin style empties the entire list. The CLI itself accepts outputStyle: "<plugin>:<style>" and activates it, so the CLI and desktop disagree on the name grammar.

Repro

  1. Install any plugin with output-styles/<name>.md (e.g. a one-file plugin) and enable it.
  2. Restart the desktop app, open a Code session, ⋮ → Output style.
  3. Observe only "New style…". Disable the plugin, restart: list returns.

Expected
Plugin styles either listed (namespaced names accepted, or displayed under the plugin) or skipped individually, without discarding the built-in and user entries.

Workaround used
Ship the style file under assets/ and copy it into ~/.claude/output-styles/ with a SessionStart hook, so no namespaced entry is emitted.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗