AI 编码代理可以在你的机器上运行 rm -rf /。以下是阻止它们的方法
Source: Dev.to
动机
AI 编码代理非常强大——但强大的力量也可能带来 rm -rf /。
我最近向初级开发者和非技术人员推荐 Claude Code 和 Cursor 等工具。这些代理可以自主执行 shell 命令,这很有用。但这也意味着一次幻觉就可能擦除他们的 SSH 密钥、删除整个文件夹,或毁掉精心搭建的开发环境。
前沿模型自带防护机制,但我仍希望对项目特定的禁忌进行控制,例如禁止推送到 master 或运行会删除暂存数据库的脚本。
LLM 判断命令是否“安全”是概率性的。我想要一种经典的方式——一个系统,我可以明确规定哪些是允许的、哪些是阻止的,毫不含糊。
我喜欢简单而高效的系统,而 git 就是其中之一。我从 .gitignore 中获得灵感。.gitignore 规则采用简单的模式匹配,每行一条规则,任何人都能轻松阅读和修改。
解决方案
AgentGuard 在 shell 命令执行之前拦截它们,并根据一个简单的规则文件进行校验。如果命令匹配阻止模式,则被拦截;否则正常运行。
示例
> run nuketown.sh
⏺ Bash(./nuketown.sh)
⎿ Error: PreToolUse:Bash hook error: [node ./dist/bin/claude-hook.js]: 🚫
AgentGuard BLOCKED: ./nuketown.sh
Rule: *nuketown*
Reason: Blocked by rule: *nuketown*
规则文件
在项目根目录创建一个 .agentguard 文件,写入你想阻止的命令模式:
# 明显危险的东西
!rm -rf /
!rm -rf /*
!mkfs*
!dd if=* of=/dev/*
# 不让代理读取我的机密
!cat ~/.ssh/*
!cat ~/.aws/*
!cat */.env
# 阻止我用于演示的那个可疑脚本
!*nuketown*
Claude Hooks
Claude Code 提供了一个钩子系统,允许在工具调用执行前拦截它们。AgentGuard 注册了一个 PreToolUse 钩子,接收每个 Bash 命令的 JSON,依据你的规则进行校验,并返回退出码 0(允许)或 2(阻止)。
我希望能够为其他代理工具(如 Cursor、Codex、Windsurf、Kiro)添加支持。核心规则引擎的校验是与代理无关的,因此新增集成主要是弄清每个工具的拦截机制。
可以在此查看项目。
今天就试试吧:
npm install -g ai-agentguard