In Opus 4.7, CLAUDE.md is delivered as per-turn <system-reminder> content rather than sitting in the agent's initial instruction layer. The wrapping system-reminder explicitly tells the agent: "this context may or may not be relevant to your tasks. You should not respond to this context unless it is highly relevant to your task." That demotes CLAUDE.md's override authority from structural instruction to conditional context, and the same content that held firm on 4.6 drifts on 4.7.
Known bug, publicly reported:
- anthropics/claude-code#18560 -
<system-reminder>instructing Claude not to followCLAUDE.mdinstructions - anthropics/claude-code#7571 - system-reminder disclaimer prevents
CLAUDE.mdstartup instructions from executing
Deliver the same content through a slot that still lands in the initial instruction layer. Two options work:
--append-system-prompt- CLI flag, officially sanctioned, semantically clean. Daily-drive requires wrapping in a shell alias. Not available from the VSCode extension.- Output Style (this repo) - set once, persists across sessions, works uniformly across CLI and the VSCode extension. Technically a slot abuse (it's intended for persona/tone), but it lands in the initial instruction layer and survives across sessions without per-invocation wrapping.
We chose Output Style because the VSCode extension is the primary entrypoint here and --append-system-prompt isn't reachable there. If you daily-drive from the CLI, --append-system-prompt is the semantically cleaner route.
This is a routing workaround, not a content change. The TypeScript-interfaces thesis on the Opus-4.6 branch is unchanged.
- Build your contract file following the guide on the
Opus-4.6branch. That branch's README is the canonical walkthrough for modeling yourself and writing the interfaces. - Install the result as a custom Output Style:
- Save it as
~/.claude/output-styles/<your-style-name>.mdfor user-level, or.claude/output-styles/<your-style-name>.mdfor project-scoped. - Include frontmatter at the top of the file:
--- name: your-style-name description: short description ---
- Activate via
/config-> Output style, or setoutputStylein.claude/settings.json. - Start a new Claude Code session for the style to take effect.
- Save it as
output-style.md in this repo is the standalone template. The content is identical to the CLAUDE.md on the Opus-4.6 branch, renamed to match its deployment slot, with frontmatter pre-populated.
This is a cheat, not an upgrade. CLAUDE.md is semantically the right home for override instructions - the system prompt literally grants it override authority. The Output Style route works because of where it lands in the prompt, not because it's a more appropriate home for the content. Version-bound accordingly: if a future Claude Code release restores CLAUDE.md to the instruction layer, this workaround is unnecessary. If it demotes Output Style too, this workaround breaks.
- Branch
Opus-4.6- original approach and full guide.