All Articles
A Typo in agent.md Quietly Widened My Permissions — Writing a Strict Frontmatter Lint
Misspelled keys in agent.md frontmatter do not raise errors. They fall back to defaults, and for permission fields that fallback points the wrong way. Here is the failure I hit, the lint I wrote to catch it, and what the measurements showed.
Three Tools Named read_file: Catching MCP Name Collisions Before Startup
Bundle enough MCP servers and tool names collide quietly. Here is what a real 5-server, 21-tool setup measured at 43% collision, plus a Python preflight that catches them before startup and assigns deterministic aliases.
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.
Routing /effort by Task Class in Antigravity CLI: Six Weeks of Measurements
I built a small router that picks an /effort level from the shape of the task, then aggregated six weeks of run logs. Here is where raising effort helped, where it actively hurt, and what mattered more than effort.
The night my agent shipped nothing: giving generation agents an abstain outcome
When you score a background generation agent by how much it produces, the quality gate quietly loosens over time. Here is a three-valued ACCEPT / ABSTAIN / REJECT design that counts a zero-artifact run as a success, with the code and the measurements from running it.
Leasing Runtime Environments to Parallel Agents: Port Ranges, DB Schemas, and Dev Servers, One Per Agent
When Antigravity 2.0 runs agents truly in parallel, they collide on the same port, database, and dev server. Here is a lease-based design that hands each agent its own isolated environment, with implementation and measured numbers.
The Morning It Wrote Outside the Working Folder: Vetting Every Write Path in One Function
Antigravity CLI 1.1.3 closed a bug where always-proceed mode silently auto-approved writes outside the workspace. Here is a small guard that vets every write path with nothing but path canonicalization and a containment check, plus an escape-attempt test suite.
When an Unresponsive MCP Server Freezes Your Agent: Separate Timeouts for Connect, List, and Call
Antigravity CLI 1.1.3 closed the case where an unresponsive MCP server stalls an agent forever, by adding timeouts to connect, list-tools, and call-tool. This walks through why the three boundaries fail differently, and builds a defensive wrapper with a circuit breaker and failure-only notifications, backed by working code and a week of overnight runs.
The One File That Stops Startup: Guarding config.json Integrity Before Scheduled Runs
Antigravity 2.3.1 fixed a bug where an empty or corrupt config.json blocked startup. The symptom was fixed; the causes of corruption still live in your environment. Here is a three-layer guard — validate, snapshot, restore — that runs before a scheduled job, with working code and notes from running it nightly.
Turning Silent Auto-Approvals into Allow Rules, One Soft-Deny at a Time
In Antigravity CLI 1.1.3, headless -p stops silently auto-approving confirmation-required tools and instead soft-denies them, printing the required allow-rule name to stderr. This piece uses that output as a discovery source to build least privilege from an empty allow set upward, with a working harness and real numbers from a personal automation.
Treating Code Search as a Contract: Measuring the /codesearch Regex Default
Antigravity CLI 1.1.3 interprets /codesearch queries as regular expressions by default. I measured the gap between regex and literal matching across a 979-article repository and turned the results into three query rules and a drift harness.
When the JSDoc an AI Wrote Quietly Stopped Matching the Code: Field Notes on Measuring Documentation Drift
AI-generated JSDoc gets written once, looks authoritative, and is then trusted and left to rot. Field notes on hashing function signatures to detect staleness, tracking a drift rate, and fixing only the blocks that actually diverged.