ANTIGRAVITY LABJP
Articles/Editor View
Editor View/2026-08-27Intermediate

Building a Verification Loop With Antigravity 2.10.0's Embedded Terminal

Antigravity 2.10.0 puts a terminal in the sidebar. Here is how I pinned my pre-merge checks down to three commands, scoped them to changed files only, and what the measured difference turned out to be.

Antigravity357terminal5verification7workflow52Git10

Every time an agent finished writing changes, I switched to a separate terminal window. Run the tests, trace the failing line, switch back. Some days the switching wore me down more than the work itself.

Version 2.10.0, released on August 24, lets you open a terminal directly from the sidebar with Ctrl / Cmd + `. The same release moved Git into the Review pane, so you can inspect the working tree diff, stage files, and commit without leaving the app.

It looks like a small change. For me it turned into a reason to rebuild the habit underneath it — the rule that I always run at least one command myself before accepting an agent's work. Once the cost of switching dropped, a different problem surfaced: without deciding in advance what to run, the checking becomes scattered.

When the friction disappears, the quality of your checking gets exposed

Back when leaving for an external terminal was annoying, that annoyance quietly limited how often I checked. It acted as a filter.

Remove the friction and you start running things at random. A slightly different command each time, a slightly different scope, and afterwards you cannot quite say what you verified. Working as an indie developer, nobody points that out for you.

So the first thing worth doing with the embedded terminal is fixing the set of commands you run.

Pin it down to three commands

These are the three I use. They are chosen so their purposes do not overlap.

What it answersKind of commandWhen it runs
Is the shape broken?Type or syntax check (tsc --noEmit and friends)Before reading the agent's diff
Is the behavior broken?Tests, scoped to what changedAfter reading the diff
Is the scope what I expected?git diff --statRight before staging

The order matters. Reading a diff while the code does not even typecheck wastes the reading. Running tests without reading the diff misses the category of mistake that passes tests happily — an implementation that works but is not what you asked for.

The third one is measurement, not review. You ask for a small fix, and the agent touched 40 files. Seeing that number once, before staging, is enough to decide whether to accept the change or split it. If the diff has grown past what a single commit should carry, Splitting a Giant Antigravity Diff Into Meaningful Commits covers how I break it apart.

Scope the checks to the files that changed

Of those three, the first two are what actually cost time. Running them across the whole repository throws away the benefit you just gained.

I compared the two approaches on my articles repository — 1,031 MDX files — using a small script that validates required frontmatter keys.

TargetFilesElapsed
Whole repository1,0316,787 ms
Changed files only (simulated)327 ms

A factor of 251. The absolute numbers will differ in your project — a type-checked TypeScript repository is far slower than a text validator — but the shape of the gap holds: the cost of a full-tree check scales with the repository, while the cost of checking a diff scales with the diff.

Waiting 6.8 seconds once is fine. Waiting 6.8 seconds several dozen times a day, every time you want to sanity-check an agent's output, is exactly the kind of cost that makes you skip the check.

Here is the script I settled on. It lives at the repository root so I can invoke it straight from the sidebar terminal.

#!/usr/bin/env bash
# verify-changed.sh — verify only the files that changed
set -euo pipefail
 
# Uncommitted additions, copies, and modifications.
# The -z flag plus mapfile -d '' keeps paths with spaces intact.
mapfile -d '' -t CHANGED < <(git diff --name-only --diff-filter=ACM -z HEAD)
 
if [ "${#CHANGED[@]}" -eq 0 ]; then
  echo "No changes. Skipping verification."
  exit 0
fi
 
echo "${#CHANGED[@]} file(s) to verify"
 
# Route files to the right checker by extension.
TS_FILES=()
for f in "${CHANGED[@]}"; do
  case "$f" in
    *.ts|*.tsx) TS_FILES+=("$f") ;;
  esac
done
 
if [ "${#TS_FILES[@]}" -gt 0 ]; then
  # Passing files to tsc directly makes it ignore tsconfig.json.
  # So we typecheck the project and filter the output instead.
  npx tsc --noEmit --pretty false 2>&1 \
    | grep -F -f <(printf '%s\n' "${TS_FILES[@]}") \
    || echo "No type errors in the changed files"
fi
 
exit 0

The tsc part needed care. Hand it file arguments and it stops reading tsconfig.json, which means a project with strict enabled silently gets checked under looser rules. Filtering the output instead keeps the configuration in force.

That was not something the documentation made obvious. My first version passed the files directly, and I spent a while pleased that no type errors were showing up.

Two assumptions worth checking first

A sidebar terminal does not necessarily start in the same environment as your usual one. Two things trip people up early.

PATH inheritance. An application launched from the GUI may never run the config files your login shell reads. It shows up as a command that works everywhere else returning command not found here. The same root cause affects agent-run commands, so the diagnosis in When the Antigravity Agent Says 'command not found' for node or python: Causes and Fixes applies directly.

Working directory. With a multi-root workspace open, it is not obvious which root the terminal starts in. A verification script written with relative paths will happily inspect the wrong repository. I now print git rev-parse --show-toplevel at the top of mine. It costs one line and removes an entire category of confusing results.

If non-ASCII output comes back garbled, that is a separate encoding setting rather than a path problem — Fixing Japanese Mojibake (Garbled Text) in Antigravity's Integrated Terminal covers that case.

Give the Review pane and the terminal separate jobs

Since 2.10.0 also brought Git into the sidebar, both tools now sit within reach, and it gets easy to blur what belongs where. My split looks like this.

Read it in the Review paneRun it in the terminal
Does the implementation match the intent?Is the shape broken (types, syntax)?
Did it touch files it had no business touching?Is the behavior broken (tests)?
Does this hold together as one commit?How large is the change, exactly?

The dividing line is whether a human is required. Matching intent can only be read. Whether something is broken is better answered by a machine. Drawing that line once cuts down the time spent staring at a diff wondering whether it runs.

If typing the same verification commands starts to grate, move them into task definitions. Combined with the setup in Polishing Your Antigravity Workflow with tasks.json and launch.json, launching them from the embedded terminal becomes a single keystroke.

One thing to do next

Drop a file equivalent to verify-changed.sh into whichever repository you are working in right now. It can be nearly empty. Having an obvious entry point for "check only what changed" sitting at the repository root is itself what stops you from skipping the check.

How to decide the scope you hand to an agent in the first place is something I work through in a membership article, counting an actual working tree as I go. If the question one level up from workflow interests you, that is where it lives.

Share

Thank You for Reading

Antigravity Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $15 for lifetime access
View Membership →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

Editor View2026-06-26
Splitting a Giant Antigravity Diff Into Meaningful Commits
Are you committing the agent's 400-line diffs as a single blob? Here is a practical workflow, with scripts, for re-splitting an unreviewable bulk commit into one concern per commit.
Antigravity2026-06-16
Putting a Verification Step After 'Done': Confirming What Your Antigravity Background Agents Actually Produced
An Antigravity 2.0 background agent reported 'Done,' yet the output was nowhere to be found. Running several sites on autopilot as a solo developer, I hit this gap more than once. Here is how I learned to check ground truth instead of the agent's self-report.
Editor View2026-08-23
A Triage Order for WebP and Opus Attachments That Never Reach the Agent
Hub 2.9.1 added WebP attachments on August 20, and CLI 1.1.17 fixed Ogg-family audio being rejected by the model on the same day. Here is why rejection happens on the sending side rather than in the file, with the MIME results I actually measured.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →