overlord-cli 0.2608101034.0 → 0.2608110816.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/connectors/HARNESS-MATRIX.md +16 -17
  2. package/dist/connectors/VERSION +1 -1
  3. package/dist/connectors/adapters/antigravity/CAPABILITIES.md +27 -23
  4. package/dist/connectors/adapters/antigravity/README.md +15 -11
  5. package/dist/connectors/adapters/antigravity/conformance-manifest.yaml +1 -6
  6. package/dist/connectors/adapters/antigravity/fixtures/official-pre-tool-use.json +36 -0
  7. package/dist/connectors/adapters/antigravity/fixtures/unbound-session.json +10 -20
  8. package/dist/connectors/adapters/antigravity/harness-capabilities.yaml +66 -36
  9. package/dist/connectors/adapters/antigravity/hooks.json +1 -30
  10. package/dist/connectors/adapters/antigravity/plugin.json +2 -2
  11. package/dist/connectors/adapters/antigravity/skills/overlord-mission/SKILL.md +2 -2
  12. package/dist/connectors/adapters/claude/.claude-plugin/plugin.json +1 -1
  13. package/dist/connectors/adapters/claude/CAPABILITIES.md +4 -4
  14. package/dist/connectors/adapters/claude/conformance-manifest.yaml +1 -1
  15. package/dist/connectors/adapters/claude/harness-capabilities.yaml +9 -5
  16. package/dist/connectors/adapters/codex/.codex-plugin/plugin.json +1 -1
  17. package/dist/connectors/adapters/codex/CAPABILITIES.md +3 -3
  18. package/dist/connectors/adapters/codex/conformance-manifest.yaml +1 -1
  19. package/dist/connectors/adapters/codex/harness-capabilities.yaml +5 -2
  20. package/dist/connectors/adapters/cursor/.cursor-plugin/plugin.json +1 -1
  21. package/dist/connectors/adapters/cursor/CAPABILITIES.md +8 -9
  22. package/dist/connectors/adapters/cursor/conformance-manifest.yaml +2 -2
  23. package/dist/connectors/adapters/cursor/harness-capabilities.yaml +11 -18
  24. package/dist/connectors/core/scripts/overlord-mcp.mjs +33 -6
  25. package/dist/index.js +97 -52
  26. package/dist/index.js.map +3 -3
  27. package/package.json +1 -1
  28. package/dist/connectors/adapters/antigravity/scripts/pre-invocation-hook.sh +0 -79
  29. package/dist/connectors/adapters/antigravity/scripts/pre-tool-use-hook.sh +0 -25
@@ -14,10 +14,10 @@ Legend: ✅ supported (fixture-proven) · ⛔ unsupported (harness cannot) ·
14
14
 
15
15
  | Adapter | Harness | Verified version | Shape | Tier | Binding | Decision hold |
16
16
  | --- | --- | --- | --- | --- | --- | --- |
17
- | [`antigravity`](adapters/antigravity/CAPABILITIES.md) | Antigravity CLI | — | `callback` | 0 (Unsupported) | ❓ unverified | ❓ unverified |
18
- | [`claude`](adapters/claude/CAPABILITIES.md) | Claude Code | `2.1.221` | `callback` | 3 (Conversational) | ✅ supported | ✅ supported |
19
- | [`codex`](adapters/codex/CAPABILITIES.md) | Codex CLI | `0.146.0` | `callback` | 3 (Conversational) | ✅ supported | ✅ supported |
20
- | [`cursor`](adapters/cursor/CAPABILITIES.md) | Cursor Agent CLI | `2026.07.23-e383d2b` | `callback` | 0 (Unsupported) | ❓ unverified | ✅ supported |
17
+ | [`antigravity`](adapters/antigravity/CAPABILITIES.md) | Antigravity CLI | `docs: Antigravity CLI v1.1.11 / Antigravity 2.0 v2.6.0` | `callback` | 0 (Unsupported) | ✅ supported | ❓ unverified |
18
+ | [`claude`](adapters/claude/CAPABILITIES.md) | Claude Code | `2.1.227` | `callback` | 3 (Conversational) | ✅ supported | ✅ supported |
19
+ | [`codex`](adapters/codex/CAPABILITIES.md) | Codex CLI | `0.147.0` | `callback` | 3 (Conversational) | ✅ supported | ✅ supported |
20
+ | [`cursor`](adapters/cursor/CAPABILITIES.md) | Cursor Agent CLI | `2026.08.04-aaa8809` | `callback` | 3 (Conversational) | ✅ supported | ✅ supported |
21
21
  | [`opencode`](adapters/opencode/CAPABILITIES.md) | OpenCode | — | `controlPlane` | 3 (Conversational) | ✅ supported | ✅ supported |
22
22
  | [`pi`](adapters/pi/CAPABILITIES.md) | Pi Coding Agent | `0.83.0` | `extension` | 3 (Conversational) | ✅ supported | ✅ supported |
23
23
 
@@ -25,21 +25,21 @@ Legend: ✅ supported (fixture-proven) · ⛔ unsupported (harness cannot) ·
25
25
 
26
26
  | Capability | `antigravity` | `claude` | `codex` | `cursor` | `opencode` | `pi` |
27
27
  | --- | --- | --- | --- | --- | --- | --- |
28
- | `observe.prompt` | ❓ unverified | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented | ✅ supported |
29
- | `observe.toolCall` | ❓ unverified | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented | ✅ supported |
30
- | `observe.toolResult` | ❓ unverified | ✅ supported | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented |
31
- | `observe.fileEdit` | ❓ unverified | ✅ supported | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented |
32
- | `observe.sessionLifecycle` | ❓ unverified | ✅ supported | ✅ supported | 🚧 not-implemented | ✅ supported | ✅ supported |
33
- | `decide.shell` | ❓ unverified | ✅ supported | ✅ supported | ✅ supported | ✅ supported | ✅ supported |
28
+ | `observe.prompt` | ⛔ unsupported | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented | ✅ supported |
29
+ | `observe.toolCall` | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented | ✅ supported |
30
+ | `observe.toolResult` | 🚧 not-implemented | ✅ supported | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented |
31
+ | `observe.fileEdit` | 🚧 not-implemented | ✅ supported | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented |
32
+ | `observe.sessionLifecycle` | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented | ✅ supported | ✅ supported |
33
+ | `decide.shell` | 🚧 not-implemented | ✅ supported | ✅ supported | ✅ supported | ✅ supported | ✅ supported |
34
34
  | `decide.mcp` | ❓ unverified | ✅ supported | ✅ supported | ✅ supported | ✅ supported | ✅ supported |
35
- | `decide.fileWrite` | ❓ unverified | ✅ supported | ✅ supported | 🚧 not-implemented | 🚧 not-implemented | ✅ supported |
36
- | `decide.anyTool` | ❓ unverified | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | ✅ supported | ✅ supported |
35
+ | `decide.fileWrite` | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented | 🚧 not-implemented | ✅ supported |
36
+ | `decide.anyTool` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | ✅ supported | ✅ supported |
37
37
  | `decide.universal` | ❓ unverified | ✅ supported | ✅ supported | ⛔ unsupported | 🚧 not-implemented | ✅ supported |
38
38
  | `answer.structuredQuestion` | ❓ unverified | ❓ unverified | ❓ unverified | ⛔ unsupported | 🚧 not-implemented | 🚧 not-implemented |
39
- | `answer.persistentAllow` | ❓ unverified | 🚧 not-implemented | ❓ unverified | ⛔ unsupported | 🚧 not-implemented | ⛔ unsupported |
40
- | `inject.midTurn` | ❓ unverified | ✅ supported | ❓ unverified | ⛔ unsupported | ✅ supported | ✅ supported |
41
- | `inject.turnBoundary` | ❓ unverified | ✅ supported | ✅ supported | ✅ supported | ✅ supported | ✅ supported |
42
- | `inject.nextTurn` | ❓ unverified | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented |
39
+ | `answer.persistentAllow` | 🚧 not-implemented | 🚧 not-implemented | ❓ unverified | ⛔ unsupported | 🚧 not-implemented | ⛔ unsupported |
40
+ | `inject.midTurn` | ⛔ unsupported | ✅ supported | ❓ unverified | ⛔ unsupported | ✅ supported | ✅ supported |
41
+ | `inject.turnBoundary` | 🚧 not-implemented | ✅ supported | ✅ supported | ✅ supported | ✅ supported | ✅ supported |
42
+ | `inject.nextTurn` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented |
43
43
  | `terminal.concurrentAnswer` | ❓ unverified | ⛔ unsupported | ⛔ unsupported | ⛔ unsupported | ✅ supported | ⛔ unsupported |
44
44
  | `terminal.statusSurface` | ❓ unverified | 🚧 not-implemented | ❓ unverified | ❓ unverified | 🚧 not-implemented | 🚧 not-implemented |
45
45
 
@@ -48,7 +48,6 @@ Legend: ✅ supported (fixture-proven) · ⛔ unsupported (harness cannot) ·
48
48
  | Adapter | Hazard | Severity | Verification | Mitigation | Tracked as |
49
49
  | --- | --- | --- | --- | --- | --- |
50
50
  | `antigravity` | `outside-verification-survey` | medium | unverified | required | `agent-session-verify-antigravity` |
51
- | `antigravity` | `pre-tool-use-always-allows` | medium | verified | required | `agent-session-verify-antigravity` |
52
51
  | `claude` | `shipped-stop-hook-inert` | medium | verified | required | `agent-session-phase-3` |
53
52
  | `claude` | `unbound-session-side-effects` | medium | verified | required | `agent-session-phase-4` |
54
53
  | `claude` | `fork-and-subagent-identity-unknown` | medium | unverified | required | `taxonomy-7.6` |
@@ -1 +1 @@
1
- 0.3.20
1
+ 0.3.21
@@ -4,9 +4,9 @@
4
4
 
5
5
  **Adapter** `antigravity` · **Codec** `antigravity` · **Integration shape** `callback` · **Capability tier** 0 (Unsupported)
6
6
 
7
- **Harness version verified** _not verified_ · **scheme** `opaque`
7
+ **Harness version verified** `docs: Antigravity CLI v1.1.11 / Antigravity 2.0 v2.6.0` · **scheme** `opaque`
8
8
 
9
- **Descriptor digest** `c021926c384a72bdaa62ac5f0eab57e80822c5d2996db75ea3c30c6bf5d09ce8`
9
+ **Descriptor digest** `e7313b23f98b6ed15a1a32849291a2a391523d4c06403bf395ecbcadfa3b11ac`
10
10
 
11
11
  > The tier is derived from passing fixtures, never authored. `unsupported` means the harness
12
12
  > cannot do it — do not attempt it. `not-implemented` means it is buildable and unbuilt: that is
@@ -17,11 +17,12 @@
17
17
 
18
18
  | Field | Value |
19
19
  | --- | --- |
20
- | Status | ❓ unverified |
20
+ | Status | ✅ supported |
21
21
  | Source | `payload` |
22
- | Evidence | tracked as `agent-session-verify-antigravity` |
22
+ | Field | `conversationId` |
23
+ | Evidence | fixtures: `fixtures/official-pre-tool-use.json` |
23
24
 
24
- No native session identifier has been established for Antigravity hook payloads. Until one is, this connector cannot bind, and therefore cannot reach any interaction tier.
25
+ The first-party hook contract defines `conversationId` as the unique UUID of the active agent conversation and includes it in every hook payload. It remains a correlation alias; the verified channel credential is the authorization and mission scope. The local `agy` binary was unavailable for an empirical resume test, so no interaction capability is promoted solely from this binding proof.
25
26
 
26
27
  The native session id is a **correlation alias only**. Authorization and mission scope come
27
28
  from the verified channel/session credential; neither the working directory nor an unverified
@@ -35,27 +36,27 @@ native id is a binding authority.
35
36
  | Harness ceiling | none documented |
36
37
  | Evidence | tracked as `agent-session-verify-antigravity` |
37
38
 
38
- The shipped hooks declare a 10-second timeout, but whether a held PreToolUse response actually gates execution — and what the harness does when the hook exceeds that timeout — was not verified.
39
+ The first-party docs define command-hook timeouts (30 seconds by default) and a synchronous PreToolUse `decision` response, but do not define timeout, crash, non-zero-exit, or malformed JSON fallback behavior. Keep the remote decision hold unverified until an installed binary exercises those failure paths.
39
40
 
40
41
  ## Capabilities
41
42
 
42
43
  | Capability | Status | Native | Evidence |
43
44
  | --- | --- | --- | --- |
44
- | `observe.prompt` | ❓ unverified | `PreInvocation` | tracked as `agent-session-verify-antigravity` |
45
- | `observe.toolCall` | ❓ unverified | `PreToolUse` | tracked as `agent-session-verify-antigravity` |
46
- | `observe.toolResult` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
47
- | `observe.fileEdit` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
48
- | `observe.sessionLifecycle` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
49
- | `decide.shell` | ❓ unverified | `PreToolUse` | tracked as `agent-session-verify-antigravity` |
45
+ | `observe.prompt` | ⛔ unsupported | `PreInvocation` | PreInvocation exposes invocation counters and common metadata but no submitted prompt. Reading transcriptPath to reconstruct one would violate the raw-transcript privacy boundary. (evidence: `https://antigravity.google/docs/hooks#preinvocation`) |
46
+ | `observe.toolCall` | 🚧 not-implemented | `PreToolUse` | tracked as `agent-session-verify-antigravity` |
47
+ | `observe.toolResult` | 🚧 not-implemented | `PostToolUse` | tracked as `agent-session-verify-antigravity` |
48
+ | `observe.fileEdit` | 🚧 not-implemented | `PostToolUse` | tracked as `agent-session-verify-antigravity` |
49
+ | `observe.sessionLifecycle` | 🚧 not-implemented | `Stop` | tracked as `agent-session-verify-antigravity` |
50
+ | `decide.shell` | 🚧 not-implemented | `PreToolUse` | tracked as `agent-session-verify-antigravity` |
50
51
  | `decide.mcp` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
51
- | `decide.fileWrite` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
52
- | `decide.anyTool` | ❓ unverified | `PreToolUse` | tracked as `agent-session-verify-antigravity` |
52
+ | `decide.fileWrite` | 🚧 not-implemented | `PreToolUse` | tracked as `agent-session-verify-antigravity` |
53
+ | `decide.anyTool` | 🚧 not-implemented | `PreToolUse` | tracked as `agent-session-verify-antigravity` |
53
54
  | `decide.universal` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
54
55
  | `answer.structuredQuestion` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
55
- | `answer.persistentAllow` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
56
- | `inject.midTurn` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
57
- | `inject.turnBoundary` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
58
- | `inject.nextTurn` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
56
+ | `answer.persistentAllow` | 🚧 not-implemented | `PreToolUse.permissionOverrides` | tracked as `agent-session-verify-antigravity` |
57
+ | `inject.midTurn` | ⛔ unsupported | — | PreInvocation and PostInvocation can inject only at model-invocation boundaries; the hook surface has no path to deliver input while a model or tool call is actively running. (evidence: `https://antigravity.google/docs/hooks#preinvocation`) |
58
+ | `inject.turnBoundary` | 🚧 not-implemented | `Stop` | tracked as `agent-session-verify-antigravity` |
59
+ | `inject.nextTurn` | 🚧 not-implemented | `PreInvocation.injectSteps.userMessage` | tracked as `agent-session-verify-antigravity` |
59
60
  | `terminal.concurrentAnswer` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
60
61
  | `terminal.statusSurface` | ❓ unverified | — | tracked as `agent-session-verify-antigravity` |
61
62
 
@@ -64,18 +65,21 @@ The shipped hooks declare a 10-second timeout, but whether a held PreToolUse res
64
65
  | Hazard | Severity | Verification | Mitigation | Tracked as |
65
66
  | --- | --- | --- | --- | --- |
66
67
  | `outside-verification-survey` | medium | unverified | required | `agent-session-verify-antigravity` |
67
- | `pre-tool-use-always-allows` | medium | verified | required | `agent-session-verify-antigravity` |
68
+ | `pre-tool-use-always-allows` | medium | verified | implemented | fixture `fixtures/unbound-session.json` |
69
+ | `pre-invocation-has-no-prompt` | high | verified | implemented | fixture `fixtures/unbound-session.json` |
70
+
71
+ **`outside-verification-survey`** — Antigravity was not part of the original harness verification survey. The current first-party docs now establish hook names, payload fields, and response shapes, but the `agy` binary was unavailable for empirical timeout, failure, resume, and headless tests. The connector must stay at its fixture-proven tier until those paths are exercised.
68
72
 
69
- **`outside-verification-survey`** — Antigravity was not part of the harness verification survey. Every row above is unverified rather than inferred, and this connector must stay at its fixture-proven tier until a dedicated verification objective upgrades it.
73
+ **`pre-tool-use-always-allows`** — The former PreToolUse hook answered `{"allow_tool":true}` even though the first-party response contract requires `decision`, and called a nonexistent detached protocol command. It neither gated nor recorded reliably; changing it to native `decision: allow` would have silently bypassed the harness permission system, so the registration was removed.
70
74
 
71
- **`pre-tool-use-always-allows`** — The shipped PreToolUse hook always answers `{"allow_tool":true}` and records the request through a detached `ovld protocol permission-request` call to a subcommand that does not exist. It therefore neither gates nor records anything, while its conformance manifest declared the permissionHook capability.
75
+ **`pre-invocation-has-no-prompt`** — The former follow-up hook guessed prompt/message/text/input fields on PreInvocation, but the first-party schema contains none of them. It could never capture a normal follow-up; reconstructing one from transcriptPath would violate the raw-transcript privacy boundary. The false followUpHook projection and the registration were removed.
72
76
 
73
77
  ## Native decision shape
74
78
 
75
79
  - **Codec** `antigravity`
76
- - **Never send** `hookSpecificOutput`, `permissionDecision`, `permission`
80
+ - **Never send** `allow_tool`, `hookSpecificOutput`, `permissionDecision`, `permission`
77
81
 
78
- The observed response shape is a flat `{"allow_tool": boolean}`. No deny or defer shape has been verified, so no decision codec may be written for this adapter yet.
82
+ The first-party response is `{ decision, reason?, permissionOverrides? }`, with decision values allow, deny, ask, force_ask, and deny_unless_prior_grant. No decision codec ships until an installed binary verifies failure fallback and exact emitted bytes; in particular, no failure path may manufacture `decision: allow`.
79
83
 
80
84
  ## Unbound-session negative test
81
85
 
@@ -72,9 +72,9 @@ This connector is intentionally reviewable against the four connector layers in
72
72
  - `plugin.json` — Antigravity plugin manifest (name, description, metadata).
73
73
  - `skills/overlord-mission/SKILL.md` — Antigravity adapter template with a `<!-- @connector-core -->` marker; setup interpolates shared core content at install time.
74
74
  - `skills/attach.md`, `skills/connect.md`, `skills/load.md`, `skills/create.md`, `skills/prompt.md`, `skills/discuss-objective.md`, `skills/add-objectives.md`, `skills/record-work.md`, `skills/spawn.md` — one skill per protocol operation; Antigravity auto-registers each as a `/<name>` slash command.
75
- - `hooks.json` + `scripts/pre-invocation-hook.sh` + `scripts/pre-tool-use-hook.sh` — legacy
76
- follow-up and pre-tool compatibility hooks (see the limitations below). These are not a
77
- fixture-proven agent-session decision path.
75
+ - `hooks.json` — intentionally empty until a fixture-proven agent-session callback is installed.
76
+ The former compatibility hooks were removed because the documented native payloads cannot
77
+ support their claimed behavior safely.
78
78
  - `mcp_config.json` + `scripts/overlord-mcp.mjs` — MCP bridge to common `ovld protocol` operations. The shim is **generated**: it is rendered from `connectors/core/scripts/overlord-mcp.mjs` at setup time with the adapter key substituted, and there is no copy in this directory to edit.
79
79
  - `conformance-manifest.yaml` — connector conformance declaration for the Overlord contract.
80
80
  - `prompt-wrapper.md` — Antigravity launch guidance.
@@ -93,13 +93,17 @@ See the [adapter capability matrix](../../README.md#adapter-capability-matrix) f
93
93
 
94
94
  Antigravity's native hook events are `PreToolUse`, `PostToolUse`, `PreInvocation`, `PostInvocation`, and `Stop` — it has no event literally named `UserPromptSubmit` or `PermissionRequest` the way Claude Code and Codex do. This adapter maps Antigravity's native events onto Overlord's canonical hook-type vocabulary the same way the Cursor adapter maps `beforeSubmitPrompt` onto `UserPromptSubmit`:
95
95
 
96
- - `PreInvocation` (fires before each agent turn) → recorded as the canonical `UserPromptSubmit` follow-up-capture hook.
97
- - `PreToolUse` (fires before each tool call) → the legacy script always responds
98
- `{"allow_tool":true}`. Its detached `ovld protocol permission-request` target is not a current
99
- protocol command, so it neither gates nor reliably records the request. The generated
100
- capability descriptor keeps Antigravity at tier 0 until a native fixture-backed path replaces
101
- this compatibility hook.
102
-
103
- Both hook scripts are defensive: they no-op on any missing `MISSION_ID`, missing `ovld` binary, or unexpected payload shape, and they always return a well-formed allow response so a hook failure never blocks the Antigravity session. Antigravity's public docs do not yet pin an exact `PreInvocation` payload shape the way they do for `PreToolUse` (`toolCall.args`), so `pre-invocation-hook.sh` probes a few plausible field names (`prompt`, `message`, `text`, `input`) for the human turn text; adjust this once the official schema is confirmed.
96
+ - `PreInvocation` receives invocation counters and common metadata, including `conversationId`,
97
+ but no submitted prompt. It therefore cannot implement canonical `UserPromptSubmit` capture
98
+ without reading the raw transcript, which the connector privacy contract forbids.
99
+ - `PreToolUse` receives `toolCall`, `stepIdx`, and `conversationId`, and requires a `decision`
100
+ response (`allow`, `deny`, `ask`, `force_ask`, or `deny_unless_prior_grant`). The former
101
+ compatibility hook emitted the unrelated `allow_tool` field and called a nonexistent protocol
102
+ command. It has been removed rather than replaced with an unconditional native `allow`, which
103
+ would bypass Antigravity's own permission prompt.
104
+
105
+ The descriptor records the first-party schema and keeps the decision capabilities unimplemented
106
+ until a real installed `agy` binary can exercise the exact failure and timeout behavior through
107
+ the channel-scoped agent-session runtime.
104
108
 
105
109
  No `Stop` hook or permission-rule file ships yet — Antigravity's pending-delivery check and any declarative auto-approval mechanism should be added once their concrete formats are confirmed, matching the "can be implemented after local MVP" note in `connectors/docs/05-connectors-and-agent-plugins.md`.
@@ -15,13 +15,10 @@ connector:
15
15
  harnessCapabilities:
16
16
  path: connectors/adapters/antigravity/harness-capabilities.yaml
17
17
  schemaVersion: 1
18
- digest: "c021926c384a72bdaa62ac5f0eab57e80822c5d2996db75ea3c30c6bf5d09ce8"
18
+ digest: "e7313b23f98b6ed15a1a32849291a2a391523d4c06403bf395ecbcadfa3b11ac"
19
19
  capabilities:
20
- - followUpHook
21
20
  - contextFilePrompt
22
21
  - slashCommands
23
- hookTypes:
24
- - UserPromptSubmit
25
22
  # ── END GENERATED ────────────────────────────────────────────────────────────
26
23
  installPath: "~/.gemini/antigravity-cli/plugins/overlord"
27
24
  managedFiles:
@@ -33,8 +30,6 @@ connector:
33
30
  - "README.md"
34
31
  - "prompt-wrapper.md"
35
32
  - "scripts/overlord-mcp.mjs"
36
- - "scripts/pre-invocation-hook.sh"
37
- - "scripts/pre-tool-use-hook.sh"
38
33
  - "skills/attach.md"
39
34
  - "skills/connect.md"
40
35
  - "skills/create.md"
@@ -0,0 +1,36 @@
1
+ {
2
+ "fixtureVersion": 1,
3
+ "kind": "native-payload",
4
+ "description": "First-party Antigravity PreToolUse example proving the documented conversationId binding field and camelCase tool payload shape. The local agy binary was unavailable, so this fixture proves only the published payload contract, not runtime failure behavior.",
5
+ "payload": {
6
+ "toolCall": {
7
+ "name": "run_command",
8
+ "args": {
9
+ "CommandLine": "npm test",
10
+ "Cwd": "/workspace/project",
11
+ "WaitMsBeforeAsync": 5000
12
+ }
13
+ },
14
+ "stepIdx": 19,
15
+ "conversationId": "ec33ebf9-0cba-4100-8142-c61503f6c587",
16
+ "workspacePaths": ["/workspace/project"],
17
+ "transcriptPath": "~/.gemini/antigravity/brain/ec33ebf9-0cba-4100-8142-c61503f6c587/.system_generated/logs/transcript.jsonl",
18
+ "artifactDirectoryPath": "~/.gemini/antigravity/brain/ec33ebf9-0cba-4100-8142-c61503f6c587",
19
+ "modelName": "gemini-3.6-flash-medium"
20
+ },
21
+ "assert": {
22
+ "requiredPaths": [
23
+ "toolCall.name",
24
+ "toolCall.args",
25
+ "conversationId",
26
+ "workspacePaths",
27
+ "transcriptPath",
28
+ "artifactDirectoryPath",
29
+ "modelName"
30
+ ],
31
+ "bindingField": "conversationId",
32
+ "equals": {
33
+ "toolCall.name": "run_command"
34
+ }
35
+ }
36
+ }
@@ -1,24 +1,14 @@
1
1
  {
2
2
  "fixtureVersion": 1,
3
- "kind": "script-io",
4
- "description": "Mandatory negative test: Antigravity's PreToolUse hook in a session with no Overlord binding, in an unrelated directory. It must make no write, no CLI invocation, and no delay. Its stdout is the harness's required allow response, which is the correct fail-toward-the-harness behavior for an unbound session.",
5
- "script": "connectors/adapters/antigravity/scripts/pre-tool-use-hook.sh",
6
- "stdin": {
7
- "hook_event_name": "PreToolUse",
8
- "tool_name": "run_command",
9
- "tool_input": { "command": "rm -rf ./build" }
10
- },
11
- "env": {
12
- "MISSION_ID": null,
13
- "SESSION_KEY": null,
14
- "OVERLORD_SESSION_CHANNEL_ID": null,
15
- "OVERLORD_SESSION_CHANNEL_TOKEN": null
16
- },
17
- "expect": {
18
- "exitCode": 0,
19
- "stdout": "{\"allow_tool\":true}",
20
- "stderr": "",
21
- "cliInvocations": [],
22
- "sandboxWrites": []
3
+ "kind": "source-guard",
4
+ "description": "Mandatory negative test: the Antigravity adapter registers no callback in an unbound session while its native decision and prompt-capture paths remain unimplemented.",
5
+ "path": "connectors/adapters/antigravity/hooks.json",
6
+ "assert": {
7
+ "mustNotContain": [
8
+ "PreInvocation",
9
+ "PreToolUse",
10
+ "pre-invocation-hook.sh",
11
+ "pre-tool-use-hook.sh"
12
+ ]
23
13
  }
24
14
  }
@@ -14,56 +14,69 @@ codec: antigravity
14
14
 
15
15
  harness:
16
16
  name: Antigravity CLI
17
+ verifiedVersion: 'docs: Antigravity CLI v1.1.11 / Antigravity 2.0 v2.6.0'
17
18
  versionScheme: opaque
18
19
 
19
20
  integrationShape: callback
20
21
 
21
22
  binding:
22
23
  source: payload
23
- status: unverified
24
- trackedAs: agent-session-verify-antigravity
24
+ field: conversationId
25
+ status: supported
26
+ fixture: fixtures/official-pre-tool-use.json
25
27
  notes: >-
26
- No native session identifier has been established for Antigravity hook payloads. Until
27
- one is, this connector cannot bind, and therefore cannot reach any interaction tier.
28
+ The first-party hook contract defines `conversationId` as the unique UUID of the active
29
+ agent conversation and includes it in every hook payload. It remains a correlation alias;
30
+ the verified channel credential is the authorization and mission scope. The local `agy`
31
+ binary was unavailable for an empirical resume test, so no interaction capability is
32
+ promoted solely from this binding proof.
28
33
 
29
34
  decisionHold:
30
35
  status: unverified
31
36
  trackedAs: agent-session-verify-antigravity
32
37
  notes: >-
33
- The shipped hooks declare a 10-second timeout, but whether a held PreToolUse response
34
- actually gates execution — and what the harness does when the hook exceeds that timeout —
35
- was not verified.
38
+ The first-party docs define command-hook timeouts (30 seconds by default) and a synchronous
39
+ PreToolUse `decision` response, but do not define timeout, crash, non-zero-exit, or malformed
40
+ JSON fallback behavior. Keep the remote decision hold unverified until an installed binary
41
+ exercises those failure paths.
36
42
 
37
43
  capabilities:
38
44
  observe.prompt:
39
- status: unverified
45
+ status: unsupported
40
46
  native: PreInvocation
41
- trackedAs: agent-session-verify-antigravity
47
+ reason: >-
48
+ PreInvocation exposes invocation counters and common metadata but no submitted prompt.
49
+ Reading transcriptPath to reconstruct one would violate the raw-transcript privacy boundary.
50
+ evidenceRef: https://antigravity.google/docs/hooks#preinvocation
42
51
  observe.toolCall:
43
- status: unverified
52
+ status: not-implemented
44
53
  native: PreToolUse
45
54
  trackedAs: agent-session-verify-antigravity
46
55
  observe.toolResult:
47
- status: unverified
56
+ status: not-implemented
57
+ native: PostToolUse
48
58
  trackedAs: agent-session-verify-antigravity
49
59
  observe.fileEdit:
50
- status: unverified
60
+ status: not-implemented
61
+ native: PostToolUse
51
62
  trackedAs: agent-session-verify-antigravity
52
63
  observe.sessionLifecycle:
53
- status: unverified
64
+ status: not-implemented
65
+ native: Stop
54
66
  trackedAs: agent-session-verify-antigravity
55
67
  decide.shell:
56
- status: unverified
68
+ status: not-implemented
57
69
  native: PreToolUse
58
70
  trackedAs: agent-session-verify-antigravity
59
71
  decide.mcp:
60
72
  status: unverified
61
73
  trackedAs: agent-session-verify-antigravity
62
74
  decide.fileWrite:
63
- status: unverified
75
+ status: not-implemented
76
+ native: PreToolUse
64
77
  trackedAs: agent-session-verify-antigravity
65
78
  decide.anyTool:
66
- status: unverified
79
+ status: not-implemented
67
80
  native: PreToolUse
68
81
  trackedAs: agent-session-verify-antigravity
69
82
  decide.universal:
@@ -73,16 +86,22 @@ capabilities:
73
86
  status: unverified
74
87
  trackedAs: agent-session-verify-antigravity
75
88
  answer.persistentAllow:
76
- status: unverified
89
+ status: not-implemented
90
+ native: PreToolUse.permissionOverrides
77
91
  trackedAs: agent-session-verify-antigravity
78
92
  inject.midTurn:
79
- status: unverified
80
- trackedAs: agent-session-verify-antigravity
93
+ status: unsupported
94
+ reason: >-
95
+ PreInvocation and PostInvocation can inject only at model-invocation boundaries; the hook
96
+ surface has no path to deliver input while a model or tool call is actively running.
97
+ evidenceRef: https://antigravity.google/docs/hooks#preinvocation
81
98
  inject.turnBoundary:
82
- status: unverified
99
+ status: not-implemented
100
+ native: Stop
83
101
  trackedAs: agent-session-verify-antigravity
84
102
  inject.nextTurn:
85
- status: unverified
103
+ status: not-implemented
104
+ native: PreInvocation.injectSteps.userMessage
86
105
  trackedAs: agent-session-verify-antigravity
87
106
  terminal.concurrentAnswer:
88
107
  status: unverified
@@ -95,36 +114,47 @@ hazards:
95
114
  - id: outside-verification-survey
96
115
  severity: medium
97
116
  summary: >-
98
- Antigravity was not part of the harness verification survey. Every row above is
99
- unverified rather than inferred, and this connector must stay at its fixture-proven
100
- tier until a dedicated verification objective upgrades it.
117
+ Antigravity was not part of the original harness verification survey. The current
118
+ first-party docs now establish hook names, payload fields, and response shapes, but the
119
+ `agy` binary was unavailable for empirical timeout, failure, resume, and headless tests.
120
+ The connector must stay at its fixture-proven tier until those paths are exercised.
101
121
  verification: unverified
102
122
  mitigation: required
103
123
  trackedAs: agent-session-verify-antigravity
104
124
  - id: pre-tool-use-always-allows
105
125
  severity: medium
106
126
  summary: >-
107
- The shipped PreToolUse hook always answers `{"allow_tool":true}` and records the request
108
- through a detached `ovld protocol permission-request` call to a subcommand that does not
109
- exist. It therefore neither gates nor records anything, while its conformance manifest
110
- declared the permissionHook capability.
127
+ The former PreToolUse hook answered `{"allow_tool":true}` even though the first-party
128
+ response contract requires `decision`, and called a nonexistent detached protocol command.
129
+ It neither gated nor recorded reliably; changing it to native `decision: allow` would have
130
+ silently bypassed the harness permission system, so the registration was removed.
111
131
  verification: verified
112
- mitigation: required
113
- trackedAs: agent-session-verify-antigravity
132
+ mitigation: implemented
133
+ fixture: fixtures/unbound-session.json
134
+ - id: pre-invocation-has-no-prompt
135
+ severity: high
136
+ summary: >-
137
+ The former follow-up hook guessed prompt/message/text/input fields on PreInvocation, but
138
+ the first-party schema contains none of them. It could never capture a normal follow-up;
139
+ reconstructing one from transcriptPath would violate the raw-transcript privacy boundary.
140
+ The false followUpHook projection and the registration were removed.
141
+ verification: verified
142
+ mitigation: implemented
143
+ fixture: fixtures/unbound-session.json
114
144
 
115
145
  decisionShape:
116
146
  codec: antigravity
117
- neverSend: [hookSpecificOutput, permissionDecision, permission]
147
+ neverSend: [allow_tool, hookSpecificOutput, permissionDecision, permission]
118
148
  notes: >-
119
- The observed response shape is a flat `{"allow_tool": boolean}`. No deny or defer shape
120
- has been verified, so no decision codec may be written for this adapter yet.
149
+ The first-party response is `{ decision, reason?, permissionOverrides? }`, with decision
150
+ values allow, deny, ask, force_ask, and deny_unless_prior_grant. No decision codec ships
151
+ until an installed binary verifies failure fallback and exact emitted bytes; in particular,
152
+ no failure path may manufacture `decision: allow`.
121
153
 
122
154
  unboundSessionFixture: fixtures/unbound-session.json
123
155
 
124
156
  legacy:
125
157
  capabilities:
126
- - followUpHook
127
158
  - contextFilePrompt
128
159
  - slashCommands
129
- hookTypes:
130
- - UserPromptSubmit
160
+ hookTypes: []
@@ -1,30 +1 @@
1
- {
2
- "overlord-follow-up-capture": {
3
- "PreInvocation": [
4
- {
5
- "matcher": "*",
6
- "hooks": [
7
- {
8
- "type": "command",
9
- "command": "${ANTIGRAVITY_PLUGIN_ROOT}/scripts/pre-invocation-hook.sh",
10
- "timeout": 10
11
- }
12
- ]
13
- }
14
- ]
15
- },
16
- "overlord-permission-capture": {
17
- "PreToolUse": [
18
- {
19
- "matcher": "*",
20
- "hooks": [
21
- {
22
- "type": "command",
23
- "command": "${ANTIGRAVITY_PLUGIN_ROOT}/scripts/pre-tool-use-hook.sh",
24
- "timeout": 10
25
- }
26
- ]
27
- }
28
- ]
29
- }
30
- }
1
+ {}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "https://antigravity.google/schemas/v1/plugin.json",
3
3
  "name": "overlord",
4
- "version": "0.3.20",
5
- "description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
4
+ "version": "0.3.21",
5
+ "description": "Chat-driven access to Overlord mission protocol workflows through skills and MCP.",
6
6
  "author": {
7
7
  "name": "Cooperativ",
8
8
  "url": "https://github.com/cooperativ-labs"
@@ -8,8 +8,8 @@ description: Antigravity adapter for the shared Overlord mission workflow.
8
8
  ## Antigravity Adapter Notes
9
9
 
10
10
  - Agent identifier: `antigravity` for `ovld protocol create` and `ovld protocol prompt`.
11
- - Follow-up capture: the installed `PreInvocation` hook (Antigravity's closest analog to the canonical `UserPromptSubmit` hook) records ordinary post-delivery user turns. Do not manually publish `user_follow_up` unless the hook is unavailable.
12
- - Permission capture: the installed `PreToolUse` hook (Antigravity's closest analog to the canonical `PermissionRequest` hook) publishes permission activity through `ovld protocol` and always allows the underlying tool call — it only records, it never gates.
11
+ - Follow-up capture: Antigravity's documented hooks do not expose the submitted prompt, so this adapter does not claim automatic `user_follow_up` capture. Publish follow-up activity through the normal mission workflow when needed.
12
+ - Permission capture: no decision hook is registered until Antigravity's documented `PreToolUse` response dialect is implemented through the channel-scoped agent-session runtime. Never manufacture an `allow` response as a failure fallback.
13
13
  - Model selection: do not pass `--model` or an effort/thinking flag. Antigravity manages model selection internally; the launch prompt only carries mission/objective context.
14
14
  - MCP bridge: the installed `overlord` MCP server exposes the hosted-compatible `overlord_*` mission tool catalog backed by `ovld protocol`.
15
15
  - Slash commands: each file under `skills/` (this skill plus `attach`, `connect`, `load`, `create`, `prompt`, `discuss-objective`, `add-objectives`, `record-work`, `spawn`) is auto-registered by Antigravity as a `/<name>` command.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.20",
3
+ "version": "0.3.21",
4
4
  "description": "Overlord mission protocol workflow for Claude Code — attach/update/ask/deliver, slash commands, and hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -4,9 +4,9 @@
4
4
 
5
5
  **Adapter** `claude` · **Codec** `claude` · **Integration shape** `callback` · **Capability tier** 3 (Conversational)
6
6
 
7
- **Harness version verified** `2.1.221` · **range** `>=2.1.0` · **scheme** `semver`
7
+ **Harness version verified** `2.1.227` · **range** `>=2.1.0` · **scheme** `semver`
8
8
 
9
- **Descriptor digest** `bdeb8c46cb12d692aced13597c6c2120312c303f3aaeb597b891d83e054db365`
9
+ **Descriptor digest** `5c25dafa68e2f4d0862be4378f4b7a2506ace3a4fe6b806a0e392188604f20d8`
10
10
 
11
11
  > The tier is derived from passing fixtures, never authored. `unsupported` means the harness
12
12
  > cannot do it — do not attempt it. `not-implemented` means it is buildable and unbuilt: that is
@@ -94,9 +94,9 @@ Per-command `timeout` in seconds with no documented ceiling. Omitting `decision`
94
94
 
95
95
  **`fork-and-subagent-identity-unknown`** — Whether an in-process fork mints a new native session id, and whether subagent tool calls carry the parent's id, are both unverified. Guessing either routes a session's requests to the wrong mission. Partially narrowed at 2.1.221: the binary carries distinct `SubagentStart` and `SubagentStop` hook events, converts an agent-frontmatter `Stop` registration into `SubagentStop` ("subagents trigger SubagentStop"), and records `parent_session_id` and `agent_type` as separate fields from `session_id`. That the harness distinguishes the two identities is now established; which value lands in a subagent hook payload's `session_id` is still not, and that is the part binding depends on. Read it from a real subagent payload before changing any binding code.
96
96
 
97
- **`subagent-stop-unregistered`** — The adapter registers `Stop` and no subagent-lifecycle event. Claude Code 2.1.221 fires `SubagentStop` — not `Stop` — when a subagent finishes, and subagents now run in the background past the parent's turn boundary, so the shipped Stop registration is guaranteed not to run for work a subagent completes after the parent stopped. Nothing is lost today because that registration is already inert (see `shipped-stop-hook-inert`), which is exactly why the fix is to repair the Stop path first and only then decide whether the repaired body should also ride `SubagentStop`. Registering the current inert script on a second event would add a spawn per subagent completion and buy nothing.
97
+ **`subagent-stop-unregistered`** — The adapter registers `Stop` and no subagent-lifecycle event. Claude Code 2.1.221 fires `SubagentStop` — not `Stop` — when a subagent finishes, and subagents now run in the background past the parent's turn boundary. Version 2.1.224 also removed the 200-subagent-per-session spawn cap, increasing the frequency of this gap, so the shipped Stop registration is guaranteed not to run for work a subagent completes after the parent stopped. Nothing is lost today because that registration is already inert (see `shipped-stop-hook-inert`), which is exactly why the fix is to repair the Stop path first and only then decide whether the repaired body should also ride `SubagentStop`. Registering the current inert script on a second event would add a spawn per subagent completion and buy nothing.
98
98
 
99
- **`subagent-commits-escape-delivery-delta`** — Delivery change attribution is computed from `git status --porcelain` against the attach baseline (cli/src/vcs.ts `readChangedFiles` / `filterRunAttributableChanges`); nothing in that path consults HEAD or the commit graph. A background subagent that commits, merges, or opens a PR for its own work therefore removes those files from the worktree delta, and they vanish from the delivery report entirely — not flagged, not skipped, silently absent. The PostToolUse touched-files log is unaffected (its key is `sha256(abspath(cwd) + "\0" + MISSION_ID)`, so a subagent sharing the cwd writes to the same log), which means the evidence that the edit happened survives while the delta that decides coverage does not. Closing this means teaching the delta about commits made since the baseline, which is a CLI change with branch and worktree semantics to settle, not a hook edit.
99
+ **`subagent-commits-escape-delivery-delta`** — Delivery change attribution is computed from `git status --porcelain` against the attach baseline (cli/src/vcs.ts `readChangedFiles` / `filterRunAttributableChanges`); nothing in that path consults HEAD or the commit graph. Claude Code 2.1.221 made background-session commit-and-push behavior an explicit work-preservation default. A background subagent that commits, merges, or opens a PR for its own work therefore removes those files from the worktree delta, and they vanish from the delivery report entirely — not flagged, not skipped, silently absent. The PostToolUse touched-files log is unaffected (its key is `sha256(abspath(cwd) + "\0" + MISSION_ID)`, so a subagent sharing the cwd writes to the same log), which means the evidence that the edit happened survives while the delta that decides coverage does not. Closing this means teaching the delta about commits made since the baseline, which is a CLI change with branch and worktree semantics to settle, not a hook edit.
100
100
 
101
101
  ## Native decision shape
102
102
 
@@ -15,7 +15,7 @@ connector:
15
15
  harnessCapabilities:
16
16
  path: connectors/adapters/claude/harness-capabilities.yaml
17
17
  schemaVersion: 1
18
- digest: "bdeb8c46cb12d692aced13597c6c2120312c303f3aaeb597b891d83e054db365"
18
+ digest: "5c25dafa68e2f4d0862be4378f4b7a2506ace3a4fe6b806a0e392188604f20d8"
19
19
  capabilities:
20
20
  - followUpHook
21
21
  - permissionHook