最近几个月我一直同时开着 Claude Code 、Codex 和 Gemini CLI 写代码。agent 本身跑得挺好,烦的是它每次要跑命令、改文件都停下来等我按「允许」。三个终端轮流翻,经常翻到的时候它已经等了十分钟;出去吃个饭,回来每个都停在第一条 git push 上。开 yolo 全放行又不敢,一句 rm -rf 出去就没有后悔药。
所以我写了 Railse:每条审批先过一遍规则,规则定不了的推到手机,我在手机上点一下,agent 接着跑。
它怎么做:
- 三家 CLI 的权限钩子都接到本机一个守护进程,规则只写一套。
- 每条请求先定风险档:只读和改项目里的文件直接放行; curl 、npm install 这类联网的,git push 、deploy 这类对外的,rm -rf 、git reset --hard 这类不可逆的,都问。
- 定不了的推到手机,Web Push 通知,点开批准或拒绝。批准时勾「记住」,当场存成规则,下次同类的不问。
- 对外和不可逆的永远不能被「记住」放行,只能自己手写规则。
- Railse 自己挂了不卡 agent:守护进程没起、hub 连不上超过 30 秒,CLI 弹自己的审批框,最坏就是回到没装的样子。
hub 自己部署,一个 Go 二进制,也有 Fly.io 的现成配置;手机网页由 hub 托管,不用另外部署。命令里认得出的 token 、密码在本机就换成 <redacted> 再上报。
现状:v0.1.2 ,我自己在用。已知的限制:Gemini CLI 的钩子只能拒绝不能放行; Codex 的钩子只在交互会话里生效; iPhone 要加到主屏幕才能收推送; hub 是单机 SQLite 。
开源,Apache 2.0: https://github.com/xufei547/railse-opc
一行安装:curl -fsSL https://raw.githubusercontent.com/xufei547/railse-opc/main/install.sh | sh
想听两种反馈:你同时开几个 agent 的时候是怎么处理审批的;规则表有判错的(该放行的问了、该问的放行了)直接提 issue ,我会优先看。