
这是什么
Google 自家的编码 agent 就是 Antigravity CLI,这个项目把它雇了下来:一个伴随脚本把 agy 包起来,交给 Claude Code、Codex 或 Pi 当作一位可以派活的同事。五个 persona 分工——ask 负责无工具的一次性问答,staffer 接一般委托,另有 researcher、reviewer(代码与方案两种)和 implementer——每一个都固定在 Gemini 3.8 Flash 的某一档推理强度上;再有一个 lead 技能告诉宿主 agent 哪些交出去、哪些自己留着。只有 ask 在同一次调用里给答案,另外四个返回一个 job id 和一条 wait 命令,跑在独立的 worker 进程里,把 spec、日志、结果与终态都留在仓库的 .agy-staff/ 下。它在 2026-08-18 出现,随后一个月里发了十二个版本,MIT 许可,到 9 月底有 696 个星和两个未关的 issue。
谁做的仓库背后的账号 2022-04-18 注册,31 个公开仓库,147 个关注者,签名写着「think twice」,公司一栏填的是 Google,个人站点是 lastwhisper.dev。该仓库 52 次提交里有 50 次来自这个账号,且分散在两个作者名下——pkuwkl 39 次、LastWhisper 11 次。另外两位 Shen-18 与 solitudealma 各贡献一次提交。
它是怎么搭起来的
组成 · 6整个运行时就是一个伴随脚本,围着它的技能全是文档——这一点决定了大部分设计。因为派活的一方就是个普通 shell 使用者,worker 做的事必须能表达成一条命令:一个退出码、磁盘上的文件、以及有上限的一段文字;又因为 agent 循环归宿主所有,插件从不试图调度、唤醒或通知,只交回一个 job id,让宿主自己决定什么时候去等。状态按仓库而不是全局存放——代码旁边的 .agy-staff/ 里放着会话、任务 spec、日志、结果、原始事件流与快照——所以任务能在同一份检出里被查看、续跑或重启;而这个目录是把自己追加进 .git/info/exclude,不是被跟踪的 .gitignore,因为它是本机的临时物,写进一个会被提交的文件就等于改动了所有人的仓库。两档权限、默认不受限,让常见路径免于 setup,同时留着加固的口子。最后它是一个很薄的启动器:准备提示词、派出进程、汇报工作区状态、收集结果;它刻意不解析交付契约,也不替谁去执行提交、推送或开 pull request。
- companion/
- 运行时本体,四个模块,除 Node 标准库外别无依赖:88 KB 的入口管模式、任务管理与 setup;17 KB 的流式执行器管进程清理与截止时间;7.7 KB 的观察模块管事件解析、进度快照与输出预算;4.5 KB 的锁管状态写入与失效锁恢复。
- skills/ 与 pi-skills/
- 七份规范技能——ask、staffer、researcher、reviewer、implementer、lead 与 jobs——其中 reviewer 与 jobs 各带一个 references 目录,供需要时展开细节。Pi 目录是从规范目录机械生成的:加上
agy-前缀、改写兄弟引用;贡献指南明确要求改规范文件、绝不改生成物,两者之间由一个生成器和一个一致性检查把门。 - templates/
- 五份给派活模式共用的提示词模板,从 254 字节的 ask 到 3 KB 的 implement;另有一份 harness 兼容说明,由生成的 Pi 技能追加,要求缺某个工具的宿主去找等价做法,而不是把要求丢掉。
- 插件清单
- 一份 Claude Code 插件清单,外加它自托管的 marketplace 文件;一份 Codex 插件清单和一份 Codex marketplace 文件;以及一个兼任 Pi 清单、npm 文件白名单与验证命令落点的
package.json——同一个脚本,靠三套各自的安装仪式送到三个宿主手里。 - tests/
- 25 个文件、219 KB。标准套件离线运行,用临时仓库、临时 HOME 目录和一个假的
agy;最大的几个文件覆盖模式行为、恢复回归、Windows 进程处理与开发体验;对真实agy的验证是另开的可选套件。 - docs/ 与 scripts/
- 一份 38 KB 的参考文档和它的中文对照、一份写给另一个编码 agent 读的 13 KB 安装指南、十一个 release notes 文件,以及生成 Pi 技能、徽章、logo 与图示的脚本。文档按规矩成对维护:改一份就要改它的对照。
取舍,以及它替代了什么
做一个委派接口,而不是去要宿主工具那样的调度权 替代 把自己做成拥有通知或调度特权的原生工具
issue #13 里写明的目标是「agent-native」的异步子 agent 工具:能渐进披露上下文,交回控制权时带上足够做判断的信息。同一段里也划了界——这并不意味着插件拥有和宿主原生工具一样的通知或调度特权。实现也确实如此:没有额外的守护进程,也没有调度器。
默认不加限制,加固改成可选的标志 替代 0.1 那种先跑 setup 才能用的失败即拒默认
迁移表写得很直白:0.1 把 research 与 review 默认设为受限,除非先跑过 setup;0.2 反过来让不受限成为默认,
--restricted才是你真正会去用的那个标志。README 把代价写在旁边——这些提示词层面的指令并不提供权限隔离,而没有允许清单的受限运行只会以一次空回复成功收场。干脆不再切分命令行 替代 给「参数到哪结束」写一条更聪明的规则
shell 本来就已经切好了 argv,第二次切分让一句提到
git diff --check的任务以未知选项报错收场。修法不是更好的边界规则,而是停止切分:每次调用只允许一个任务来源,并且任务文本一个字节都不看。评审用话描述,而不是把 diff 递过去 替代
--diff-file、--pr、--target这类标志reviewer 自己用
gh pr view、git diff和读文件去收集证据,遇到模糊之处是报告而不是猜。撤掉这些标志让模板保持为一个中立的骨架,代码评审与方案评审两套轴线和输出格式,改由 reviewer 技能从两份参考文件里拼进任务文本。超时与崩溃之后不自动重试 替代 自动用更大的预算把活重跑一遍
硬超时与 AGY 超时都产出终态并附带恢复元数据——把上一次的超时翻倍、上限 120 分钟、一条可以照抄的续跑命令,外加
requires_user_confirmation——调用方必须先问用户。一次跑了十分钟、确实改过东西、然后撞上上限的实现任务,此前会被报成彻底失败,尽管agy已经返回了一个本可以接着用的 conversation id;这也是超时后来变成「待查看的状态」而不是终点的原因。
依据README.md(10,272 字节)、docs/REFERENCE.md(38 KB)——模式与默认值表、两档权限模型、标志表、任务文本规则、jobs 与状态一节、0.1 到 0.4.5 的迁移表、以及 Windows 说明——加上 companion/、templates/、skills/ 与 tests/ 下的文件体积、109 项文件树,以及 issue 与 pull request 1、2、3、5、6、8、9、10、11、13、16、17、19、20、21、22、23、24 的正文。
制作过程
5 个阶段- 01
一个月,十二个版本,一份真的做完的清单
仓库建于 2026-08-18,标着「first public release」的
v0.3.0当天下午就发了;到 2026-09-15 的v0.7.3为止一共十二个版本,中间还有一个从未变成 release 的v0.3.1标签,而 release notes 只覆盖了其中十一个。这一个月里有 52 次提交——八月 40 次、九月 12 次——版本标题读起来像一份被做完的计划,而不是流水账:personas、implementer continuation、opaque task text、换默认模型、防误报崩溃、流式观察与恢复、带工作区挂载的恢复补丁、用 AGY 做任务编排,最后连着三个版本处理 Windows。最早的一次提交甚至早于仓库的创建日期,正是它把项目开了头:一个把agy包成单一大脑、带模式、任务与 setup 的包装脚本。技术栈是 JavaScript,除 Node 标准库外没有运行时依赖,MIT 许可;到九月底是 696 个星、46 个 fork、1 个 watcher 和两个未关的 issue——一个想接入第二种宿主 CLI,一个提议给员工开一个能在会话结束后留下结论的频道。42 条提交带共同作者尾注,其中 40 条写的是 Claude——37 条 Fable 5、3 条 Fable 5.1;提交过的三个账号里,有两个各只贡献了一次。 - 02
两个 agent 之间真正传递的东西
没有共享内存,没有请求—响应式的 API,也没有守护进程:两个 agent 之间真正传递的是一条 shell 命令、一个文件和一个 id。那些 persona 技能是写给宿主 agent 的说明,由宿主自己拼出并执行
node companion/agy-companion.mjs <mode> --prompt …。伴随脚本只按 shell 交付的原样解析一次 argv,不重新切分、不解释引号、不检查任务文本的任何一个字节,于是一句提到git diff --check的任务会逐字节送到agy,而不会被当成伴随脚本的选项——这正是v0.4.5删掉位置参数式任务文本、改为只接受--prompt、--prompt-file、--stdin三者之一的原因。后台模式里,伴随脚本先写一份 job spec,再把自己以分离进程的形式起成_worker <job-id>;这个 worker 拉起agy子进程,持续读它的stream-json输出,并把事件解析成有上限的进度快照。它还会用--add-dir <repoRoot>挂上工作区,而这一点在受限路径上曾经是缺的:修之前,每一次受限运行都以成功状态和一句空回复收场。什么给调用者看、什么是机器细节分得很干净:结果与工作树告警走 stdout,带模式、权限档、模型、耗时、token 数与 conversation id 的遥测行走 stderr 和任务日志。跨轮次的连续性挂在agy自己的 conversation id 上,记录在仓库的.agy-staff/state.json里,continue与restart之后复用的就是它。 - 03
员工的权限到哪里为止
每个 persona 都是固定的,不能调:
ask同步且不带工具,另外四个交回一个 job id,没有任何标志能改变执行方式。推理强度同样钉死——ask低、staffer与reviewer中、researcher与implementer高——所以派活的意思是挑一位同事,而不是调一个模型。职责边界写在lead技能里,而这个月最后一次发版正是因为边界写得不够利落:宿主可以一边把查历史派出去、一边继续自己做大量本地调查,于是用户得亲手去拨派活与等待这两件事。v0.7.3把它换成一条通用默认——先把任务框清楚,把成块的实质工作派出去,等结果,评估,然后再跟进、接手或交付——验收则要求与任务相称的产物和证据,并保留几种例外:小而已经弄明白的活、等待期间可以做的有用工作、以及结果到手后的聚焦验证。员工能做什么由提示词而不是权限决定:四份模板默认拒绝不可逆或昂贵的动作,而同一套提示词会精确打开任务明确授权的那些。上面还压着三道 git 护栏——implement可以在脏工作区里开工,并拿到一份有上限的、已被改动路径的摘要;research与review则前后各取一次git status --porcelain——README 用一句话给这一切划了界:这些提示词层面的指令并不提供权限隔离。 - 04
失败是一个待查看的状态,不是一次重试
运行时里没有任何东西会自己重试:伴随脚本从不自动重试。跑到时间上限的任务会停在一个终态上,并带上恢复所需的元数据——
requires_user_confirmation、把上一次超时翻倍且上限 120 分钟的suggested_timeout、以及一条可以照抄的续跑命令——调用它的 agent 必须先问用户是继续还是停下。硬超时与 AGY 报出的超时被分成reason=hard_timeout和reason=response_timeout两种;只要还有已知的 conversation,两者都会变成attention与退出码 5,没有的话任务就停在error。恢复是一次显式的新任务,与旧任务关联;而当要续的任务还在跑时,continue会直接拒绝——后续不会被排队,调用方得先等或先取消。中间产物遵循同样的直觉:无告警地成功之后,原始事件流与快照会被删掉;失败、取消与硬超时则把它们留着,于是半成品可以先被查看,再决定要不要续。同一种直觉还修掉了一个从未成立过的崩溃报告:在一个沙箱环境里启动、在另一个里收取的任务,因为读它的地方看不见 worker 的 PID 而被判成崩溃;如今被误判的任务从启动它的那个环境去看时会自愈回运行中。 - 05
Windows 的两周,和一份被完整保留的贡献
这个仓库此前从没在 Windows 上跑过:代码里没有任何
windowsHide,也没有任何win32分支,持续集成只跑 Ubuntu。有用户先尝到了后果:派一个后台任务会不停弹出控制台窗口,cancel和关掉终端都停不下来,直到从任务管理器里杀掉那棵node.exe。修法由一位贡献者从状态锁开始,因为在 Windows 上拿到的是EPERM与EBUSY;维护者把它补完,等同一批工作又长出一个 pull request 时,他把自己那些提交推到了贡献者的分支上,好让原作者留住这个 pull request。持续集成被拆成三个作业,Windows 测试放在人工批准闸门后面,因为一次 Windows 跑很慢。最好的那个 bug 出现在最后:在 Windows 上,分离出去的 worker 会把已经退出的派发者的 PID 留作自己的父进程,而 Windows 很快复用 PID,一旦被复用,一个毫不相干的孤儿看上去就像子进程并被杀掉,只留下一个没有状态文件、日志正好 178 字节的消失任务,而任何内部错误路径都产不出这种结果。修法是只在子进程创建时间晚于父进程时才跟随这条父子链接,并让领头那个用taskkill /PID <pid> /F,而不是/T。参考文档至今仍把 Windows 支持称作尽力而为,并注明它还没有拿真实的 Windowsagy安装验证过。
相关档案
全部档案 →第 073 号
Engram
一条把「学一门东西」做成流水线的办法:课程架构师拆出第一性原理的概念图,一名看不见讲课过程的评分者盲评你写下的原话。再由 FSRS 排程,每次判分都在磁盘上留下一条收据。
第 066 号
makerskills
二十一个给个人经营者用的 agent 技能——decide、unstuck、maker-council、deep-research、second-brain、company-brain、domain、jab-hook、pm、personal-cfo 等等——每一个都是一份用 Markdown 写的工作流文档,而不是一个程序;装进 Claude Code、Codex、Cursor 或任何认 Agent Skill 格式的环境就能用,而所有个人数据都放在仓库碰不到的一个配置目录里。
第 129 号
Agents Universe
一套开源智能体平台,让同一个项目里的人共用一份上下文。项目选中时智能体把全部知识读进上下文,干活过程中再把学到的东西写回同一批文件;知识是磁盘上的 Markdown,数据库只做索引,没有嵌入模型,也没有向量检索。