Skip to content

antigravity-plugin 1.3.0

Choose a tag to compare

@SouthCarpet SouthCarpet released this 09 Sep 00:23
· 41 commits to main since this release
v1.3.0

antigravity-plugin 1.3.0

Highlights

  • Structured headless denial reporting from agy 1.1.27 denied_actions, with a computed remedy on --json, status, and result.
  • --effort <low|medium|high> on task and rescue, forwarded to agy as --effort <value> with no plugin default.
  • Every print-mode agy run forwards --print-timeout from the job budget plus 60 seconds, and forwards --disable-slash-commands.
  • The CI matrix now includes macos-latest with Node 22.3.x and Node 24.
  • Job state is keyed by the workspace realpath. An older logical-path leaf stays readable until the realpath leaf exists.

Changes

Added

  • Structured denial reporting. Since agy 1.1.27, a headless run's denied_actions JSON list is parsed. The plugin validates each member, drops exact repeats, and caps the list at 32 members and 200 characters per string. It merges that list with the existing stderr sentinel. The JSON list wins when it is present. Older agy without the field still gets one denial from the stderr sentinel. Each member gets a computed remedy: --add-dir <dir> for read-type actions, --mode accept-edits for edit-type actions, or Headless runs cannot grant "<action>"; the host must run this step itself. for every other action. --json sets details.deniedActions on a completed foreground envelope and on result <id> --json. --json sets details.job.deniedActions on status <id> --json. Job lists carry deniedActionsCount. Markdown status <id> and result add a ## Denied Actions section. The status tables add a Denied column. A live 1.1.27 denial of read_url (displayName ReadUrlContent) printed Headless runs cannot grant "read_url"; the host must run this step itself. A failed foreground --json run still writes no stdout envelope. The fail-vs-warn decision and every exit code stay unchanged.
  • --effort <low|medium|high> on task and rescue. Both verbs accept --effort. They forward it to agy as --effort <value>. This applies in the foreground and in the background. The flag sits right after --model, or in its place when there is no model. The plugin has no default. When the flag is absent, nothing is forwarded. Live 1.1.27 runs with --effort low and --effort high completed. The plugin does not probe what agy does with the value beyond forwarding it.

Changed

  • CI matrix. macos-latest joins ubuntu-latest and windows-latest. The test matrix uses Node 22.3.x and Node 24. The lint gate still runs on the Node 24 jobs only. It now runs on all three operating systems. Release-tree CI run 34289858536 on commit 4f9b317 was green on all six cells.

Fixed

  • Long runs no longer end at agy's 5-minute default. Every print-mode agy invocation (review, rescue, task, vision; foreground, background, plain, --continue, and --conversation) now forwards --print-timeout as the plugin execution budget plus 60 seconds of headroom (1860s for the 30-minute default). The plugin deadline fires first. agy's default --print-timeout 5m0s no longer ends the run early with status: ERROR / "timeout waiting for response". A 0 budget forwards a fixed 24h ceiling. agy treats a literal 0 as an immediate timeout.
  • Vision allowlist on macOS. The vision MCP server refused every image on macOS. os.tmpdir() sits under /var, a symlink to /private/var, so the resolved path never matched the request's own logical spelling. vision now records the allowlist in its resolved (realpath) form. The server accepts a request whose own realpath is itself an authorized entry. The requested file's own final component being a symlink is still refused. The identity checks made while reading an image are unchanged.
  • Workspace-root canonicalization. The job state directory is keyed off the realpath of the workspace root. A caller that holds a logical, symlinked spelling of the same directory (macOS os.tmpdir()) and a background worker whose process.cwd() is already the physical path therefore use the same leaf. An existing install's jobs, stored under the pre-085 logical-path leaf, stay reachable until that leaf is moved. A realpath leaf is preferred once it exists. The logical leaf is still read until then. A background job's worker receives the parent's exact workspace spelling. A job started through a logical spelling stays under the leaf it was created in.

Security

  • Slash expansion disabled. Every print-mode agy invocation now forwards --disable-slash-commands. Prompt text that starts with /, including untrusted diff, review, rescue, or task content, reaches the model as plain text. It is not parsed as an agy slash command or skill. A live 1.1.27 task whose prompt began with /model completed with answer OK.

Compatibility

  • Live coverage was measured on agy 1.1.27 on 2026-09-09 from commit 4f9b317. Transcripts: t5-live-*.txt. setup was not run live. review --json returned no_changes.
  • Node.js >=22.3.0. CI cells use Node 22.3.x and Node 24.
  • CI run 34289858536 covered Linux (ubuntu-latest / ubuntu-24.04), Windows (windows-latest / windows-2025-vs2026), and macOS (macos-latest / macos-26-arm64).
  • Job state leaf: sanitized workspace basename plus a 12-character hash of the resolved (realpath) path. An older logical-path leaf stays in use until the realpath leaf exists. A background worker receives the caller's exact workspace spelling. A caller that switches spelling while only the older leaf exists starts a new leaf.
  • Older live coverage remains: agy 1.1.15 and 1.1.17 (all eight verbs, 2026-08-21); agy 1.1.24 (rescue, task, vision, result, 2026-09-02).

Upgrade notes

Commands below match docs/INSTALL.md.

Claude Code

claude plugin marketplace add SouthCarpet/antigravity-plugin
claude plugin install antigravity@antigravity

Then /antigravity:setup if this host is new.

Codex CLI

If the antigravity marketplace is a local clone, pull that clone first. plugin add installs the version the clone holds.

codex plugin marketplace add <path-to-clone>
codex plugin add antigravity@antigravity

agy

A plain reinstall merges into ~/.gemini/config/plugins/antigravity/ instead of replacing it.

agy plugin uninstall antigravity
agy plugin install <path-to-clean-clone>

Standalone

npx @southcarpet/antigravity-plugin setup
npx @southcarpet/antigravity-plugin review

An unversioned npx @southcarpet/antigravity-plugin <command> resolves the latest published version.

Verification

Commit 4f9b317. CI run 34289858536 (created 2026-09-08 23:16:08), success. CodeQL run 34289858532, success.

Cell Runner image Conclusion Tests Pass Fail Skipped
Node 22.3.x / macos-latest macos-26-arm64 success 886 873 0 13
Node 22.3.x / windows-latest windows-2025-vs2026 success 886 881 0 5
Node 24 / windows-latest windows-2025-vs2026 success 886 881 0 5
Node 24 / macos-latest macos-26-arm64 success 886 873 0 13
Node 22.3.x / ubuntu-latest ubuntu-24.04 success 886 873 0 13
Node 24 / ubuntu-latest ubuntu-24.04 success 886 873 0 13