
我许多自认为最好的技术灵感,几乎从不是坐在书桌前、死盯着分屏代码编辑器时憋出来的。
它们通常发生在一天的日常缝隙里:早晨送女儿走进校门后折返的清净人行道上、下午超市果蔬区挑选一袋新鲜苹果的货架旁,或是秋天某个微风吹过的傍晚漫步途中。在这些时刻,脑子从具体的琐碎实现里抽离出来,关于某个顽固 Bug 的根因或者一个全新模块的抽象设计,往往会突然清晰地浮现。
在很长一段时间里,这种闪光时刻总是伴随着一种熟悉的遗憾。我只能掏出手机在备忘录里手忙脚乱地敲上几句,但等我走完回家的路、脱下外套、放下采买的杂货、再重新坐回显示器前,那个最初鲜活的思路要么已经冷掉了,要么已经被接踵而至的家务打断了。
Google Antigravity 2 的自主工程能力非常出色。只要你给它一个清晰的目标,它就能在代码库里检索、修改并自动运行测试。但它有一个无法忽视的限制:它被“物理锁死”在我本地的电脑上。如果我想让它帮我探索一个念头或者确认一个执行步骤,我就必须老老实实守在工位前。
我不想为了写代码而把更多原本属于生活的时间困在桌前。我真正需要的,是一个能让我走出家门、过着正常生活的同时,随手就能给我的本地助手下达指令的桥梁。
走在人行道上的语音指令
这就是 Antigravity Pilot (agy-pilot) 诞生的由头。
在构思怎么把家里的电脑连到口袋里的手机时,我也想过做个简易的 Web 控制台或者挂个 Discord Bot。但在真实的移动场景下,它们都不顺手。走在路上,单手在巴掌大的屏幕键盘上艰难地敲代码或 prompt,不仅容易打错,体验也极其糟糕。
而 Telegram 提供了两个恰到好处的特质,让它成了最理想的载体。
首先是多层级按钮交互(Inline Keyboards)。通过几下简单的点击,我可以在聊天窗口里原位切换不同的工作区项目、查看历史会话,或者对那些涉及终端命令的高权限操作进行“一键授权”,完全不需要来回刷新网页。而且它基于长轮询(Long Polling)通信,家里的电脑即便处于路由器内网,也不用折腾复杂的端口映射或内网穿透。
其次——也是对我而言最爽、最离不开的一点——是原生的语音输入。
现在走在路上,我不需要停下脚步在屏幕上戳键盘。我只要按住录音按钮,对着手机把我想验证的思路用普通话讲清楚,Bot 就会自动识别并作为上下文精准投递给家里常驻的 Antigravity 进程。
站在巨人的肩膀上
在某种程度上,这种理念很像开源界里连接本地私有 AI 与即时通讯软件的 OpenClaw。但我从一开始就没打算再去造一套通用的 Agent 框架,而是踏踏实实地“站在巨人的肩膀上”。
Antigravity 本身就已经具备了极深的代码理解力、会话管理和工具链生态。它欠缺的,只是一根轻盈、稳定、无侵入的神经末梢——一个能与它内部的 language_server 对话、并把复杂的交互平顺地翻译到即时聊天界面的伴侣守护进程。
当然,在把它打磨顺手的过程中,也少不了各种真实的工程折腾:
- 重启后的无感恢复:家里的 Mac 偶尔会重启,或者 Antigravity 会重新拉起新实例。守护进程必须能自动嗅探最新分配的端口与 CSRF 鉴权 Token,重新建立连接,不能让我每次都在手机端抓瞎;
- 多项目与多会话切换:同一个工作区可能有多个分支或对话,如何在寸土寸金的手机屏幕上用菜单清晰地层层下钻,需要反复调试回调数据;
- 令人头痛的步骤刷屏:Antigravity 2 跑起大任务时非常活跃,一次任务往往会产生二三十个连续的步骤(思考、读文件、敲命令、查输出)。如果把每个步骤都作为单独的消息推给 Telegram,手机会被震动轰炸,对话流也会彻底被淹没。我花了不少心思设计折叠与就地更新机制,让执行过程收敛成一张干净的小卡片,点开折叠才能看到底层细节;
- 接下来的演进:我还在摸索怎么在手机端更自然、更优雅地按需调用各种定制 SKILL。
小工具带来的踏实感
坦白讲,这并不是什么惊天动地的宏大项目,我也完全不想为了开源而把它包装成某种高大上的 AI 革命。它就是一个出于真实生活刚需、为了填补日常散步与工位屏幕之间那道缝隙而写出来的小工具。
就在昨天下午,我在附近的小超市买完东西,拎着一盒新鲜苹果走在人行道上,随手发了条语音,让它帮我重构一段工具函数的类型定义。几分钟后,当我在夕阳下的斑马线前停下脚步等红绿灯时,裤兜里的手机轻轻震动了一下。
拿出来一看,Telegram 上弹出一张简短的完成通知:文件已更新,90 个单元测试全部通过。
那一刻的满足感非常朴素而真实。不需要守在屏幕前,生活在继续,代码也在安稳地推进。对于一个写了十几年代码的工程师来说,这就是软件手艺最踏实的味道。
如果你也对离席与本地 Agent 交互感兴趣,或者想翻翻看具体的实现代码,这个小工具已经开源在 GitHub:donileong/agy-pilot。