【Bug已解决】--auto mode dangerous operations / Unintended file deletion — Claude Code 自动模式危险操作解决方案1. 问题描述使用claude --auto或在 Auto 模式下Claude Code 未经确认执行了危险操作# Auto 模式下删除了不应该删除的文件 $ claude --auto 清理项目中的无用文件 # Claude Code 执行了: rm -rf node_modules/ src/ tests/ # 删除了重要目录 # 或修改了不应该修改的配置文件 优化项目配置 # Claude Code 修改了 .git/config 和 .env # 或执行了危险的 git 操作 提交所有修改 # Claude Code 执行了: git push --force # 强制推送覆盖了远程历史这个问题在以下场景中特别常见Auto 模式没有限制可执行的工具allowedTools 配置过于宽松Claude Code 误解了清理的范围没有配置 .claudeignore 保护重要文件CLAUDE.md 没有声明禁止操作2. 原因分析核心原理拆解Auto 模式 → 所有工具调用自动审批 ↓ Claude Code 执行 rm/git push --force 等危险命令 ↓ 没有人工确认拦截 ↓ 不可逆的破坏性操作原因分类表原因分类具体表现占比allowedTools 过宽Bash 工具无限制约 40%无 .claudeignore重要文件未保护约 25%无 CLAUDE.md 禁令没有声明禁止操作约 20%-- Auto 模式失控自动审批所有操作约 10%指令模糊清理被过度解读约 5%3. 解决方案方案一配置精确的 allowedTools最推荐# 步骤 1只允许安全的工具 cat ~/.claude/settings.json EOF { allowedTools: [ Read, Write, Edit, Search ] } EOF # 不包含 Bash避免执行任意命令 # 步骤 2如果需要 Bash限制命令 { allowedTools: [ Read, Write, Edit, Search, Bash ], blockedCommands: [ rm -rf, git push --force, git reset --hard, chmod 777, sudo ] }方案二配置 .claudeignore 保护重要文件# 步骤 1创建 .claudeignore cat .claudeignore EOF # 保护关键文件 .git/ .env .env.* .gitignore package.json tsconfig.json *.lock *.key *.pem credentials* config/database.yml EOF # 步骤 2Claude Code 不会修改 .claudeignore 中的文件方案三在 CLAUDE.md 中声明禁止操作# 步骤 1创建 CLAUDE.md 安全规范 cat .claude/CLAUDE.md EOF # 安全规范必须遵守 ## 禁止操作 - 禁止使用 rm -rf 删除目录 - 禁止 git push --force - 禁止 git reset --hard - 禁止修改 .env 文件 - 禁止修改 .git/ 目录 - 禁止修改 package.json 的 dependencies - 禁止执行 sudo 命令 - 禁止修改 tsconfig.json 等配置文件 ## 允许操作 - 只修改 src/ 目录下的代码文件 - 只在 tests/ 目录下添加测试 - 运行 npm test 验证修改 EOF方案四不使用 Auto 模式# 步骤 1使用交互模式手动审批每个工具调用 claude # 不加 --auto # 步骤 2对危险操作说否 # 当 Claude Code 请求执行 rm 或 git push 时 # 选择不批准 # 步骤 3如果需要自动化使用 --print 模式 claude --print 修复 src/index.js 中的 bug --max-turns 10 # --print 模式更可控方案五使用 Git 提供安全网# 步骤 1在使用 Auto 模式前先提交 git add -A git commit -m backup before auto mode # 步骤 2如果 Auto 模式造成破坏 git checkout . # 或 git reset --hard HEAD # 步骤 3恢复被删除的文件 git checkout HEAD -- src/ tests/ # 步骤 4使用 Git 钩子防止危险操作 # .git/hooks/pre-push #!/bin/bash if git log --oneline | head -1 | grep -q force; then echo Force push detected, blocking! exit 1 fi方案六使用沙箱环境# 步骤 1在 Docker 容器中运行 Auto 模式 docker run -it --rm \ -v $(pwd):/app -w /app \ --read-only \ -v /tmp/changes:/tmp/changes \ node:22 claude --auto # 步骤 2或使用 Git Worktree 隔离 git worktree add /tmp/claude-work cd /tmp/claude-work claude --auto # 完成后合并或丢弃4. 各方案对比总结方案适用场景推荐指数难度方案一精确 allowedTools核心防护⭐⭐⭐⭐⭐低方案二.claudeignore文件保护⭐⭐⭐⭐⭐低方案三CLAUDE.md禁令声明⭐⭐⭐⭐⭐低方案四不用 Auto最安全⭐⭐⭐⭐低方案五Git 安全网可恢复⭐⭐⭐⭐⭐低方案六沙箱隔离⭐⭐⭐⭐高5. 常见问题 FAQ5.1 Auto 模式有哪些风险Auto 模式自动审批所有工具调用包括 Bash 命令。Claude Code 可能执行 rm、git push --force 等不可逆操作。5.2 如何在 Auto 模式下保持安全配置精确的allowedTools不含 Bash 或限制 Bash配置.claudeignore保护关键文件在 CLAUDE.md 中声明禁止操作使用前git commit创建备份5.3 Bash 工具可以限制特定命令吗在 settings.json 中配置blockedCommands列表阻止特定命令模式。5.4 .claudeignore 和 .gitignore 的区别.gitignoreGit 版本控制忽略.claudeignoreClaude Code 不会读取/修改这些文件两者独立配置建议关键文件同时加入两个5.5 Claude Code 会遵守 CLAUDE.md 中的禁令吗会。Claude Code 会将 CLAUDE.md 作为系统提示的一部分遵循其中的指令。明确的禁止指令通常会被遵守。5.6 Auto 模式误删了文件如何恢复# 如果之前有 git commit git checkout HEAD -- 被删的文件 # 如果没有 commit # 检查 git stash git stash list # 或从编辑器的撤销历史恢复5.7 --print 模式比 --auto 安全吗是的。--print模式只执行有限轮次且通常不执行 Bash 命令除非在 allowedTools 中。更适合自动化。5.8 Docker --read-only 模式docker run --read-only -v /tmp/changes:/app/src node:22 claude --auto # 文件系统只读只有 /tmp/changes 可写 # Claude Code 的修改限制在指定目录5.9 企业环境中的安全策略在 CLAUDE.md 中明确企业安全规范禁用 Auto 模式使用 CI/CD 审查 Claude Code 的修改。5.10 排查清单速查表□ 1. allowedTools 只包含安全工具不含 Bash □ 2. blockedCommands 阻止 rm -rf, git push --force □ 3. .claudeignore 保护 .git/.env/package.json □ 4. CLAUDE.md 声明禁止操作 □ 5. Auto 模式前先 git commit 备份 □ 6. 优先使用交互模式而非 Auto □ 7. --print 模式比 --auto 更安全 □ 8. Docker --read-only 隔离修改 □ 9. Git Worktree 隔离 Auto 模式操作 □ 10. 定期检查 git diff 确认修改范围6. 总结根本原因Auto 模式危险操作最常见原因是 allowedTools 过宽40%Bash 无限制和无 .claudeignore 保护25%最佳实践配置精确的allowedTools不含 BashblockedCommands阻止 rm -rf、git push --force.claudeignore保护关键文件CLAUDE.md 禁令在 CLAUDE.md 中明确声明禁止操作如禁止使用 rm -rfClaude Code 会遵循Git 安全网Auto 模式前先git commit创建备份出错时用git checkout恢复最佳实践建议避免在 Auto 模式下执行清理等模糊指令——改用具体指令删除 src/ 下所有 .test.js 文件并在交互模式下审批每个危险操作故障排查流程图flowchart TD A[Auto 模式危险操作] -- B{是否已造成破坏?} B --|是| C[git checkout 恢复] B --|否, 预防| D[配置 allowedTools] C -- E[git checkout HEAD -- 被删文件] E -- F[✅ 恢复完成] D -- G[移除 Bash 或限制命令] G -- H[配置 blockedCommands] H -- I[创建 .claudeignore] I -- J[保护 .git/.env/config] J -- K[CLAUDE.md 声明禁令] K -- L[Auto 前先 git commit] L -- M[优先使用交互模式] M -- N[✅ 安全配置完成]