Repository navigation
Permissions
英文名:
permissions· 领域:权限与安全 · 返回功能索引
Claude 每次要改文件、跑命令、访问网络之前,都会判断要不要先问你。决定这件事的有三样东西:
- 权限规则:你提前写好的「这类操作直接允许 / 总是先问 / 一律禁止」。
-
权限模式:整体的松紧程度,例如「改文件不用问」或「先只做计划」。按
Shift+Tab切换。 -
安全底线:改
.git/、.claude/、shell 配置这类敏感位置,不论规则和模式怎么设,都会先问(bypass 模式除外,见下文)。
自动模式(让分类器替你判断)见 auto-mode.md。
没有规则覆盖的操作会弹出确认框,并显示要改的内容:

| 选项 | 效果 |
|---|---|
| 1. Yes | 只允许这一次 |
| 2. Yes, allow all edits during this session | 本次会话里改文件都不再问(等于切到 accept edits 模式,也可以按 Shift+Tab) |
| 3. No | 拒绝;Claude 会收到 User rejected ... 并换个做法 |
Tab 可以在拒绝时补一句说明(例如「别改这个文件,改 docs/ 下面的」),Esc 取消。
在 settings.json 里写 permissions。下面是本页演示用的配置:
{
"permissions": {
"allow": ["Edit(src/**)", "Read"],
"ask": ["Bash(git push:*)"],
"deny": ["Bash(rm:*)"]
}
}效果:改 src/ 下的文件直接执行;改 README.md 不在 allow 范围里,照常询问(上一张图);rm 命令被直接拒绝,模型收到错误后自行处理:
● Update(src/a.ts)
⎿ Added 1 line, removed 1 line
1 -export const a = 1
1 +export const a = 2
● Bash(rm -rf build)
⎿ Error: Permission to use Bash with command rm -rf build has been denied.
三种规则的优先级是 deny > ask > allow。
| 写法 | 匹配 |
|---|---|
Read、WebFetch
|
整个工具 |
Bash(git push:*) |
以 git push 开头的命令 |
Edit(src/**) |
当前目录下 src/ 里的任何文件 |
Agent(model:opus) |
按工具参数匹配:用 opus 模型的子 Agent |
WebFetch(domain:*.example.com) |
指定域名,支持 *.example.com、api-*.example.com、domain:*
|
mcp__github / mcp__github__*
|
某个 MCP server 的全部工具(server 名里有 __ 时用后一种) |
mcp__github__get_* |
MCP 工具名通配 |
Web* |
工具名通配,只能用在 deny / ask |
几条容易踩的细节:
- Bash 的 deny / ask 规则会「看穿」包装:
sudo rm、env X=1 rm、nohup rm、exec rm都按rm匹配。 -
Bash(find:*)不会放行带-exec、-execdir、-ok、-delete的 find。 - 超过 10000 字符、或以悬空的
&&/||/|结尾的命令一律询问。 - 工作目录外的写入、带
cd的复合写入命令、带参数的cp/mv仍会询问。 -
WebFetch(domain:...)规则优先于内置的预批准域名。
不想手改 JSON 时用 /permissions。←/→ 切换分页:最近被拒绝的、Allow、Ask、Deny、自动模式规则、工作区目录:

选 Add a new rule…,输入规则后选择保存位置:
Add deny permission rule
WebFetch(domain:*.internal.example.com)
Where should this rule be saved?
❯ 1. Project settings (local) Saved in .claude/settings.local.json
2. Project settings Checked in at .claude/settings.json
3. User settings Saved in at ~/.claude/settings.json
按 Shift+Tab 在模式之间切换,当前模式显示在提示框下方:
⏵⏵ accept edits on (shift+tab to cycle)
⏵⏵ auto mode on (shift+tab to cycle)
| 模式 | 启动参数 --permission-mode
|
行为 |
|---|---|---|
| Manual(默认) |
manual(即 default) |
按规则来,没规则就问 |
| Accept edits | acceptEdits |
改文件不再问;命令照常问 |
| Plan | plan |
只读、只出计划,不动文件;需要先开启 planModeAvailable
|
| Auto | auto |
由分类器判断是否需要问,见 auto-mode.md |
| Don't ask | dontAsk |
没有规则放行的操作直接拒绝,不弹框 |
| Bypass | bypassPermissions |
都不问(灾难性删除如 rm -rf /、删主目录仍会问);只建议在隔离环境用 |
- 默认的
Shift+Tab轮替是 Manual → Accept edits → Auto → Manual。Plan 默认不在轮替里,打开"planModeAvailable": true后才出现(/plan、EnterPlanMode也受它控制):
⏸ plan mode on (shift+tab to cycle)
- Bypass 只有在你同意过警告、或用启动参数开启后才会出现在轮替里;
/yolo是切到 bypass 的快捷命令。被组织策略禁用时会提示Bypass permissions mode was not enabled并保持原模式。 - 模式会记在对话里,
--resume/--continue回来时恢复上次的模式(命令行显式指定的优先)。
写入下面这些位置时,即使在 Accept edits 模式、即使有 allow 规则,也会先问:
-
.git/、.claude/ - shell 配置文件
- 构建工具配置:
.npmrc、bunfig.toml、.husky、.cargo等
确认框里会注明原因:

读取 UNC 网络路径(//host/share、\\host\share)也总是要人工确认。Bypass 模式下受保护路径不再询问,但灾难性删除仍要确认。
为了防止仓库里的配置「偷偷放权」,项目级 .claude/settings.json 和 .claude/settings.local.json:
- 把
defaultMode设成bypassPermissions或auto会被忽略; -
env里不能设置CLAUDE_CONFIG_DIR、HOME、TMPDIR,不能打开 Anthropic 遥测或改写 OTel 导出目标; - 被 git 跟踪的
.claude/settings.local.json,在你没有明确信任这个工作区之前,其中的 allow 规则不生效。
组织托管设置开启 allowManagedPermissionRulesOnly 后,skill 和命令里声明的 allowed-tools 不再自动放行。
claude --safe-mode(或 CLAUDE_CODE_SAFE_MODE=1)启动一个「干净」的会话:不加载 CLAUDE.md、插件、MCP、非托管 hooks、自定义 agents / skills 等定制,组织托管的设置仍然生效。怀疑是某个配置把 Claude 搞坏了时,先用它确认问题是否消失。
claude -p 没有界面可以弹确认框。加 --permission-prompts none 时,所有需要确认的操作直接拒绝,模型收到:
Permission to use Bash has been denied. ...
默认 --permission-prompts host 则交给 SDK 的宿主程序决定。
- 旧文档写 Plan 模式下有 allow 规则时模型会直接收到
Cannot call <tool> while in plan mode.;实测交互模式是弹出确认框(写入都没有执行),官方 2.1.303 同样弹框。
画面来自实际运行,模型回复由测试用假 API 生成(FAKE_DONE,提示词里的 DO<<…>> 是让假 API 调用工具的指令)。
本页由 docs/features/permissions.md 自动同步,请在仓库中修改。
- Agent SDK 与 stream-json 控制协议
- Agent Teams
- Agent 与后台任务
- 自动模式(Auto mode)
- 背景会话、daemon 与 agents 视图
- 自定义 UI / Branding 与 Status line
- 构建、发布与终端验收工具
- Channels
- Codex Apps
- 自动压缩窗口
- 调试日志
- /diff 视图
- Direct Connect
- Effort 档位
- 自主 Goal
- Hooks 事件、匹配与输出校验
- 快捷键与 Vim 模式
- MCP 配置与认证
- 记忆:auto memory 与 SQLite FTS5 检索
- 模型自动发现与 Gateway
- Mods 远程客户端(stream-json)
- Mods / Function Hooks
- Monitor 工具
- OpenAI / Codex provider
- 独立会话通信
- 权限规则、权限模式与 Safe mode
- 插件与 Marketplace
- Prompt context 与 Tool search
- 请求韧性:重试、回退模型与默认模型
- Bash 沙箱
- 定时任务:Cron、/loop 与 ScheduleWakeup
- 会话命令
- Skills
- SSH Remote
- 遥测与反馈
- 终端程序状态(OSC 7501)
- Terminal 工具
- 用量、成本与状态
- VS Code 插件
- Dynamic Workflow