[BUG] Claude Opus 4.5 Ignores Explicit System Prompt Directives

Resolved 💬 2 comments Opened Jan 13, 2026 by keithcostello Closed Feb 27, 2026

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/"

  1. Glob pattern="**/memory*.md"
  2. 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:

  1. 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_

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗