§06 工具与权限:给 Agent 能力,也锁住风险
我见过有人把 Agent 的权限开到最大。结果它顺手把整个 node_modules 清了。从那以后,我对"给什么工具、用前问不问"特别较真。这章把这两层讲透。
06.1 工具是 Agent 的手脚
没有工具,Claude 只能聊天。有了工具,它能读文件、跑命令、搜代码。
SDK 自带一套和 Claude Code 一样的工具:
- 文件:
Read、Write、Edit、Glob、Grep - 执行:
Bash - 网络:
WebSearch、WebFetch - 编排:
Task(子代理)、AskUserQuestion、Skill
我常跟人说:给 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 工具还能并行
只读工具(Read、Glob、Grep)可以并发跑。改状态的(Edit、Write、Bash)必须串行,避免打架。
你的自定义工具默认串行。想让它并行,在注解里设 readOnlyHint: true。
给 Agent 手脚也拴了缰绳。但它怎么记住上一轮说过的话?下一章讲会话和记忆。