[MODEL] Questions interpreted as implicit action requests — systematic pattern across 395 sessions
Preflight Checklist
- [x] I have searched existing issues for similar behavior reports
- [x] This report does NOT contain sensitive information (API keys, passwords, etc.)
Type of Behavior Issue
Claude ignored my instructions or configuration
What You Asked Claude to Do
Asked questions about code — pure interrogatives requesting information, not action. Examples:
- "What purpose do these brackets serve?"
- "How does this service work?"
- "Why is this field nullable?"
- "What would happen if we changed X?"
- "How can you test it?"
- "Is there a reason we're using X instead of Y?"
These are questions. They request explanation, not modification.
What Claude Actually Did
Across ~395 sessions, approximately 45 incidents where Claude answered the question and then took unsolicited action:
Category 1: Question → Unsolicited file edit
- Asked "what purpose do these brackets serve?" → Claude explains, then edits the file to remove brackets
- Asked "what would happen if we changed X?" → Claude explains the hypothetical, then implements the change
Category 2: Question → Unsolicited suggestions/proposals
- Asked "how does this service work?" → Claude explains, then proposes a refactor
- Asked "why is this field nullable?" → Claude explains, then suggests adding validation
Category 3: Question → Normative statements
- Asked "how can you test it?" → Claude answers, then proposes workflow changes to the testing setup
Category 4: Explanation request → Code changes
- Asked "can you explain this regex?" → Claude explains, then rewrites it "for clarity"
Category 5: Debugging questions → Unsolicited fixes
- Asked "why would this return null here?" → Claude investigates, finds the bug, and patches it without being asked
Category 6: Architecture questions → Implementation
- Asked "is there a reason we're using X instead of Y?" → Claude explains, then starts migrating to Y
Expected Behavior
Questions get answers. Nothing else.
- Answer the question with the relevant information
- Read/search code if needed to give an accurate answer
- Stop there. Do not edit files, propose changes, suggest improvements, or run modifying commands
- Wait for the user to give an explicit imperative ("fix this", "change this", "implement X") before taking action
Files Affected
Various files across the project — the pattern is not file-specific. Any file Claude reads to answer a question becomes a candidate for unsolicited modification.
Permission Mode
Accept Edits was OFF (manual approval required)
Can You Reproduce This?
Sometimes (intermittent)
Steps to Reproduce
- Open Claude Code in any project
- Ask a question about existing code (e.g., "what does this function do?", "why is this implemented this way?")
- Observe that Claude answers the question AND takes additional action (edits, suggestions, normative statements)
Not every question triggers it, but it happens frequently enough (~45 times in 395 sessions) to be a systematic pattern rather than a fluke.
Claude Model
Opus
Relevant Conversation
Representative pattern:
User: "What purpose do these brackets serve?"
Claude: "These brackets are used for X, Y, Z..."
[Claude then immediately calls Edit tool to modify the file]
User: "How can you test it?"
Claude: "You can test it by..."
[Claude then proposes changes to the test infrastructure]
Impact
Medium - Extra work to undo changes
Each incident requires the user to notice the unsolicited action, reject or revert it, and redirect Claude. Over 45 incidents, this adds up to significant friction and eroded trust in the tool.
Preventative Measures Built
The severity and persistence of this pattern required building 5 separate mitigation layers — all reactive, all requiring ongoing user effort. These are included here to illustrate (a) how persistent the behavior is, and (b) that none of the available user-side controls fully solve it.
---
1. /be-literal slash command — Manual correction invoked when Claude misreads a question as criticism or a challenge:
# .claude/commands/be-literal.md
---
description: Take the question literally. Answer what was asked.
argument-hint: [the question to re-answer]
disable-model-invocation: true
allowed-tools: Read, Glob, Grep
---
You interpreted a question as criticism or a challenge. It was not.
$ARGUMENTS
**What happened:**
- A question was asked seeking information
- You read it as a rebuke or correction
- You responded defensively instead of answering
**What to do now:**
- Re-read the question as a literal request for information
- Answer it directly
- No acknowledgment of misinterpretation needed — just answer
---
2. /refocus slash command — Hard reset when Claude goes off-track (rushing, tangents, not following instructions):
# .claude/commands/refocus.md
---
description: Reset focus when Claude loses the plot.
argument-hint: [direction, e.g. "on my last q"]
disable-model-invocation: true
allowed-tools: Read
---
**STOP.**
You have been invoked because you lost focus. This is not a request — it is a correction.
$ARGUMENTS
**Immediate Actions:**
1. **Re-read CLAUDE.md** — Do this now. Read the entire file. Do not summarize from memory.
2. **State the current focus** — In one sentence, what is the user actually trying to accomplish?
3. **Acknowledge missteps** — If you rushed, went on tangents, speculated, fabricated,
or contradicted yourself — state it plainly. No excuses.
4. **Resume** — If $ARGUMENTS provides direction, act on it immediately.
Otherwise, continue from where the conversation left off.
---
3. Project-level rule file (.claude/rules/question-handling.md) — Loaded into every session in this repo:
# Question Handling Rule
**When the user asks a question, answer it. Nothing else.**
## What counts as a question
- Sentences ending with `?`
- "What does…", "How does…", "Why is…", "Where is…", "Can you explain…"
- "What would happen if…", "Is it possible to…"
- Requests for explanation, clarification, or information
## What to do
- **Answer the question** with the relevant information
- **Read code** if needed to give an accurate answer
- **Search the codebase** if needed to locate the relevant code
## What NOT to do
- Do NOT edit files
- Do NOT propose code changes
- Do NOT suggest improvements or refactors
- Do NOT run commands that modify state
- Do NOT treat the question as an implicit request to fix, change, or implement anything
## When to take action
Only when the user **explicitly instructs** you to act:
- "Fix this", "Change this", "Implement X", "Add Y", "Remove Z"
- "Go ahead", "Do it", "Make that change"
- Any clear imperative directing you to modify something
---
4. Global ~/.claude/CLAUDE.md — Applied across all repos:
# Global Claude Code Rules
## Question Handling
**When the user asks a question, answer it. Do not take action.**
- Questions get answers — no file edits, no code changes, no suggestions,
no commands that modify state.
- Only act when explicitly instructed with an imperative: "fix", "change",
"implement", "add", "remove", "do it".
- If uncertain whether something is a question or a request, treat it as a question.
---
5. Persistent feedback memory — Carried across sessions via Claude Code's memory system:
# feedback_questions_not_actions.md
---
name: Questions are not action requests
description: When user asks a question, answer it — do not take action, make suggestions,
or propose changes unless explicitly asked
type: feedback
---
When the user asks a question, answer the question. Nothing more.
**Why:** Repeated frustration where Claude interprets questions as implicit requests
to change something, then jumps to editing code, proposing options, or suggesting
improvements.
**How to apply:**
- A question gets an answer. Period.
- Do not append "I'll fix that" or "want me to change it?"
- Do not open an editor, run a command, or propose alternatives unless the user
follows up with an explicit request
- "a question cannot spawn shoulds" — no normative statements about what ought to happen
- "a question cannot spawn an action" — no tool calls in response to a pure question
- Wait for the user to tell you what to do next
---
None of these fully solve the problem. The model still intermittently overrides these instructions. They reduce frequency but don't eliminate the behavior — which is why this is filed as a model-level issue rather than a configuration question.
Claude Code Version
2.1.74 (Claude Code)
Platform
Anthropic API
Additional Context
- This pattern appears to stem from the model optimizing for "helpfulness" by anticipating the next step — inferring that if a user asks about code, they probably want to change it
- The behavior persists even with explicit instructions in CLAUDE.md, project rules, and persistent memory discouraging it
- A question should never spawn a tool call that modifies state
🤖 Generated with Claude Code
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗