overlord-cli 0.2608110806.0 → 0.2608120914.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.
- package/dist/connectors/HARNESS-MATRIX.md +16 -17
- package/dist/connectors/VERSION +1 -1
- package/dist/connectors/adapters/antigravity/CAPABILITIES.md +27 -23
- package/dist/connectors/adapters/antigravity/README.md +15 -11
- package/dist/connectors/adapters/antigravity/conformance-manifest.yaml +1 -6
- package/dist/connectors/adapters/antigravity/fixtures/official-pre-tool-use.json +36 -0
- package/dist/connectors/adapters/antigravity/fixtures/unbound-session.json +10 -20
- package/dist/connectors/adapters/antigravity/harness-capabilities.yaml +66 -36
- package/dist/connectors/adapters/antigravity/hooks.json +1 -30
- package/dist/connectors/adapters/antigravity/plugin.json +2 -2
- package/dist/connectors/adapters/antigravity/skills/overlord-mission/SKILL.md +2 -2
- package/dist/connectors/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/claude/CAPABILITIES.md +4 -4
- package/dist/connectors/adapters/claude/conformance-manifest.yaml +1 -1
- package/dist/connectors/adapters/claude/harness-capabilities.yaml +9 -5
- package/dist/connectors/adapters/codex/.codex-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/codex/CAPABILITIES.md +3 -3
- package/dist/connectors/adapters/codex/conformance-manifest.yaml +1 -1
- package/dist/connectors/adapters/codex/harness-capabilities.yaml +5 -2
- package/dist/connectors/adapters/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/cursor/CAPABILITIES.md +8 -9
- package/dist/connectors/adapters/cursor/conformance-manifest.yaml +2 -2
- package/dist/connectors/adapters/cursor/harness-capabilities.yaml +11 -18
- package/dist/connectors/core/overlord-mission/SKILL.md +3 -1
- package/dist/connectors/core/scripts/overlord-mcp.mjs +1 -1
- package/dist/index.js +97 -54
- package/dist/index.js.map +3 -3
- package/package.json +1 -1
- package/dist/connectors/adapters/antigravity/scripts/pre-invocation-hook.sh +0 -79
- 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 |
|
|
18
|
-
| [`claude`](adapters/claude/CAPABILITIES.md) | Claude Code | `2.1.
|
|
19
|
-
| [`codex`](adapters/codex/CAPABILITIES.md) | Codex CLI | `0.
|
|
20
|
-
| [`cursor`](adapters/cursor/CAPABILITIES.md) | Cursor Agent CLI | `2026.
|
|
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` |
|
|
29
|
-
| `observe.toolCall` |
|
|
30
|
-
| `observe.toolResult` |
|
|
31
|
-
| `observe.fileEdit` |
|
|
32
|
-
| `observe.sessionLifecycle` |
|
|
33
|
-
| `decide.shell` |
|
|
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` |
|
|
36
|
-
| `decide.anyTool` |
|
|
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` |
|
|
40
|
-
| `inject.midTurn` |
|
|
41
|
-
| `inject.turnBoundary` |
|
|
42
|
-
| `inject.nextTurn` |
|
|
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` |
|
package/dist/connectors/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.3.
|
|
1
|
+
0.3.22
|
|
@@ -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**
|
|
7
|
+
**Harness version verified** `docs: Antigravity CLI v1.1.11 / Antigravity 2.0 v2.6.0` · **scheme** `opaque`
|
|
8
8
|
|
|
9
|
-
**Descriptor digest** `
|
|
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 |
|
|
20
|
+
| Status | ✅ supported |
|
|
21
21
|
| Source | `payload` |
|
|
22
|
-
|
|
|
22
|
+
| Field | `conversationId` |
|
|
23
|
+
| Evidence | fixtures: `fixtures/official-pre-tool-use.json` |
|
|
23
24
|
|
|
24
|
-
|
|
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
|
|
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` |
|
|
45
|
-
| `observe.toolCall` |
|
|
46
|
-
| `observe.toolResult` |
|
|
47
|
-
| `observe.fileEdit` |
|
|
48
|
-
| `observe.sessionLifecycle` |
|
|
49
|
-
| `decide.shell` |
|
|
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` |
|
|
52
|
-
| `decide.anyTool` |
|
|
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` |
|
|
56
|
-
| `inject.midTurn` |
|
|
57
|
-
| `inject.turnBoundary` |
|
|
58
|
-
| `inject.nextTurn` |
|
|
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 |
|
|
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
|
-
**`
|
|
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-
|
|
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
|
|
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`
|
|
76
|
-
|
|
77
|
-
|
|
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`
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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: "
|
|
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": "
|
|
4
|
-
"description": "Mandatory negative test: Antigravity
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
24
|
-
|
|
24
|
+
field: conversationId
|
|
25
|
+
status: supported
|
|
26
|
+
fixture: fixtures/official-pre-tool-use.json
|
|
25
27
|
notes: >-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
|
34
|
-
|
|
35
|
-
|
|
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:
|
|
45
|
+
status: unsupported
|
|
40
46
|
native: PreInvocation
|
|
41
|
-
|
|
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:
|
|
52
|
+
status: not-implemented
|
|
44
53
|
native: PreToolUse
|
|
45
54
|
trackedAs: agent-session-verify-antigravity
|
|
46
55
|
observe.toolResult:
|
|
47
|
-
status:
|
|
56
|
+
status: not-implemented
|
|
57
|
+
native: PostToolUse
|
|
48
58
|
trackedAs: agent-session-verify-antigravity
|
|
49
59
|
observe.fileEdit:
|
|
50
|
-
status:
|
|
60
|
+
status: not-implemented
|
|
61
|
+
native: PostToolUse
|
|
51
62
|
trackedAs: agent-session-verify-antigravity
|
|
52
63
|
observe.sessionLifecycle:
|
|
53
|
-
status:
|
|
64
|
+
status: not-implemented
|
|
65
|
+
native: Stop
|
|
54
66
|
trackedAs: agent-session-verify-antigravity
|
|
55
67
|
decide.shell:
|
|
56
|
-
status:
|
|
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:
|
|
75
|
+
status: not-implemented
|
|
76
|
+
native: PreToolUse
|
|
64
77
|
trackedAs: agent-session-verify-antigravity
|
|
65
78
|
decide.anyTool:
|
|
66
|
-
status:
|
|
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:
|
|
89
|
+
status: not-implemented
|
|
90
|
+
native: PreToolUse.permissionOverrides
|
|
77
91
|
trackedAs: agent-session-verify-antigravity
|
|
78
92
|
inject.midTurn:
|
|
79
|
-
status:
|
|
80
|
-
|
|
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:
|
|
99
|
+
status: not-implemented
|
|
100
|
+
native: Stop
|
|
83
101
|
trackedAs: agent-session-verify-antigravity
|
|
84
102
|
inject.nextTurn:
|
|
85
|
-
status:
|
|
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.
|
|
99
|
-
|
|
100
|
-
|
|
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
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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:
|
|
113
|
-
|
|
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
|
|
120
|
-
|
|
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.
|
|
5
|
-
"description": "Chat-driven access to Overlord mission protocol workflows
|
|
4
|
+
"version": "0.3.22",
|
|
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:
|
|
12
|
-
- Permission capture:
|
|
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.
|
|
@@ -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.
|
|
7
|
+
**Harness version verified** `2.1.227` · **range** `>=2.1.0` · **scheme** `semver`
|
|
8
8
|
|
|
9
|
-
**Descriptor digest** `
|
|
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: "
|
|
18
|
+
digest: "5c25dafa68e2f4d0862be4378f4b7a2506ace3a4fe6b806a0e392188604f20d8"
|
|
19
19
|
capabilities:
|
|
20
20
|
- followUpHook
|
|
21
21
|
- permissionHook
|