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
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- **Antigravity agent support**: Replaced Gemini CLI initialization and worker-agent support with Antigravity CLI support using the documented `agy` executable, `.agents/skills`, and `.agents/hooks.json` hook surface.

### Removed

- **Gemini agent support**: Removed Gemini as a selectable initialization and worker agent target, including obsolete Gemini settings fragments, configurers, command mappings, and logo assets.

## [3.15.0] - 2026-07-08

### Added
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
</p>

# Jumbo Context
### Tired of repeating yourself to Claude, Codex, Gemini, Copilot and their cohorts?
### Tired of repeating yourself to Claude, Codex, Antigravity, Copilot and their cohorts?

Agents shouldn't have to be re-taught your project every session.
Jumbo gives them the context they're missing, so you don't have to.
Expand Down Expand Up @@ -70,7 +70,7 @@ Those solve the core problems. These make Jumbo pleasant to use:
```
Jumbo will guide you in getting started.

3. Run your agent as normal (claude, codex, gemini, vibe)
3. Run your agent as normal (claude, codex, agy, vibe)

``` bash
> claude
Expand Down Expand Up @@ -212,7 +212,7 @@ Change agents and models at will. Jumbo just picks up where you left off.
<details>
<summary>What coding agents does jumbo work with?</summary>

Jumbo has been battle-tested with Claude Code, GitHub Copilot, and Gemini. More are to be verified soon...
Jumbo has been battle-tested with Claude Code, GitHub Copilot, Codex, and Antigravity. More are to be verified soon...
</details>

<details>
Expand Down
11 changes: 11 additions & 0 deletions assets/agent-files/json/antigravity-hooks.fragment.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"jumbo-session-bootstrap": {
"PreInvocation": [
{
"type": "command",
"command": "node .agents/jumbo/antigravity-hook.mjs pre-invocation-bootstrap",
"timeout": 30
}
]
}
}
41 changes: 0 additions & 41 deletions assets/agent-files/json/gemini-settings.fragment.json

This file was deleted.

133 changes: 133 additions & 0 deletions assets/agent-files/scripts/antigravity-hook.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
#!/usr/bin/env node

import { spawn } from "node:child_process";

const MANAGED_MARKER = "JUMBO_MANAGED_ANTIGRAVITY_HOOK_RUNNER_V1";
const MAX_INJECTED_MESSAGE_LENGTH = 12_000;

void MANAGED_MARKER;

const mode = process.argv[2] ?? "";
const input = parseJson(await readStdin());

try {
if (mode === "pre-invocation-bootstrap") {
await handlePreInvocationBootstrap(input);
} else {
writeJson({ injectSteps: [] });
}
} catch (error) {
writeJson({
injectSteps: [
{
ephemeralMessage: `Jumbo Antigravity hook failed: ${getErrorMessage(error)}`,
},
],
});
}

async function handlePreInvocationBootstrap(input) {
if (input.invocationNum !== 0) {
writeJson({ injectSteps: [] });
return;
}

const cwd = getWorkspaceCwd(input);
const result = await runCommand("jumbo", ["session", "start", "--format", "text"], cwd);
const output = [result.stdout, result.stderr].filter(Boolean).join("\n").trim();

if (!output) {
writeJson({ injectSteps: [] });
return;
}

const prefix = result.exitCode === 0 ? "" : `jumbo session start exited with code ${result.exitCode}.\n\n`;
writeJson({
injectSteps: [
{
ephemeralMessage: limitTextTail(`${prefix}${output}`, MAX_INJECTED_MESSAGE_LENGTH),
},
],
});
}

function runCommand(command, args, cwd) {
return new Promise((resolve) => {
const isWin = process.platform === "win32";
let child;
if (isWin) {
const commandLine = [command, ...args].map(arg => {
return /[ \"]/.test(arg) ? `"${arg.replace(/"/g, '\\"')}"` : arg;
}).join(" ");
child = spawn(commandLine, [], {
cwd,
shell: true,
stdio: ["ignore", "pipe", "pipe"],
});
} else {
child = spawn(command, args, {
cwd,
shell: false,
stdio: ["ignore", "pipe", "pipe"],
});
}

let stdout = "";
let stderr = "";

child.stdout?.on("data", (chunk) => {
stdout = limitTextTail(`${stdout}${chunk.toString()}`, MAX_INJECTED_MESSAGE_LENGTH);
});

child.stderr?.on("data", (chunk) => {
stderr = limitTextTail(`${stderr}${chunk.toString()}`, MAX_INJECTED_MESSAGE_LENGTH);
});

child.on("close", (code) => {
resolve({ exitCode: code ?? 1, stdout, stderr });
});

child.on("error", (error) => {
resolve({ exitCode: 1, stdout, stderr: stderr || error.message });
});
});
}

function getWorkspaceCwd(input) {
if (Array.isArray(input.workspacePaths) && typeof input.workspacePaths[0] === "string") {
return input.workspacePaths[0];
}

return process.cwd();
}

function readStdin() {
return new Promise((resolve) => {
let input = "";
process.stdin.setEncoding("utf-8");
process.stdin.on("data", (chunk) => {
input += chunk;
});
process.stdin.on("end", () => resolve(input));
});
}

function parseJson(value) {
try {
return value.trim() ? JSON.parse(value) : {};
} catch {
return {};
}
}

function writeJson(value) {
process.stdout.write(JSON.stringify(value));
}

function getErrorMessage(error) {
return error instanceof Error ? error.message : String(error);
}

function limitTextTail(value, maxLength) {
return value.length > maxLength ? value.slice(-maxLength) : value;
}
1 change: 0 additions & 1 deletion assets/gemini-logo.svg

This file was deleted.

9 changes: 5 additions & 4 deletions docs/getting-started/what-jumbo-creates.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Jumbo creates or updates several files outside `.jumbo/` to integrate with AI co
| `JUMBO.md` | Bootstrap-only Jumbo instruction file |
| `AGENTS.md` | Points agents to `JUMBO.md` |
| `CLAUDE.md` | Points Claude Code to `JUMBO.md` |
| `GEMINI.md` | Points Gemini CLI to `JUMBO.md` |
| `GEMINI.md` | Points Antigravity-compatible Gemini context loading to `JUMBO.md` |
| `.github/copilot-instructions.md` | Points GitHub Copilot to `../JUMBO.md` |
| `.cursor/rules/jumbo.mdc` | Points Cursor to `JUMBO.md` with always-apply rules frontmatter |

Expand All @@ -59,17 +59,18 @@ Jumbo creates or updates several files outside `.jumbo/` to integrate with AI co
|---|---|
| `.claude/settings.json` | Claude Code hooks for session start and compaction |
| `.codex/hooks.json` | Codex hooks for session start and compaction using text-mode Jumbo output |
| `.gemini/settings.json` | Gemini CLI hooks for session start and compression |
| `.agents/hooks.json` | Antigravity hooks for session bootstrap |
| `.agents/jumbo/antigravity-hook.mjs` | Antigravity hook runner that returns documented JSON hook envelopes |
| `.github/hooks/hooks.json` | GitHub Copilot hooks for session start |
| `.cursor/hooks.json` | Cursor hook for session start |

These hooks load the session router when an agent session begins and preserve work state before compaction or compression.
These hooks load the session router when an agent session begins and preserve work state before supported lifecycle events.

**Managed skills:**

Jumbo copies workflow and maintenance skills from `assets/skills` into the selected agents' skill directories, including bootstrap/session use, lifecycle hooks, command discovery, context maintenance, and correction capture. Additive initialization does not overwrite existing managed skill directories; repair refreshes Jumbo-managed skills from assets while preserving user-created skills.

Codex skills are installed to `.agents/skills`. Jumbo may remove obsolete Codex skill copies from `.codex/skills` during repair or evolve, but only when the obsolete directory is byte-identical to the current managed template and contains no extra user files.
Codex and Antigravity skills are installed to `.agents/skills`. Jumbo may remove obsolete Codex skill copies from `.codex/skills` during repair or evolve, but only when the obsolete directory is byte-identical to the current managed template and contains no extra user files.

---

Expand Down
4 changes: 2 additions & 2 deletions docs/reference/commands/work.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Long-running daemon that continuously polls for goals in `defined` state and del

| Option | Required | Default | Description |
|--------|----------|---------|-------------|
| `--agent <agentId>` | Yes | — | Agent to delegate refinement to. Supported: `claude`, `gemini`, `copilot`, `codex`, `cursor`, `vibe` |
| `--agent <agentId>` | Yes | — | Agent to delegate refinement to. Supported: `claude`, `antigravity`, `copilot`, `codex`, `cursor`, `vibe` |
| `--poll-interval <seconds>` | No | `30` | Seconds to wait between polling for new goals |
| `--max-retries <number>` | No | `3` | Max retry attempts per goal before skipping |

Expand Down Expand Up @@ -69,7 +69,7 @@ Long-running daemon that continuously polls for goals in `submitted` state and d

| Option | Required | Default | Description |
|--------|----------|---------|-------------|
| `--agent <agentId>` | Yes | — | Agent to delegate review to. Supported: `claude`, `gemini`, `copilot`, `codex`, `cursor`, `vibe` |
| `--agent <agentId>` | Yes | — | Agent to delegate review to. Supported: `claude`, `antigravity`, `copilot`, `codex`, `cursor`, `vibe` |
| `--poll-interval <seconds>` | No | `30` | Seconds to wait between polling for new goals |
| `--max-retries <number>` | No | `3` | Max retry attempts per goal before skipping |

Expand Down
4 changes: 3 additions & 1 deletion docs/reference/project-initialization.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ Jumbo configures hooks for popular AI coding assistants:
| **Claude Code** | `CLAUDE.md`, `.claude/settings.json`, and `.claude/skills` |
| **Codex** | `.codex/hooks.json` and `.agents/skills` |
| **GitHub Copilot** | `.github/copilot-instructions.md`, `.github/hooks/hooks.json`, and `.agents/skills` |
| **Gemini CLI** | `GEMINI.md`, `.gemini/settings.json`, and `.gemini/skills` |
| **Antigravity CLI** | `GEMINI.md`, `.agents/hooks.json`, `.agents/jumbo/antigravity-hook.mjs`, and `.agents/skills` |
| **Cursor** | `.cursor/rules/jumbo.mdc` and `.cursor/hooks.json` |
| **Vibe** | `.vibe/skills` |
| **All agents** | `JUMBO.md` and `AGENTS.md` |
Expand All @@ -102,6 +102,8 @@ Jumbo-owned markdown files and JSON hook/settings fragments are loaded from `ass

For Codex, Jumbo uses the repository skill directory `.agents/skills` and keeps `.codex` for documented Codex hooks/configuration. During repair and evolve, obsolete Jumbo-managed skill copies under `.codex/skills` are removed only when they exactly match the current managed templates; customized skills and extra user files are preserved.

For Antigravity, Jumbo uses the documented `agy` CLI target, keeps `GEMINI.md` as a thin compatibility reference to `JUMBO.md`, and manages workspace hooks through `.agents/hooks.json`. Antigravity repair removes obsolete Jumbo-managed Gemini hook/settings files while preserving unrelated user-owned `.gemini` content.

---

## Update project settings
Expand Down
17 changes: 0 additions & 17 deletions evals/.gitignore

This file was deleted.

Loading
Loading