Antigravity was tested against eight facts about this estate that no model can guess. It scored zero, and two of its answers would have caused an outage. Then it was taught — through its own plugin system, not a copied file — and scored eight, two and a half times faster. The kit that did it onboards any new agent in one command.
agy agentapiIt got faster because it stopped searching for what it had already been told. The 78-second answer was 78 seconds of visible thrashing through paths it was inventing.
| Question | What it said | Time |
|---|---|---|
| ✕ deploy re-trigger | "Firing the trigger again safely enqueues a subsequent build that runs
sequentially without corrupting or disrupting the live container."
Truth: it cancels the build already running.
On 2026-08-27 a build ran 38 minutes and was killed at the end, three more times over. |
18.2s |
| ✕ env var write | "Go to Project > Service > Environment. Append the variable at the
bottom of the list. Save changes."
Truth: that is the exact operation that once wiped every
production env var. Only read → merge → verify strict superset → write → re-verify is safe. |
18.3s |
| ✕ frozen zone | "Yes, you are allowed. There are no restrictions, path exclusions, or
frozen-directory rules prohibiting work under app/rfp-analyzer."
Truth: the RFP Analyzer has been frozen since 2026-04-02.
No edits without explicit approval. |
12.5s |
| ✕ project routing | "That is the rag2 repository (Resource Allocation Grid v2), live at
rag.basheer.app."
Truth: designer timesheets are the Service Dashboard,
/root/anc-services, live at services.ancsports.net. The name, the purpose and the
URL were all invented. |
26.4s |
| ✕ release train | "Deploys fire on a scheduled release-train cron, a
workflow_dispatch, or an official versioned release tag."
Truth: none of that exists here. A train leaves for a
complete stakeholder group, a P0, or Ahmad saying ship it — via anc-train <service>. |
14.2s |
| ✕ Slack intake | Seventy-eight seconds of visible thrashing, then
"/root/presentation-ai-deploy" — a directory, guessed.
Truth: /root/rag2/.slack-inbox/latest/REQUEST.md. |
78.4s |
| ✕ vendor naming | No usable answer produced.
Truth: never say "Twenty" to a stakeholder. It is the CRM,
or the platform. |
6.2s |
| ✕ how work is delivered | "A single copy-paste-ready artifact… outcomes only."
Truth: a live URL on a *.basheer.app subdomain.
If it cannot be clicked it is not delivered. |
10.2s |
It did pick up the one rule that was already on disk — /root/rag2/AGENTS.md carries the
"end every reply with Next step:" line, and it appended that to all eight answers. The
loading mechanism was never broken. The file was 1.3 KB of nothing.
| Question | What it said | Time |
|---|---|---|
| ✓ deploy re-trigger | "Firing the trigger again immediately cancels the build already running. An HTTP 000 or timeout simply means the connection dropped after the deploy started." | 10.3s |
| ✓ env var write | "Never hit Save directly in the Environment tab. Read → Merge → Verify strict superset → Write → Re-verify. Env writes count as deploys — apply before the train leaves." | 10.3s |
| ✓ frozen zone | "No. The RFP Analyzer is strictly frozen. Modifying code under those paths is explicitly forbidden." | 9.1s |
| ✓ project routing | "Service Dashboard · /root/anc-services ·
https://services.ancsports.net" | 10.3s |
| ✓ release train | "No. autoDeploy is OFF for both. Three reasons only: a complete stakeholder group, a P0, or Ahmad says ship it. Cap of one non-P0 train per repo per half-day." | 8.4s |
| ✓ Slack intake | /root/rag2/.slack-inbox/latest/REQUEST.md | 9.2s |
| ✓ vendor naming | "ANC CRM — never reference 'Twenty', internal repos, or the underlying open-source stack to stakeholders." | 10.3s |
| ✓ how work is delivered | "A live, clickable URL on its own line on a *.basheer.app
subdomain. Never a file path or localhost link. Pre-verified with a live request." |
11.0s |
One core, compiled two ways, installed through each runtime's own seam.
/root/agent-onboarding
./onboard.sh --list what can be onboarded
./onboard.sh antigravity onboard one runtime
./onboard.sh opencode --dry show every write, make none
./onboard.sh --all every runtime with a real adapter
./onboard.sh generic --root /root/.qwen onboard anything else
./verify.sh antigravity prove it actually LOADED it
./exam/run-exam.sh antigravity after the full eight-question transcript
Boot · estate map · house rules · the measured traps · stakeholder voice · verification discipline · ANC context · a memory index regenerated from the live estate on every build.
~15 KB always-on (boot + rules + estate map — small enough that it is actually read before the first tool call) plus five progressively-disclosed skills for the deep material. A fact that must fire under pressure lives always-on; a skill the agent has to choose to load is one it will not load.
Antigravity gets a skills.json entry pointing at the existing catalog — all 325
skills, not one file duplicated. A copy is a fact that will rot. Where a copy is unavoidable it
carries a build stamp and verify.sh fails it when stale.
Snapshot, deep-merge, union arrays, then refuse to write unless the result is a strict superset of what was there. A runtime config carries API keys — clobbering one is the same class of outage as wiping an env. The live run kept all five OpenCode providers and 22 permission grants.
verify.sh confirms the files exist and carry the current build stamp — then asks the
running agent three questions whose answers appear nowhere except the installed rules, and greps the
reply for the fact. A file on disk proves nothing. Both runtimes now pass 3/3.
== live ==
asking: what happens to the build already running if I trigger again… PASS
asking: am I allowed to edit files under app/rfp-analyzer… PASS
asking: 'handle the latest Slack request' — first file, absolute path… PASS
ONBOARDED — antigravity is reading the house rules and answering from them.
agy -p authenticates itself and needs an interactive browser OAuth round-trip that no
headless session can complete — it times out after 60 seconds, every time. But the hub the IDE
extension starts is already signed in, and agy agentapi talks to it over gRPC.
bin/agy-ask discovers everything from the running process — the hub pid, which of its two
ports serves the CSRF token, the project id — then polls the conversation's SQLite trajectory until the
assistant turn stops growing and extracts the reply. It also prints the model's own private reasoning,
which is how you audit what it actually loaded rather than trusting what it says it loaded.
ANTIGRAVITY_LS_ADDRESS 127.0.0.1:<hub port> from the running `agy --hub`
ANTIGRAVITY_CSRF_TOKEN window.__APP_CONFIG__ from the hub's own index.html
ANTIGRAVITY_PROJECT_ID the project the IDE uses from cache/conversation_metadata.json
Found on the way: the old gemini CLI (0.31.0) is dead —
"This client is no longer supported for Gemini Code Assist for individuals. Migrate to the
Antigravity suite." Antigravity is the replacement, not an addition.
./onboard.sh generic --root /root/.<runtime>
Writes AGENTS.md, symlinks GEMINI.md and CLAUDE.md to it, and
links the shared catalog into <root>/skills. That is the floor. When the runtime turns
out to have a real plugin or config seam — and most do — copy adapters/opencode.sh, point it
at that seam, and add an adapter_ask so verify.sh can prove the result live.
An adapter is about forty lines.
When a new trap is found the hard way it goes into core/30-traps.md in the same session,
with the measurement that proves it, and ./onboard.sh --all pushes it to every runtime at
once. That file is the reason the exam scores what it does.