Claude Code Manual

权限与安全

Claude Code 能运行命令、修改文件。权限设置决定了它哪些事可以直接做、哪些事要先问你。

权限模式

模式不用问你就能做的事适合
手动(Manual,配置值 default)只能读取新手、敏感操作,每一步都自己把关
接受修改(acceptEdits)读取、修改文件、常见的文件操作命令(mkdir、mv、cp 等)你在一旁审阅的日常修改
计划(plan)读取和调查,只提方案、不改源文件动手之前先研究、先出方案
自动(auto)几乎所有操作,由另一个模型在后台做安全检查熟练用户的长任务
跳过权限(bypassPermissions)所有操作只适合隔离的容器或虚拟机

会话中按 Shift + Tab 循环切换模式,底部状态栏会显示当前模式,例如 manual mode on、accept edits on、plan mode on、auto mode on。也可以在启动时指定:

claude --permission-mode plan

新版默认是自动模式

从 v2.1.283 起,在终端里启动的会话默认进入自动模式:由一个分类模型替你判断操作是否安全,而不是每次都问你。它很方便,但新手很难知道它到底做了什么。

建议在 ~/.claude/settings.json 中把默认模式改成手动:

{
  "permissions": {
    "defaultMode": "default"
  }
}

下次启动时,状态栏会显示 ⏸ manual mode on。熟练以后,再按需切换到其他模式。

计划模式里也有同样的问题:只要自动模式可用,计划阶段调查用的命令默认也由分类模型替你批准。想在计划模式里也由自己审批,再加上顶层设置 "useAutoModeDuringPlan": false。关闭后,内置只读命令之外的命令都会先问你(用 --dangerously-skip-permissions 等方式启用了跳过权限的交互式终端会话除外:那里计划阶段的命令大多既不经过分类模型、也不询问你,只有少数情况仍会提示,所以不要那样启动):

{
  "permissions": {
    "defaultMode": "default"
  },
  "useAutoModeDuringPlan": false
}

这个设置要写在个人的 ~/.claude/settings.json 或项目本地的 .claude/settings.local.json 里;写在项目共享的 .claude/settings.json 里的 false 会被忽略。反过来,即使公司托管配置设成了 true,你个人或项目本地的 false 仍然生效。

审批提示

在手动模式下,Claude Code 要修改文件或运行命令时,会显示具体内容并请你确认。你可以只允许这一次、选择以后不再询问(Yes, and don't ask again),或者拒绝。拒绝时可以顺便告诉它应该怎么做。

“不再询问”的有效期因操作而异:

操作选“不再询问”后
修改文件本次会话结束前不再询问
运行某类命令、访问某个网站在这个项目里永久不再询问,规则保存到 .claude/settings.local.json

所以对命令选“不再询问”要慎重。选错了可以输入 /permissions 找到对应规则删除。

判断标准只有一条:看得懂、并且是你想要的,才允许。 看不懂就拒绝,然后问它“这条命令是做什么的”。

允许、询问、拒绝规则

对经常重复的安全操作,可以写规则让它不再询问;对危险操作,可以写规则直接拒绝。规则写在 settings.json 的 permissions 里:

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)"
    ],
    "deny": [
      "Bash(git push *)",
      "Read(./.env)"
    ]
  }
}
  • allow:直接允许;ask:总是询问;deny:直接拒绝。
  • Bash(npm run *) 中的 * 代表任意内容,这条规则允许所有 npm run ... 命令。
  • 拒绝优先:同一个操作同时匹配 deny 和 allow 时,按 deny 处理。
  • Read(./.env) 禁止读取 .env 文件,也会阻止修改它。但它只管 Claude 自带的文件工具和 cat 这类它认得的命令,挡不住脚本程序自己去读。

在会话中输入 /permissions 可以查看和编辑规则。

沙箱

在 macOS、Linux 和 WSL 2 上,可以用 /sandbox 打开沙箱:Claude Code 运行的命令会被限制在指定的文件和网络范围内。Windows 原生和 WSL 1 暂不支持。沙箱和权限模式可以叠加使用。

回退:撤销 Claude 的修改

Claude Code 会在你每次发出新任务前自动保存一个检查点。输入框为空时连按两次 Esc,或者输入 /rewind,打开回退菜单,选择要回到的那一步:

  • Restore code and conversation:代码和对话都回到那一步;
  • Restore conversation:只回退对话,保留现在的代码;
  • Restore code:只回退代码,保留对话。

回退有边界:

  • 通过 Bash 命令做的改动(例如 rm、mv、脚本生成的文件)不会被记录,回退不了;
  • 你自己在 Claude Code 之外手动做的修改也不会被记录。

所以,检查点不能代替 Git。动手做大改动之前,先用 Git 提交一个存档。

跳过权限要非常谨慎

claude --dangerously-skip-permissions 会跳过所有权限确认。只在可以随时丢弃的容器、虚拟机里使用,不要在自己的电脑、生产服务器或存有密钥的目录里使用。网上一些“懒人配置”会默认开启它,复制配置前先看清楚。

操作习惯

  • 先用计划模式让它说清方案,确认后再切换模式让它动手。
  • 每轮修改后用 git diff 查看改动。
  • 对删除、覆盖、推送、提权类的命令保持警惕。
  • 不要让它读取或输出密钥;把密钥放在环境变量里,并用 deny 规则挡住 .env 文件。