[BUG] Claude Opus 4.5 Ignores Explicit System Prompt Directives
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
<html>
<body>
<!--StartFragment--><html><head></head><body><h1>Claude Opus 4.5 Ignores Explicit System Prompt Directives (Additional Evidence)</h1>
<p><strong>Related Issues:</strong></p>
<ul>
<li>#7777 - Claude ignores instruction in CLAUDE.MD and agents</li>
<li>#7533 - Claude Code prioritizes context preservation over correctness when reading files</li>
<li>#5810 - Severe Performance Degradation - Frequent Hallucinations and Instruction Following Failures</li>
<li>#3377 - Claude Code agent behavior degradation: instruction ignoring, false reporting</li>
</ul>
<h2>Environment</h2>
<ul>
<li><strong>Model:</strong> claude-opus-4-5-20251101</li>
<li><strong>Interface:</strong> Claude Code CLI / VS Code extension</li>
<li><strong>Date:</strong> 2026-01-13</li>
</ul>
<h2>Summary</h2>
<p>Adding evidence to the known pattern where Claude treats explicit directives as suggestions. This session demonstrates the issue persists on Opus 4.5 and that user-defined enforcement language (<code>action: block</code>) is not self-enforced.</p>
<h2>Evidence</h2>
<h3>Test Case 1: Explicit File Paths Ignored</h3>
<p><strong>System prompt:</strong></p>
<pre><code class="language-yaml">DIRECTIVE: load_memory_now
Read these files DIRECTLY using Read tool before any other action:
| File | Action |
|------|--------|
| memory/USER.md | Read (direct path) |
| memory/WAITING_ON.md | Read (direct path) |
| memory/ai/COMMON_MISTAKES.md | Read (direct path) |
FLOOR_BEHAVIORS:
F1_READ_PROVIDED_PATHS:
violation: "Using Glob/Grep/search when explicit paths provided"
action: block
</code></pre>
<p><strong>User message:</strong> "Read memory and hold for instructions."</p>
<p><strong>Expected:</strong> <code>Read</code> tool on three specified paths.</p>
<p><strong>Actual:</strong></p>
<pre><code>1. Glob pattern="/.claude/memory/"
- Glob pattern="**/memory*.md"
- Additional Glob calls
</code></pre>
<p>This matches the pattern documented in #7533: "Claude Code reverts to sampling files with grep, wc, and partial reads instead of reading complete files as instructed."</p>
<h3>Test Case 2: Required User Confirmation Skipped</h3>
<p><strong>System prompt:</strong></p>
<pre><code class="language-yaml">DIRECTIVE: ask_before_engage
Before proceeding with block modifications:
- ASK the user using this exact format...
</code></pre>
<p><strong>Expected:</strong> Ask before modifying.</p>
<p><strong>Actual:</strong> Proceeded directly to editing. Occurred 3 times in same session. Only asked after explicit confrontation.</p>
<p>This matches #7777: "I consistently treat these as suggestions rather than mandatory process steps."</p>
<h3>Test Case 3: Premature Completion Claims</h3>
<p><strong>Documentation Claude had read specified:</strong> Edit → commit → push → wait → refresh endpoint</p>
<p><strong>Actual:</strong> Edited files, output "Completed" with summary table. No git operations. No endpoint refresh.</p>
<p>This matches #3377: "false reporting and unauthorized actions."</p>
<h2>Observed Pattern</h2>
Behavior | Frequency | Matches Issue
-- | -- | --
Search instead of Read | 2/2 | #7533
Skip required questions | 3/3 | #7777
Premature completion claims | 2/2 | #3377
Correct identification, no correction | 4/4 | #7777
<h2>Key Finding: Self-Enforcement Does Not Work</h2>
<p>I attempted to add enforcement language to the system prompt:</p>
<pre><code class="language-yaml">FLOOR_BEHAVIORS:
F1_READ_PROVIDED_PATHS:
violation: "Using Glob/Grep/search when explicit paths provided"
action: block
</code></pre>
<p><strong>Result:</strong> Model did not self-enforce. The <code>action: block</code> directive was ignored.</p>
<p>This confirms what #7777 documented: "Claude or Agents definitions need to follow the instructions, right now Claude.MD and Agents are useless."</p>
<h2>Impact</h2>
<p>This session required 6+ explicit corrections over 2 hours. The model correctly diagnosed each failure when confronted but continued the pattern. External enforcement appears to be the only reliable solution, but Claude Code provides no hook for users to implement it.</p>
<h2>Session Details</h2>
<ul>
<li>Testing period: 2 days (2026-01-12 to 2026-01-13)</li>
<li>Multiple sessions across Claude Code CLI and VS Code extension</li>
<li>Explicit corrections required: 6+ per session</li>
<li>Model correctly diagnosed its own failures when confronted but did not self-correct</li>
</ul></body></html><!--EndFragment-->
</body>
</html>
What Should Happen?
What Should Happen?
When a system prompt contains explicit file paths with a directive to "Read these files DIRECTLY," the first tool calls should be Read on those exact paths - not Glob or Grep searches.
When a system prompt contains action: block enforcement language, the model should either:
Self-enforce and block the violating action, or
Surface a mechanism for users to implement external enforcement
When a directive specifies "ASK before proceeding," the model should ask before proceeding.
When documentation specifies a multi-step process (edit → commit → push → refresh), the model should not claim "Completed" until all steps are executed.
System prompt directives should be treated as requirements, not suggestions.
Error Messages/Logs
Steps to Reproduce
Steps to Reproduce
Create a CLAUDE.md or system prompt with the following content:
yamlDIRECTIVE: load_memory_now
Read these files DIRECTLY using Read tool before any other action:
| File | Action |
|------|--------|
| test/file1.md | Read (direct path) |
| test/file2.md | Read (direct path) |
FLOOR_BEHAVIORS:
F1_READ_PROVIDED_PATHS:
violation: "Using Glob/Grep/search when explicit paths provided"
action: block
F2_NO_ACTION_BEFORE_READ:
violation: "Taking any action before specified files are read"
action: block
Create the two test files at the specified paths:
bashmkdir -p test
echo "# File 1 content" > test/file1.md
echo "# File 2 content" > test/file2.md
3. Start a Claude Code session and send the message:
Read memory and hold for instructions.
4. Observe the tool calls.
**Expected:** First tool calls are `Read test/file1.md` and `Read test/file2.md`
**Actual:** Model calls `Glob` with patterns like `**/*memory*` or `**/test/**` instead of reading the explicit paths provided.
5. Confront the model: "Why did you search instead of reading the exact paths I gave you?"
6. Observe: Model correctly identifies the failure but does not retroactively fix it without explicit instruction.
---
**Minimal reproduction (single prompt):**
System prompt:
Before any other action, read ./README.md directly using the Read tool. Do not search. Do not use Glob. Read the exact path provided.
User message:
Read the file and summarize it.
Observe whether first tool call is Read ./README.md or Glob/Grep search.
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
claude-opus-4-5-20251101
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
VS Code integrated terminal
Additional Information
_No response_
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗