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/
Config¶
- Obtain an API key for your preferred AI model.
- Set it as an environment variable in your terminal. Replace
YOUR_API_KEYwith your generated key. - My current settings.json can be found in my dotfiles repository.
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)¶
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.
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
GITHUB_PERSONAL_ACCESS_TOKEN: This environment variable must be set with your GitHub PAT for thegithubMCP 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.
UniFi Network MCP¶
The UniFi Network MCP allows Antigravity to interact with UniFi Network controllers.
~/.antigravity/settings.json
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
Home Assistant MCP¶
The Home Assistant MCP allows Antigravity to interact with Home Assistant for IoT device control.
Activation¶
- 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.
- 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
Nanobanana MCP¶
The Nanobanana MCP is used to watch for repository commit updates.
~/.antigravity/settings.json
Theme¶
The Catppuccin theme can be used to customize the appearance of the Antigravity CLI.
- Download the mocha flavor of the Catppuccin theme.
- Add the
themeproperty to yoursettings.jsonfile.
Usage¶
Once installed and authenticated, start interacting with Antigravity from the shell. See Antigravity CLI Commands for custom commands available in this project.
Example
Pipe content to the CLI from stdin
UniFi Network MCP
List Models¶
References¶
- https://github.com/nicholaswilde/antigravity-cli
- https://github.com/nicholaswilde/proxmox-mcp-plus
- https://github.com/sirkirby/unifi-network-mcp
- https://github.com/fcannizzaro/mcp-adguard-home
- https://github.com/zhongweili/nanobanana-mcp-server
- https://github.com/nicholaswilde/dotfiles2/blob/main/.antigravity/settings.json