All Articles
Guarding the Turn Boundary in Non-Interactive Runs: A Command Table and a Fail-Closed Gate
A scheduled job meant only to record usage was calling the model on every run. Here is how I split commands into ones that start a turn and ones that do not, built a gate that refuses anything unclassified, and measured it against real scripts.
The Line I Thought Matched Nothing Was Approving Everything: Auditing Empty Allowlist Entries
Allowlist entries that decompose to zero command words matched every command and silently auto-approved it. Here is how I scanned my own config, separated the hole the fix closed from the one it did not, and rewrote matching to a prefix-token comparison.
The Hooks That Get Rejected Are the Cheap Ones: Measuring Matcher Reachability
Hook configurations that can never execute are now rejected at load time. But when I checked my own config against all 21 tool names, the real problems were on the side that passed. A static reachability checker, plus measured numbers on what over-matching actually costs.
I Copied the Same agent.md Into Another Repo and It Quietly Did a Different Job
CLI 1.1.6 lets you carry agent definitions around as files. I dropped one definition into eight repos, built a preflight that resolves its declared capabilities before the agent runs, and measured it against a naive checker.
The Flaky Hook Started Failing Every Time — Migrating to Declarative Sessions in the Antigravity SDK
Registering hooks after session init is gone, replaced by declaration at session creation. Here is what happened when I moved four agent definitions across, plus the harness I used to measure ordering non-determinism over 2,000 runs.
Who Approved the Right Side of &&? Splitting Shell Commands Before Matching Allow Rules
The approval dialog showed part of what actually ran. Here is a harness that splits compound shell commands without breaking quotes or command substitution, matches allow rules per segment, and the numbers from running it over 45 real commands.
Are You Actually Using Every Permission You Granted? Tightening Antigravity's Unified Permissions from Real Usage Logs
Once you flip a unified permission policy to 'allow everything,' unused grants quietly pile up. This is the grant-to-usage reconciliation loop: match granted permissions against your action logs, revoke what was never exercised, and narrow what's too broad — with working TypeScript and real numbers from solo operation.
Before Your Finger Learns the Approval Dialog: Folding Antigravity Permissions Into One Policy
Scattered approval dialogs, per-MCP allowlists, repeated re-auth. Built around Antigravity 2.2.1's unified permissions and OAuth keyring storage, here is how I fold every permission into a single policy and design away approval fatigue, with working code and measured numbers.
When a Stable Line and a Feature Line Ship Together, Which Build Should a Solo Operator Ride?
By shipping a 2.0 (stable) line and a 2.1 (feature) line in parallel, Antigravity now asks solo developers to decide which one to ride. Here is a design for selecting and switching builds without breaking your automation.
Point Real-Browser Self-Debug at a Throwaway Preview, Not Localhost or Production
Antigravity 2.0's real-browser self-debug is genuinely useful, but aim it at the wrong place and it touches production data. Here is a practical way to confine it to a per-branch throwaway preview and neutralize email, billing, and webhook side effects.
Riding Two Release Lines — Splitting Antigravity's 2.0 and 2.1 Tracks Between Unattended and Interactive Work
On July 1, Antigravity published 2.0-line and 2.1-line builds side by side. Here is a version policy that keeps unattended automation on the stable line and interactive work on the feature line, with a declaration file and drift detection.
Parallel Agents Multiply Artifacts Too — Designing Lifespans and Cleanup for Intermediate Outputs
Worktrees, screenshots, temp branches — parallel agents leave debris at parallel speed. A design for defining artifact lifespans and automating cleanup without ever destroying uncommitted work.