批准(Approval)
Bot 的权限模式要它先问的那一下,执行前由你放行。卡上三个按钮:允许一次;以后都直接干(这一次照放,并把这个 Bot 改到不再问这类调用的权限模式:改的卡改成自动,改配置的卡改成全部允许,按钮下面一行写明);拒绝。批准管的是「接下来要做的那一下」,不能撤销已经做完的。要你贴密钥的卡(新增 HTTP MCP、新建要密钥的端点)哪种模式都出:要的是只有你有的密钥,不是你的同意。
回避:ConsentGate, 闸门
权限模式(Permission mode)
Bot 不问你就能做什么,四选一(ADR 0092):只读(读文件、查资料;改和改配置都拒绝,不出卡)、改动先问(每次写、改、删文件,跑命令,改应用配置都出批准卡)、自动(写文件、跑命令直接干,改应用配置出卡;默认)、全部允许(什么都不问)。读文件、列目录、搜索、联网查、调已配的 MCP 哪种模式都直接干。和路径在不在工作区里无关。设置 › 通用里选应用的模式;Bot 面板里可以给某个 Bot 另选,没选就跟随应用。只有你能改:Bot 改不了自己的,也给不了它雇来的 Bot。只读和改动先问会写进这个 Bot 的局面块。哪种模式都照旧拒绝的(这是拒绝,不是批准,全部允许也一样):读或改本机 Agent 的登录凭据、递归搜索整个家目录或 /(见 Bot 的壳)、后台任务。原来卡上的 Always allow 和设置里的规则列表去掉了,已存的规则不再生效。
回避:Always allow, 按路径或项目放行的规则, 每 Bot 一套规则表, 让 Bot 改权限模式, 拿工作区当权限边界, 全部允许也放开凭据
危险动作(Dangerous action)
权限模式可能拦下的调用:改(写、改、移动、删文件,跑命令)和改应用配置(新增或改 MCP,含 command·args / HTTP url·headers;新建端点或改已有端点的 URL、格式或 Anthropic 工作区 ID;Bot 改内置提示词或把它恢复默认)。要不要等批准由这个 Bot 的权限模式定,见权限模式。读、已配 MCP 的调用不是危险动作。删除 MCP、改 MCP 备注、往已有端点名单加或改模型名从不出卡,只读下拒绝。默认端点不能改 URL / 密钥 / 删除。
回避:闸门, ConsentGate, 按路径在不在工作区分危险不危险
工作区外(Outside the workspace)
路径 realpath 之后不落在工作区根前缀下。工作区内的 symlink 跟目标走:目标在区外就是区外。它管的是路径怎么解析、产物挂不挂得上、批注写不写得了,不管权限:Bot 在工作区外读写要不要问看它的权限模式(ADR 0092);你自己从消息里打开工作区外的文件或文件夹不用批准,只读(ADR 0090);项目会话目录里的文件例外:能保存,也能在那个会话里批注(ADR 0095)。
回避:只做字符串前缀, 按 inode / 硬链接判定, 工作区外就要批准
Bot 的壳(Bot shell)
Bot 的一次 shell:省略 cwd 就在本轮任务目录(工作区里)跑,命令碰到哪里都行,要不要等批准只看这个 Bot 的权限模式。不是内核囚笼。递归搜索(grep -r/-R、rg、find、du、ls -R)解析出的搜索根落在整个用户目录或 / 时是例外:不出批准卡,调用前直接拒绝并给出替代写法,哪种权限模式都一样;判定按解析后的实际路径(跟着 cd、~、$HOME),不按命令字符串,注释里写的不算,管道、子 shell、eval 这类解析不了的命令不拦;只看几层的(find -maxdepth N、rg --max-depth N,N 不超过 3)不算走遍整棵树,不拦。落在工作区根或任务目录的递归搜索照常跑。
回避:整机 shell, sandbox, seatbelt, 把 App Sandbox 容器当工作区根, 工作区壳, 无约束壳, 按命令里的路径要批准, 用全部允许越过搜索拒绝