公司 Claude Code 老是询问权限,怎么配置才能少打扰

7次阅读
没有评论

公司里的 Claude Code 用久了以后,最容易烦人的地方不是它不会写代码,而是它经常停下来问权限:读个文件要不要允许,改个文件要不要允许,跑个 git status 要不要允许。项目本来就在自己电脑上,也有 Git 做版本兜底,每次都点确认,心流很容易被打断。

这类问题通常不是模型能力问题,而是 Claude Code 的权限策略在起作用。它默认把本地文件、Shell 命令、网络和敏感路径都当成需要确认的动作。这个设计是合理的,只是对固定可信项目来说,可以稍微配置得顺手一点。

优先用项目级配置,而不是全局放开

如果只是几个固定项目完全信任,建议优先在项目根目录放:

.claude/settings.local.json

settings.local.json 适合放个人机器上的偏好配置,不应该提交到 Git。这样每个项目可以按自己的风险级别配置权限,不会把全局权限开得太大。

Windows 上的全局配置路径通常是:

%USERPROFILE%\.claude\settings.json

全局配置适合放通用习惯,项目级配置适合放某个仓库可以长期信任的命令。

固定项目路径也可以配到全局

如果你有几个长期维护的公司项目,每次打开 Claude Code 都会因为路径权限反复确认,可以在全局 settings.json 里加 additionalDirectories

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "defaultMode": "acceptEdits",
    "additionalDirectories": [
      "C:/Users/你的用户名/Documents/Dev/project-a",
      "C:/Users/你的用户名/Documents/Dev/project-b",
      "D:/work/company-project"
    ],
    "allow": [
      "Read",
      "Edit",
      "PowerShell(git *)",
      "PowerShell(npm *)",
      "PowerShell(pnpm *)",
      "PowerShell(node *)",
      "PowerShell(rg *)",
      "Bash(git *)",
      "Bash(npm *)",
      "Bash(pnpm *)",
      "Bash(node *)",
      "Bash(rg *)"
    ],
    "deny": [
      "Read(//**/.env)",
      "Read(//**/.env.*)",
      "Read(//**/secrets/**)",
      "PowerShell(Remove-Item *)",
      "PowerShell(git reset --hard*)",
      "PowerShell(git push --force*)",
      "Bash(rm -rf *)",
      "Bash(git reset --hard*)",
      "Bash(git push --force*)"
    ]
  }
}

这里有两个细节:

  • Windows 路径建议写成 C:/Users/... 这种斜杠形式,少踩转义坑。
  • additionalDirectories 解决的是 Claude Code 可以信任哪些额外目录;终端命令仍然要通过 PowerShell(...)Bash(...) 单独放行。

如果只想给某个目录更精确的读写权限,也可以写成路径规则。Windows 绝对路径在 Claude Code 权限规则里通常会归一成 POSIX 风格,例如:

"Edit(//c/Users/你的用户名/Documents/Dev/project-a/**)"

不过日常不建议一上来写得太细。固定可信项目用 additionalDirectories,危险动作用 deny 兜底,维护成本更低。

一个适合公司项目的基础配置

可以先在项目里创建 .claude/settings.local.json

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": [
      "Read",
      "Edit",
      "Bash(git *)",
      "PowerShell(git *)",
      "Bash(npm *)",
      "PowerShell(npm *)",
      "Bash(pnpm *)",
      "PowerShell(pnpm *)",
      "Bash(yarn *)",
      "PowerShell(yarn *)",
      "Bash(node *)",
      "PowerShell(node *)",
      "Bash(rg *)",
      "PowerShell(rg *)"
    ],
    "deny": [
      "Bash(git push --force*)",
      "PowerShell(git push --force*)",
      "Bash(git reset --hard*)",
      "PowerShell(git reset --hard*)",
      "Bash(rm -rf *)",
      "PowerShell(Remove-Item *)",
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(./secrets/**)"
    ]
  }
}

这里最关键的是:

"defaultMode": "acceptEdits"

它的意思是:对工作目录里的编辑操作更信任,减少“是否允许修改文件”的打扰。但它不是完全裸奔,很多命令和敏感动作仍然会按规则判断。

Windows 上要注意 PowerShell 规则

很多人明明写了:

"Bash(git *)"

但 Claude Code 在 Windows 上仍然问权限,原因可能很简单:它实际走的是 PowerShell,不是 Bash。

所以 Windows 项目里建议把常用命令同时写两份:

"Bash(git *)",
"PowerShell(git *)"

npmpnpmnoderg 这些命令也一样。你允许了 Bash,不代表 PowerShell 自动被允许。

不建议直接全局跳过权限

Claude Code 有更激进的模式,例如:

{
  "permissions": {
    "defaultMode": "bypassPermissions"
  }
}

或者启动时使用类似跳过权限检查的参数。这个模式确实安静,但风险也明显变大:误删未提交文件、读取敏感配置、执行危险命令,都可能绕过正常确认。

如果是在临时容器、虚拟机、一次性测试仓库里,可以考虑。公司真实项目、个人主力电脑、包含 .env 或内部代码的仓库,不建议长期这么开。

显式 deny 比 allow 更重要

权限配置里不要只想着“允许什么”,也要明确“永远不允许什么”。比如:

"Bash(git reset --hard*)",
"PowerShell(git reset --hard*)",
"Bash(git push --force*)",
"PowerShell(git push --force*)",
"Read(./.env)",
"Read(./.env.*)"

这些动作即使自己有 Git,也值得单独拦住。Git 能恢复已提交内容,但恢复不了所有未提交草稿、临时文件和本地密钥泄露风险。

复合命令也可能触发多次询问

如果 Claude Code 要执行:

git status && pnpm test

它可能会分别检查 git statuspnpm test。只允许其中一个,另一个还是会问。

所以项目里最常用的检查命令,最好直接放进 allowlist,例如:

"Bash(pnpm test*)",
"PowerShell(pnpm test*)",
"Bash(pnpm run *)",
"PowerShell(pnpm run *)"

这样它跑测试、跑 lint、看 Git 状态时会顺很多。

如果公司有托管策略,本地配置可能压不过

公司版 Claude Code 可能会有企业托管策略。遇到“我明明配置了 allow,它还是一直问”的情况,可以先在 Claude Code 里看两件事:

/status

看是否存在企业托管配置。

再看:

/permissions

确认当前到底是哪条规则在生效。

如果企业策略明确要求某些命令必须确认,本地配置就不要和它硬拧,按公司的安全边界来。

我的建议

固定可信项目可以这样分层:

  1. 全局放温和设置,例如 acceptEdits
  2. 对几个长期可信目录,在全局 additionalDirectories 里列清楚。
  3. 每个项目再用 .claude/settings.local.json 补充项目自己的常用命令 allowlist。
  4. .envsecretsgit reset --hardgit push --force 这类动作显式 deny。
  5. Windows 上同时配置 Bash(...)PowerShell(...)
  6. 只有在隔离环境里才考虑 bypassPermissions

这样配置后,Claude Code 处理小修改、小检查时不会老打断你;真正有风险的动作仍然会被拦下来。对日常开发来说,这个平衡点比“每一步都问”和“什么都不问”都更舒服。

参考

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-06-09发表,共计3684字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)