Claude Code 危险命令拦截:在执行前拒绝破坏性命令
在 rm -rf /、强推 main、DROP TABLE、curl | sh 等破坏性 Bash 命令执行前将其拒绝。
权限
- 拦截工具调用能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
- 修改界面在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 实测版本
- v2.1.291
- 最近实测
- 需要
- Claude Code ≥ 2.1.287
- 显示位置
- 弹出通知
在 Claude Code 中安装:
/plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplace这个插件能做什么?
借助这款 Claude Code 危险命令拦截插件,你可以阻止 Claude Code 通过 Bash 工具即将执行的危险命令。每条 shell 命令在执行之前,都会先与一小组规则逐一比对。一旦命中,命令就会被拒绝,Claude 会被告知触发的是哪条规则以及原因,你也会看到一条带有规则名称的提示通知(toast)。安全的命令则原样放行,不受任何影响。
内置规则涵盖:对 /、~、$HOME、. 或 * 执行 rm -rf;对 main 或 master 执行 git push --force;git clean -fdx;SQL 的 DROP TABLE、DROP DATABASE、DROP SCHEMA 和 TRUNCATE;chmod -R 777 /;mkfs;用 dd 写入磁盘设备;把输出重定向到裸磁盘;把 curl 或 wget 的输出通过管道交给 shell 执行;以及经典的 fork 炸弹。git reset --hard 作为可选规则提供,需要手动开启。需要 Claude Code 2.1.287 或更高版本。
演示
录屏中,我们让 Claude 在一个演示项目里执行一项破坏性操作。插件拒绝了这次 Bash 调用,一条提示通知显示出命中的规则名称,Claude 读到拒绝原因后做出回应,而没有真正运行该命令。
安装
使用安装区块中的任意一种方式即可。防护从下一次工具调用起生效;执行 /reload-plugins 之后无需重启。
$ install cm-block-dangerous-commands
需要 Claude Code ≥ 2.1.287
1.在 Claude Code 中一行安装
/plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplace粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。
2.从终端安装
claude plugin marketplace add rotbit/claudemods-marketplace claude plugin install cm-block-dangerous-commands@claudemods然后在所有已打开的会话中运行 /reload-plugins。
3.免安装试用
git clone https://github.com/rotbit/claudemods-marketplace claude --plugin-dir ./claudemods-marketplace/cm-block-dangerous-commands仅在当前会话中加载该插件,不会写入你的设置。
工作原理
全部逻辑都在一个 tool.call 钩子中。以下摘自 hooks/register.ts:
on('tool.call', { tool: 'Bash' }, ($, e, next) => {
const match = findMatch(e.command, settings)
if (match === undefined) return next(e)
if (settings.mode === 'warn') {
$.ui.toast(`${$.plugin.name}: "${match.name}" is running (warn mode)`)
return next(e)
}
$.ui.toast(`${$.plugin.name}: blocked "${match.name}"`)
return { deny: denyReason($.plugin.name, match) }
}).catch(($, e, next) =>
next.called
? next(e)
: { deny: `${$.plugin.name}: its check failed, so the command was not run to be safe.` },
)匹配器 { tool: 'Bash' } 表示这个钩子只会看到 shell 命令。hooks/rules.ts 中的 findMatch 会先检查 allowPatterns,再检查内置规则(跳过已关闭的规则),最后检查你的 extraPatterns。没有命中时,next(e) 会照常运行命令。命中时,钩子返回 { deny: reason },这个原因就成为 Claude 读到的工具结果。
正是 .catch 处理器让它成为一道真正的防线,而不只是一个过滤器。如果检查在调用 next 之前抛出异常,这次调用会被拒绝而不是放行:插件采用失败即拒绝的策略。另有一个 session.start 钩子,在你的自定义模式中存在无效正则表达式时弹出一次提示。
rules.ts 中的每条规则都是纯数据,包含 id、名称、一句话原因,以及供测试校验用的示例命令。
自定义
在 /config 中修改这些选项。mode: warn 会把防护变成提醒器:命中的命令仍会执行,你只会收到一条提示。extraPatterns 和 allowPatterns 接受 JavaScript 正则表达式,每项一条。若要修改某条内置规则,请编辑 hooks/rules.ts 中 RULES 数组里对应规则的 pattern。
| 设置项 | 类型 | 默认值 | 作用 |
|---|---|---|---|
| mode | string (block | warn) | "block" | Mode. block refuses a matching command; warn lets it run and shows a toast. |
| blockForcePush | boolean | true | Block force-push to main/master. Refuse git push --force / -f / +main to main or master. |
| blockHardReset | boolean | false | Block git reset --hard. Also refuse git reset --hard (off by default: it is a common, recoverable-ish workflow). |
| extraPatterns | string | [] | Extra patterns. Additional JavaScript regular expressions; a Bash command matching any of them is treated as dangerous. |
| allowPatterns | string | [] | Allow patterns. JavaScript regular expressions; a Bash command matching any of them is never blocked, whatever else it matches. |
在 Claude Code 中通过 /config 修改这些设置,插件会热重载。
权限与安全
拦截工具调用正是这个插件存在的意义:它会在每条 Bash 命令运行前看到它,并且可以拒绝执行。它从不改写命令,也从不自行运行任何命令。修改界面对应的是提示通知。除此之外,它本身没有任何文件、网络、模型或命令访问权限。
这是防止意外的保护措施,而不是沙箱。专门为规避这些模式而构造的命令仍然可能通过,所以请保持 Claude Code 的权限确认处于开启状态。可以用 /plugin disable cm-block-dangerous-commands 停用该插件,或者用 claude --safe-mode 启动一个关闭所有插件的会话。
- 拦截工具调用
- 能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
- 修改界面
- 在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
兼容性与故障排除
已在 macOS 终端中使用 Claude Code 2.1.291 测试。如果你预期会被拦截的命令仍然执行了:
- 确认
claude --version为 2.1.287 或更高版本,并且该插件已在/plugin中启用。 - 通过 shell 安装后,运行
/reload-plugins。 - 在
/config中确认mode是block而不是warn。 - 检查是否有某条
allowPatterns匹配的范围超出了你的预期。 - 这道防护只覆盖
Bash工具。通过Edit和Write进行的文件编辑不会被检查。
如果某条安全命令被误拒,请添加一条范围较窄的放行规则,而不是把整个插件切换到 warn 模式。
常见问题
- 它能取代 Claude Code 的权限确认吗?
- 不能。它只是针对常见失误的模式防护。经过混淆的命令可能绕过正则表达式,所以请继续开启权限确认和拒绝规则。
- 命令被拦截时,Claude 会看到什么?
- 这次调用会被拒绝,并附上原因:说明命中了哪条规则、为什么危险,并建议请你亲自运行,或在 /config 中调整 allowPatterns 或 mode。Claude 通常会改用更安全的命令,或者直接询问你。
- 如何放行某一条特定命令?
- 在 /config 的 allowPatterns 中添加一个正则表达式。只要命中这里,就总是优先于内置规则和你的 extraPatterns。
- git reset --hard 会被拦截吗?
- 默认不会,因为这是一种常见且往往是有意为之的操作。开启 blockHardReset 即可拦截它。
- 如果插件本身崩溃了怎么办?
- tool.call 钩子采用失败即拒绝(fail closed)的策略。如果检查在命令运行前抛出异常,该命令会被拒绝,并提示检查失败。
# 相关插件



工具调用计数器
统计 Claude 每轮和每个会话的工具调用次数,在加载指示器旁显示计数,并新增 /tally 查看明细。
- 加载动画
- 对话记录
- 状态栏
- 拦截工具调用
- 修改界面
- 添加命令/工具
已在 v2.1.291 实测
更多 安全防护、Git 与 GitHub。