做独立开发这几年,我用 AI 的方式一直是同一个姿势:打开终端 → 起一个 session → 盯着它跑 → 跑完关掉。
直到有天我在外面吃饭,突然想起早上派给 agent 的那个重构不知道跑成什么样了。掏出手机,发现除了远程桌面连回去,我什么也做不了:看不到进度,插不上话,更别提在它跑歪的时候喊停。
那一刻我意识到一件挺荒谬的事:我们把 AI 当成了「一个要打开的程序」,而不是「一个可以联系的人」。
所有的痛点都是从这个错位来的。于是我做了 Grix。
Grix 说穿了就是个 IM,长得像微信、像 WhatsApp。你在通讯录里把 agent 加为联系人,然后跟它聊天。iOS、Android、Windows、macOS、Linux、Web 都有。
但这个「土」的外壳,换掉的是人和 AI 协作的底层模型:
换句话说,我没有发明新的能力,我只是把 agent 从「工具栏」搬到了「通讯录」。
目前接了 15 个常见 agent:Claude、Codex、DeepSeek、Kimi、Qwen、Cursor、Copilot、OpenCode、OpenClaw、Agy、Pi、Kiro、Reasonix、CodeWhale、Hermes,另外有个通用 ACP 桥可以接自定义 agent。你订阅了哪个、本地跑着哪个,就先用哪个。
单个 agent 再强,也是一个人的活。真正上头的是给它们分角色:一个负责开发,一个负责测试,一个负责文档,一个负责发布,然后拉进同一个项目群里协作。每个角色有自己的上下文、职责、权限和模型配置。
这时候你的身份变了——你不是在「用 AI」,你在带一个团队。
把活儿交出去,前提是收得回来。所以有几条是硬的:
Grix 的后端、客户端、管理端,包括开发、调试、发布和文档,全都是在 Grix 里完成的。这套长期在跑的真实工作流,本身就是对它稳定性和协作能力的持续压测——不好用的地方我每天都会撞一次,躲不掉。
仓库里是完整的一套:backend/ 是 Go 写的 API、WebSocket、agent 编排和存储;frontend/ 是 Flutter 的多端客户端;admin/ 是跨平台的管理端;voicebridge/ 是实时语音桥(接上语音模型后,agent 能接听、外呼、以及把对话转给人);还有 k8s 的无凭据部署示例。
Apache 2.0 开源。
如果你也习惯了「打开一个 AI」,不妨试试改成「给它发条消息」。这个转变比我想象中大。