§06 工具与权限:给 Agent 能力,也锁住风险

我见过有人把 Agent 的权限开到最大。结果它顺手把整个 node_modules 清了。从那以后,我对"给什么工具、用前问不问"特别较真。这章把这两层讲透。

06.1 工具是 Agent 的手脚

没有工具,Claude 只能聊天。有了工具,它能读文件、跑命令、搜代码。

SDK 自带一套和 Claude Code 一样的工具:

我常跟人说:给 Agent 什么工具,决定了它能干到哪一步。

06.2 两层控制:能不能用 + 用不用问

这是最容易迷糊的地方。我画清楚。

第一层是可用性tools 列表决定哪些工具进 Claude 的"视野"。不在列表里的内置工具,Claude 根本看不到。

第二层是权限allowedTools 决定列出的工具调用时不用问。disallowedTools 直接封掉某些工具。

一句话:tools 管"看不看得见",allowedTools 管"用不用批"。

06.3 权限模式速查

模式 适合场景 标叔的结论
acceptEdits 本地开发 改文件不弹窗
bypassPermissions 容器/CI 全跳过,危险
plan 怕它乱动 只探索不改
dontAsk 无头 Agent 不在列表全拒
default 自定义审批 canUseTool

核心建议:Web 服务用 bypassPermissions 要配 allowedTools

文档第 14 条坑说得很重:无人值守的 Web 服务,其他模式会因为等人工确认而挂起。但 bypassPermissions 等于 Agent 能跑任何 Bash。必须再用 allowedTools 把范围收死。

06.4 工具还能并行

只读工具(ReadGlobGrep)可以并发跑。改状态的(EditWriteBash)必须串行,避免打架。

你的自定义工具默认串行。想让它并行,在注解里设 readOnlyHint: true

给 Agent 手脚也拴了缰绳。但它怎么记住上一轮说过的话?下一章讲会话和记忆。