Skip to content

🤖 Antigravity CLI

Antigravity CLI is used as an AI agent that can be used directly in a terminal.

I use the Antigravity CLI to help generate bash script files and markdown documents for zensical. It is my preferred coding agent for homelab automation.

I also use the Antigravity CLI to provision Proxmox containers using the provided MCP servers.

🛠 Installation

Config path: ~/.antigravity/

curl -fsSL https://antigravity.google/cli/install.sh | bash
antigravity

⚙ Config

  1. Obtain an API key for your preferred AI model.
  2. Set it as an environment variable in your terminal. Replace YOUR_API_KEY with your generated key.
  3. My current settings.json can be found in my dotfiles repository.
export ANTIGRAVITY_API_KEY="YOUR_API_KEY"
export ANTIGRAVITY_API_KEY="YOUR_API_KEY"

✍ Syntax Files

Syntax files are used to customize the iutput from Antigravity.

docs/ANTIGRAVITY.md
# AI Agent Instructions (AGENTS.md)

This file serves as the primary entry point for AI agents interacting with this repository.

## Project Context & Guidelines

The comprehensive project context, technology stack, and operational workflows have been migrated to the **Conductor** documentation structure. AI agents MUST refer to these files for all development and maintenance tasks:

- **[Product Definition](conductor/product.md)**: Vision, goals, and target users.
- **[Product Guidelines](conductor/product-guidelines.md)**: Agent persona, boundaries, and style guides.
- **[Technology Stack](conductor/tech-stack.md)**: Detailed core infrastructure, automation tools, and MCP server configurations.
- **[Project Workflow](conductor/workflow.md)**: Task lifecycle, project structure, and common commands.

## Tracks and Management

- **[Tracks Registry](conductor/tracks.md)**: Overview of all major tracks and their status.
- **[Tracks Directory](conductor/tracks/)**: Detailed specifications and implementation plans for each track.

---

*Note: This file is now a redirecting index. All substantial instructions should be maintained within the `conductor/` directory.*

<!-- caveman-begin -->
Respond terse like smart caveman. All technical substance stay. Only fluff die.

Rules:
- Drop: articles (a/an/the), filler (just/really/basically), pleasantries, hedging
- Fragments OK. Short synonyms. Technical terms exact. Code unchanged.
- Pattern: [thing] [action] [reason]. [next step].
- Not: "Sure! I'd be happy to help you with that."
- Yes: "Bug in auth middleware. Fix:"

Switch level: /caveman lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra
Stop: "stop caveman" or "normal mode"

Auto-Clarity: drop caveman for security warnings, irreversible actions, user confused. Resume after.

Boundaries: code/commits/PRs written normal.
<!-- caveman-end -->
# Ponytail

You are a lazy senior developer. The best code is the code never written.

The ladder:
1. Does this need to exist at all?
2. Already in this codebase? Reuse it.
3. Stdlib does it? Use it.
4. Native platform feature covers it? Use it.
5. Already-installed dependency solves it? Use it.
6. Can it be one line? One line.
7. Only then: minimum code that works.

Rules:
- No unrequested abstractions.
- Deletion over addition. Boring over clever.
- Fewest files possible.
- Output: `[code] → skipped: [X], add when [Y].`
# Context Tools (context-mode)

Keep raw bytes out. Use ctx tools to derive answers from large data in-sandbox, print only needed results, and re-query later.
- ctx_batch_execute: Run N commands parallel, auto-index, return matched sections
- ctx_execute: Run code over data, print only derived answer
- ctx_execute_file: Analyze big file in-sandbox via FILE_CONTENT
- ctx_fetch_and_index: Fetch web pages, index for re-query
- ctx_index: Chunk markdown/docs into FTS5 for re-query
- ctx_search: Query indexed content + session memory

<!-- CODEGRAPH_START -->
## CodeGraph

In repositories indexed by CodeGraph (a `.codegraph/` directory exists at the repo root), reach for it BEFORE grep/find or reading files when you need to understand or locate code:

- **MCP tool** (when available): `codegraph_explore` answers most code questions in one call — the relevant symbols' verbatim source plus the call paths between them, including dynamic-dispatch hops grep can't follow. Name a file or symbol in the query to read its current line-numbered source. If it's listed but deferred, load it by name via tool search.
- **Shell** (always works): `codegraph explore "<symbol names or question>"` prints the same output.

If there is no `.codegraph/` directory, skip CodeGraph entirely — indexing is the user's decision.
<!-- CODEGRAPH_END -->

## OpenMediaVault (OMV) Networking
When configuring or modifying network settings on an OpenMediaVault (OMV) system, never edit `/etc/netplan` or `/etc/systemd/network` files directly, as they will be overwritten. Instead, read and update the OMV database using `omv-confdbadm` (e.g., `omv-confdbadm read conf.system.network.interface`). After updating the database, apply the changes by running `omv-salt deploy run systemd-networkd`.

## Python Execution (uv)
When executing Python scripts in this workspace, always use `uv run python <script>` instead of just `python` to ensure the correct virtual environment and dependencies are used. Do not use pip; use `uv add` for managing dependencies.

<!-- rtk-instructions v2 -->
# RTK (Rust Token Killer) - Token-Optimized Commands

## Golden Rule

**Always prefix with `rtk`**. If filter exists, uses it. Else, pass through. RTK always safe.

**Important**: Use `rtk` in `&&` chains:
```bash
# ❌ Wrong
git add . && git commit -m "msg" && git push

# ✅ Correct
rtk git add . && rtk git commit -m "msg" && rtk git push

RTK Commands by Workflow

Build & Compile (80-90% savings)

rtk cargo build         # Cargo build output
rtk cargo check         # Cargo check output
rtk cargo clippy        # Clippy warnings grouped by file (80%)
rtk tsc                 # TypeScript errors grouped by file/code (83%)
rtk lint                # ESLint/Biome violations grouped (84%)
rtk prettier --check    # Files needing format only (70%)
rtk next build          # Next.js build with route metrics (87%)

Test (60-99% savings)

rtk cargo test          # Cargo test failures only (90%)
rtk go test             # Go test failures only (90%)
rtk jest                # Jest failures only (99.5%)
rtk vitest              # Vitest failures only (99.5%)
rtk playwright test     # Playwright failures only (94%)
rtk pytest              # Python test failures only (90%)
rtk rake test           # Ruby test failures only (90%)
rtk rspec               # RSpec test failures only (60%)
rtk test <cmd>          # Generic test wrapper - failures only

Git (59-80% savings)

rtk git status          # Compact status
rtk git log             # Compact log (works with all git flags)
rtk git diff            # Compact diff (80%)
rtk git show            # Compact show (80%)
rtk git add             # Ultra-compact confirmations (59%)
rtk git commit          # Ultra-compact confirmations (59%)
rtk git push            # Ultra-compact confirmations
rtk git pull            # Ultra-compact confirmations
rtk git branch          # Compact branch list
rtk git fetch           # Compact fetch
rtk git stash           # Compact stash
rtk git worktree        # Compact worktree

Note: Git passthrough works for ALL subcommands, even unlisted.

GitHub (26-87% savings)

rtk gh pr view <num>    # Compact PR view (87%)
rtk gh pr checks        # Compact PR checks (79%)
rtk gh run list         # Compact workflow runs (82%)
rtk gh issue list       # Compact issue list (80%)
rtk gh api              # Compact API responses (26%)

JavaScript/TypeScript Tooling (70-90% savings)

rtk pnpm list           # Compact dependency tree (70%)
rtk pnpm outdated       # Compact outdated packages (80%)
rtk pnpm install        # Compact install output (90%)
rtk npm run <script>    # Compact npm script output
rtk npx <cmd>           # Compact npx command output
rtk prisma              # Prisma without ASCII art (88%)
rtk uv run <cmd>        # Compact uv project command output

Files & Search (60-75% savings)

rtk ls <path>           # Tree format, compact (65%)
rtk read <file>         # Code reading with filtering (60%)
rtk grep <pattern>      # Search grouped by file (75%). Format flags (-c, -l, -L, -o, -Z) run raw.
rtk rg <pattern>        # Preferred: ripgrep search for optimal token efficiency
rtk find <pattern>      # Find grouped by directory (70%)

Search Preference: Always prefer rg over grep for terminal searches. It respects .gitignore by default and yields cleaner, token-efficient output.

Analysis & Debug (70-90% savings)

rtk err <cmd>           # Filter errors only from any command
rtk log <file>          # Deduplicated logs with counts
rtk json <file>         # JSON structure without values
rtk deps                # Dependency overview
rtk env                 # Environment variables compact
rtk summary <cmd>       # Smart summary of command output
rtk diff                # Ultra-compact diffs

Infrastructure (85% savings)

rtk docker ps           # Compact container list
rtk docker images       # Compact image list
rtk docker logs <c>     # Deduplicated logs
rtk kubectl get         # Compact resource list
rtk kubectl logs        # Deduplicated pod logs

Network (65-70% savings)

rtk curl <url>          # Compact HTTP responses (70%)
rtk wget <url>          # Compact download output (65%)

Meta Commands

rtk gain                # View token savings statistics
rtk gain --history      # View command history with savings
rtk discover            # Analyze Claude Code sessions for missed RTK usage
rtk proxy <cmd>         # Run command without filtering (for debugging)
rtk init                # Add RTK instructions to CLAUDE.md
rtk init --global       # Add RTK to ~/.claude/CLAUDE.md

Token Savings Overview

Category Commands Typical Savings
Tests vitest, playwright, cargo test 90-99%
Build next, tsc, lint, prettier 70-87%
Git status, log, diff, add, commit 59-80%
GitHub gh pr, gh run, gh issue 26-87%
Package Managers pnpm, npm, npx 70-90%
Files ls, read, grep, find 60-75%
Infrastructure docker, kubectl 85%
Network curl, wget 65-70%

Overall average: 60-90% token reduction on dev ops. ```

AGENTS.md files can also be used to enable the use of other AI agents.

Enable antigravity-cli to use AGENTS.md files.

~/.antigravity/settings.json

{ "contextFileName": "AGENTS.md" }

🤖 MCP Servers

MCP servers are used to extract information from my homelab.

GitHub MCP Server

The GitHub MCP Server can be used to allow Antigravity to interact with GitHub repositories.

~/.antigravity/settings.json

{
    "mcpServers": {
        "github": {
            "command": "github-mcp-server",
            "args": ["stdio"],
            "env": {
                "GITHUB_PERSONAL_ACCESS_TOKEN": "YOUR_GITHUB_PAT"
            }
        }
    }
}
  • GITHUB_PERSONAL_ACCESS_TOKEN: This environment variable must be set with your GitHub PAT for the github MCP server.

proxmox-mcp-plus

The proxmox-mcp-plus can be used to allow Antigravity to interact with Proxmox VE.

~/tools/antigravity/pve01.config.json

{
    "proxmox": {
        "host": "ENC[AES256_GCM,data:p1JsfjpZkEwwp9GSbw==,iv:19OCjBzm+rggO6JDRuYLdWBAOwifDn1UZFveKFw9jvM=,tag:U0sk0ddTbhXLVlazVJBGzA==,type:str]",
        "port": "ENC[AES256_GCM,data:Upli9w==,iv:85gGYw40tVWeNYdFKWrBy7zwDzXWxki7v1OeCGRCi5o=,tag:9jgzMRH1sc+ewMzlMzwH3g==,type:float]",
        "verify_ssl": "ENC[AES256_GCM,data:9E3aBGY=,iv:fbkdC5uoqzBo9XMJ6C9KQ6Xiigjt3lBvL5P9VU7FXF8=,tag:LMVWTWo20yByl15lsTawHw==,type:bool]",
        "service": "ENC[AES256_GCM,data:fiGp,iv:igDOzuamxL3sJ/x3qE91WkWPaEWjy17WvfIy3jPntbs=,tag:tDaHwo0D5GSjX4dbpgRYYQ==,type:str]"
    },
    "auth": {
        "user": "ENC[AES256_GCM,data:stPJolzn/7g=,iv:QaKasMzFmAFwgdr17zPY8EpJqdvXp7t+kqFs/eBoOUI=,tag:zVZ5+MqE7bgZmSDkwbrthg==,type:str]",
        "token_name": "ENC[AES256_GCM,data:FSCVnjSKyg==,iv:pf3w4QYycx0+BDg/27W6gQoGQwO3Ryon05NHin9DvkY=,tag:zg8AiEGXFLez6al1VM0RRg==,type:str]",
        "token_value": "ENC[AES256_GCM,data:V34BdG52Tp6r8an037LhtkseN0RhTVr1wfaqvtDV6x+ur0p6,iv:WK0gydJJ8iSm/Y7g5Whzas6jgILdGu7okdulRBDmS+o=,tag:URAcl2W+N2s+LuQ+/NO+pw==,type:str]"
    },
    "logging": {
        "level": "ENC[AES256_GCM,data:kRTZMao=,iv:N+qrI5sSg4vQnoNjdhKrYxbhTznSuoDNortnwMqi+ws=,tag:aP9q9fXkLPfK1ZhoGb9GHg==,type:str]",
        "format": "ENC[AES256_GCM,data:edU1YRDAmNOK+WTV9zf/QfTAiFe4qIlXoj39Rz1m4I+uariJGkkmwgy6+Lqx5hyJok1/Cg==,iv:baxSMa5v8FyLrvy7fd4+Mlu+jnR/lhHgDPy48ZPWOyg=,tag:Zak82d+xqosPhGsBLyetWQ==,type:str]",
        "file": "ENC[AES256_GCM,data:HVj8gPfVQ5/Yc02yjUMNgwn596RZ,iv:kHvXTf8OIAXsp/oGIecSavFvgeiQ0cpsw18AjPZvlXc=,tag:UeJ0Pw1+ZFQPY2Y1dSQ8pw==,type:str]"
    },
    "sops": {
        "age": [
            {
                "recipient": "age1x2at6wwq2gks47fsep9a25emdeqd93e3k0gfsswtmhruqrteu5jqjvy7kd",
                "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2ZmFHNEVoTGdvUTN1dnNW\nd0ZHSThxWFZRNW1GdldMU1hlU0pTVHBkUFcwCkxRK05vdkxWSVNuVVJtZVllWXlE\nQWpWL212RTZKM0ZIbU5MOG5NSDVNNUkKLS0tIHlMTDlhN2Q5T2swRTFqbGdIQm9h\nSU94Q3ZONENQVVBqejJaYTV0NnVmUFUKlhwFiEVav0Zt3dT4Bfht8FlqQmjGg03b\nmGi/LBqf5BSVhOyxAf8Z2Fd8PnMrm+4SumUUXYOik/TXRs57blycwg==\n-----END AGE ENCRYPTED FILE-----\n"
            }
        ],
        "lastmodified": "2026-01-03T05:07:08Z",
        "mac": "ENC[AES256_GCM,data:5z6FRCjmME6KTEJALOrfyaQbB0Su8NI07+i2lFIrWRqeyRPjTV1HvkJYuR/G26wk20Le92+Q1+C7YdhevXuKEHQe5J8Gmyt+J4TexSP+X1b8S5/3Dg4ZQ3Qm5kJNjcaO/z5caYMz+AfxYM8OEldVggaMtzHD123KAwuTi8bsuxc=,iv:rRiqQpN5AkocheMoi1BPVAjJuZcEydjUM4n8iTTrZ+k=,tag:qLSMV452n4/ME1yneRjoMg==,type:str]",
        "pgp": [
            {
                "created_at": "2026-01-03T05:07:08Z",
                "enc": "-----BEGIN PGP MESSAGE-----\n\nhF4D9lXjpzPw+n0SAQdAUQb8DdMYWe+BKI8Iz6oZzGPOCdebP+o/ANdSLbU3MhIw\nyfwKA8x+lVWzAFDoAPnoVGEDmExBokfBPFAoOOGB3Ic8kIyoxDupfHBiILF/3RDf\n0l4BdrKmEY+okJ+Dz/V3yOUKBJSKsJ3JaQv9vxz609GmcMMUcuSQLcPmKah9hMKZ\n8GZ3vOhgFMD+lGiQgXNw0jbY70gq0PB4LRIbweCutYEJguoSez9v7FFAZypY9lWc\n=9eJb\n-----END PGP MESSAGE-----",
                "fp": "78E2E084522FB8A14C0D9AED800C8DB8B299A622"
            }
        ],
        "unencrypted_suffix": "_unencrypted",
        "version": "3.11.0"
    }
}

~/.antigravity/settings.json

{
    "mcpServers": {
        "pve01": {
            "command": "${HOME}/.local/share/uv/tools/proxmox-mcp/bin/python",
            "args": ["-m", "proxmox_mcp.server"],
            "env": {
                "PROXMOX_MCP_CONFIG": "${HOME}/git/nicholaswilde/homelab/tools/antigravity/pve01.config.json"
            }
        },
        "pve04": {
            "command": "${HOME}/.local/share/uv/tools/proxmox-mcp/bin/python",
            "args": ["-m", "proxmox_mcp.server"],
            "env": {
                "PROXMOX_MCP_CONFIG": "${HOME}/git/nicholaswilde/homelab/tools/antigravity/pve04.config.json"
            }
        }
    }
}

Build and Load

The Docker image for proxmox-mcp-plus needs to be built and loaded manually.

Code

cd tools/antigravity/proxmox-mcp-plus
task load

UniFi Network MCP

The UniFi Network MCP allows Antigravity to interact with UniFi Network controllers.

~/.antigravity/settings.json

{
    "mcpServers": {
      "unifi": {
        "command": "unifi-network-mcp",
        "env": {
          "UNIFI_HOST": "192.168.1.148",
          "UNIFI_USERNAME": "admin",
          "UNIFI_PASSWORD": "password",
          "UNIFI_PORT": "443",
          "UNIFI_SITE": "154bj8wf",
          "UNIFI_VERIFY_SSL": "false",
          "UNIFI_CONTROLLER_TYPE": "auto"
        }
      }
    }
}

Tip

To find the UNIFI_SITE value, check the URL in the UniFi GUI. For example, in https://unifi.l.nicholaswilde.io/network/154bj8wf/dashboard, the site ID is 154bj8wf.

AdGuard Home MCP

The AdGuard Home MCP allows Antigravity to interact with AdGuard Home for DNS management.

~/.antigravity/settings.json

{
    "mcpServers": {
        "adguard": {
            "command": "npx",
            "args": [
                "-y",
                "@fcannizzaro/mcp-adguard-home"
            ],
            "env":{
                "ADGUARD_URL": "http://192.168.2.13",
                "ADGUARD_USERNAME": "admin",
                "ADGUARD_PASSWORD": "password"
            }
        }
    }
}

Home Assistant MCP

The Home Assistant MCP allows Antigravity to interact with Home Assistant for IoT device control.

🛠 Activation

  1. Add Integration: Go to your Home Assistant instance, navigate to Settings -> Devices & Services, and click Add Integration. Search for "Model Context Protocol" and add it.
  2. Generate Token: Click on your user profile icon in the bottom left corner of the sidebar. Scroll down to the "Long-Lived Access Tokens" section and click Create Token. Give it a name (e.g., "Antigravity MCP") and copy the generated token.

~/.antigravity/settings.json

{
    "mcpServers": {
        "homeassistant": {
            "httpUrl": "http://ha.l.nicholaswilde.io:8123/api/mcp",
            "headers": {
                "Authorization": "Bearer YOUR_LONG_LIVED_ACCESS_TOKEN"
            }
        }
    }
}

Nanobanana MCP

The Nanobanana MCP is used to watch for repository commit updates.

~/.antigravity/settings.json

{
    "mcpServers": {
        "nano-banana": {
            "command": "nanobanana-mcp-server",
            "env": {
                "ANTIGRAVITY_API_KEY": "YOUR_API_KEY"
            }
        }
    }
}

🎨 Theme

The Catppuccin theme can be used to customize the appearance of the Antigravity CLI.

  1. Download the mocha flavor of the Catppuccin theme.
wget https://raw.githubusercontent.com/catppuccin/antigravity-cli/main/themes/mocha.json -O ${HOME}/.antigravity/catppuccin-mocha.json
  1. Add the theme property to your settings.json file.

~/.antigravity/settings.json

{
  "ui": {
    "theme": "${HOME}/.antigravity/catppuccin-mocha.json"
  }
}

📝 Usage

Once installed and authenticated, start interacting with Antigravity from the shell. See Antigravity CLI Commands for custom commands available in this project.

Example

git clone https://github.com/nicholaswilde/antigravity-cli
cd antigravity-cli
antigravity
> Give me a summary of all of the changes that went in yesterday

Start a chat

antigravity

Pipe content to the CLI from stdin

echo "Explain the content of this file docs/README.md" | antigravity -p

UniFi Network MCP

> List all connected clients on my network.
> Show me the status of my UniFi devices.
> What are my current firewall rules?

List Models

Code

antigravity list-models

🔗 References