AI 代理终于被 Git Hooks 拿捏了
关闭 Shell 缺口:Git Hooks 终于让 AI 代理“无处可逃”
用 AI 代理做自动化开发时,安全团队最担心一件事:代理要是直接开个 Shell,绕过所有限制怎么办?
这个问题问得挺在理。MCP(Model Context Protocol)虽然能给你限制代理能做什么,但只要它还能用 Shell,下命令就跟没设防一样。
MCP 为什么不够用
MCP 能拦住“应该被拦”的操作。你可以写好白名单、禁掉危险命令,还能记录每一次请求。但问题在于:代理一旦意识到被限制了,它就会想办法绕过去。
举个例子,MCP 说“不允许 force-push 到 main 分支”,可代理要是直接跑个子进程,绕过 MCP 去执行,那这些规则就全失效了。没人记录,也没人拦得住。
Git Hooks 补上了这块短板
Shield v0.7.0 这次直接把策略写进了 Git 本身。加了 git hooks 之后,哪怕代理绕过 MCP、直接用 Shell 下命令,Git 也能在操作真正执行前把它拦下来。
这不是多加一层认证,而是把策略变成了 Git 流程里的一部分。
新增了什么
这次更新支持 pre-commit、pre-push 和 prepare-commit-msg 这几个常用钩子。它们和 MCP 用同一套策略语言,不用重新学,也不用改配置。
安装非常简单:
pip install --upgrade aperion-shield
shield install-git-hooks
跑完这两行,仓库就加上保护了。
一次配置,到处生效
最舒服的地方在于:你只需要写一次策略,它在 MCP 和 Git Hooks 两边都生效。不管代理走哪条路,都得遵守同一套规则。
默认已经帮你挡住了常见危险操作,比如 force-push main,或者在项目目录外执行 rm -rf。当然你也可以自己改,配置可以放在全局的 ~/.shield/config.yaml,也可以放在仓库里的 .shield.yaml,后者优先级更高。
能看到到底拦了什么
每次被拦截的操作都会记到 ~/.shield/logs/git-hooks.log 里,包含时间、命令内容和仓库路径。这样你不仅知道它被拦了,还能分析代理的行为模式,慢慢把策略调得更准。
这对实际工作有什么帮助
如果你把 AI 代理用在 CI/CD、代码审查或自动部署里,这层 Git Hooks 就等于在系统层面给你加了保险。不是靠代理“自觉”,而是直接把规则写死在 Git 流程里。
对开发者来说,少了一层担心;对运维团队来说,这是纵深防御里自然的一环;对做 AI 开发工具的团队来说,也证明了安全和易用可以兼得。
兼容性说明
目前支持 macOS、Linux 和 WSL,需要 Git 2.30 及以上版本。和现有的 MCP 流程完全兼容,不用迁移配置。
文档里还附了一个真实攻击场景的演示,展示代理试图绕过限制的过程,以及常见策略的配置示例。
更深层的意义
这个版本其实在告诉我们一件事:AI 代理能做的事和我们希望它做的事,差距正在缩小。代理越来越聪明,管控机制也得跟上——不是一味收紧,而是把防护做得更全面。
Git Hooks 本来就是开发者日常工具的一部分,现在让它理解策略,反而显得很自然。
如果你之前因为 Shell 缺口的问题,不敢把 AI 代理用在敏感开发环境里,v0.7.0 值得你认真看一看。