Skip to content

Claude Code settings.json神配置:让AI代码效率飙升10倍

2026年4月30日

使用Claude Code的人,几乎都在吐槽同一个问题:每次想让它编辑文件或跑测试,都要点一下"允许"。一个小功能搞下来鼠标要连点几十次,整个思路都断了。一个settings.json文件,几条规则,就能让Claude不再为日常操作反复请求许可,同时又牢牢锁住那些真正可能搞出大问题的命令。

文件存放位置

和CLAUDE.md一样,分三个层级:

层级路径生效范围
全局~/.claude/settings.json对所有项目生效
项目级.claude/settings.json团队共享,提交到git
本地.claude/settings.local.json个人独有,应加入gitignore

各层级的规则会自动合并。 比如全局设置允许Bash(npm *),而项目设置里禁止了Bash(npm publish),两条规则会同时生效。禁止规则的优先级永远高于允许规则。

权限系统速览

三个数组控制一切:

json
{
  "permissions": {
    "allow": [],  // 直接使用,不弹确认框
    "deny": [],   // 完全不能碰
    "ask": []     // 每次都询问
  }
}

判断顺序:先查deny → 再查ask → 最后allow。 对于同一个工具,deny规则始终会覆盖allow规则。

规则的写法: 工具名称工具名称(模式)

json
"Bash"                    // 所有bash命令(风险极高)
"Bash(npm install)"      // 只匹配npm install
"Bash(npm run *)"         // 匹配任何npm run脚本
"Write(src/**)"           // 只允许在src/目录下写文件

⚠️ 注意:Bash(ls *)能匹配ls -la,但匹配不到lsof。这里用的是glob模式,不是正则。

五种权限模式

除了逐条写规则,也可以直接设定一个默认模式:

json
{
  "permissions": {
    "defaultMode": "default"
  }
}
模式说明
default危险操作一律询问
acceptEdits自动批准文件编辑,bash仍需询问
plan只读模式,不允许任何修改
dontAsk所有未显式允许的操作全部拒绝
bypassPermissions批准一切(仅限容器或CI环境)

会话过程中可以随时切换:Shift+Tab就能在default、acceptEdits和plan三种模式之间循环切换。

哪些该放行(安全清单)

以下命令每天要反复执行几十次,让Claude直接运行能省下大量时间:

json
{
  "permissions": {
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "LS",
      "Bash(npm run *)",
      "Bash(npm install *)",
      "Bash(npm test *)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git add *)",
      "Bash(git commit *)",
      "Bash(git checkout *)",
      "Write(src/**)",
      "Edit",
      "MultiEdit"
    ]
  }
}

规律: 读操作全放开,Bash命令只针对特定工具放行,写文件只限定在src/目录内。

哪些该禁止(安全防线)

以下命令可能造成严重损失,要一视同仁地封堵:

json
{
  "permissions": {
    "deny": [
      "Read(.env*)",
      "Read(**/secrets/**)",
      "Write(.env*)",
      "Write(production.*)",
      "Write(.github/workflows/*)",
      "Bash(rm -rf *)",
      "Bash(sudo *)",
      "Bash(git push *)",
      "Bash(git merge *)",
      "Bash(npm publish *)",
      "Bash(docker *)",
      "Bash(curl * | sh)",
      "Bash(wget *)"
    ]
  }
}

核心原则: Claude可以读代码、写代码、跑测试、提交变更。但它永远不能读取密钥,不能push到远端仓库,不能递归删除文件,也不能运行任何带sudo的命令。

给settings.json加上钩子

设置和钩子可以放在同一个文件里。比如每次编辑完自动格式化代码:

json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write(*.py)",
        "hooks": [
          {
            "type": "command",
            "command": "python -m black $file"
          }
        ]
      },
      {
        "matcher": "Write(*.ts)",
        "hooks": [
          {
            "type": "command",
            "command": "npx prettier --write $file"
          }
        ]
      }
    ]
  }
}

每个.py文件保存后自动用Black格式化,每个.ts文件保存后自动用Prettier格式化。不弹窗,不用手动操作。

团队共享配置

把项目级配置放在.claude/settings.json里提交到git,整个团队就能共用同一套权限:

json
{
  "permissions": {
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Bash(npm run *)",
      "Bash(npm test *)"
    ],
    "deny": [
      "Read(.env*)",
      "Bash(npm publish *)",
      "Bash(rm -rf *)",
      "Write(production.*)"
    ],
    "defaultMode": "acceptEdits"
  }
}

新同事拉下仓库,打开Claude Code,一切都已配置妥当。 不用折腾初始设置,不用纠结哪些命令该放行,也不用担心有人不小心放行了Bash(rm -rf *)

完整配置示例

这是一套针对Node.js/TypeScript项目可以直接使用的完整settings.json:

json
{
  "permissions": {
    "allow": [
      "Read", "Glob", "Grep", "LS",
      "Edit", "MultiEdit",
      "Write(src/**)", "Write(tests/**)", "Write(docs/**)",
      "Bash(npm run *)", "Bash(npm install *)", "Bash(npm test *)",
      "Bash(npx tsc *)", "Bash(npx vitest *)", "Bash(npx prettier *)",
      "Bash(git status)", "Bash(git diff *)", "Bash(git log *)",
      "Bash(git add *)", "Bash(git commit *)", "Bash(git checkout *)",
      "Bash(git branch *)", "Bash(cat *)", "Bash(head *)",
      "Bash(tail *)", "Bash(wc *)", "Bash(find *)", "Bash(echo *)"
    ],
    "deny": [
      "Read(.env*)", "Read(**/secrets/**)",
      "Write(.env*)", "Write(production.*)",
      "Write(.github/workflows/*)", "Write(package-lock.json)",
      "Bash(rm -rf *)", "Bash(sudo *)", "Bash(git push *)",
      "Bash(git merge *)", "Bash(git rebase *)",
      "Bash(npm publish *)", "Bash(docker *)",
      "Bash(curl * | sh)", "Bash(wget *)",
      "Bash(chmod *)", "Bash(chown *)"
    ],
    "defaultMode": "acceptEdits"
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write(*.ts)",
        "hooks": [
          {
            "type": "command",
            "command": "npx prettier --write $file"
          }
        ]
      }
    ]
  }
}

配置前后对比

配置前配置后
每次会话弹出30-

不要孤军奋战啦!

加入微信群一起学习交流 AI

与大神一起使用 OpenClaw、Hermes、Claude Code、Seedance 2.0、GPT-Image-2 等

微信公众号

扫码关注微信公众号
私信 "加群",将自动获取微信群二维码

探索 AI 世界,掌握智能未来