AI Agent 推代码总怕把密钥带出去?Nimblegate 在 Git 边界上拦住危险提交
让 AI Agent 自己改代码,最容易被忽略的风险不在生成,而在最后一次 git push:测试密钥可能已经进入提交,危险的 --force 可能指向受保护分支,甚至一条 curl | sh 也可能随着 Agent 的自动化流程进入远端仓库。Nimblegate 的思路不是再加一个会被 Agent 绕过的本地钩子,而是在 Agent 和真实 Git 主机之间放一个独立的推送网关。
它解决的不是“代码好不好”,而是“什么能离开机器”
Nimblegate 是一个自托管网关。开发机上的 Agent 不再直接连接 GitHub、GitLab 或 Gitea,而是通过 SSH 把代码推到网关;网关按策略检查提交,只有通过的内容才使用自己的上游凭据转发到真实仓库。
这形成了清晰的权限边界:开发机持有推送到网关的 SSH 公钥对应私钥,网关才持有上游仓库的 HTTPS PAT。Agent 看不到上游凭据,也不能通过网关的受限 git-shell 去执行任意命令。即使本地 Agent 被提示注入或生成了错误操作,最后的推送仍要经过一个它无法修改的检查点。
这和 pre-commit hook、CI 不是一回事。钩子可以被 git push --no-verify 跳过,CI 通常要等提交已经到达远端后才运行;Nimblegate 则在代码进入真实 Git 主机之前拒绝它。它不替代人工 PR 审查,而是先把机械、重复、灾难性的问题挡在审查入口之外。
先跑起来:一个容器,两条连接
项目 README 给出的快速安装方式是下载 Compose 文件并启动容器:
curl -O https://raw.githubusercontent.com/nimblegate/nimblegate/main/compose.yaml docker compose up -d
默认情况下,管理面板绑定在网关主机的回环地址,Git 推送服务使用 2222 端口。第一次启动后,可以从容器日志取得一次性 setup token,再访问 http://localhost:7900/setup 创建管理员账号:
docker logs nimblegate | grep nbg-setup
远程服务器不建议直接暴露管理面板,使用 SSH 隧道更稳妥:
ssh -L 7900:127.0.0.1:7900@
然后在本机打开 http://localhost:7900。注意这里使用 127.0.0.1,避免某些系统优先解析 IPv6 的 localhost。
接下来在面板中添加 SSH 公钥、注册需要保护的仓库,并填写上游 HTTPS 地址和最小权限 PAT。注册完成后,把本地仓库的 origin 指向网关:
git remote set-url origin ssh://git@:2222/~/my-app.git git push
其中 ~/my-app.git 不是笔误:网关侧的 SSH 用户被限制为只能进行 Git 传输,不能获得普通 Shell。
规则、模式和 Agent 修复闭环
Nimblegate README 当前列出了 51 个规则帧,核心规则集覆盖硬编码凭据、私钥、受保护分支 force-push、绕过校验、危险删除命令、数据库 schema 漂移和非幂等迁移等问题。它还提供 Web 应用、Cloudflare、严格编码和供应链等规则套件,并允许在面板中编写自定义正则规则。
每个仓库有两种工作模式:
| 模式 | 发现问题时 | 适合场景 |
|---|---|---|
| Enforce | 拒绝 push,并返回发现结果 | 日常保护 |
| Observe | 记录并转发,不阻断 | 上线前测量 Agent 行为 |
实际接入时,建议先用 Observe 检查误报,再切换到 Enforce。保护范围默认是 refs/heads/*,这样 Agent 创建的嵌套 feature 分支也不会漏检。
如果启用 Auto-PR,拒绝结果可以作为结构化评论写回上游 PR,并通过 webhook 通知 Agent,形成“push → fail → fix → pass”的循环。这里的关键不是让另一个模型判断代码,而是让固定规则给出可重复的反馈,避免修复循环因为每次审查结果不同而发散。
许可证和适用边界
Nimblegate 仓库包含完整源码和文档,但许可证不是 MIT 或 Apache-2.0,而是 PolyForm Noncommercial License 1.0.0。个人、研究、测试以及符合许可定义的非商业用途可以使用;商业使用需要另行获得商业许可。因此,团队在正式接入生产流水线前,应先确认组织是否落在许可允许范围内。
它最适合这样的场景:多个 Claude Code、Cursor 或其他编码 Agent 共用仓库,团队希望保留现有 Git 工作流,同时把“代码能否进入真实远端”变成一个独立、可审计、不可被 Agent 直接改写的边界。对于只想做代码风格检查的个人项目,它可能偏重;但一旦 Agent 开始自动提交、自动修复和并行工作,推送网关就比单纯增加一个提示词更可靠。
相关链接