diff --git a/README.md b/README.md
index 760238e8d..8e151be14 100644
--- a/README.md
+++ b/README.md
@@ -37,7 +37,7 @@ Why not just write your own commands? โ [FAQ](docs/FAQ.md#-why-aidd-instead-of
## โ
Prerequisites
-- **An AI coding tool** โ Claude Code (native), or Cursor / Copilot / Codex / OpenCode / Kilo Code (see [Compatibility](#-compatibility)).
+- **An AI coding tool** โ Claude Code (native), or Cursor / Copilot / Codex / OpenCode / Kilo Code / Antigravity CLI (see [Compatibility](#-compatibility)).
- **[Node](https://nodejs.org) 22 or later** on your `PATH`, only for the plugin that ships hooks ([what they do](docs/ARCHITECTURE.md#-bundled-hooks)); the workflows themselves are markdown and need nothing.
## ๐ Compatibility
@@ -50,6 +50,7 @@ Why not just write your own commands? โ [FAQ](docs/FAQ.md#-why-aidd-instead-of
| **Codex** | โ
Supported | Marketplace ยท Flat |
| **OpenCode** | โ
Supported | Flat |
| **Kilo Code** | โ
Supported | Flat |
+| **Antigravity CLI** | โ
Supported | Flat |
| **Gemini ยท Mistral** | ๐ง In progress | โ |
**Marketplace** = installed and updated through your tool's plugin manager. **Flat** = files copied directly into your project, no plugin manager involved. Install steps per tool โ [Other tools](#other-tools).
@@ -185,6 +186,18 @@ codex plugin add aidd-context@aidd-framework # per plugin
+
+Antigravity CLI โ Flat only
+
+1. Unzip the `antigravity-flat` archive into your project root โ `.agents/`: skills, agents, and the memory hook in `.agents/hooks.json`.
+2. Start `agy` in the project. A hook already in `.agents/hooks.json` under another name is kept.
+
+Codex flat also writes `.agents/skills/`: removing one of the two from a project that has both deletes skills the other still uses.
+
+[Docs](https://antigravity.google/docs/subagents?tab=cli)
+
+
+
## ๐ Quick start
Three ways in โ pick one:
diff --git a/aidd_docs/tasks/2026_10/2026_10_02_antigravity-flat-host/phase-5.md b/aidd_docs/tasks/2026_10/2026_10_02_antigravity-flat-host/phase-5.md
index c6448f792..50726156e 100644
--- a/aidd_docs/tasks/2026_10/2026_10_02_antigravity-flat-host/phase-5.md
+++ b/aidd_docs/tasks/2026_10/2026_10_02_antigravity-flat-host/phase-5.md
@@ -1,5 +1,5 @@
---
-status: pending
+status: done
---
diff --git a/aidd_docs/tasks/2026_10/2026_10_02_antigravity-flat-host/plan.md b/aidd_docs/tasks/2026_10/2026_10_02_antigravity-flat-host/plan.md
index f634dcd76..3a67151d4 100644
--- a/aidd_docs/tasks/2026_10/2026_10_02_antigravity-flat-host/plan.md
+++ b/aidd_docs/tasks/2026_10/2026_10_02_antigravity-flat-host/plan.md
@@ -1,6 +1,6 @@
---
objective: "`aidd setup --ai antigravity` and `aidd translate --to antigravity --as flat` write AIDD skills, the memory hook and agents under `.agents/`, which `agy` loads, without touching files AIDD did not write."
-status: in-progress
+status: implemented
---
diff --git a/cli/README.md b/cli/README.md
index 0013c0390..6ee495c2c 100644
--- a/cli/README.md
+++ b/cli/README.md
@@ -3,7 +3,7 @@
`@ai-driven-dev/cli` installs AI tool runtime configs, IDE integrations, and plugins from an AIDD marketplace into a project.
Every file it writes is hash-tracked in a manifest, so drift is detected and owned files can be restored.
-Supported AI tools: Claude Code, Cursor, GitHub Copilot, Codex, OpenCode, Kilo Code. Supported IDE: VS Code.
+Supported AI tools: Claude Code, Cursor, GitHub Copilot, Codex, OpenCode, Kilo Code, Antigravity CLI. Supported IDE: VS Code.
Requires Node.js >= 22.12, and `git` to fetch marketplace plugins.
## Install
@@ -137,8 +137,9 @@ Two output layouts, chosen by `--as`:
| `codex` | yes | yes | `.codex/` |
| `opencode` | no | yes | `.opencode/` |
| `kilo` | no | yes | `.kilo/` |
+| `antigravity` | no | yes | `.agents/` |
-OpenCode and Kilo Code declare no marketplace contract, so they are flat only. Every other target accepts both layouts.
+OpenCode, Kilo Code and Antigravity CLI declare no marketplace contract, so they are flat only. Every other target accepts both layouts.
## Environment variables
diff --git a/cli/package.json b/cli/package.json
index cb167d4b0..f4f790859 100644
--- a/cli/package.json
+++ b/cli/package.json
@@ -54,6 +54,7 @@
"smoke:full": "pnpm build && SMOKE_REMOTE=1 bash scripts/smoke-tools.sh",
"smoke:real": "pnpm build && bash scripts/smoke-real.sh",
"smoke:collision": "pnpm build && bash scripts/smoke-collision.sh",
+ "smoke:antigravity": "pnpm build && bash scripts/smoke-antigravity.sh",
"typecheck": "tsc --noEmit",
"lint": "biome check .",
"format": "biome format --write .",
diff --git a/cli/scripts/smoke-antigravity.sh b/cli/scripts/smoke-antigravity.sh
new file mode 100755
index 000000000..f86cb81ca
--- /dev/null
+++ b/cli/scripts/smoke-antigravity.sh
@@ -0,0 +1,109 @@
+#!/usr/bin/env bash
+# Runtime smoke against a real, logged-in `agy`: after `aidd setup --ai antigravity`, the host
+# itself expands an AIDD skill, loads and fires the memory hook, and lists an AIDD agent.
+# Local only, never in CI or lefthook: a turn needs a Google login. `pnpm smoke:antigravity`.
+#
+# Measured on agy 1.2.17, and why the script reads logs instead of waiting on a turn:
+# - print mode (`-p`) fires no hook, so the hook session runs interactive under a pty
+# (`script`), with `--add-dir` (without it, 0 hooks load);
+# - an interactive turn never returns, so that session is killed after a bound, and only its
+# log lines and the files it touched count as evidence;
+# - an interactive initial prompt is sent as text, never expanded, so the skill and
+# `/agents` checks use print mode, bounded by `--print-timeout`.
+#
+# The project is a throwaway git repo; HOME stays real because the login lives there, but
+# `AIDD_USER_CONFIG_DIR` is relocated so setup never touches the real aidd profile.
+set -uo pipefail
+
+ROOT="$(cd "$(dirname "$0")/.." && pwd)"
+FRAMEWORK="$(cd "$ROOT/.." && pwd)"
+CLI="$ROOT/dist/cli.js"
+TURN_SECONDS="${SMOKE_AGY_TIMEOUT:-60}"
+
+SKILL="aidd-context-11-explore"
+AGENT="aidd-dev-executor"
+GHOST_AGENT="aidd-dev-ghost"
+
+command -v agy >/dev/null 2>&1 || { echo "FATAL: agy not on PATH โ install Antigravity CLI and log in"; exit 1; }
+[[ -f "$CLI" ]] || { echo "FATAL: $CLI missing โ run 'pnpm build' first"; exit 1; }
+
+TMP="$(mktemp -d)"
+WS="$TMP/project"
+SESSION_PID=""
+cleanup() {
+ if [[ -n "$SESSION_PID" ]]; then
+ pkill -P "$SESSION_PID" 2>/dev/null
+ kill "$SESSION_PID" 2>/dev/null
+ fi
+ rm -rf "$TMP"
+}
+trap cleanup EXIT
+
+export AIDD_USER_CONFIG_DIR="$TMP/aidd-config"
+export AIDD_SKIP_UPDATE_CHECK=1
+
+FAIL=0
+pass() { echo " PASS $1"; echo " $2"; }
+fail() { echo " FAIL $1"; FAIL=$((FAIL + 1)); }
+
+echo "agy $(agy --version 2>&1 | head -1), $(date '+%Y-%m-%d %H:%M %Z')"
+
+# A project with a memory bank and an empty memory block, so the hook has something to fill.
+mkdir -p "$WS/aidd_docs/memory"
+printf '# Architecture\n' >"$WS/aidd_docs/memory/architecture.md"
+printf '# Project\n\n## Memory Management\n\n\n\n' >"$WS/AGENTS.md"
+git -C "$WS" init -q
+git -C "$WS" -c user.email=smoke@aidd -c user.name=smoke commit -q --allow-empty -m init
+
+if ! (cd "$WS" && node "$CLI" setup --source local --path "$FRAMEWORK" --ai antigravity --plugins recommended --yes) >"$TMP/setup.log" 2>&1; then
+ echo "FATAL: aidd setup failed"; tail -5 "$TMP/setup.log"; exit 1
+fi
+for f in ".agents/skills/$SKILL/SKILL.md" ".agents/hooks.json" ".agents/agents/$AGENT/agent.md"; do
+ [[ -f "$WS/$f" ]] || { echo "FATAL: setup did not write $f"; exit 1; }
+done
+
+LOG="$TMP/agy-session.log"
+(cd "$WS" && exec script -q /dev/null agy -i "reply OK" --mode plan --add-dir "$WS" --log-file "$LOG") \
+ >"$TMP/agy-session.out" 2>&1 &
+SESSION_PID=$!
+
+for ((i = 0; i < TURN_SECONDS; i++)); do
+ grep -q 'aidd_docs/memory/architecture.md' "$WS/AGENTS.md" && break
+ sleep 1
+done
+pkill -P "$SESSION_PID" 2>/dev/null
+kill "$SESSION_PID" 2>/dev/null
+wait "$SESSION_PID" 2>/dev/null
+SESSION_PID=""
+
+# Startup logs "not logged into Antigravity" before the stored login is read, so only a missing
+# success line means no login.
+if ! grep -q "OAuth: authenticated successfully" "$LOG" 2>/dev/null; then
+ echo "FATAL: agy is not logged in โ run 'agy' once and sign in"; exit 1
+fi
+
+line="$(grep -Eo 'loaded [1-9][0-9]* named hooks from [0-9]+ hooks.json file\(s\)' "$LOG" 2>/dev/null | head -1)"
+[[ -n "$line" ]] && pass "hooks loaded" "$line" || fail "hooks: no 'loaded N named hooks' line (N >= 1) in the agy log"
+
+line="$(grep -m1 'aidd_docs/memory/architecture.md' "$WS/AGENTS.md")"
+[[ -n "$line" ]] && pass "memory refreshed at the repo root" "AGENTS.md: $line" || fail "memory: AGENTS.md block still empty, the SessionStart hook did not run at the repo root"
+
+# The expansion is logged before the model answers, so a short bound is enough.
+SKILL_LOG="$TMP/agy-skill.log"
+(cd "$WS" && agy --add-dir "$WS" --mode plan --print-timeout 20s --log-file "$SKILL_LOG" -p "/$SKILL") >/dev/null 2>&1
+line="$(grep -o "expanded slash command \"$SKILL\" (skill)" "$SKILL_LOG" 2>/dev/null | head -1)"
+[[ -n "$line" ]] && pass "skill expanded" "$line" || fail "skill: no 'expanded slash command \"$SKILL\"' line in the agy log"
+
+# Print mode answers /agents without the model.
+AGENTS_JSON="$TMP/agents.json"
+(cd "$WS" && agy --add-dir "$WS" --output-format json --print-timeout "${TURN_SECONDS}s" -p "/agents") >"$AGENTS_JSON" 2>&1
+line="$(grep -o "\"$AGENT\"" "$AGENTS_JSON" | head -1)"
+if [[ -n "$line" ]] && ! grep -q "\"$GHOST_AGENT\"" "$AGENTS_JSON"; then
+ pass "agent listed" "/agents: $line, $GHOST_AGENT absent"
+else
+ fail "agents: /agents does not list \"$AGENT\" (or lists the invented $GHOST_AGENT)"
+fi
+
+echo
+[[ "$FAIL" -eq 0 ]] && { echo "smoke-antigravity: all passed"; exit 0; }
+echo "smoke-antigravity: $FAIL failed"; exit 1
diff --git a/docs/FAQ.md b/docs/FAQ.md
index 84d394d63..7975d502b 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -11,7 +11,7 @@ You can write your own Claude Code skills โ nothing stops you. AIDD exists bec
- **Install / first run** โ [Quick start](../README.md#-quick-start).
- **Update plugins** โ `/plugin marketplace update aidd-framework`, or see [Versioning & updates](MARKETPLACE.md#-versioning--updates).
- **Private repo?** Yes โ `/plugin marketplace add` just needs GitHub read access (via `gh auth login` or a PAT).
-- **Cursor / Copilot / Codex / OpenCode / Kilo Code?** Each other tool installs via its own native mechanism (project files, local plugins, or a plugin command) from the [release](https://github.com/ai-driven-dev/framework/releases/latest) archives. Steps per tool โ [Other tools](../README.md#other-tools).
+- **Cursor / Copilot / Codex / OpenCode / Kilo Code / Antigravity CLI?** Each other tool installs via its own native mechanism (project files, local plugins, or a plugin command) from the [release](https://github.com/ai-driven-dev/framework/releases/latest) archives. Steps per tool โ [Other tools](../README.md#other-tools).
## ๐ธ Cost and quotas
diff --git a/docs/MAINTAINERS.md b/docs/MAINTAINERS.md
index 6ae24b5c2..d6881336b 100644
--- a/docs/MAINTAINERS.md
+++ b/docs/MAINTAINERS.md
@@ -148,6 +148,7 @@ Roles, promotion, and inactivity rules โ [`GOVERNANCE.md`](../GOVERNANCE.md#-r
- The marketplace is Claude Code native.
- Other tools are served by per-release archives the `aidd-cli` builds; this repo stays Claude-authored and tool-agnostic in its prose.
- Keep tool-specific detail in plugin READMEs.
+- Antigravity CLI has no runtime check in CI: a turn needs a Google login. Before a release that touches its profile, run `cd cli && pnpm smoke:antigravity` on a machine where `agy` is logged in. It installs AIDD into a throwaway project, then checks the `agy` log for a skill expansion and the loaded hooks, the project memory for the hook's refresh, and `/agents` for an AIDD agent.
## ๐งฑ Build your own plugin
diff --git a/plugins/aidd-context/hooks/update_memory.js b/plugins/aidd-context/hooks/update_memory.js
index 4cb856ec1..a4c56d29c 100644
--- a/plugins/aidd-context/hooks/update_memory.js
+++ b/plugins/aidd-context/hooks/update_memory.js
@@ -42,6 +42,7 @@ const TOOL_FILES = {
codex: "AGENTS.md",
cursor: "AGENTS.md",
opencode: "AGENTS.md",
+ antigravity: "AGENTS.md",
copilot: ".github/copilot-instructions.md",
};
diff --git a/plugins/aidd-context/skills/00-onboard/references/state/detection.md b/plugins/aidd-context/skills/00-onboard/references/state/detection.md
index f66011153..a8c0d4275 100644
--- a/plugins/aidd-context/skills/00-onboard/references/state/detection.md
+++ b/plugins/aidd-context/skills/00-onboard/references/state/detection.md
@@ -10,6 +10,7 @@ A tool is used when its own dir exists, or when a file only that tool reads exis
| codex | `.codex/` | `AGENTS.md` |
| cursor | `.cursor/` or `.cursorrules` | `AGENTS.md` |
| opencode | `.opencode/` | `AGENTS.md` |
+| antigravity | `.agents/agents/`, `.agents/rules/` or `.agents/hooks.json` | `AGENTS.md` |
| copilot | `.github/copilot-instructions.md` or `.github/{instructions,agents,skills,prompts}/` | `.github/copilot-instructions.md` |
- Detected tools only. An unused optional tool is omitted, never crossed.
diff --git a/plugins/aidd-context/skills/02-project-memory/references/tools.md b/plugins/aidd-context/skills/02-project-memory/references/tools.md
index 4b90d76d1..f25dc0bbe 100644
--- a/plugins/aidd-context/skills/02-project-memory/references/tools.md
+++ b/plugins/aidd-context/skills/02-project-memory/references/tools.md
@@ -8,6 +8,7 @@ The AI tools a project can use.
| codex | `.codex/` | `AGENTS.md` |
| cursor | `.cursor/` or `.cursorrules` | `AGENTS.md` |
| opencode | `.opencode/` | `AGENTS.md` |
+| antigravity | `.agents/agents/`, `.agents/rules/` or `.agents/hooks.json` | `AGENTS.md` |
| copilot | `.github/copilot-instructions.md` or `.github/{instructions,agents,skills,prompts}/` | `.github/copilot-instructions.md` |
- A shared `AGENTS.md` is a wiring target, never a detection signal.
diff --git a/plugins/aidd-context/skills/04-skill-generate/references/tool-detect.md b/plugins/aidd-context/skills/04-skill-generate/references/tool-detect.md
index 286dbc7a3..94fbe2467 100644
--- a/plugins/aidd-context/skills/04-skill-generate/references/tool-detect.md
+++ b/plugins/aidd-context/skills/04-skill-generate/references/tool-detect.md
@@ -9,5 +9,6 @@ Which AI tools a project has installed.
| OpenCode | `.opencode/` |
| GitHub Copilot | `.github/copilot-instructions.md` |
| Codex CLI | `.codex/` |
+| Antigravity CLI | `.agents/agents/`, `.agents/rules/` or `.agents/hooks.json` |
-A bare `AGENTS.md` means Cursor, OpenCode, or Codex. Several signals can coexist.
+A bare `AGENTS.md` means Cursor, OpenCode, Codex, or Antigravity CLI. `.agents/skills/` alone is no signal: Codex and Antigravity CLI both read it. Several signals can coexist.
diff --git a/plugins/aidd-context/skills/04-skill-generate/references/tool-write.md b/plugins/aidd-context/skills/04-skill-generate/references/tool-write.md
index 2863f4ccd..852aa9f06 100644
--- a/plugins/aidd-context/skills/04-skill-generate/references/tool-write.md
+++ b/plugins/aidd-context/skills/04-skill-generate/references/tool-write.md
@@ -11,6 +11,7 @@ Where a skill tree is written, per tool.
| OpenCode | `.opencode/skills//` |
| GitHub Copilot | `.github/skills//` |
| Codex CLI | `.agents/skills//` |
+| Antigravity CLI | `.agents/skills//` |
| Plugin source | `plugins//skills//` |
## Frontmatter
@@ -23,3 +24,4 @@ Emit `description` always, `name` only where listed, drop the rest.
| Cursor, GitHub Copilot | `name`, `description`, opt `allowed-tools` |
| OpenCode | `description`, opt `permission` map |
| Codex CLI | `name`, `description` (strips the rest) |
+| Antigravity CLI | `name`, `description` |
diff --git a/plugins/aidd-context/skills/05-rule-generate/references/tool-paths.md b/plugins/aidd-context/skills/05-rule-generate/references/tool-paths.md
index ba7cbe23b..e0c8eb9ad 100644
--- a/plugins/aidd-context/skills/05-rule-generate/references/tool-paths.md
+++ b/plugins/aidd-context/skills/05-rule-generate/references/tool-paths.md
@@ -11,12 +11,15 @@ The per-tool rules path and write targets. Rule slice only, nothing about skills
| GitHub Copilot | `.github/instructions/-.instructions.md` | yes (flat) |
| OpenCode | `.opencode/rules//.md` | yes |
| Codex CLI | `.codex/rules//.md` | yes |
+| Antigravity CLI | `.agents/rules/.md` | yes (flat) |
`` is the file name `#-slug` from `rule-authoring.md` (e.g. `2-python-fstrings`). `` is that slug with its leading category digit dropped (`python-fstrings`). `` is the folder `-`, the zero-padded category index plus the category name from the taxonomy, e.g. `01-standards`. `` is that same two-digit index.
Copilot is flat: no category folder. Its file is `-`, e.g. `2-python-fstrings` becomes `02-python-fstrings` (one category prefix, no folder).
-Every tool above installs rules. This table used to say OpenCode and Codex do not, and to tell a generator to put the convention in AGENTS.md instead; both were false. `plugin-content-translator.ts` routes a plugin's `rules/` into every tool whose capability accepts them, and all five accept them โ `aidd ai rules` prints where each one lands, asked of the installer itself rather than of a list.
+Antigravity CLI is flat too: it reads only the direct `.md` children of `.agents/rules/`, so a category folder would hide the rule.
+
+Every tool above installs rules. This table used to say OpenCode and Codex do not, and to tell a generator to put the convention in AGENTS.md instead; both were false. `plugin-content-translator.ts` routes a plugin's `rules/` into every tool whose capability accepts them, and all five accept them. Antigravity CLI is the exception: AIDD installs no rule for it, so a generated rule is the only way one reaches `.agents/rules/` โ `aidd ai rules` prints where each one lands, asked of the installer itself rather than of a list.
Both use the same frontmatter as Claude Code: `paths` (array of globs), omitted for an all-files rule.
@@ -29,6 +32,7 @@ The file-scope field is named differently per tool. Set the right one.
| Claude Code | `paths` (array of globs). Omit `paths` for an all-files rule; no `paths` means it applies everywhere. |
| Cursor | `description` (one line, what the rule governs), `globs` (comma-separated; omit for all-files), `alwaysApply` (false; true for all-files). |
| GitHub Copilot | `applyTo` (single glob string; `**` for an all-files rule). |
+| Antigravity CLI | `trigger` (required): `always_on` for an all-files rule, else `glob` with `globs`. |
A multi-glob `paths` becomes a comma-joined string for Cursor and Copilot, or the most-encompassing glob.
@@ -39,6 +43,7 @@ A multi-glob `paths` becomes a comma-joined string for Cursor and Copilot, or th
| `.claude/` or `CLAUDE.md` | Claude Code |
| `.cursor/` | Cursor |
| `.github/copilot-instructions.md` | GitHub Copilot |
+| `.agents/agents/`, `.agents/rules/` or `.agents/hooks.json` | Antigravity CLI |
## Write targets
diff --git a/plugins/aidd-context/skills/06-agent-generate/references/tool-paths.md b/plugins/aidd-context/skills/06-agent-generate/references/tool-paths.md
index 5ca7a1250..1a4376067 100644
--- a/plugins/aidd-context/skills/06-agent-generate/references/tool-paths.md
+++ b/plugins/aidd-context/skills/06-agent-generate/references/tool-paths.md
@@ -11,8 +11,9 @@ The per-tool agent path and the gate every run executes before writing. Agent sl
| OpenCode | `.opencode/agents/.md` | markdown + frontmatter |
| GitHub Copilot | `.github/agents/.agent.md` | markdown + frontmatter |
| Codex CLI | `.codex/agents/.toml` | TOML (converted) |
+| Antigravity CLI | `.agents/agents//agent.md` | markdown + frontmatter |
-Agents are supported on all five tools.
+Agents are supported on all six tools.
## Frontmatter per tool
@@ -25,6 +26,9 @@ The canonical agent carries `name`, `description`, `model`. Emit those a row acc
| OpenCode | `name`, `description`, `model`, optional `temperature`, `permission` |
| GitHub Copilot | `name`, `description`, `model`, optional `tools` |
| Codex CLI | `name`, `description` (drops `model`) |
+| Antigravity CLI | `name`, `description`, `model: inherit`, optional `tools` as a YAML list |
+
+`agy` drops in silence an agent whose `model` is not `inherit`, `flash` or `pro`, or whose `tools` is a comma-separated string.
## Codex TOML conversion
@@ -43,7 +47,8 @@ Codex agents are TOML, not markdown. Convert:
| `.opencode/` | OpenCode |
| `.codex/` | Codex CLI |
| `.github/copilot-instructions.md` | GitHub Copilot |
-| `AGENTS.md` | Cursor, OpenCode, or Codex (list all) |
+| `.agents/agents/`, `.agents/rules/` or `.agents/hooks.json` | Antigravity CLI |
+| `AGENTS.md` | Cursor, OpenCode, Codex, or Antigravity CLI (list all) |
## Write targets
diff --git a/plugins/aidd-context/skills/08-hook-generate/references/tool-paths.md b/plugins/aidd-context/skills/08-hook-generate/references/tool-paths.md
index 48b1d19ef..0757af487 100644
--- a/plugins/aidd-context/skills/08-hook-generate/references/tool-paths.md
+++ b/plugins/aidd-context/skills/08-hook-generate/references/tool-paths.md
@@ -11,6 +11,7 @@ Per-tool hook support, event names, file formats, and scopes. Hook slice only: n
| Cursor | yes | JSON config + script. |
| GitHub Copilot | yes | JSON config + script. Also reads Claude's `.claude/` config. |
| OpenCode | no | Hooks are JS/TS plugin modules, not config. Skip with the reason below. |
+| Antigravity CLI | yes | JSON config + script. Project scope only here, see below. |
**OpenCode skip reason.** OpenCode hooks are code, not a config entry plus a script. Point the user to write a plugin under `.opencode/plugins/` (project) or `~/.config/opencode/plugins/` (user), per `https://opencode.ai/docs/plugins`. This skill does not generate it.
@@ -29,6 +30,8 @@ Each tool names the same moment differently and supports a different subset. Cor
| turn stop | `Stop` | `Stop` | `stop` | `Stop` |
| session end | `SessionEnd` | `SessionEnd` | `sessionEnd` | `SessionEnd` |
+Antigravity CLI documents `PreToolUse`, `PostToolUse`, `PreInvocation`, `PostInvocation` and `Stop`; `SessionStart` works on `agy` 1.2.17 but is undocumented. Its tool names differ from Claude's, so a `matcher` never carries over.
+
Each tool exposes more moments than these. For the full list, read the tool's docs: Claude `https://code.claude.com/docs/en/hooks`, Codex `https://developers.openai.com/codex/hooks`, Cursor `https://cursor.com/docs/hooks`, Copilot `https://docs.github.com/en/copilot/reference/hooks-configuration`. Confirm a moment exists before wiring it. Copilot also accepts the camelCase names (`sessionStart`, `preToolUse`).
## File and format per tool
@@ -39,9 +42,12 @@ Each tool exposes more moments than these. For the full list, read the tool's do
| Codex CLI | `~/.codex/hooks.json` or `[hooks]` in `config.toml` | same entry shape as Claude. |
| Cursor | `.cursor/hooks.json` | `{ "version": 1, "hooks": { "": [ { "command": "..." } ] } }` |
| GitHub Copilot | `.github/hooks/*.json` or a `hooks` block in `.github/copilot/settings.json` | `{ "version": 1, "hooks": { "": [ { "type": "command", "command": "..." } ] } }` |
+| Antigravity CLI | `.agents/hooks.json` | `{ "": { "": [ { "type": "command", "command": "..." } ] } }`, no `hooks` wrapper; a `matcher` entry only for `PreToolUse` and `PostToolUse` |
A Claude `settings.json` and a plugin or standalone `hooks/hooks.json` both wrap the event map under a top-level `hooks` key, so the file is `{ "hooks": { "": [ ... ] } }`. A Codex `config.toml` uses a `[hooks]` table instead.
+An Antigravity CLI handler runs from `/.agents`, through a shell: prefix a root-relative command with `cd .. && `. `agy` rejects a Claude-style nested `[ { "hooks": [ ... ] } ]` with `command hook must specify 'command'`.
+
## Scopes per tool
Ask the user which scope, then write the matching file. A `-` means the tool has no such scope.
@@ -81,4 +87,4 @@ Written as `${VAR}` inside a command: `CLAUDE_PROJECT_DIR` (project root), `CLAU
- **Asset-access precheck.** Before writing, confirm this reference is readable. If not, stop: the plugin is not installed in this host.
- **Merge check.** Before writing, read the target file and confirm the new entry is appended to the moment's list, never overwriting a sibling.
-- **Write-target validation.** After writing, confirm the file is valid and every handler path is an approved `${VAR}` or an absolute path under the workspace (a hook command runs from an arbitrary cwd, so an absolute path or `${VAR}` is expected, not a relative one). Otherwise stop and report.
+- **Write-target validation.** After writing, confirm the file is valid and every handler path is an approved `${VAR}` or an absolute path under the workspace (a hook command runs from an arbitrary cwd, so an absolute path or `${VAR}` is expected, not a relative one; Antigravity CLI's `cd .. && ` prefix is the one relative form, since its cwd is fixed). Otherwise stop and report.
diff --git a/plugins/aidd-context/skills/10-learn/references/sync-arguments.md b/plugins/aidd-context/skills/10-learn/references/sync-arguments.md
index 5c3bc2e9a..f2f9f08b5 100644
--- a/plugins/aidd-context/skills/10-learn/references/sync-arguments.md
+++ b/plugins/aidd-context/skills/10-learn/references/sync-arguments.md
@@ -8,6 +8,7 @@ Arguments accepted by `hooks/update_memory.js`. The hook maps tool names to cont
| `codex` | `AGENTS.md` |
| `cursor` | `AGENTS.md` |
| `opencode` | `AGENTS.md` |
+| `antigravity` | `AGENTS.md` |
| `copilot` | `.github/copilot-instructions.md` |
Rules:
diff --git a/plugins/aidd-context/skills/11-explore/references/ai-mapping.md b/plugins/aidd-context/skills/11-explore/references/ai-mapping.md
index 388337fb1..d4848e58a 100644
--- a/plugins/aidd-context/skills/11-explore/references/ai-mapping.md
+++ b/plugins/aidd-context/skills/11-explore/references/ai-mapping.md
@@ -4,7 +4,7 @@ Where to look for each artifact type per AI tool. Scan-only: the paths and forma
## Presence signal
-A tool is present only when one of its own mapped surfaces below holds a file. A shared parent directory is never a signal by itself.
+A tool is present only when one of its own mapped surfaces below holds a file. A shared parent directory is never a signal by itself. `.agents/skills/` is mapped for both Codex CLI and Antigravity CLI: alone, it signals both.
## AI quick map - content artifacts
@@ -15,6 +15,7 @@ A tool is present only when one of its own mapped surfaces below holds a file. A
| OpenCode | `.opencode/agents/` | `.opencode/commands/` | **Not supported** (fold into AGENTS.md) | `.opencode/skills/` | `AGENTS.md` |
| GitHub Copilot | `.github/agents/*.agent.md` | `.github/prompts/*.prompt.md` | `.github/instructions/*.instructions.md` | `.github/skills/` | `.github/copilot-instructions.md` |
| Codex CLI | `.codex/agents/{name}.toml` | **Not supported** | Not supported | `.agents/skills/aidd-{name}/SKILL.md` | `AGENTS.md` |
+| Antigravity CLI | `.agents/agents/{name}/agent.md` | Not mapped | `.agents/rules/*.md` | `.agents/skills/aidd-{name}/SKILL.md` | `AGENTS.md` |
## AI quick map - hooks, plugins
@@ -25,6 +26,7 @@ A tool is present only when one of its own mapped surfaces below holds a file. A
| OpenCode | JS/TS module under `.opencode/plugins/` (parse as JS, not JSON) | Not supported |
| GitHub Copilot | `.github/hooks/*.json` (workspace), `~/.copilot/hooks` (user), `/hooks.json` or `/hooks/hooks.json` (plugin) | `plugin.json` at plugin root |
| Codex CLI | `.codex/hooks.json` (project / user) OR `[hooks]` table in `.codex/config.toml` | `.codex-plugin/plugin.json` |
+| Antigravity CLI | `.agents/hooks.json` (project), keyed by hook name | `plugin.json` at plugin root |
## MCP config per tool
@@ -57,3 +59,4 @@ Where to scan when enumerating installed plugins (not the plugin manifest path i
| OpenCode | `~/.config/opencode/plugins/` (global JS/TS modules); `~/.cache/opencode/node_modules/` (npm-installed); project `.opencode/plugins/` |
| GitHub Copilot | macOS: `~/Library/Application Support/Code/agentPlugins/` ; Linux: `~/.config/Code/agentPlugins/` ; Windows: `%APPDATA%\Code\agentPlugins\` ; CLI-installed: `~/.copilot/installed-plugins/` |
| Codex CLI | `~/.codex/plugins/cache/$MARKETPLACE/$PLUGIN/$VERSION/` |
+| Antigravity CLI | `~/.gemini/config/plugins//` (`agy plugin install`); project `.agents/plugins/` |
diff --git a/scripts/__tests__/update-memory.test.js b/scripts/__tests__/update-memory.test.js
index 2041424ea..4102cd342 100644
--- a/scripts/__tests__/update-memory.test.js
+++ b/scripts/__tests__/update-memory.test.js
@@ -164,6 +164,17 @@ test("an unknown tool name is rejected", () => {
assert.match(result.stderr, /unknown tool emacs/u);
});
+test("antigravity refreshes AGENTS.md, the context file agy reads", () => {
+ const result = run({
+ context: `${OPEN}\n${CLOSE}\n`,
+ contextAt: "AGENTS.md",
+ args: ["antigravity"],
+ });
+
+ assert.equal(result.status, 0);
+ assert.match(result.content, /^\[aidd_docs\/memory\/architecture\.md\]\(aidd_docs\/memory\/architecture\.md\)$/mu);
+});
+
test("a new-marker pair quoted in prose above the block does not hijack the splice", () => {
const quote = `Upgrade note: the block now uses \`${OPEN}\` and \`${CLOSE}\`.`;
const result = run({ context: `${quote}\n\n${OPEN}\n${CLOSE}\n` });