#
m3-memory as a Google Antigravity plugin
`m3-memory` ships as a Google Antigravity plugin in the same repo as the Python package. The plugin auto-registers the memory MCP, wires up chatlog hooks, and adds 15 `/m3:*` slash commands as native Skills plus two curator subagents (`m3:curate-memory` for the memory store and `m3:curate-chatlog` for captured agentic-coding conversations).
## Install
```bash
agy plugin install https://github.com/skynetcmd/m3-memory
```
After install, restart your Antigravity CLI/Desktop session (or reload the environment) so the new MCP server, hooks, and Skills take effect.
## Updating m3
Re-install over the existing plugin to upgrade to the latest published version, then restart Antigravity:
```bash
agy plugin install https://github.com/skynetcmd/m3-memory # re-install → upgrades in place
# restart the Antigravity CLI/Desktop session so the new MCP server + Skills load
```
> **⚠️ Re-installing can leave the plugin disabled.** As with other agent hosts, re-installing an already-installed plugin can flip it to **disabled** — after which m3's tools and `/m3:*` Skills stop loading. Antigravity exposes a direct fix (no manual config edit needed):
> ```bash
> agy plugin list # check whether m3 shows as disabled
> agy plugin enable m3 # re-enable it
> # then restart the Antigravity session
> ```
**Verify the update:** run `agy plugin list` to confirm m3 is present and enabled, and `m3 doctor` for overall m3 health. (`m3 doctor`'s plugin-version check currently covers the Claude Code plugin specifically; for Antigravity, `agy plugin list` is the authoritative check.)
---
## What it does on first run
The plugin's `SessionStart` hook checks for the `m3` (or `mcp-memory`) CLI on PATH. If missing, it prints a one-line install hint:
```
[m3-memory] m3 CLI not on PATH. Run:
pipx install m3-memory && pipx ensurepath
m3 setup
```
---
## Slash commands (Agent Skills)
Run `/m3:help` (leveraging the `m3-help` Skill) to see the full list of commands. Highlights:
| Command / Skill | What |
|---|---|
| `/m3:health` | Health check — package, payload, chatlog DB, hook state |
| `/m3:status` | Chatlog row counts, queue, last capture |
| `/m3:search ` | Hybrid memory search |
| `/m3:save ` | Auto-classified memory_write with confirmation |
| `/m3:write ` | Direct memory_write |
| `/m3:get ` | Fetch one memory |
| `/m3:graph ` | Knowledge-graph traversal |
| `/m3:forget ` | Delete with confirmation |
| `/m3:export` | GDPR Article 20 export |
| `/m3:tasks` | Task list |
| `/m3:agents` | Registered agents |
| `/m3:notify` | Inbox poll |
| `/m3:find-in-chat ` | Search captured chat-log turns |
| `/m3:install` | Install / upgrade |
| `/m3:help` | This list |
The full catalog of MCP tools remains callable directly via tool calls — these Skills are shortcuts to the high-leverage subset.
---
## Subagents: `m3:curate-memory` and `m3:curate-chatlog`
Two curator subagents handle the two stores:
- **`m3:curate-memory`** — triggered by "curate memory", "tidy memory", "dedupe memory", or "consolidate memory". Surveys the memory store, finds clusters of near-duplicates, and proposes a consolidate / supersede / leave-alone plan that you confirm before any deletion.
- **`m3:curate-chatlog`** — triggered by "curate chatlog", "tidy chatlog", "dedupe chatlog", or "consolidate chatlog". Same workflow against the chatlog store, plus aggressive ephemeral-content decay.
Both use a two-spawn execution model: the first invocation surveys and proposes a plan; you re-spawn with the structured plan back as input (prefixed with `apply`) to actually execute it. The plan is always human-reviewable and reversible.
---
## Hooks installed by the plugin
- `SessionStart` — checks `m3` is on PATH (advisory only)
- `PreCompact` — fires the chatlog ingest before context compaction
- `Stop` — fires the chatlog ingest at the end of every assistant turn
These run alongside any hooks you have in `~/.gemini/antigravity-cli/settings.json`.
---
## Configuration
The plugin exposes four `userConfig` knobs that Google Antigravity prompts for at enable time:
- **`endpoint`** — pin `LLM_ENDPOINTS_CSV` for the small chat model used by enrichment. The embedder itself is the sovereign in-process BGE-M3 installed by `m3 setup`. Empty = probe local OpenAI-compatible servers (Ollama `:11434`, etc.).
- **`capture_mode`** — chatlog capture policy. `both` / `stop` / `precompact` / `none`. Default `both`.
- **`embed_fallback_url`** — fallback sovereign HTTP embedder service URL on `http://127.0.0.1:8082`.
- **`embed_gguf`** — optional absolute path to BGE-M3 GGUF for in-process acceleration.