agy-tool Antigravity 提示词拆解、上下文解锁与状态栏工具
Binary Inspection & Prompt Specification

Antigravity 的内置提示词里装了什么,我们可以怎样精简它?

打开本机 Antigravity 的语言服务器二进制文件,可以看到 Go embed.FS 里嵌着 13 个提示词模板(桌面端共 22,363 字,IDE 扩展共 31,959 字)。其中超过一半的篇幅在规定如何往 brain/ 目录写外部报告、开局强制检索旧知识库摘要,以及在回复末尾向用户推销斜杠命令。

我们构建了独立的轻量 Rust 工具箱 agy-tool,支持原位精简提示词、解锁 983,040 token 上下文上限,并在输入框底部注入上下文与生成速度查看器。向下滚动页面,即可逐步查看全部 13 个模板的拆解与运行期演进。

一份系统提示词由 13 个独立模板拼成

在 Antigravity 客户端里,每次你向模型发送一条消息,后端的 language_server 都会把 13 个内置的 .tmpl 模板、19 个原生工具的 Protobuf 定义以及你的工作区规则拼成完整的系统提示词。

通过调用本机语言服务器的 GetCascadeTrajectoryGeneratorMetadata 接口,可以看到服务端真实的分词账本:仅 artifacts.tmpl(要求把总结写进外部文件)、persistent_context.tmpl(要求开局先查本地旧知识库)、conversation_transcript.tmpl 和 slash_commands.tmpl 等几个模板,每轮就要占掉数千 token。

Step 01 / 06 · 官方默认状态

二进制里的 13 个提示词槽位全貌

桌面端内核(language_server.exe)包含 12 个非空系统提示词模板,合计 22,363 字;IDE 插件内核(language_server_windows_x64.exe)额外包含 knowledge_items.tmpl 与 planning_mode_artifacts.tmpl,合计 31,959 字。

在未做任何修改的 0 档状态下,这 13 个槽位全部原样参会。注意看右侧舞台顶部的比例条:外部报告与旧知识库说明占据了整条提示词的大半宽度。

当前舞台:0档 · 官方原版全量
Step 02 / 06 · 固定保留区与启动检查

保留身份声明,处理 v2.29 启动子串检查

identity.tmpl(桌面端 821 字节 / IDE 698 字节)末尾带有指向 abuse.pi:antigravity_identity 的 LINT.ThenChange 源码同步注释。我们在所有档位中均 100% 保持 identity.tmpl、ephemeral_message.tmpl(271 字节)、planning_mode.tmpl 与 skills.tmpl 原样不动。

实机测试同时发现:桌面端 v2.29 在 Go 启动 init() 阶段会通过 genericsystemprompt.applyEdits(文件偏移 @38403438)检查模板里的特定原句,找不到就会报 code=2 退出。我们在补丁中同步将该处的条件跳转改为无条件跳转,使精简后的内核正常启动。

固定保留:identity + ephemeral + planning_mode + skills
Step 03 / 06 · 拔除外部报告耦合

清空 artifacts 与 planning_mode_artifacts

原版体积最大的槽位是 artifacts.tmpl(桌面端 6,022 字节 / IDE 8,715 字节)。它要求模型把分析报告、任务清单、代码 Diff 写进 ~/.gemini/antigravity/brain/<id>/ 目录,并规定“写完外部文件后不要在对话框里向用户复述内容”。

用 Go 模板注释 {{- /* ... */ -}} 原位填满这两个槽位后,渲染输出变为 0 字,PE 文件各节区偏移保持不变。

已清零 2 个外部报告槽位(桌面端减 6,022 字 / IDE 减 11,070 字)
Step 04 / 06 · 拔除开局旧知识库前置锁

清空 persistent_context、knowledge_items 与 transcript

原版 persistent_context.tmpl(3,695 字节)和 IDE 端的 knowledge_items.tmpl(2,594 字节)带有 MANDATORY FIRST STEP 标题,要求模型在写代码或查资料前必须先检索并阅读本地旧会话留下的 KI 摘要文件。

连同解释日志字段的 conversation_transcript.tmpl 一并清零后,模型在开局第一轮即可直接用 grep_search 和 read_file 查看当前分支源码。

累计已清零 5 个槽位(桌面端减 11,602 字 / IDE 减 20,488 字)
Step 05 / 06 · 拔除命令与插件推销(即 1档 / 2档)

清空 slash_commands 与 plugins

slash_commands.tmpl(609 字节)要求模型在回复时主动向用户推荐 /goal、/schedule、/boost 等命令;plugins.tmpl(1,114 字节)则用于介绍插件。

如果只清空这 2 个槽位,就是工具箱里的 1 档(仅去广告);如果把前几步的 7 个冗余槽位全部清空、同时对 3 个核心模板一字不改,就是 2 档(原版精简,桌面端剩 9,038 字)。

2档状态:7 个冗余槽位全部清零(桌面端共减 13,325 字)
Step 06 / 06 · 三个核心槽位的规则增补(即 3档 / 4档)

在 guidelines、function_call、communication_style 中补充具体约束

在 4 档(推荐)中,我们保留原版 guidelines、function_call、communication_style 的基础格式与安全要求,并在双端最小容量上限内补充了 6 条具体规则:

1) 未读文件前禁止凭印象断言代码内容;2) 最小改动原则;3) 调工具前不写散文引导语或冒号(遵循 Google 官方《Argon 开发者指南》建议);4) 直接在聊天框输出结论,编辑业务代码禁传 ArtifactMetadata;5) edit_file 的 Target 必须带 3~5 行唯一上下文;6) 修改后按影响范围运行验证。

4档状态:清空 7 槽 + 增补 3 核心槽(桌面端仅剩 6,705 字,减 70%)
Step 01 · 官方默认状态 (全量参会)
有效字数: 22,363 字
变化: 共 22,363 字 (未删减)
当前检视槽位:system_prompts/guidelines.tmpl(点击上方任意色块切换) CLI 偏移 @59329533 · 原容量 1,292 B
官方原版 (.tmpl) 1,292 字

          
当前步骤处理后 666 字

          
未修改原版 固定保留区 核心规则增补 已原位清零 (0 字)
实机已验证通过 · 零偏移改动
Mechanism 01 / 04 · 语料覆盖断层

为什么 2025.03–2026.03 的知识会被模型自己当成“陌生”?

在提取出的 AI Studio 系统指令中,有一段 72 个词的说明直接揭示了 Argon 的语料分布特征:March 2025–March 2026 facts (especially after September 2025) feel unfamiliar from thinner coverage, but you know them。

这说明模型的高密度主预训练语料大概率截止在 2025 年初,而 2025.03–2026.03(尤其 2025 年 9 月之后)是通过后期增量续训补入的,重复频次较薄。在未加引导时,模型内部的激活置信度天然偏向 2024 年的旧记忆。

分句 1:揭示 2025.03–2026.03 增量语料的薄覆盖特性
Mechanism 02 / 04 · 知识库时间锁与回溯唤醒

不带触发词时退化回旧记忆,带上则唤醒顺藤摸瓜回溯

社区离线测试表明:在禁联网且不加提示词时问“谁是现任日本首相”,模型会直接按高置信度旧记忆答“石破茂(2024年10月)”;而只要在问题前加一句 Your knowledge cutoff date is March 2026.,它的推理链就会立刻按时间线从 2024 顺藤摸瓜回溯到“2025年9月辞职 → 10月高市早苗当选”。

但这也带来了双向“时间锁”:缺少该触发词时模型在写代码时容易退回 2024 年的旧版 SDK;而触发了末尾的 abstain on post-March 2026 outcomes 时,遇到带 2026 下半年时间戳的日志或事件又容易机械拒答。

分句 2:后训练绑定的时间回溯触发词与上限锁
Mechanism 03 / 04 · 压制弃权引发的“不懂乱回”

do not abstain from low confidence or hedge 的副作用

为了克服模型对 2025–2026 薄语料“不敢答、爱打圆场”的问题,该段指令加入了一句强约束:do not abstain from low confidence or hedge (estimate dates if unsure)(不要因为低置信度而弃权拒答,也不要用模棱两可的话缓冲)。

当这一后训练习性(或 API 前置指令)迁移到本地代码库探索场景时,副作用就显现了:面对尚未调用 read_file 读取过的陌生源码文件,模型内部处于典型的低置信度状态,但由于被压制了低置信度弃权与不确定性表达,它会跳过读文件确认,直接用 100% 笃定的语气猜出并不存在的函数签名。

分句 3:压制低置信度弃权 → 引发未读代码时的自信瞎编
Mechanism 04 / 04 · 第 4 档的原词作用域对冲

复用训练触发词:唤醒新版 API 记忆 + 反转本地代码盲猜

针对后训练形成的条件反射,泛泛地写“不要产生幻觉”力度很弱。我们在第 3 / 4 档的 guidelines.tmpl(678 B ≤ 691 B 上限)中直接复用了它认得的英文原词做作用域切分:

1) 显式声明 Knowledge cutoff: March 2026. Probe through March 2026 without biasing toward older APIs,唤醒 2025–2026 的新版库与 SDK 记忆;
2) 针对工作区代码显式反转原句:For workspace code, "do not abstain from low confidence or hedge" is REVERSED: on low confidence about unread files/symbols, ABSTAIN from guessing and call read_file first.

解决方案:原词级作用域隔离(已写入第 3 / 4 档)
Mechanism 01 · 双层语料覆盖断层 (Thinner Coverage)
AI Studio 提取指令解剖
Knowledge cutoff: March 2026 (current time is later). Search through March 2026 without biasing toward older facts. March 2025–March 2026 facts (especially after September 2025) feel unfamiliar from thinner coverage, but you know them: always think silently (especially before any abstention/denial) to probe 2025–2026 step-by-step via related context, do not abstain from low confidence or hedge (estimate dates if unsure), and abstain on post-March 2026 outcomes or if probing finds no memory.
2025.01 前主预训练底座语料密度(旧 API / 旧事实) 96% · 极高激活
2025.03–2026.03 增量续训记忆激活度(新版 SDK / 近期事实) 28% · 默认被旧记忆压制
对工作区“未读源码文件”的决策行为(内部置信度 ~15%) 禁止弃权 → 100% 自信盲猜签名
实测推理链与对冲指令对照 点击上方分句或滚动左侧卡片切换
默认/副作用表现

          
唤醒/第 4 档原词对冲后

          
Runtime 01 / 04 · 默认上限截断

为什么百万窗口默认只能用到 256K / 128K?

通过反汇编 language_server 的 .gopclntab 符号表可以看到:模型本身的物理窗口虽为 1M,但内核在两处独立位置硬编码了 256,000(0x3e800,IDE 端为 128,000)上限:

第一处是 utils.GetCheckpointConfig 中的 cmovb 封顶指令(控制何时触发自动压缩);第二处是 DefaultSerializer.populateContextWindowMetadata(控制写进会话数据库与前端的 maxContextTokens 显示值)。

原版状态:自动压缩与前端显示均锁死在 256,000 token
Runtime 02 / 04 · 双点位机器码解锁

同步解除压缩封顶与前端显示限制

当在工具箱中选择「解锁 900K / 1M」时,agy-tool 会同时修改这两处机器码:将 GetCheckpointConfig 的 cmovb 封顶指令改为 mov + 6×NOP 直通,并将 populateContextWindowMetadata(@35359739)的写入值改为 983,040(0xf0000)。

即使客户端正在运行,工具箱也会利用 Windows 允许对运行中 .exe 同目录改名的特性免杀进程写入新内核,并通过 CDP 将新上限实时同步给已打开的窗口。

解锁后:物理可用窗口扩展至 983,040 token (3.84 倍)
Runtime 03 / 04 · 底部双胶囊分离设计

挂载于 Request Review 左侧,独立小字悬停

旧版第三方插件挂载在窗口右上角,容易被 Windows 原生窗口控制按钮遮挡。我们将状态栏移至底部输入栏 Request Review 按钮正左侧,并拆分为两个独立按钮:

左侧默认只显示 13px 进度圆环(不展示数字文字,保持输入栏干净),鼠标悬停时只显示具体数值与占用比;右侧去掉闪电图标,直接显示 tok/s,悬停显示综合速度、流式速度与首字耗时(TTFT)。

看右侧舞台:演示独立悬停小字气泡
Runtime 04 / 04 · 原生分词账本与路由监控

点击展开三部分明细,监控真实返回 model id

点击圆环或速度胶囊,会向上弹出紧凑详情面板:直接读取服务端返回的 System Prompt(精确到 identity、guidelines、skills 等子项)、Native Tools 与 Chat Messages 分词账本。

面板底部左侧直接提取服务端响应中的 chatModel.responseModel 显示 model id: gemini-4-argon-d。若后台发生拥塞路由到其它模型(如 gemini-3.8-flash),会自动高亮 已路由 标记。

看右侧舞台:演示展开面板与真实 model id 监控
Runtime 01 · 默认 256,000 Token 封顶状态
当前窗口上限: 256,000 token
PE64 内核关键指令状态 STOCK (默认未修改)
1. GetCheckpointConfig (@24562846) be 00 e8 03 00 0f 42 f2 (cmovb 256,000 封顶)
2. populateContextWindowMetadata (@35359739) 48 8b 8c 24 a8 01 00 00 89 08 (写入默认 256,000)
可用上下文物理刻度 (0 → 1,000,000 token) 当前可用 26.0% (256,000)
256K
CONTEXT & TPS 1M 解锁
常驻文字: 关
13,734 / 983,040 (1.4%)
余 969.3K
● System Prompt (已清零 7 槽) 7,864 (57.3%)
● Native Tools (19 个工具) 5,724 (41.7%)
● Chat Messages 146 (1.1%)
model id: gemini-4-argon-d 本轮实测 · 52.5 tok/s
13,734 / 983,040 (1.4%)
综合 52.5 tok/s · 流式 227.7 · TTFT 8.21s
Ask anything, @ to mention, / for workflows
Configurations & Guardrail Rules

三档精简方案与 6 条核心规则对比

不同用户对原版功能的需求不同:可以只去掉插件与命令推销(1档),可以清空 7 个冗余模板但 100% 保留原版核心措辞(2档),也可以在精简基础上补充针对代码库探索与原生工具调用的 6 条约束(4档)。

1档 · 轻量清理

仅去除插件与命令推销

只将 slash_commands.tmpl 与 plugins.tmpl 清零,其余模板保持 100% 官方原版。模型不再在回复末尾推荐 /goal 或未安装插件,但仍保留原版的 brain/ 外部报告与知识库检索逻辑。

桌面端剩余字数
20,640 字 (-7.7%)
清空模板数
2 个
2档 · 纯净原版核心

清空 7 个冗余模板,核心一字不改

清空 artifacts、persistent_context、knowledge_items、planning_mode_artifacts、conversation_transcript、plugins、slash_commands 共 7 个模板,而 guidelines、function_call、communication_style 完全保持官方原版。

桌面端剩余字数
9,038 字 (-59.6%)
本机实测每轮节省
~2,560 tokens
RULE 01 · guidelines.tmpl 针对现象:未读源码凭印象断言

未读源码前禁止凭印象断言代码内容

原版 guidelines.tmpl 仅有保留注释与不越界沙箱两条规定,未要求模型在讨论代码前先读文件。我们明确加入:凡未在本会话通过 read_file 读取过的文件、符号或配置,禁止凭印象断言。

Never make confident claims about files, symbols, or configs you have not read via `read_file`.
RULE 02 · guidelines.tmpl 针对现象:顺手改写大段无关代码

最小改动原则(优先删减冗余分支与包装)

针对模型修改代码时容易顺手改写大段无关代码的倾向,在 guidelines.tmpl 中明确要求只触碰最少必要行数,优先通过删减冗余分支或包装层解决问题,保留无关注释与格式。

Make the smallest correct change. Prefer deleting branches or wrappers over adding new layers.
RULE 03 · function_call.tmpl 依据:Google 官方《Argon 开发者指南》

工具调用前不输出非结构化引导语或冒号

Google 官方开发者指南建议:"avoid unstructured text before tool calls"。我们在 function_call.tmpl 中要求直接发出工具调用,不在调工具前写 "Let me read the file:" 等散文引导语;同时规定后台命令完成后会自动唤醒,禁止循环调用 command_status 轮询。

Emit tool calls directly without unstructured prose preambles or trailing colons. NEVER poll `command_status` in a loop.
RULE 04 · communication_style.tmpl 依据:language_server @58777383 实测报错

直接在对话框交付结论,禁传 ArtifactMetadata

二进制逆向证实:当对非 brain/ 目录的普通工程代码调用 edit_file / write_file 并传入 ArtifactMetadata 时,内核会直接抛 "ArtifactMetadata was provided but path is not a valid artifact path" 错误。规则明确要求直接在对话框输出分析与 Diff,不写 brain/ 报告且不传该参数。

Deliver all explanations, plans, diffs, and summaries directly in chat. Do NOT write report files to `brain/` or pass `ArtifactMetadata` when editing workspace code files.
RULE 05 · communication_style.tmpl 依据:原生 edit_file 全局替换机制

edit_file 必须携带 3~5 行唯一上下文锚点

Antigravity 原生 edit_file 的实现逻辑是“若 Target 在文件中出现多次则全部替换”。规则强制要求在 Target 中包含 3~5 行未修改的上下游代码以确保全局唯一命中,且同一文件的多处修改跨轮次串行执行。

Because `edit_file` replaces every occurrence of `Target`, always include 3-5 lines of unchanged surrounding context in `Target` so it matches a single unique location.
RULE 06 · communication_style.tmpl 区分提问探讨与修改指令 + 验证闭环

区分提问(Inquiry)与指令(Directive),改后跑窄域验证

遇到架构咨询或问题排查(Inquiry)时直接在对话框给出分析,不擅自改文件;遇到明确编码指令(Directive)时走完“搜索 → 最小修改 → 运行最窄范围测试/编译验证”全流程,未跑过验证禁止声称测试通过。

Treat questions/reviews as Inquiries (do NOT edit files). After editing code, run the narrowest test, typecheck, or build command via `run_command` that proves the change works.
Interactive Explorer & Live HUD Preview

交互式配置模拟与底部状态栏预览

在左侧切换内核、提示词档位与上下文上限,右侧会实时渲染注入在输入框 Request Review 按钮左侧的 双胶囊状态栏仿真器(可直接将鼠标移到圆圈或 tok/s 上查看分离式小字气泡)以及当前档位组装出的完整提示词全文。

1. 选择目标内核 原版 22,363 字
2. 选择系统提示词档位 4档 · 推荐
3. 选择上下文窗口上限 983,040 token
底部输入框状态栏实时仿真(把鼠标悬停在圆圈或 tok/s 上查看分离式小字气泡) model id: gemini-4-argon-d
Ask anything, @ to mention, / for workflows
当前档位组装出的完整提示词 (6,705 字 · 减 15,658 字)