Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Google Gemini
GEMINI_API_KEY=your_gemini_api_key_here
GEMINI_MODEL=gemini-2.5-flash
# Groq (optional — ultra-low-latency LPU inference)
# GROQ_API_KEY=your_groq_api_key_here
# GROQ_MODEL=llama-3.3-70b-versatile
# LLM Settings
TEMPERATURE=0.3
FALLBACK_ORDER='["gemini"]'
Expand Down
9 changes: 9 additions & 0 deletions plugin/xmem-antigravity/.antigravity-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"name": "xmem-antigravity",
"version": "0.1.0",
"description": "Persistent XMem memory across Antigravity agent sessions",
"author": {
"name": "XMem",
"email": "support@xmem.in"
}
}
51 changes: 51 additions & 0 deletions plugin/xmem-antigravity/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# XMem Antigravity Plugin

Antigravity plugin for persistent memory through XMem.

This plugin mirrors the structure of `xmem-claude`, adapted for Antigravity's
agent lifecycle:

- loads relevant project memory on `SessionStart`
- stores a redacted transcript tail on `Stop`
- provides `xmem-search` and `xmem-save` skills
- includes commands for indexing, config, session checks, and logout

## Install

From Antigravity, install this plugin from the local folder once it is published
or linked by the plugin marketplace flow for this repo.

## Configuration

Use environment variables. Do not commit secrets.

```bash
export XMEM_API_KEY="xmem_..."
export XMEM_API_URL="https://api.xmem.in"
export XMEM_USER_ID="your-user-id"
```

`XMEM_API_URL` defaults to `https://api.xmem.in`. `XMEM_USER_ID` falls back to the local OS username; production API keys scope requests to the authenticated key owner.

Optional project config can live at `.antigravity/.xmem-antigravity/config.json`:

```json
{
"apiUrl": "https://api.xmem.in",
"userId": "your-user-id"
}
```

Prefer environment variables for API keys.

## Commands

- `/xmem-antigravity:index` - explore the current repo and save a project summary
- `/xmem-antigravity:project-config` - show configuration options
- `/xmem-antigravity:session` - check whether memory is configured
- `/xmem-antigravity:logout` - remove project-local config

## Skills

- `xmem-search` - search prior XMem memories
- `xmem-save` - save durable project knowledge
19 changes: 19 additions & 0 deletions plugin/xmem-antigravity/commands/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
description: Index the current codebase into XMem for future Antigravity context
allowed-tools: ["Read", "Glob", "Grep", "Bash"]
---

# Index Codebase Into XMem

Explore the repository and save a concise architecture summary into XMem.

1. Read `README.md`, package manifests, config files, and entry points.
2. Identify the stack, runtime commands, major modules, API routes, data stores, and conventions.
3. Skip dependency folders, generated output, lock files, virtual environments, and secrets.
4. Save the final summary:

```bash
node "${ANTIGRAVITY_PLUGIN_ROOT}/scripts/save-project-memory.cjs" "SUMMARY_HERE"
```

Include important files and decisions, but do not save secrets.
16 changes: 16 additions & 0 deletions plugin/xmem-antigravity/commands/logout.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
description: Remove local XMem Antigravity plugin project config
allowed-tools: ["Bash"]
---

# XMem Logout

This plugin does not store credentials by default. It reads `XMEM_API_KEY` from the environment.

To remove project-local config:

```bash
node -e "const fs=require('fs'); const p='.antigravity/.xmem-antigravity/config.json'; if(fs.existsSync(p)){fs.rmSync(p); console.log('Removed '+p)}else{console.log('No project config found')}"
```

Also unset `XMEM_API_KEY` in your shell if you want to disconnect this terminal session.
25 changes: 25 additions & 0 deletions plugin/xmem-antigravity/commands/project-config.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
description: Show XMem Antigravity plugin configuration options
allowed-tools: ["Read", "Write", "Bash"]
---

# XMem Antigravity Configuration

The plugin reads credentials from environment variables first:

```bash
export XMEM_API_KEY="xmem_..."
export XMEM_API_URL="https://api.xmem.in"
export XMEM_USER_ID="your-user-id"
```

Optional project config lives at `.antigravity/.xmem-antigravity/config.json`:

```json
{
"apiUrl": "https://api.xmem.in",
"userId": "your-user-id"
}
```

Avoid storing API keys in project config. Prefer environment variables or your shell secret manager.
14 changes: 14 additions & 0 deletions plugin/xmem-antigravity/commands/session.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
description: Check whether XMem Antigravity memory is configured
allowed-tools: ["Bash"]
---

# XMem Session

Check plugin configuration without printing secrets:

```bash
node -e "console.log(process.env.XMEM_API_KEY ? 'XMEM_API_KEY is set' : 'XMEM_API_KEY is not set'); console.log('XMEM_API_URL=' + (process.env.XMEM_API_URL || 'https://api.xmem.in'))"
```

If the key is missing, set `XMEM_API_KEY` before starting Antigravity.
27 changes: 27 additions & 0 deletions plugin/xmem-antigravity/hooks/hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"description": "XMem: Persistent memory for Antigravity",
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "node \"${ANTIGRAVITY_PLUGIN_ROOT}/scripts/context-hook.cjs\"",
"timeout": 30
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "node \"${ANTIGRAVITY_PLUGIN_ROOT}/scripts/summary-hook.cjs\"",
"timeout": 30
}
]
}
]
}
}
17 changes: 17 additions & 0 deletions plugin/xmem-antigravity/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "xmem-antigravity",
"version": "0.1.0",
"description": "Persistent XMem memory for Antigravity agent sessions",
"private": true,
"type": "commonjs",
"engines": {
"node": ">=18.0.0"
},
"keywords": [
"antigravity",
"plugin",
"xmem",
"memory"
],
"license": "MIT"
}
29 changes: 29 additions & 0 deletions plugin/xmem-antigravity/scripts/add-memory.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/usr/bin/env node
const { createClient } = require("./lib/xmem-client.cjs");
const { projectName, redactSecrets, truncate } = require("./lib/plugin-utils.cjs");

async function main() {
const content = process.argv.slice(2).join(" ").trim();
if (!content) {
console.log('Usage: node add-memory.cjs "content to save"');
return;
}

try {
const cwd = process.cwd();
const client = createClient(cwd);
await client.ingest(truncate(redactSecrets(content)), {
source: "antigravity",
type: "manual",
project: projectName(cwd),
});
console.log(`Saved memory to XMem for project: ${projectName(cwd)}`);
} catch (error) {
console.log(`XMem save failed: ${error.message}`);
}
}

main().catch((error) => {
console.error(`Fatal error: ${error.message}`);
process.exit(1);
});
34 changes: 34 additions & 0 deletions plugin/xmem-antigravity/scripts/context-hook.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env node
const { createClient, formatResults } = require("./lib/xmem-client.cjs");
const { projectName, readStdin, writeJson } = require("./lib/plugin-utils.cjs");

async function main() {
const input = await readStdin();
const cwd = input.cwd || process.cwd();
const project = projectName(cwd);

try {
const client = createClient(cwd);
const data = await client.search(`Antigravity project context, architecture, decisions, conventions for ${project}`, 6);
const formatted = formatResults(data);

writeJson({
hookSpecificOutput: {
hookEventName: "SessionStart",
additionalContext: `<xmem-context>\n${formatted}\n</xmem-context>`,
},
});
} catch (error) {
writeJson({
hookSpecificOutput: {
hookEventName: "SessionStart",
additionalContext: `<xmem-status>\nXMem memory unavailable: ${error.message}\nSet XMEM_API_KEY to enable Antigravity memory.\n</xmem-status>`,
},
});
}
}

main().catch((error) => {
console.error(`XMem fatal: ${error.message}`);
process.exit(1);
});
Loading
Loading