[Bug] outputStyle configuration not honored in assistant responses
Bug Description
# Bug: outputStyle is advertised but not honored — a shipped, documented lever that does not work
## Summary
outputStyle is a documented, actively advertised configuration lever for controlling the assistant's response style. It does not work. A custom style with hard rules is loaded into the system prompt but is then actively ignored by the model in normal use. This is not a matter of personal taste — a feature the vendor ships and promotes to the customer does not deliver its stated function. That is a bug.
## What was configured
Not one, but a stack of layered, advertised mechanisms — and it still does not work:
1. An installed plugin dedicated to this (i-have-adhd), which provides the skill AND a SessionStart hook that injects the full ADHD ruleset into context at the start of every session.
2. On top of that — because the plugin alone did not produce compliant output — a custom outputStyle:
- ~/.claude/output-styles/adhd.md: strict, unambiguous, imperative rules — first line must be the action, no preamble/acknowledgement, no recap, hard line cap, one closing next-action.
- ~/.claude/settings.json: "outputStyle": "adhd".
- Verified loaded: after reload the system prompt contains # Output Style: adhd with the full ruleset.
3. (Earlier also tried a UserPromptSubmit hook injecting the rules every turn — same result, later removed.)
Three separate, advertised layers — a plugin, a SessionStart hook, and a system-level output style — all stacked, and the output still does not comply. If the documented levers worked, one would suffice; stacking three and still failing is the bug.
## Steps to reproduce
1. Create the custom output style above and set outputStyle to it.
2. Reload; confirm it is loaded (system prompt shows the style).
3. Hold a normal multi-turn working session.
## Expected
Every response obeys the style's hard rules, because the style is the configured, system-level output contract.
## Actual
Responses repeatedly violate the rules: they open with acknowledgements/preambles ("Verstanden", "Du hast recht", "Genau", …), append recaps of what just happened, and run far over the configured length. The rules are ignored even though they are hard, explicit, and loaded. Drift worsens in longer/focused sessions.
The only thing that forces compliance is a Stop hook with decision: block, which regenerates the entire turn on the expensive model per violation. So the shipped lever (outputStyle) does not enforce, and the only workaround is costly re-generation. The customer is left with an advertised feature that does not do its job.
## Impact
- A promoted configuration surface does not deliver its documented behavior.
- The only functioning enforcement path costs real money (full re-generation) per violation.
- Users cannot rely on outputStyle to shape output, defeating its purpose.
## Secondary defect found while reproducing
- Custom file-based output styles do not appear in the /config outputStyle= picker (only built-ins default/Proactive/Explanatory/Learning are listed). There is no in-UI confirmation that a custom style is active.
## Ask
Make outputStyle actually govern responses (honor its rules as a hard output contract), and surface custom styles in /config. If full adherence is not guaranteed, provide a cheap enforcement primitive (hard per-response output-token cap, or a post-response hook that can trim/rewrite without a new model turn) so the advertised control is usable without paying for re-generation.
## Environment
- Claude Code (VS Code extension), Windows 11.
- Model: Opus 4.8. Custom outputStyle set in ~/.claude/settings.json.
Environment Info
- Platform: win32
- Terminal: windows-terminal
- Version: 2.1.231
- Feedback ID: 33ed0a78-22ad-4092-aeab-1e21481794ff
Errors
[]This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗