Antigravity CLI: How an Autonomous Coding Agent Actually Works, Using FiftyOne Skills

Jul 14, 2026
10 min read
Google’s Antigravity CLI can install its own tools, run multi-hour jobs, fix its own bugs, and switch models mid-task when it hits a limit. Here’s how it works, with FiftyOne Skills as the example.
We gave Antigravity CLI one real task: import 81,444 images into FiftyOne and run a full data-curation pipeline on all of them, no shortcuts.

Key takeaways

  • Antigravity CLI is Google's agent harness (CLI, SDK, and IDE) that plans a task, calls tools, runs shell commands, and keeps working until it's done, pausing before risky actions.
  • Skills, plugins, and MCP servers are what give the agent real domain expertise. FiftyOne Skills adds 18 open-source skills covering 80+ visual AI operators.
  • In one run, the agent imported all 81,444 WikiArt images and ran a full data curation pipeline with no sampling, in about 67 minutes for import.
  • It diagnosed and fixed its own bugs, rewriting the import script twice and the curation script three times, and climbing from ~2 to 180+ samples/second.
  • When it hit a quota wall, /model let it switch from Gemini 3.5 Flash to Claude Sonnet 4.6 mid-task without losing progress or context.
  • The payoff is inspectable: uniqueness scores surface near-duplicates and one-of-a-kind images, and UMAP embeddings reveal that style labels are far more complete than genre labels.

What is Antigravity CLI?

Antigravity is Google’s agent harness for engineering work. It ships as a CLI (agy), an SDK, and an IDE. You type a task in plain English, and the agent plans it, calls tools, runs shell commands, edits files, and keeps going until it’s done, pausing to ask you before doing anything risky.
Three ideas make it more than “a chatbot in a terminal”:
  • Skills: small folders with a SKILL.md file describing a workflow: when to use it, and exactly how, step by step. Antigravity finds these automatically and turns each one into something it can use mid-conversation, and into a slash command you can call directly.
  • Plugins: a Skill (or a bundle of Skills, subagents, and MCP servers) packaged as one installable unit. A plugin’s manifest is deliberately tiny: just a name and a description. Everything else it needs lives in fixed folders next to it.
  • MCP servers: the Model Context Protocol is how Antigravity talks to external tools. A skill library like FiftyOne’s exposes its own operators this way, so the agent can call them directly instead of guessing at a command line.
On top of that, Antigravity supports multiple reasoning models in the same session: you can start on one and switch to another without losing context, useful when a long job runs into a quota limit.

Installing Antigravity CLI

Google Antigravity CLI installation documentation page showing the curl install command.
Antigravity CLI installation docs page
That downloads the agy binary to ~/.local/bin/agy:
Terminal running the Antigravity CLI install script and installing version 1.1.1.
The real install script running in the terminal, installing Antigravity CLI 1.1.1
Then start it:
The Antigravity CLI welcome screen after launching the agy binary.
The Antigravity CLI welcome screen

Adding a skill library

Skills are what give the agent domain expertise it doesn’t have by default. You can write your own, or install an existing library, like FiftyOne Skills: an open-source set of 18 skills covering more than 80 computer vision operators, importing datasets, running models, evaluating predictions, curating data, and more.
The skil.sh installer listing all 18 FiftyOne Skills available to install.
The skil.sh installer listing all 18 FiftyOne skills to choose from
The installer asks which agent to target. Antigravity is one option among several:
The skil.sh installer prompting which agent to target, with Antigravity as option 5.
Choosing which agent to install the skills to. Antigravity is option 5
Once installed, /skills confirms what the agent can now see. In this run, that’s 20 total (18 from the FiftyOne library, plus 2 built into Antigravity itself):
The Antigravity CLI /skills panel showing all loaded skills, including the fiftyone-skills prefixed ones.
The /skills panel showing all loaded skills, including the fiftyone-skills: prefixed ones

Slash commands, and how to actually use them well

Type / at any point to open the command menu. The full list is in the CLI reference docs; here’s what matters day to day:
  • /skills: Browse every loaded skill (local and global)
  • /agents: Open the Agent Manager, switch custom agents, watch background subagents
  • /mcp: Manage connected MCP servers
  • /tasks: See background shell jobs the agent has running
  • /model: Choose your reasoning model, persists across sessions
  • /usage (alias /quota): Show how much of your model quota you’ve used
  • /btw <question>: Ask a quick side question without derailing the main task
  • /context: Open the context usage visualization panel
  • /config (alias /settings): Open the full settings editor, including safety controls

Good habits when a task involves Skills

Each one of these came up in the run below.
  1. Run /skills before you write your prompt, not after. Knowing the exact skill names lets you reference them directly, the way the prompt below does: “Use the fiftyone-import-dataset and fiftyone-dataset-curation skills…” Naming the skill removes any guesswork about which workflow the agent should follow.
  2. Check /mcp before kicking off anything long. If a skill depends on an MCP server (like FiftyOne’s own tool server) and it isn’t connected, you want to know that in five seconds, not fifty minutes into a run.
  3. Use /tasks to watch long jobs instead of babysitting the chat. A skill-driven job that takes over an hour (like the import below) runs as a background task. /tasks shows you it’s alive without cluttering the conversation.
  4. Check /usage before a big autonomous run, and know /model is your escape hatch. Long, skill-heavy sessions burn through quota fast. When this session actually hit a quota wall mid-import, switching models with /model (from Gemini 3.5 Flash to Claude Sonnet 4.6) let it keep going without losing any of its progress or context.
  5. Use /btw for side questions instead of interrupting the main task. It runs in the background and doesn’t derail whatever the agent is already doing.
  6. /config is where you decide how much autonomy to grant. Tool Permission controls whether the agent asks before every action (request-review, the default), never asks (always-proceed), or something in between:
The Antigravity CLI /config settings panel showing Tool Permission and other safety controls.
The /config settings panel, showing Tool Permission and other safety controls

/model and /usage in practice

This session started on Gemini 3.5 Flash (Medium). Partway through, it hit this:
⚠ Individual quota reached. Please upgrade your subscription to increase your limits. Resets in 2h54m22s.
/usage (or /quota) is what would have flagged this coming. Once it happened, the fix was one command: /model, switch to Claude Sonnet 4.6 (Thinking), keep going. The new model shows up immediately in the status bar, visible on this approval prompt a few minutes later:
An Antigravity CLI approval gate confirming a new file, with Claude Sonnet 4.6 (Thinking) as the active model.
An approval gate asking to confirm a new file, with Claude Sonnet 4.6 (Thinking) now shown as the active model
That’s the real value of the two commands together: /usage tells you when you’re about to run out of runway, /model lets you change lanes without starting over.

The example: 81,444 images, no hand-holding

Here’s the exact instruction given to the agent:
Use the fiftyone-import-dataset and fiftyone-dataset-curation skills to import the full huggan/wikiart dataset (https://huggingface.co/datasets/huggan/wikiart) into the FiftyOne installation at /Users/ado/Documents/fiftyone/env. Run the complete curation pipeline (no sampling), then use the fiftyone-playwright skills to monitor and validate the process in real time. If any step fails, automatically diagnose, fix, and continue until the pipeline completes successfully.
The exact plain-English prompt being typed into Antigravity CLI to import and curate the WikiArt dataset with FiftyOne Skills.
The exact prompt being typed into the Antigravity CLI
Before touching anything, it read the three relevant SKILL.md files, checked the local environment, and came back with a three-phase plan (import, curation, Playwright validation) plus two questions: could it install a package, and should it keep a running work log.
The agent's proposed three-phase plan (import, curation, Playwright validation) asking for approval before installing packages.
The agent’s proposed 3-phase plan, asking for approval before installing packages
Import. Streaming images one at a time was too slow for 81,444 of them. The agent noticed, rewrote its own import script twice, and landed on a batched approach: download 8 parquet files in parallel (~4 GB at a time), extract to JPEGs, import, delete, repeat. This kept it within the ~74 GB of free disk space. It ran for nine batches, reporting real numbers along the way (13,584 samples, then 22,632, then 49,776 at 61%, then 58,824 at 72%), each one checked live in the FiftyOne App via Playwright rather than assumed from a log. After the quota-driven model switch above, it finished:
🎉 Import complete! All 81,444 samples have been imported successfully in 4012 seconds (~67 minutes).
Curation: the actual “diagnose, fix, continue” test. The curation script computed embeddings on the Mac’s GPU, or was supposed to. The model quietly stayed on CPU instead, running at ~2 samples/second, which would have taken over 14 hours. The agent debugged this instead of stopping: it found that a device: "mps" setting wasn’t reaching the underlying PyTorch model, fixed it by loading the model directly and moving it to the GPU manually, hit a second bottleneck (a slow per-image processing pattern), and rewrote the script a third time using batched torchvision calls. That version benchmarked at 60–77 samples/second and, running for real, climbed past 180. At one point, seeing how fast it was going, the user suggested it didn’t need to process every image. The agent correctly stuck to the original “no sampling” instruction, noting the full run would finish in about 7 minutes anyway.
Final result:
The full FiftyOne curation pipeline Antigravity CLI ran on all 81,444 WikiArt images, from import through embeddings, similarity, uniqueness, and UMAP visualization.
The full FiftyOne curation pipeline Antigravity CLI ran on all 81,444 WikiArt images, from import through embeddings, similarity, uniqueness, and UMAP visualization.
Pipeline stageResult
Import 81,444 paintings imported in ~67 min
Metadata All samples valid, 0 corrupted
MPS Embeddings 81,444 × 1,280 matrix in 15.4 min
Similarity Index img_similarity brain run
Uniqueness Scores uniqueness field on every sample
UMAP 2D Viz img_umap brain run in 39.7s
The final FiftyOne pipeline summary table showing import, metadata, embeddings, similarity, uniqueness, and UMAP results for 81,444 images.
The final pipeline summary printed by the agent

Inside FiftyOne, after the run

The result is something you can actually look at, not just a log saying “done.” All 81,444 samples are loaded with their artist, genre, and style labels intact:
The full WikiArt dataset loaded in the FiftyOne App, showing paintings with artist, genre, and style labels.
The full WikiArt dataset loaded in FiftyOne, showing real paintings with artist, genre, and style labels
Every painting now also carries a uniqueness score alongside its labels, here 0.87 out of 1:
A single WikiArt painting in the FiftyOne sample viewer showing metadata and a uniqueness score of 0.87.
A single painting opened in the FiftyOne sample viewer, showing metadata and a uniqueness score of 0.87
That score is the real payoff of the curation pipeline: a value near 1 means an image looks unlike almost anything else in the dataset, while a value near 0 means it looks a lot like other images already in there. Sorting by uniqueness is how you’d find near-duplicates worth removing, or find the truly one-of-a-kind pieces, across 81,444 images without opening a single one by hand.
The img_umap embeddings tell an even bigger story about the dataset as a whole. Colored by genre:
The FiftyOne Embeddings panel colored by genre, with most points labeled Unknown Genre and faint clusters visible.
The Embeddings panel, colored by genre. Most points are ‘Unknown Genre’ but clusters are visible
The FiftyOne Embeddings panel colored by style, showing 27 art styles clustering into distinct regions.
The same Embeddings panel, colored by style instead. 27 art styles visibly clustering
The orange covering most of the genre map is Unknown Genre, meaning most paintings in this dataset simply don’t have a genre label. That’s not a bug in the pipeline. It’s a real, useful finding: genre coverage in this dataset is thin, and now you know it in one glance instead of discovering it painting by painting.
Compare that to the same map colored by style instead. There’s no dominant “unknown” blob here. All 27 styles show up as distinct, colorful regions, and visually similar styles (like Impressionism and Post_Impressionism) sit near each other on the map, exactly as you’d expect from an embedding that groups images by visual similarity. Put the two maps side by side and you get a genuine curation insight for free: this dataset’s style labels are far more complete and trustworthy than its genre labels, which tells you exactly where to focus annotation effort next.

Try it yourself

  1. Install Antigravity CLI: curl -fsSL https://antigravity.google/cli/install.sh | bash
  2. Install a skill library, for example FiftyOne’s: curl -sL skil.sh | sh -s -- voxel51/fiftyone-skills
  3. Run /skills to confirm what’s loaded, then describe your task in plain English, naming the skills you want it to use
  4. For anything long-running: keep an eye on /tasks and /usage, and know /model is there if you need it

Sources and further reading

Antigravity CLI documentation — the official install guide and the one-line curl command used to set up the agy binary.
Antigravity CLI reference — the full list of slash commands, keybindings, and settings, including the /model, /usage, /tasks, and /config commands this run leaned on.
FiftyOne Skills on GitHub — the open-source library of 18 skills and 80+ visual AI operators the agent used to import and curate the dataset.
huggan/wikiart dataset on Hugging Face — the 81,444-image WikiArt dataset imported in the example, with its artist, genre, and style labels.
FiftyOne and natural language interfaces — background on where this is heading, driving FiftyOne workflows with plain-English, agentic commands.

FAQ

What is Antigravity CLI?

Antigravity is Google's agent harness for engineering work, shipping as a CLI (agy), an SDK, and an IDE. You describe a task in plain English and the agent plans it, calls tools, runs shell commands, edits files, and keeps going until it's done, pausing to ask before anything risky.

What are FiftyOne Skills?

FiftyOne Skills is an open-source set of 18 skills covering more than 80 computer vision operators, including importing datasets, running models, evaluating predictions, and curating data. You install them with curl -sL skil.sh | sh -s -- voxel51/fiftyone-skills.

What's the difference between a skill, a plugin, and an MCP server?

A skill is a small folder with a SKILL.md file describing a workflow. A plugin bundles one or more skills, subagents, and MCP servers into a single installable unit. An MCP server is how the agent talks to external tools, so a library like FiftyOne can expose its operators directly instead of the agent guessing at a command line.

Can Antigravity CLI switch models mid-task?

Yes. It supports multiple reasoning models in one session. In this run it started on Gemini 3.5 Flash, hit a quota limit, and used /model to switch to Claude Sonnet 4.6 (Thinking) without losing progress or context.

What is a uniqueness score in FiftyOne?

Uniqueness is a per-image value from 0 to 1. A score near 1 means an image looks unlike almost anything else in the dataset, and a score near 0 means it looks a lot like other images. Sorting by uniqueness is how you find near-duplicates worth removing or the truly one-of-a-kind samples, without opening images by hand.

How long did the full pipeline take?

Importing all 81,444 images took about 67 minutes. Computing MPS embeddings took 15.4 minutes, and the UMAP 2D visualization ran in 39.7 seconds.
Loading related posts...