feat: Add Google Antigravity ecosystem support#2261
Conversation
- Implements headless mode adapter for 100% native gstack execution inside Antigravity-IDE. - Adds 1-click cross-platform setup script (Windows junctions / UNIX symlinks) for transparent AI skill discovery. - Passes all uniqueness and catalog generation tests.
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
|
/trunk merge |
|
An error occurred while submitting your PR to the queue: |
There was a problem hiding this comment.
Pull request overview
Adds a new “Google Antigravity” host target to gstack’s host-config/generation pipeline and introduces an /agy skill to invoke the Antigravity CLI as an external second-opinion reviewer, alongside a convenience setup script intended to bridge Antigravity skill discovery.
Changes:
- Registers a new
antigravityhost (config + host index wiring) and updates host-count tests. - Adds an Antigravity-focused setup script and an Antigravity host adapter module (plus a
setup:antigravitypackage script). - Introduces the
/agyskill (template + generated output) and updates routing/catalog metadata.
Reviewed changes
Copilot reviewed 10 out of 11 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| test/host-config.test.ts | Updates assertion to reflect the newly registered host count. |
| scripts/setup-antigravity.ts | Adds a cross-platform linking script intended to expose generated Antigravity skills under ~/.agents/skills/. |
| scripts/proactive-suggestions.json | Adds routing metadata for the new /agy skill. |
| scripts/host-adapters/antigravity-adapter.ts | Adds Antigravity-specific post-processing transforms (AskUserQuestion/headless handling, etc.). |
| package.json | Adds setup:antigravity convenience script. |
| hosts/index.ts | Registers and re-exports the new antigravity host config. |
| hosts/antigravity.ts | Defines the Antigravity host configuration (paths, rewrites, suppression, runtime assets). |
| gstack/llms.txt | Lists the new /agy skill in the skill index. |
| agy/SKILL.md.tmpl | Adds the /agy skill template. |
| agy/SKILL.md | Adds the generated /agy skill output. |
| .gitignore | Ignores the .antigravity/ generated output directory. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| frontmatter: { | ||
| mode: 'allowlist', | ||
| // Keep only fields consumed by Antigravity's routing table. | ||
| // 'version' + 'author' populate the IDE skill card metadata. | ||
| // 'tools' lets the Desktop IDE pre-authorize tool calls per skill. | ||
| // Keeping this list short prevents context-window bloat when the | ||
| // multi-agent orchestrator loads all skill manifests simultaneously. | ||
| keepFields: ['name', 'description', 'version', 'author', 'tools'], | ||
| // 1024-char limit prevents any single skill description from dominating | ||
| // the routing table context; 'truncate' avoids hard build failures on | ||
| // edge cases while still surfacing an actionable warning in CI logs. | ||
| descriptionLimit: 1024, | ||
| descriptionLimitBehavior: 'truncate', | ||
| }, |
| // 1. Verify source | ||
| assertSourceExists(); | ||
|
|
||
| // 2. Ensure ~/.agents/skills/ exists | ||
| ensureTargetParent(); |
| // Adapter handles AskUserQuestion → request_user_input with headless-mode | ||
| // conditional (ANTIGRAVITY_HEADLESS=1 → write to TODOS.md instead of blocking). | ||
| adapter: 'scripts/host-adapters/antigravity-adapter.ts', | ||
| }; |
| function removeOrBackup(state: LinkState): void { | ||
| if (state.kind === 'broken' || state.kind === 'stale') { | ||
| log(` Removing ${state.kind} link: ${TARGET_LINK}`); | ||
| if (state.kind === 'stale') { | ||
| log(` (was pointing at: ${(state as { kind: 'stale'; target: string }).target})`); | ||
| } | ||
| // Use unlinkSync for junctions/symlinks (rmSync throws EFAULT on Windows junctions) | ||
| fs.unlinkSync(TARGET_LINK); | ||
| return; | ||
| } | ||
|
|
||
| if (state.kind === 'real-dir') { | ||
| const backupPath = TARGET_LINK + '.backup-' + Date.now(); | ||
| warn( | ||
| `${TARGET_LINK} is a real directory (not a link).\n` + | ||
| ` Backing it up to: ${backupPath}\n` + | ||
| ` If this was intentional, merge it back manually after setup.` | ||
| ); | ||
| fs.renameSync(TARGET_LINK, backupPath); | ||
| return; | ||
| } | ||
| } |
|
@16francej — recommend closing this PR. Thanks for putting this together. We aren’t accepting new standalone skills right now, so we’re going to pass on this proposal. We can revisit the area later if it becomes part of GStack’s core workflow. |
Implements headless mode adapter for 100% native gstack execution inside Antigravity.
Adds 1-click cross-platform setup script (Windows junctions / UNIX symlinks) for transparent AI skill discovery.
Passes all uniqueness and catalog generation tests.