Skip to content

Commit 4daaec5

Browse files
Fix Antigravity agent setup drift
1 parent 0e86b01 commit 4daaec5

44 files changed

Lines changed: 1393 additions & 197 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ These are installed on target VPS (not development machine).
342342
**Coding Agents:**
343343
- **Claude Code** — Anthropic's coding agent
344344
- **Codex CLI** — OpenAI's coding agent
345-
- **Gemini CLI** — Google's coding agent
345+
- **Antigravity CLI** — Google's coding agent
346346

347347
**Cloud & Database:**
348348
- **PostgreSQL 18** — Database

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ graph LR
111111
class LAPTOP,BROWSER user
112112
class STEPS wizard
113113
class UBUNTU,INSTALLER,CONFIGURED vps
114-
class CLAUDE,CODEX,GEMINI agent
114+
class CLAUDE,CODEX,AGY agent
115115
```
116116
117117
### For Beginners
@@ -636,7 +636,8 @@ acfs-update --bootstrap-self-update
636636
| **Runtime** | uv (Python) | `uv self update` |
637637
| **Runtime** | Go | `apt upgrade` (if apt-managed) |
638638
| **Agents** | Claude Code | `claude update --channel latest` |
639-
| **Agents** | Codex, Gemini | `bun install -g @latest` |
639+
| **Agents** | Codex | `bun install -g @latest` |
640+
| **Agents** | Antigravity | `agy update` (or verified installer with `--force`) |
640641
| **Cloud** | Wrangler, Vercel | `bun install -g @latest` |
641642
| **Cloud** | Supabase | GitHub release tarball (sha256 checksums) |
642643
| **Stack** | ntm, slb, ubs, dcg, ru, etc. | Re-run upstream installers |
@@ -1251,7 +1252,7 @@ Claude Code should be installed and updated using its native mechanisms:
12511252
- **Install:** ACFS uses the official native installer (`claude.ai/install.sh`), checksum-verified via `checksums.yaml` (installs to `~/.local/bin/claude`)
12521253
- **Update:** Use `claude update --channel latest` (built-in) or run `acfs update --agents-only`
12531254
1254-
This ensures proper authentication handling and avoids issues with alternative package manager builds. For Codex and Gemini, ACFS uses standard bun global package updates.
1255+
This ensures proper authentication handling and avoids issues with alternative package manager builds. ACFS updates Codex with Bun global package updates and Antigravity with its native `agy update` path.
12551256
12561257
### Cloud & Database
12571258
@@ -1392,7 +1393,7 @@ The `--deep` flag runs functional tests beyond binary existence:
13921393
13931394
| Category | Checks |
13941395
|----------|--------|
1395-
| **Agent Auth** | Claude config, Codex OAuth, Gemini credentials |
1396+
| **Agent Auth** | Claude config, Codex OAuth, Antigravity credentials |
13961397
| **Database** | PostgreSQL connection, ubuntu role exists |
13971398
| **Cloud CLIs** | `gh auth status`, `wrangler whoami`, Supabase/Vercel tokens |
13981399
| **Vault** | `VAULT_ADDR` configured |
@@ -3429,7 +3430,7 @@ tmux session: acfs-swarm
34293430
├── agent-2: Claude working on api
34303431
├── agent-3: Claude working on tests
34313432
├── agent-4: Codex reviewing PRs
3432-
├── agent-5: Gemini writing docs
3433+
├── agent-5: Antigravity writing docs
34333434
└── ...
34343435
```
34353436
@@ -3579,7 +3580,7 @@ One agent is useful. Three agents working in parallel are transformative.
35793580
Vibe coding assumes you'll run multiple agents simultaneously:
35803581
- Claude for complex reasoning and architecture
35813582
- Codex for rapid prototyping and refactoring
3582-
- Gemini for documentation and research
3583+
- Antigravity for documentation and research
35833584
35843585
ACFS provides the coordination layer (Agent Mail, NTM, SLB) that makes this practical.
35853586
@@ -4415,7 +4416,7 @@ Vibe mode (`--mode vibe`) enables:
44154416
- Passwordless sudo for ubuntu user
44164417
- `--dangerously-skip-permissions` for Claude
44174418
- `--dangerously-bypass-approvals-and-sandbox` for Codex
4418-
- `--yolo` for Gemini
4419+
- Always-proceed tool permission for Antigravity (`agy`)
44194420
44204421
This is **intentionally insecure for velocity**. Use only on:
44214422
- Throwaway VPS you don't care about

acfs/onboard/lessons/03_tmux_basics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ tmux attach -t practice
121121

122122
## Why This Matters for Agents
123123

124-
Your coding agents (Claude, Codex, Gemini) run in tmux panes.
124+
Your coding agents (Claude, Codex, Antigravity) run in tmux panes.
125125

126126
If SSH drops, they keep running. When you reconnect and reattach, they're still there!
127127

acfs/onboard/lessons/04_agents_login.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,11 @@ Follow the browser prompts to authenticate with your **ChatGPT Pro/Plus/Team acc
9595
>
9696
> **If login fails:** Check ChatGPT Settings → Security → "API/Device access"
9797
98-
### Gemini CLI
98+
### Antigravity CLI
9999
```bash
100-
gemini
100+
agy
101101
```
102-
Follow the prompts to authenticate with your Google account.
102+
Follow the prompts to authenticate with your Google account. ACFS keeps the model pinned to Gemini 3.1 Pro (High).
103103

104104
---
105105

@@ -110,7 +110,7 @@ After logging in, **immediately** back up your credentials:
110110
```bash
111111
caam backup claude my-main-account
112112
caam backup codex my-main-account
113-
caam backup gemini my-main-account
113+
caam backup agy my-main-account
114114
```
115115

116116
Now you can switch accounts later with:
@@ -155,7 +155,7 @@ Let's verify your agents are ready:
155155

156156
```bash
157157
# Check which agents are installed
158-
which claude codex gemini
158+
which claude codex agy
159159

160160
# Check your agent credential backups
161161
caam ls

acfs/onboard/lessons/08_keeping_updated.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ acfs-update
2929
That's it! This updates:
3030
- System packages (apt)
3131
- Shell tools (OMZ, P10K, plugins)
32-
- Coding agents (Claude, Codex, Gemini)
32+
- Coding agents (Claude, Codex, Antigravity)
3333
- Cloud CLIs (Wrangler, Supabase, Vercel)
3434
- Language runtimes (Bun, Rust, uv)
3535
- Dicklesworthstone stack tools (ntm, slb, ubs, br, bv, etc.)
@@ -144,8 +144,8 @@ claude update --channel latest
144144
# Codex
145145
bun install -g --trust @openai/codex@latest
146146

147-
# Gemini
148-
bun install -g --trust @google/gemini-cli@latest
147+
# Antigravity
148+
agy update
149149
```
150150

151151
### Shell tools won't update

apps/web/app/learn/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ const QUICK_REFERENCE_ITEMS: QuickReferenceItem[] = [
5050
lessonSlug: "agent-commands",
5151
icon: Terminal,
5252
title: "Agent Commands",
53-
desc: "Claude, Codex, Gemini shortcuts",
53+
desc: "Claude, Codex, Antigravity shortcuts",
5454
gradient: "from-violet-500/10 to-violet-500/5",
5555
},
5656
{

apps/web/app/wizard/status-check/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ export default function StatusCheckPage() {
295295
<p className="text-[oklch(0.72_0.19_145)]">✔ Shell: zsh with oh-my-zsh</p>
296296
<p className="text-[oklch(0.72_0.19_145)]">✔ Languages: bun, uv, rust, go</p>
297297
<p className="text-[oklch(0.72_0.19_145)]">✔ Tools: <Jargon term="tmux">tmux</Jargon>, <Jargon term="ripgrep">ripgrep</Jargon>, <Jargon term="lazygit">lazygit</Jargon></p>
298-
<p className="text-[oklch(0.72_0.19_145)]">✔ Agents: claude-code, codex</p>
298+
<p className="text-[oklch(0.72_0.19_145)]">✔ Agents: claude-code, codex, agy</p>
299299
<p className="mt-2 text-foreground">All checks passed!</p>
300300
</div>
301301
</OutputPreview>
@@ -435,7 +435,7 @@ export default function StatusCheckPage() {
435435
</p>
436436
<ul className="list-disc space-y-1 pl-5">
437437
<li><strong>Recommended now:</strong> GitHub CLI and Claude Code (so you can save code and start coding immediately)</li>
438-
<li><strong>Optional now:</strong> Codex, Gemini, and Tailscale (only if you plan to use them)</li>
438+
<li><strong>Optional now:</strong> Codex, Antigravity, and Tailscale (only if you plan to use them)</li>
439439
<li><strong>Optional later:</strong> Cloud tools (Wrangler / Supabase / Vercel) and anything else you don&apos;t need yet</li>
440440
</ul>
441441
<p className="text-xs text-muted-foreground">

apps/web/components/lessons/agents-login-lesson.tsx

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ export function AgentsLoginLesson() {
209209
<CodeBlock
210210
code={`caam backup claude my-main-account
211211
caam backup codex my-main-account
212-
caam backup gemini my-main-account`}
212+
caam backup agy my-main-account`}
213213
/>
214214
</div>
215215

@@ -530,7 +530,29 @@ function CodexLoginSection() {
530530
// INTERACTIVE AGENT COMPARISON - Clickable agent selector with detail cards
531531
// =============================================================================
532532

533-
type AgentId = "claude" | "codex" | "gemini";
533+
type AgentId = "claude" | "codex" | "antigravity";
534+
const AGENT_KEYS: AgentId[] = ["claude", "codex", "antigravity"];
535+
const AGENT_X_POSITION: Record<AgentId, number> = {
536+
claude: 17,
537+
codex: 50,
538+
antigravity: 83,
539+
};
540+
const AGENT_START_X: Record<AgentId, number> = {
541+
claude: 100,
542+
codex: 300,
543+
antigravity: 500,
544+
};
545+
const AGENT_LABELS: Record<AgentId, string> = {
546+
claude: "Claude Code",
547+
codex: "Codex CLI",
548+
antigravity: "Antigravity CLI",
549+
};
550+
551+
function particleUnit(agentKey: AgentId, index: number, salt: number) {
552+
const agentOffset = AGENT_KEYS.indexOf(agentKey) + 1;
553+
const seed = agentOffset * 997 + index * 37 + salt * 101;
554+
return ((seed * 9301 + 49297) % 233280) / 233280;
555+
}
534556

535557
// =============================================================================
536558
// LIVE AGENT TERMINAL RACE - Interactive multi-scenario auth visualization
@@ -556,7 +578,7 @@ interface Scenario {
556578
agents: {
557579
claude: ScenarioAgent;
558580
codex: ScenarioAgent;
559-
gemini: ScenarioAgent;
581+
antigravity: ScenarioAgent;
560582
};
561583
}
562584

@@ -596,7 +618,7 @@ const SCENARIOS: Scenario[] = [
596618
result: "fail",
597619
finishDelay: 2600,
598620
},
599-
gemini: {
621+
antigravity: {
600622
lines: [
601623
{ text: '$ agy "Create SSH keys for GitHub"', type: "command", delay: 0 },
602624
{ text: "Let me explain SSH key cryptography...", type: "info", delay: 500 },
@@ -645,7 +667,7 @@ const SCENARIOS: Scenario[] = [
645667
result: "success",
646668
finishDelay: 1600,
647669
},
648-
gemini: {
670+
antigravity: {
649671
lines: [
650672
{ text: '$ agy "Help me set up API auth"', type: "command", delay: 0 },
651673
{ text: "There are several auth approaches:", type: "info", delay: 500 },
@@ -695,7 +717,7 @@ const SCENARIOS: Scenario[] = [
695717
result: "success",
696718
finishDelay: 4700,
697719
},
698-
gemini: {
720+
antigravity: {
699721
lines: [
700722
{ text: "$ agy", type: "command", delay: 0 },
701723
{ text: "Opening browser for Google sign-in...", type: "info", delay: 500 },
@@ -741,13 +763,13 @@ const SCENARIOS: Scenario[] = [
741763
result: "success",
742764
finishDelay: 2400,
743765
},
744-
gemini: {
766+
antigravity: {
745767
lines: [
746-
{ text: "$ caam backup gemini main-acct", type: "command", delay: 0 },
747-
{ text: "Backing up Gemini credentials...", type: "info", delay: 400 },
748-
{ text: "Credentials saved to ~/.caam/gemini/main-acct", type: "success", delay: 900 },
749-
{ text: "$ caam activate gemini work-acct", type: "command", delay: 1300 },
750-
{ text: "Switched Gemini to work-acct", type: "success", delay: 1800 },
768+
{ text: "$ caam backup agy main-acct", type: "command", delay: 0 },
769+
{ text: "Backing up Antigravity credentials...", type: "info", delay: 400 },
770+
{ text: "Credentials saved to ~/.caam/agy/main-acct", type: "success", delay: 900 },
771+
{ text: "$ caam activate agy work-acct", type: "command", delay: 1300 },
772+
{ text: "Switched Antigravity to work-acct", type: "success", delay: 1800 },
751773
],
752774
result: "success",
753775
finishDelay: 2100,
@@ -786,12 +808,12 @@ const SCENARIOS: Scenario[] = [
786808
result: "fail",
787809
finishDelay: 2400,
788810
},
789-
gemini: {
811+
antigravity: {
790812
lines: [
791813
{ text: '$ agy "Update the documentation"', type: "command", delay: 0 },
792814
{ text: "Processing request...", type: "info", delay: 400 },
793815
{ text: "Error: Quota exceeded for gemini-pro", type: "error", delay: 1000 },
794-
{ text: "$ caam activate gemini work-acct", type: "command", delay: 1500 },
816+
{ text: "$ caam activate agy work-acct", type: "command", delay: 1500 },
795817
{ text: "Switched to work-acct", type: "success", delay: 2000 },
796818
{ text: '$ agy "Update the documentation"', type: "command", delay: 2400 },
797819
{ text: "Documentation updated across 8 files.", type: "success", delay: 3400 },
@@ -832,7 +854,7 @@ const SCENARIOS: Scenario[] = [
832854
result: "success",
833855
finishDelay: 2700,
834856
},
835-
gemini: {
857+
antigravity: {
836858
lines: [
837859
{ text: '$ agy "Document the payments module"', type: "command", delay: 0 },
838860
{ text: "Analyzing module public API...", type: "info", delay: 500 },
@@ -866,7 +888,7 @@ const AGENT_COLORS = {
866888
glow: "shadow-emerald-500/20",
867889
hex: "#10b981",
868890
},
869-
gemini: {
891+
antigravity: {
870892
text: "text-blue-400",
871893
bg: "bg-blue-500",
872894
bgFaint: "bg-blue-500/10",
@@ -893,12 +915,12 @@ function InteractiveAgentComparison() {
893915
const [visibleLines, setVisibleLines] = useState<Record<AgentId, number>>({
894916
claude: 0,
895917
codex: 0,
896-
gemini: 0,
918+
antigravity: 0,
897919
});
898920
const [agentDone, setAgentDone] = useState<Record<AgentId, boolean>>({
899921
claude: false,
900922
codex: false,
901-
gemini: false,
923+
antigravity: false,
902924
});
903925
const [particles, setParticles] = useState<Particle[]>([]);
904926
const timersRef = useRef<ReturnType<typeof setTimeout>[]>([]);
@@ -914,8 +936,8 @@ function InteractiveAgentComparison() {
914936

915937
const resetState = useCallback(() => {
916938
clearTimers();
917-
setVisibleLines({ claude: 0, codex: 0, gemini: 0 });
918-
setAgentDone({ claude: false, codex: false, gemini: false });
939+
setVisibleLines({ claude: 0, codex: 0, antigravity: 0 });
940+
setAgentDone({ claude: false, codex: false, antigravity: false });
919941
setParticles([]);
920942
setIsPlaying(false);
921943
}, [clearTimers]);
@@ -928,10 +950,11 @@ function InteractiveAgentComparison() {
928950
particleIdRef.current += 1;
929951
newParticles.push({
930952
id: particleIdRef.current,
931-
x: agentKey === "claude" ? 17 : agentKey === "codex" ? 50 : 83,
953+
x: AGENT_X_POSITION[agentKey],
932954
y: 50,
933-
angle: (Math.PI * 2 * i) / count + Math.random() * 0.5,
934-
speed: 2 + Math.random() * 3,
955+
angle:
956+
(Math.PI * 2 * i) / count + particleUnit(agentKey, i, 1) * 0.5,
957+
speed: 2 + particleUnit(agentKey, i, 2) * 3,
935958
life: 1,
936959
color,
937960
});
@@ -949,12 +972,12 @@ function InteractiveAgentComparison() {
949972
const playScenario = useCallback(
950973
(sc: Scenario) => {
951974
clearTimers();
952-
setVisibleLines({ claude: 0, codex: 0, gemini: 0 });
953-
setAgentDone({ claude: false, codex: false, gemini: false });
975+
setVisibleLines({ claude: 0, codex: 0, antigravity: 0 });
976+
setAgentDone({ claude: false, codex: false, antigravity: false });
954977
setParticles([]);
955978
setIsPlaying(true);
956979

957-
const agentKeys: AgentId[] = ["claude", "codex", "gemini"];
980+
const agentKeys = AGENT_KEYS;
958981

959982
for (const agentKey of agentKeys) {
960983
const agentScenario = sc.agents[agentKey];
@@ -1157,18 +1180,19 @@ function InteractiveAgentComparison() {
11571180
</text>
11581181

11591182
{/* Connection lines with animation */}
1160-
{(["claude", "codex", "gemini"] as AgentId[]).map((agentKey, i) => {
1161-
const startX = i === 0 ? 100 : i === 1 ? 300 : 500;
1183+
{AGENT_KEYS.map((agentKey) => {
1184+
const startX = AGENT_START_X[agentKey];
11621185
const isDone = agentDone[agentKey];
11631186
const isSuccess =
11641187
isDone && scenario.agents[agentKey].result === "success";
11651188
const isFail =
11661189
isDone && scenario.agents[agentKey].result === "fail";
1167-
const color = isSuccess
1168-
? AGENT_COLORS[agentKey].hex
1169-
: isFail
1170-
? "#ef4444"
1171-
: "rgba(255,255,255,0.08)";
1190+
let color = "rgba(255,255,255,0.08)";
1191+
if (isSuccess) {
1192+
color = AGENT_COLORS[agentKey].hex;
1193+
} else if (isFail) {
1194+
color = "#ef4444";
1195+
}
11721196

11731197
return (
11741198
<g key={agentKey}>
@@ -1287,7 +1311,7 @@ function InteractiveAgentComparison() {
12871311

12881312
{/* Terminal panels */}
12891313
<div className="grid grid-cols-1 md:grid-cols-3 gap-0 md:gap-px bg-white/[0.04]">
1290-
{(["claude", "codex", "gemini"] as AgentId[]).map((agentKey) => (
1314+
{AGENT_KEYS.map((agentKey) => (
12911315
<AgentTerminalPanel
12921316
key={`${scenario.id}-${agentKey}`}
12931317
agentKey={agentKey}
@@ -1348,12 +1372,7 @@ function AgentTerminalPanel({
13481372
}
13491373
}, [visibleCount]);
13501374

1351-
const agentLabel =
1352-
agentKey === "claude"
1353-
? "Claude Code"
1354-
: agentKey === "codex"
1355-
? "Codex CLI"
1356-
: "Antigravity CLI";
1375+
const agentLabel = AGENT_LABELS[agentKey];
13571376

13581377
return (
13591378
<div className="bg-black/40 flex flex-col">

0 commit comments

Comments
 (0)