@adlc/antigravity
v1.4.1
Published
ADLC native integration for Google Antigravity (agy)
Downloads
570
Maintainers
Readme
adlc-antigravity
Embrace the ADLC inside Google Antigravity (agy): a phase-router plus doctrine
skills and a PreToolUse rails-guard that freezes ADLC rails. Requires the
@adlc/cli gate toolkit (npm i -g @adlc/cli).
Manifest: version and adlcContract
plugin.json is the authoritative manifest. agy plugin install copies the whole
plugin directory (including plugin.json) to
~/.gemini/config/plugins/adlc-antigravity/, so consumers can read these fields
directly from the installed source — no build step.
version—plugin.json's own agy-native manifest version, independent ofpackage.json's npm lockstep release version by design (seetest/packaging.test.mjs: "plugin.json version is untouched by this ticket, still agy-native, not lockstep"). The two are never synced, and no test asserts they match.adlcContract— a positive integer that versions the runtime contract between this plugin and its consumers. It exists so a consumer's manifest handshake can read it from the installedplugin.jsonto detect drift. The antigravity-booster handshake (voodootikigod/antigravity-booster#12) uses it this way; before this field existed, the booster could only substring-matchagy plugin list, which proved a plugin was named but never that its schema matched.
When to bump adlcContract
adlcContract versions three interfaces. Any breaking change to any one of them
bumps the integer by 1. Additive, backward-compatible changes do NOT bump it.
The
tickets.jsonschema accepted bycore-inline.mjs.loadTickets()parses.adlc/tickets.jsonas{ tickets: [...] }, andvalidateTicket()enforces each ticket's shape. Onlyidandtitleare required (both must be strings);scope,rails,edges(each with a stringto), andduration(a positive number) are optional but validated when present. Requiring a new field, removing/renaming a required one, tightening validation so previously-valid tickets are rejected, or changing the top-level envelope is breaking.The hook stdin payload shape. The
PreToolUsehook reads agy's{ toolCall: { name, args } }from stdin, with file-path args under PascalCase keys (TargetFile,AbsolutePath, …) and workspace roots underworkspacePaths. Changing which keys the hook must read to locate the tool name, args, target paths, or workspace roots is breaking.The hook decision output shape. The hook writes agy's verdict to stdout:
{ allow_tool: true }to allow, or{ allow_tool: false, deny_reason: "..." }to deny. Renaming these keys or changing their types/semantics is breaking.
If you change one of these three interfaces in a backward-incompatible way, bump
adlcContract in plugin.json and update this list.
Tests
node --test plugins/adlc-antigravity/test/*.test.mjs