上下文不是权限
在提示词或 CLAUDE.md 中写“不要删除文件”,属于行为指导;真正阻止操作需要 Claude Code 的权限规则、权限模式、沙箱或 Hook。官方文档明确区分这两层:模型决定想做什么,权限系统决定工具是否允许执行。
先查看当前权限
在 Claude Code 会话中运行:
/permissions
权限界面会列出允许和拒绝规则,以及规则来自哪个设置文件。开始使用新仓库时,不要直接允许所有命令;先观察项目真实需要哪些读取、测试和构建操作。
权限模式的选择
不同版本和组织策略可能提供不同权限模式,但基本原则不变:
| 场景 | 建议 |
|---|---|
| 阅读陌生仓库 | 从只读或需要确认的模式开始 |
| 修改可信本地项目 | 允许工作区写入,敏感操作继续询问 |
| CI 或批处理 | 明确限定工具和命令,不依赖交互确认 |
| 生产环境、密钥、基础设施 | 不直接授权,使用隔离环境和独立审核 |
可以用 Shift+Tab 在当前支持的权限模式间切换。切换前先确认状态栏描述,而不是只记忆快捷键顺序。
配置允许和拒绝规则
项目设置通常位于 .claude/settings.json,个人设置通常位于 ~/.claude/settings.json。下面展示一种最小思路:允许常用验证命令,拒绝读取密钥文件。
{
"permissions": {
"allow": [
"Bash(npm run typecheck)",
"Bash(npm test *)",
"Bash(npm run build)"
],
"deny": [
"Read(.env)",
"Read(.env.*)"
]
}
}
具体语法应以当前官方权限文档为准。规则越宽泛,越容易让本来需要确认的命令被自动执行。尤其不要为了减少弹窗就批准通用 shell 包装器或任意命令前缀。
设置的作用域
Claude Code 设置可能来自个人、项目、本地和组织托管层。团队需要提交的规则放在项目设置中;只适合个人机器的路径、代理或实验选项放在本地设置中;组织安全要求由管理员托管。
出现“明明修改了设置但没有生效”时,按下面顺序检查:
- 当前会话是否需要重新启动。
- 是否存在更高优先级的托管设置。
/permissions显示的规则来源是否符合预期。- 当前工作目录是否是目标仓库。
- 规则是否过于宽泛或语法不匹配。
最小权限练习
让 Claude Code执行一个不会修改文件的检查:
请只运行项目的类型检查并解释失败原因,不修改任何文件。
确认命令和输出无误后,再允许它修复一个范围清晰的问题。通过逐步授权,你能分辨项目真正需要的权限,而不是一次性开放全部能力。