Claude Code /permissions 怎么用:工作目录、allow/deny 与 blockWritesOutsideWorkingDirectories
把 Claude Code 的权限相关说明收在一篇:/permissions、settings.json 里的权限规则、不建议乱开 bypass,以及 2.1.314 的 blockWritesOutsideWorkingDirectories。我们也看了本机 claude --help 里的 --permission-mode 和 --add-dir。

Claude Code 的权限相关问题容易散在好几篇里。这篇收在一处:/permissions 怎么看 allow/deny、settings.json 里的权限字段、为什么不建议乱开 bypass,以及 2.1.314 新增的 permissions.blockWritesOutsideWorkingDirectories。顺带区分「工作目录不存在」和「禁止写到工作目录外」。
我看到了:本机 claude --help 里有 --permission-mode、--add-dir、--dangerously-skip-permissions、--effort 等开关;claude --version 仍是 2.1.312,所以 blockWritesOutsideWorkingDirectories 的行为以官方 CHANGELOG 2.1.314 为准,本文标成文档结论。settings 路径见 settings.json 在哪。
/permissions 做什么
在会话里运行 /permissions,可以查看当前的允许 / 拒绝规则,以及最近被拦下的调用(CHANGELOG 里多处提到 /permissions 会列出被 block 的调用)。当你觉得「明明点了允许怎么又拦」或「auto mode 说 blocked」时,先打开它对照,比改一堆配置更省事。
和 auto mode 暂不可用相关的现象,见 auto mode temporarily unavailable。其他报错总入口:报错速查。
settings.json 里的权限
权限规则可以写在 settings.json(用户级 / 项目级等,路径见上面那篇)。常见思路是:用 allow / deny 约束 Bash、文件编辑、MCP 等工具;默认模式由 permission mode 决定。本机帮助里 --permission-mode 可见取值包括 bypassPermissions、manual 等(以你安装版本的 --help 为准)。
额外目录用 --add-dir 加入工作目录集合。我看到了 help 原文里写:工具在工作目录(含 --add-dir)范围内工作;并提到与 bypass 相关的限制说明——具体句子以你本机 claude --help 为准。
不要把「图省事」理解成默认开启 --dangerously-skip-permissions。帮助里写得很清楚:那是绕过全部权限检查。只在你完全理解风险、且环境可丢的时候才考虑;日常开发用 allow/deny 和正常确认更合适。本文不教「怎么永久关闭所有确认」。
blockWritesOutsideWorkingDirectories(2.1.314)
官方 CHANGELOG 2.1.314 新增:
> permissions.blockWritesOutsideWorkingDirectories:Write、Edit、NotebookEdit 在每一种权限模式下,都会拒绝对工作目录之外路径的写入。
我推测(来自这句 changelog,非本机复现):打开该选项后,即使你处于很宽的 permission mode,也不能靠 Write/Edit 改到工作目录(和 --add-dir 加入的目录)以外。这和「整站 bypass」不是一回事——它是写路径边界。
配置位置仍在 settings 体系内;改完用 /permissions 或实际写一个目录外路径做验证(在可丢的测试目录里做)。本机尚未升到 2.1.314,所以没有在这里点开该开关做截图。
工作目录不存在 vs 禁止写出
两件不同的事:
| 现象 | 通常含义 | 先做什么 |
|---|---|---|
| 工作目录 / 文件夹已经不存在 | 项目路径被挪走、删掉,或会话还记着旧路径 | 重新打开正确目录;不要只盯着 permissions |
| 写入被拒在目录外 | 命中工作目录边界或 deny 规则;2.1.314 起还可能是 blockWrites… | 确认路径是否在项目 / --add-dir 内;看 /permissions 最近拦截 |
| index.lock File exists | git 索引锁,不是权限 JSON | 见 index.lock 专文 |
常用斜杠命令速查(用法教程并入)
下面是会话里常用的一组(不完整,以你版本 UI / help 为准),方便和「用法教程 / 常用命令」词合并:
| 命令 | 做什么 |
|---|---|
/permissions | 查看 allow/deny 与最近拦截 |
/model | 换模型或 effort / thinking 档 |
/status | 看当前连接与账号侧状态 |
/login /logout | 登录相关 |
/compact | 压缩上下文(长会话) |
/resume | 恢复会话 |
启动参数侧(本机 help 可见):--permission-mode、--add-dir、--effort、--dangerously-skip-permissions(慎用)。更细的安装与报错仍回 报错速查;effort 400 见 Invalid effort level。
常见问题
bypass 开了是不是就不用管 blockWrites?
按 2.1.314 的表述,blockWritesOutsideWorkingDirectories 在每一种权限模式下都会让 Write/Edit/NotebookEdit 拒绝目录外路径。我推测:它不是被 bypass 一笔勾销的普通提示,而是写路径硬边界。以你升级后的实际行为为准。
权限改完不生效?
检查改的是哪一层 settings(用户 / 项目 / 托管策略)、是否被 --setting-sources 排除,以及有没有托管策略覆盖。路径优先级见 settings.json 位置。
和企业 effort 上限有关吗?
无关。effort 400 是模型努力档;权限是工具调用边界。effort 专文:Invalid effort level。