命令字典
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
Slash 命令、CLI 子命令、Hook 事件、启动参数的字典与演进史。
限制Claude可以使用的内置工具
--tools <names>claude --tools "Bash,Edit,Read"--tools 是 Claude Code CLI 的启动 flag,用来限制本次会话可见、可用的内置工具集合。官方 CLI Reference 原文对它的描述是:
Restrict which built-in tools Claude can use. Use
""to disable all,"default"for the default set, or tool names like"Bash,Edit,Read".
关键点:它接受三种取值——
"":禁用全部内置工具。"default":使用默认工具集。"Bash,Edit,Read",只启用列出的内置工具。它与 --allowedTools 的本质区别在于:--tools 决定"这个会话里 Claude 能不能看到、用到这个工具"(可用性层面);--allowedTools 决定"用到这个工具时要不要弹出权限确认"(权限提示层面)。两者可以同时使用。
claude --tools "Bash,Edit,Read"
这是 CLI Reference 表格中给出的官方示例写法——多个工具名写在同一个带引号的字符串里,以逗号分隔。
官方另一处文档(Restricted mode 章节)给出的示例是逗号写在同一个引号字符串内:
claude --tools "Bash,Read,Edit"
实际使用时,按 CLI Reference 表格的写法,把工具名用逗号写在同一个引号字符串内即可。
目前没有查到与 --tools 直接对应的环境变量,也没有查到与之对应的 settings.json 字段。
--allowedTools 职责不同:官方在 --allowedTools 一行说明"要限制可用工具,请改用 --tools"——--tools 圈定可用范围,--allowedTools 决定哪些工具免提示。--restricted 组合:--restricted 模式会移除运行命令/代码类的内置工具(以及 WebFetch 等);要把某个被移除的工具找回来,需要在 --tools 里把它和其他想保留的工具一起列出——因为 --tools 是替换式的白名单,不是增量添加,漏列的工具不会自动保留。--disallowedTools / permission 的 deny 规则没有直接互斥,但都能影响同一批工具的可用性。| flag | env | settings.json |
|---|---|---|
--tools | 未发现对应环境变量 | 未发现对应字段(permissions.allow/permissions.deny 是"允许/拒绝规则",语义上对应 --allowedTools/--disallowedTools,而非 --tools 的整体可用性限制) |
| 约束 | 原因 / 说明 |
|---|---|
macOS / Linux / WSL 上,Glob、Grep 默认不在工具集里 | 这三个平台下 Claude Code 默认让 Claude 通过 Bash 工具调用内嵌的 find/grep(实为 bfs/ugrep)来完成搜索;只有在 --tools 或 --allowedTools 中显式点名 Glob 或 Grep,或等价的 Agent SDK 选项中指定,才会把这两个工具带回来。用 --tools 点名时只拿到你列出的工具;而在 --allowedTools 里点名其中一个,会同时恢复 Glob 和 Grep 两者。settings.json 里的 allow 规则没有这个恢复效果。 |
Windows 上 Glob 是默认工具集的一部分 | 该限制只存在于 macOS/Linux/WSL,Windows 不受影响。 |
Task 追踪工具(TaskCreate/TaskGet/TaskUpdate/TaskList/TodoWrite)在部分模型上默认不可用 | 只有 Claude 3.x、Opus 4–4.7、Sonnet 4–4.6、Haiku 4.5 默认带这些工具;其他模型(含自定义 LLM gateway 模型)需要显式在 --tools 中列出这些工具名(或用 --allowedTools 点名其一,或设置 CLAUDE_CODE_ENABLE_TODO_TOOLS=1)才能开启。 |
--tools,和你要用的其他内置工具放在一起"列为三种开启方式之一(另两种是设置 CLAUDE_CODE_ENABLE_TODO_TOOLS=1,或在 --allowedTools 中点名其一)。--restricted 模式下按需找回被移除的工具:--restricted 会剥离运行命令/代码的工具以及 WebFetch;需要哪个工具,就把它连同其余保留的工具一起写进 --tools,例如 --tools "Bash,Read,Edit"。Glob/Grep 显式加回工具集,而不是让 Claude 一律通过 Bash 里的 find/grep 间接搜索。--allowedTools 混淆:--allowedTools 只是跳过权限确认,并不缩小工具可见范围;真正把工具"从会话中拿掉"要用 --tools(或 --disallowedTools 做反向的拒绝)。--tools 是替换式白名单,不是增量叠加:一旦使用 --tools,会话工具集就变成"你列出的这些",没列的默认工具(包括你可能没意识到会用到的工具)也会一并消失——这在 --restricted 场景下找回工具时尤其容易漏配。Glob/Grep 的恢复行为在 --tools 和 --allowedTools 下不对称:用 --tools 只拿到你点名的那一个,用 --allowedTools 点名其中一个则两个都会恢复;settings.json 里的 allow 规则则完全不触发这个恢复逻辑。修复 `--tools` 不作用于启动后注册的内置工具,以及已弃用工具名会进入调用方工具集之外的问题。
修复了恢复会话时 `--tools` 列表遗漏内置工具导致 extended thinking 被丢弃的问题
修复了冷启动时特性门控工具在标志加载前被允许通过的问题
明确列出 Grep/Glob 后,原生构建中现在提供专门的搜索工具(之前被忽略)
新增 flag 在交互模式下限制 Claude 可使用的内置工具