Claude Code

如何允许 Claude Code 运行所有命令:权限模式、allow 规则与跳过权限

如何让 Claude Code 不再每次都请求权限?

按 Shift+Tab 循环切换权限模式,使用 claude --permission-mode <mode> 启动,或在 .claude/settings.json 中用 permissions.allow 规则(如 Bash(npm run *))预先批准特定命令。Auto 模式在运行时没有常规提示,由分类器审查操作;--dangerously-skip-permissions 仅适用于容器或虚拟机。

本文译自英文版指南。命令、配置键与代码均保持原样;如有出入,以英文版为准。 阅读英文原版 → · 其他语言: 日本語 · 한국어 · Español · Português (Brasil)

设置一变,第一时间知道

当这些工具的设置、参数或权限规则发生变化时,每周一封邮件通知你(英文),内容均对照官方文档核实。

权限模式

  • default(标签为 Manual):每个工具首次使用时提示。
  • acceptEdits:自动接受工作目录中的文件编辑和常见文件系统命令,如 mkdir、touch、mv 和 cp。
  • plan:探索并运行只读命令,但不编辑源文件。
  • auto:没有常规提示;后台分类器会根据你的请求检查 shell 命令和网络请求。从 v2.1.283 起,它是内置的初始模式。
  • dontAsk:拒绝所有需要提示的操作,预先批准的工具除外。
  • bypassPermissions:跳过提示,包括对 .git 和 .claude 等受保护路径的写入。仅用于隔离的容器或虚拟机。

切换模式

  • 会话期间:按 Shift+Tab 循环切换 default → acceptEdits → plan(以及其他已启用的模式)。
  • 单次会话:claude --permission-mode plan(或 default、acceptEdits、auto、dontAsk)。
  • 设为默认:在 ~/.claude/settings.json 中设置 permissions.defaultMode。

改为预先批准精确命令

Allow 规则比跳过所有检查更安全。把 * 放在子命令之后:Bash(git log *) 只允许 git log,而 Bash(git *) 允许所有 git 命令。Deny 规则始终优先。

.claude/settings.json

{
  "permissions": {
    "allow": ["Bash(npm run *)", "Bash(git commit *)"],
    "deny": ["Bash(git push *)"]
  }
}

在 Claude Code 中使用 /permissions 查看所有规则及其来源设置文件。

完全无人值守运行

仅在容器或虚拟机内,以非 root 用户运行

claude -p "run the test suite and fix failures" --dangerously-skip-permissions

允许的工具:--allowedTools 和 permissions.allow

--allowedTools(也可写作 --allowed-tools)列出在单次会话中无需提示即可运行的工具。它使用与 settings.json 中 permissions.allow 相同的规则语法。--disallowedTools 添加 deny 规则,只写工具名(如 Edit)会将该工具从会话中移除。

单次会话,预先批准 git 读取命令

claude --allowedTools "Bash(git log *)" "Bash(git diff *)" "Read"
  • 规则检查顺序为先 deny,再 ask,最后 allow。即使更窄的 allow 规则也匹配,像 Bash(aws *) 这样宽泛的 deny 仍会阻止调用。
  • Bash 规则能理解 shell 运算符:Bash(safe-cmd *) 不会批准 safe-cmd && other-cmd。每个子命令都必须单独匹配。
  • Bash(ls:*) 等同于 Bash(ls *)。:* 形式只能用在模式末尾。
  • MCP 工具:mcp__puppeteer 允许 puppeteer 服务器的所有工具,mcp__puppeteer__puppeteer_navigate 允许单个工具。Allow glob 需要字面的服务器名,因此 mcp__* 的 allow 规则会被跳过并给出警告。
  • 网络抓取:WebFetch(domain:example.com) 只匹配 example.com。要覆盖子域名,请添加 WebFetch(domain:*.example.com)。
  • 要限制哪些内置工具可用,请使用 --tools "Bash,Edit,Read",而不是 allow 列表。

来源

以下为本指南核对过的官方文档(英文)。 英文版核对日期: 2026-10-18

更多中文指南