[BUG] Opus 4.6 reports success without verifying outcomes - silent failures go undetected
Description
Opus 4.6 consistently reports successful completion of operations without verifying the actual outcome. When an operation fails silently (e.g., a file copy command produces no output and no error), the model states "Done" with confidence and moves on. This is not limited to file operations - the same pattern likely affects any operation where the model assumes success based on the absence of an error message.
This is a behavioral regression from Opus 4.5, which was more cautious and would verify results before reporting success.
Reproduction steps
- On a Windows machine, ask Claude Code (Opus 4.6) to copy a file using a shell command
- The
copycommand fails silently (no output, no error) - this is common in bash-on-Windows environments - Claude Code reports "Done. The file has been saved" without checking if the file actually exists
- The file does not exist
- When the user points out the file is missing, Claude retries with a slightly different command - again without verifying the result
- Only after the user explicitly asks "I don't see the file" a second time does Claude use a verification tool (Glob) and discover the file was never created
What should happen
After any operation that creates, modifies, or deletes a file, the model should verify the outcome using a tool (Glob, Read, or ls) before reporting success to the user. This is especially critical when:
- A shell command produces no output (ambiguous success/failure)
- The operation is on Windows, where many commands fail silently in bash
- The user has explicitly documented this requirement in CLAUDE.md
Why this matters beyond file operations
The core issue is not about file copying - it's about the model's tendency to assume success and report it without verification. This same pattern can manifest when:
- Writing code that references classes/methods that don't exist (model uses Grep, gets no results due to encoding, proceeds anyway)
- Running build commands and not checking the output for errors
- Making database changes and not verifying the state
- Any multi-step operation where an intermediate step can fail silently
Evidence
This was observed by the model itself during a conversation where the user asked Opus 4.6 to analyze its own CLAUDE.md instructions. The model:
- Ran
cmd /c copy- no output - Reported "Done. The old CLAUDE.md is saved"
- User checked: file did not exist
- Model ran
cmd /c "copy /Y"- no output again - Still did not verify
- User asked again
- Only then did model use Glob and discover the file was missing
- Used Write tool instead, which worked
The model then acknowledged this was exactly the "confident without checking" pattern described by the user at the start of the conversation as a regression from Opus 4.5.
Environment
- Claude Code v2.1.32
- Model: claude-opus-4-6
- Platform: Windows Server (win32)
- The behavior is consistent across multiple operations in the same session
Related issues
- #21119 - Claude repeatedly ignores CLAUDE.md instructions
- #15443 - Claude ignores explicit CLAUDE.md instructions while claiming to understand them
- #23445 - v2.1.32 / Opus 4.6 regression
Suggested mitigation
At the model level: after executing a shell command that produces no stdout/stderr, the model should treat this as an ambiguous result and verify with a dedicated tool before reporting success.
At the system prompt level: consider adding a built-in instruction that the model must verify file operations, similar to how the system prompt already instructs to "use Read instead of cat."
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗