
Claude Code 安全插件:命令与密钥防护
Claude Code 安全插件会在工具运行前拦截危险的 shell 命令、防止密钥进入对话并保护文件。本文说明它们能拦住什么、会漏掉什么。

Claude Code 安全插件会检查 Claude 即将执行的操作,在风险发生之前拦下其中危险的部分。常见的任务包括拦截 rm -rf / 或强制推送到 main 这类危险的 shell 命令、隐藏密钥使其永远不会发送给模型,以及保护 .env 或锁文件等文件不被修改。
Claude Code 安全插件如何拦截操作?
最主要的钩子是 tool.call。它在 Bash、Edit 或 Write 等工具执行之前运行,插件可以用 next(e) 放行这次调用,用 { deny: reason } 拒绝它,或者直接返回 { result } 作答而完全不运行该工具。匹配器可以缩小钩子的范围,例如 on('tool.call', { tool: 'Bash' }, ...)。tool.check 则在 tool.call 和传统的 PreToolUse 钩子运行之后,决定允许、询问还是拒绝。
隐藏密钥的插件通常使用 prompt.submit 来检查或修改你发送的内容,并用 session.append 在每一行被保存之前查看它。由于防护插件处在每次调用的必经之路上,它应当注册一个 .catch 处理函数,这样防护代码自身出错时会拒绝这次调用,而不是导致崩溃或让调用悄悄溜过去。事件参考文档列出了每个事件可以返回的内容。
安装前应该检查什么?
每个安全插件都会显示 拦截工具调用 标记,这正是它的用途所在。请看看它还显示了什么。命令防护插件除了用于弹出提示的 修改界面 之外,基本不需要别的权限。读取你的提示词 对密钥过滤插件来说在意料之中,对命令防护插件来说则不应出现。安全插件如果带有 网络访问,就值得仔细读一读源码。
再读一读规则列表。好的防护插件会记录每一条匹配模式并说明其用途,还会为误报提供允许列表,以及只报告不拦截的警告模式。
安全插件做不到什么?
模式匹配防护不是沙箱。命令完全可以被构造得让任何正则表达式都认不出来,而且插件以你的用户权限运行。请把安全插件当作防范日常意外的保护措施;对于任何你自己不会运行的操作,都保持权限确认开启;当你需要一个关闭所有插件的会话时,使用 claude --safe-mode。
常见问题
- Claude Code 安全插件能取代权限确认吗?
- 不能。它们是额外的一层防护,通过模式匹配拦住常见的意外。请保持 Claude Code 自带的权限确认和拒绝规则处于开启状态;经过混淆的命令仍然可能绕过模式匹配。
- 安全插件拦截命令后会发生什么?
- tool.call 钩子会返回 { deny: reason }。命令不会运行,Claude 会把拒绝原因作为工具结果收到,从而可以换一种更安全的做法,或者来问你。
- 出故障的安全插件会把命令放行吗?
- 这取决于它的 .catch 处理函数。防护插件应当“失败即关闭”:如果它自身的检查抛出异常,就拒绝这次调用,而不是放它运行。请在“工作原理”一节中确认这一点。