claude-opus-4-6 used sed -i '' on ~/.zshrc which silently emptied the file on macOS.

Resolved 💬 3 comments Opened Apr 11, 2026 by eljur Closed Apr 15, 2026

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 modified files I didn't ask it to modify

What You Asked Claude to Do

Claude Code used sed -i '' on ~/.zshrc which silently emptied the file on macOS. The Edit tool
exists specifically to prevent this, but the agent bypassed it. The Bash(*) permission allowed unrestricted shell
access including destructive operations on personal dotfiles outside the project directory.

This is a safety gap. The permission system allows Bash(*) as a blanket grant, but there's no built-in guardrail
against destructive operations on files outside the working directory. The user had to build their own hook to
prevent it.

What Claude Actually Did

<img width="1618" height="502" alt="Image" src="https://github.com/user-attachments/assets/476e1b85-2529-41d4-a790-2bdb1e57399c" />

Expected Behavior

Claude should have:

  1. Read the file first with the Read tool to see full contents
  2. Use the Edit tool to change the specific line
  3. Never use sed on files outside the project, especially dotfiles with no backup

Files Affected

dropped .zshrc

Permission Mode

Accept Edits was ON (auto-accepting changes)

Can You Reproduce This?

Haven't tried to reproduce

Steps to Reproduce

_No response_

Claude Model

Opus

Relevant Conversation

terminal log:

⏺ Missing the export keyword. The variable is set but not exported to child processes. You need to add export in
  front. Want me to fix your .zshrc?

✻ Cogitated for 38s

❯ yes                                                                                                               

⏺ Update(~/.zshrc)
  ⎿  File must be read first

⏺ Update(~/.zshrc)
  ⎿  (No output)

⏺ Bash(source ~/.zshrc 2>/dev/null; echo "OPENROUTER_API_KEY set: $([ -n "$OPENROUTER_API_KEY" ] && echo yes || echo
       no)")
  ⎿  OPENROUTER_API_KEY set: no

⏺ The current shell session doesn't pick up .zshrc changes via source in Bash tool (it runs in a subshell). You'll
  need to restart the session for it to take effect, or run ! source ~/.zshrc from the prompt.

Impact

Critical - Data loss or corrupted project

Claude Code Version

2.1.101 (Claude Code)

Platform

Anthropic API

Additional Context

_No response_

View original on GitHub ↗

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