overlord-cli 0.2608211706.0 → 0.2608231148.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 (77) hide show
  1. package/README.md +2 -2
  2. package/dist/connectors/AGENTS.md +57 -75
  3. package/dist/connectors/HARNESS-MATRIX.md +12 -15
  4. package/dist/connectors/README.md +13 -8
  5. package/dist/connectors/VERSION +1 -1
  6. package/dist/connectors/adapters/antigravity/CAPABILITIES.md +13 -7
  7. package/dist/connectors/adapters/antigravity/README.md +7 -19
  8. package/dist/connectors/adapters/antigravity/conformance-manifest.yaml +3 -8
  9. package/dist/connectors/adapters/antigravity/fixtures/mutation-window-evidence.json +15 -0
  10. package/dist/connectors/adapters/antigravity/harness-capabilities.yaml +6 -28
  11. package/dist/connectors/adapters/antigravity/plugin.json +1 -1
  12. package/dist/connectors/adapters/antigravity/skills/record-work.md +4 -4
  13. package/dist/connectors/adapters/claude/.claude-plugin/plugin.json +1 -1
  14. package/dist/connectors/adapters/claude/CAPABILITIES.md +25 -16
  15. package/dist/connectors/adapters/claude/README.md +10 -4
  16. package/dist/connectors/adapters/claude/codec/claude.codec.yaml +4 -0
  17. package/dist/connectors/adapters/claude/commands/record-work.md +3 -3
  18. package/dist/connectors/adapters/claude/conformance-manifest.yaml +3 -20
  19. package/dist/connectors/adapters/claude/fixtures/agent-session-hook-unbound.json +1 -1
  20. package/dist/connectors/adapters/claude/fixtures/mutation-window-evidence.json +19 -0
  21. package/dist/connectors/adapters/claude/fixtures/normalize-post-tool-use-write.json +1 -1
  22. package/dist/connectors/adapters/claude/fixtures/post-tool-use-capture.json +27 -0
  23. package/dist/connectors/adapters/claude/fixtures/unbound-session.json +5 -4
  24. package/dist/connectors/adapters/claude/harness-capabilities.yaml +29 -76
  25. package/dist/connectors/adapters/codex/.codex-plugin/plugin.json +1 -1
  26. package/dist/connectors/adapters/codex/CAPABILITIES.md +17 -8
  27. package/dist/connectors/adapters/codex/README.md +10 -4
  28. package/dist/connectors/adapters/codex/codec/codex.codec.yaml +2 -0
  29. package/dist/connectors/adapters/codex/conformance-manifest.yaml +3 -17
  30. package/dist/connectors/adapters/codex/fixtures/mutation-window-evidence.json +33 -0
  31. package/dist/connectors/adapters/codex/fixtures/post-tool-use-hook.json +23 -9
  32. package/dist/connectors/adapters/codex/fixtures/post-tool-use-unbound.json +26 -0
  33. package/dist/connectors/adapters/codex/harness-capabilities.yaml +19 -32
  34. package/dist/connectors/adapters/cursor/.cursor-plugin/plugin.json +1 -1
  35. package/dist/connectors/adapters/cursor/CAPABILITIES.md +24 -15
  36. package/dist/connectors/adapters/cursor/README.md +7 -2
  37. package/dist/connectors/adapters/cursor/codec/cursor.codec.yaml +8 -2
  38. package/dist/connectors/adapters/cursor/commands/record-work.md +3 -3
  39. package/dist/connectors/adapters/cursor/conformance-manifest.yaml +3 -16
  40. package/dist/connectors/adapters/cursor/fixtures/mutation-window-evidence.json +34 -0
  41. package/dist/connectors/adapters/cursor/fixtures/normalize-post-tool-use-write.json +1 -1
  42. package/dist/connectors/adapters/cursor/fixtures/post-tool-use-hook.json +27 -0
  43. package/dist/connectors/adapters/cursor/fixtures/post-tool-use-unbound.json +26 -0
  44. package/dist/connectors/adapters/cursor/harness-capabilities.yaml +31 -57
  45. package/dist/connectors/adapters/cursor/rules/overlord-local.mdc +2 -3
  46. package/dist/connectors/adapters/cursor/skills/overlord-mission/SKILL.md +5 -1
  47. package/dist/connectors/adapters/opencode/CAPABILITIES.md +15 -3
  48. package/dist/connectors/adapters/opencode/codec/opencode.codec.yaml +0 -1
  49. package/dist/connectors/adapters/opencode/conformance-manifest.yaml +3 -5
  50. package/dist/connectors/adapters/opencode/fixtures/mutation-window-evidence.json +20 -0
  51. package/dist/connectors/adapters/opencode/harness-capabilities.yaml +9 -9
  52. package/dist/connectors/adapters/pi/CAPABILITIES.md +15 -3
  53. package/dist/connectors/adapters/pi/conformance-manifest.yaml +3 -12
  54. package/dist/connectors/adapters/pi/fixtures/mutation-window-evidence.json +17 -0
  55. package/dist/connectors/adapters/pi/harness-capabilities.yaml +7 -14
  56. package/dist/connectors/core/README.md +8 -0
  57. package/dist/connectors/core/overlord-mission/SKILL.md +62 -84
  58. package/dist/connectors/core/overlord-mission/reference/cli.md +53 -58
  59. package/dist/connectors/core/overlord-mission/reference/mcp.md +3 -3
  60. package/dist/connectors/core/overlord-mission/reference/record-work.md +18 -15
  61. package/dist/connectors/core/overlord-mission/reference/shell-escaping.md +3 -4
  62. package/dist/connectors/core/scripts/capture-change-hook.sh +20 -0
  63. package/dist/connectors/core/scripts/overlord-mcp.mjs +45 -36
  64. package/dist/connectors/docs/05-connectors-and-agent-plugins.md +15 -1
  65. package/dist/connectors/docs/testing.md +28 -24
  66. package/dist/contract/conformance-manifest.schema.yaml +3 -44
  67. package/dist/index.js +4394 -4117
  68. package/dist/index.js.map +4 -4
  69. package/package.json +1 -1
  70. package/dist/connectors/adapters/antigravity/skills/spawn.md +0 -16
  71. package/dist/connectors/adapters/claude/commands/spawn.md +0 -19
  72. package/dist/connectors/adapters/claude/scripts/post-tool-use-hook.sh +0 -40
  73. package/dist/connectors/adapters/codex/scripts/post-tool-use-hook.sh +0 -30
  74. package/dist/connectors/adapters/cursor/commands/spawn.md +0 -11
  75. package/dist/connectors/adapters/cursor/fixtures/no-permission-request-hook.json +0 -10
  76. package/dist/connectors/adapters/cursor/fixtures/post-tool-use-log-dir.json +0 -9
  77. package/dist/connectors/adapters/cursor/hooks/overlord-post-tool-use.sh +0 -31
package/README.md CHANGED
@@ -97,7 +97,7 @@ backend is reachable.
97
97
 
98
98
  Environment overrides (useful in scripts and CI):
99
99
 
100
- - `OVLD_HOME` — relocate the entire global `~/.ovld` data directory (SQLite, object storage, VCS baselines, native-session caches)
100
+ - `OVLD_HOME` — relocate the entire global `~/.ovld` data directory (SQLite, object storage, objective ledgers, and native-session caches)
101
101
  - `OVERLORD_BACKEND_URL` — production/global backend target; an *explicit* runtime value (shell export, container/launcher injection) takes precedence over the resolved `overlord.toml` `backend_url`
102
102
  - `OVERLORD_BACKEND_URL_DEV` — **development-only** backend target, read solely by the in-repo source build and the dev/test tooling that runs it (`yarn dev`, the test harness). An installed/published `ovld` never reads it, and nothing aliases it into the production `OVERLORD_BACKEND_URL`
103
103
  - `OVERLORD_WEB_PORT` — port the local backend binds when launched
@@ -249,7 +249,7 @@ colocation convention):
249
249
  - [03 — Agent Protocol](https://github.com/cooperativ-labs/OpenOverlord/blob/main/cli/docs/03-agent-protocol.md): `ovld protocol` lifecycle, context assembly, updates, delivery, attachments.
250
250
  - [04 — Runner and Launch Execution](https://github.com/cooperativ-labs/OpenOverlord/blob/main/cli/docs/04-runner-and-launch-execution.md): execution requests, local runner, launch command generation, auto-advance.
251
251
  - [06 — Core Domain and Lifecycle](https://github.com/cooperativ-labs/OpenOverlord/blob/main/cli/docs/06-core-domain-and-lifecycle.md): projects, missions, objectives, sessions, events, statuses, state transitions.
252
- - [11 — Review, Artifacts, and Change Tracking](https://github.com/cooperativ-labs/OpenOverlord/blob/main/cli/docs/11-review-artifacts-and-change-tracking.md): delivery review records, artifacts, rationale coverage, local diff support.
252
+ - [11 — Review, Artifacts, and Change Tracking](https://github.com/cooperativ-labs/OpenOverlord/blob/main/cli/docs/11-review-artifacts-and-change-tracking.md): delivery review records, artifacts, objective-ledger evidence, and optional rationale annotations.
253
253
  - [Test Plan](https://github.com/cooperativ-labs/OpenOverlord/blob/main/cli/docs/testing.md): test plan for the `cli`, `protocol`, and `runner` components — management commands, protocol lifecycle/attach-shape/validation conformance, runner queue atomicity, and surface smoke tests. Part of the root [TEST_PLAN.md](https://github.com/cooperativ-labs/OpenOverlord/blob/main/TEST_PLAN.md).
254
254
 
255
255
  ### Code & Tests
@@ -11,9 +11,9 @@ A connector lets an AI coding harness (Claude Code, Codex, Cursor, etc.) speak t
11
11
  | Extension type | Example user request |
12
12
  | --------------------- | ----------------------------------------------------- |
13
13
  | New agent connector | "Add a connector for OpenCode / Windsurf / Zed" |
14
- | New hook type | "Add a Stop hook for pending-delivery checks" |
14
+ | New harness event path | "Capture a newly exposed native mutation event" |
15
15
  | Extend connector core | "Add a new canonical instruction to all connectors" |
16
- | New capability flag | "Connectors can now declare `supports-multi-session`" |
16
+ | New capability id | "Grade a new agent-session behavior" |
17
17
 
18
18
  Each type has a different procedure below.
19
19
 
@@ -24,7 +24,7 @@ Each type has a different procedure below.
24
24
  1. Read `CONTRACT.md` — Connector Layer section (stable id: `connector`).
25
25
  2. Read [`connectors/docs/05-connectors-and-agent-plugins.md`](docs/05-connectors-and-agent-plugins.md) for the four-layer model: connector core, plugins, adapters, and prompt wrappers.
26
26
  3. Read [`connectors/docs/agent-harness-configuration-architecture.md`](docs/agent-harness-configuration-architecture.md) for ownership boundaries.
27
- 4. Check `contract/extension-points.yaml` for approved capability flags and hook types before adding new ones.
27
+ 4. Check the `agentSession` vocabularies in `contract/extension-points.yaml` and the descriptor schema before adding a normalized capability, integration shape, or fixture kind.
28
28
  5. After connector edits, follow the [connector-versions skill](../.claude/skills/connector-versions/SKILL.md) and run `yarn connectors:version:bump`.
29
29
 
30
30
  ---
@@ -57,7 +57,7 @@ The descriptor is the **only hand-authored capability source**. Everything below
57
57
  | `connectors/adapters/<agent>/CAPABILITIES.md` | Per-adapter page with a do-not-edit banner |
58
58
  | `connectors/HARNESS-MATRIX.md` | Cross-adapter matrix |
59
59
  | `cli/src/agent-session/catalog.generated.ts` | Compiled catalog the CLI runtime reads |
60
- | The `connector:` block's `capabilities`, `hookTypes`, `integrationShape`, `capabilityTier`, and `harnessCapabilities` fields in `conformance-manifest.yaml` | The deprecated hook-named legacy projection plus the descriptor digest |
60
+ | The `connector:` block's `integrationShape`, `capabilityTier`, and `harnessCapabilities` fields in `conformance-manifest.yaml` | The descriptor-derived integration shape, tier, and digest |
61
61
 
62
62
  `yarn connectors:capabilities:check` is the CI drift check: it validates every descriptor,
63
63
  executes every referenced fixture, re-derives each tier, and fails if any generated artifact is
@@ -68,58 +68,32 @@ stale. `yarn connectors:check` runs it alongside the connector version check.
68
68
  1. **A capability is proven by fixture, not by inspection.** CI runs the fixture. Checking only
69
69
  that a named file exists would let an empty fixture claim a capability into existence.
70
70
  2. **The tier is derived, never authored.** `capabilityTier` comes from what the fixtures prove.
71
- Claimed-but-unproven is worse than absent, because the UI renders controls that do nothing.
71
+ Asserted-but-unproven is worse than absent, because the UI renders controls that do nothing.
72
72
  3. **Every adapter ships the unbound-session negative fixture.** An unbound session in an
73
73
  unrelated directory must be untouched and unblocked by every registered integration. A side
74
- effect the fixture records must be declared as a hazard with a tracker — recording the truth
75
- is required; claiming silence you do not have is not.
74
+ effect, CLI invocation, or output makes the fixture fail; a hazard declaration cannot waive
75
+ this boundary.
76
76
  4. **A native session id binds nothing on its own.** It is a correlation alias. The verified
77
77
  channel/session credential is the authorization and mission scope, and the working directory
78
78
  is never a binding authority.
79
- 5. **Adapters make no network call.** Translate, hand off to `ovld agent-session`, return.
80
-
81
- ### The rendered agent-session hook
82
-
83
- Mechanical observe / decide / inject is **not a live Overlord connector path**. Latch v2
84
- removed the CLI event and send surface that previously backed it, and Overlord does not
85
- emulate that protocol. New adapters must not register `ovld agent-session` hooks. Channel 1
86
- stays on `ovld protocol` (follow-up capture, touched-file attribution, Stop delivery reminder).
87
- A future conversation surface must be a native Latch v2 Conversation Hub client. The rest of
88
- this section documents leftover CLI runtime and historical fixtures.
89
-
90
- Do not write a per-adapter shell script for agent-session traffic. One core script,
91
- `connectors/core/scripts/agent-session-hook.sh`, is rendered per adapter at `ovld agent-setup`
92
- time — declare the managed file as `scripts/agent-session-<action>.sh` in the manifest, and the
93
- installer substitutes both your adapter key and that **fixed action**:
94
-
95
- ```bash
96
- [ -n "${OVERLORD_SESSION_CHANNEL_ID:-}" ] || exit 0
97
- command -v ovld >/dev/null 2>&1 || exit 0
98
- exec ovld agent-session event --agent claude --payload-file -
99
- ```
100
-
101
- The first line is the scope gate, and it is in bash rather than in the CLI on purpose. An
102
- unbound session — someone's own agent in an unrelated directory on a machine that happens to
103
- have Overlord installed — must cost no process, no log line, and no measurable delay. A gate
104
- inside the CLI cannot deliver that, because reaching it already cost a process launch. The CLI
105
- applies the same gate again, since a check that can be skipped by invoking `ovld` directly is
106
- not a gate.
107
-
108
- The action being fixed at install time is the point, not a simplification. A single script that
109
- dispatched on `$1` would let whatever wrote the hook registration choose which CLI operation
110
- runs, and hook registrations are the least-reviewed configuration on a developer's machine. A
111
- `PostToolUse` registration renders an `event` script; a permission registration renders a
112
- `request` script; an inject registration renders an `inbox` script; none can become another.
113
- `event`, `request`, and `inbox` are the only three actions a managed path may name.
114
-
115
- The payload streams on stdin — not through a shell variable, which caps size and mangles NUL
116
- bytes, and not through argv, which is world-readable. For `request` and `inbox`, stdout and exit
117
- status pass through unchanged so the native decision or injection reaches the harness in its
118
- exact expected shape.
119
-
120
- Silence is the failure mode. A missing `ovld` exits `0` with no output, which for a decision
121
- hook means _no decision_ and therefore the harness's own prompt. No failure path may ever
122
- manufacture an approval.
79
+ 5. **Adapters make no network call.** Translate, hand off to the documented local `ovld`
80
+ command, and return.
81
+
82
+ ### Local mutation capture hooks
83
+
84
+ A connector may invoke `ovld protocol capture-change` from a native post-mutation hook when
85
+ `OVERLORD_OBJECTIVE_ID` is explicit in the launch environment. Mission scope is recovered from
86
+ that objective's exact active-session binding; cwd never selects it. The hook must remain silent
87
+ and perform no write when the objective id or `ovld` is unavailable. A directly named native edit
88
+ path records objective-bound, non-exclusive `declared_edit`/`direct` evidence only after the
89
+ connector-owned codec normalizes it as `file.edited`. The hook must pass its connector key through
90
+ `--agent`; generic payload path parsing is forbidden. Codec-normalized read, search, and fetch
91
+ callbacks are silent no-ops. Mutation-capable callbacks without a normalized edit path, plus shell,
92
+ generic, unknown, and unmapped callbacks, record unavailable evidence health. Every hook
93
+ registration must be backed by a `script-io` fixture, and every mutation window claim must be
94
+ backed by a `mutation-window` fixture. Claude, Codex, and Cursor render this callback from
95
+ `connectors/core/scripts/capture-change-hook.sh`; their adapter directories own only the native
96
+ managed path and registration, not copies of the implementation.
123
97
 
124
98
  ### The event codec
125
99
 
@@ -144,6 +118,7 @@ events:
144
118
  toolPath: tool_name
145
119
  inputPath: tool_input
146
120
  fileEditKind: file.edited # a file-mutating tool becomes this kind instead
121
+ filePathPaths: [file_path] # bounded paths inside tool_input; no generic key fallback
147
122
  ```
148
123
 
149
124
  A codec can only say **where** native values live. It cannot name a destination the core
@@ -161,6 +136,9 @@ What each field feeds:
161
136
  - `inputPath` is never transmitted. It is reduced on the machine into an action, a subject, a
162
137
  bounded detail, and machine-derived risk markers. A tool with no formatter emits its name and
163
138
  the top-level **key names** of its input and nothing else.
139
+ - `filePathPaths` is a bounded, ordered list of dotted paths relative to `inputPath`. It is
140
+ required with the literal `fileEditKind: file.edited`; only exact strings resolved through
141
+ those connector-owned paths may become mutation evidence. Core never guesses common path keys.
164
142
  - `promptPath` is the single deliberate exception: prompt text is persisted in full for bound
165
143
  sessions, because the activity feed exists to show it. Secret redaction still runs over it.
166
144
 
@@ -208,8 +186,9 @@ grants nothing on its own.
208
186
  | `native-payload` | Asserts the shape of a recorded native harness payload (pure; no process started) |
209
187
  | `script-io` | Runs a shipped adapter script in an isolated sandbox — own `HOME`, `TMPDIR`, cwd, and a `PATH` whose only `ovld` is a recording spy — and asserts exit status, stdout, stderr, every sandbox write, and every CLI invocation attempted |
210
188
  | `source-guard` | Asserts a repo file does or does not contain declared markers (how "this dangerous harness flag must stay unset" is enforced) |
211
- | `normalized-event` | Runs the shipped codec and the real core interpreter against a recorded native payload, asserts the exact normalized envelope, and asserts that named raw content (file bodies, transcript paths, credentials) appears nowhere in it. This is how an `observe.*` capability becomes provable rather than claimed |
189
+ | `normalized-event` | Runs the shipped codec and the real core interpreter against a recorded native payload, asserts the exact normalized envelope, and asserts that named raw content (file bodies, transcript paths, credentials) appears nowhere in it. This is how an `observe.*` capability becomes provable rather than merely asserted |
212
190
  | `decision-codec` | Runs the connector-owned request/decision declaration through the real pure interpreter, asserts the bounded redacted request card, and pins exact allow/deny/defer bytes. Required for supported callback/extension `decide.*` capabilities |
191
+ | `mutation-window` | Executes recorded pre/post evidence semantics and derives whether the connector has a strict paired window, post-only evidence, or no post evidence. Declared classifications must match the derived result. |
213
192
 
214
193
  Fixtures never reach the network.
215
194
 
@@ -217,7 +196,7 @@ Fixtures never reach the network.
217
196
 
218
197
  ## Adding a New Agent Connector
219
198
 
220
- A new connector is the primary sanctioned extension point for this module. It requires a conformance manifest but does not require a contract version bump unless it introduces new capability flags or hook types.
199
+ A new connector is the primary sanctioned extension point for this module. It requires a conformance manifest but does not require a contract version bump unless it introduces a new closed capability id, integration shape, fixture kind, or protocol surface.
221
200
 
222
201
  **Steps:**
223
202
 
@@ -229,8 +208,8 @@ A new connector is the primary sanctioned extension point for this module. It re
229
208
  - Post meaningful progress updates
230
209
  - Use heartbeat during long work with no meaningful update
231
210
  - Ask exactly one blocking question and stop when blocked
232
- - Deliver last with summary, artifacts, and change rationales
233
- - Record all meaningful file changes as structured rationales
211
+ - Deliver last with a concise summary
212
+ - Keep objective-ledger capture local and independent of delivery
234
213
  - Use stdin/file flags for shell-special content
235
214
  - Do not continue after delivery unless explicitly asked
236
215
  - Run local repair before asking the user to fix setup
@@ -259,13 +238,15 @@ wrong and that is worth raising rather than working around.
259
238
  6. **Create `connectors/adapters/<agent-name>/conformance-manifest.yaml`** declaring:
260
239
 
261
240
  ```yaml
262
- contractVersion: '0'
241
+ contractVersion: '116'
263
242
  componentType: connector
264
243
  componentKey: <agent-name>
265
- capabilities:
266
- - <only approved flags from contract/extension-points.yaml>
267
- hookTypes:
268
- - <only approved types from contract/extension-points.yaml>
244
+ label: <human-readable label>
245
+ connector:
246
+ agentIdentifier: <agent-name>
247
+ # integrationShape, capabilityTier, and harnessCapabilities are generated.
248
+ installPath: <default install root>
249
+ managedFiles: []
269
250
  ```
270
251
 
271
252
  7. **Validate**: run `ovld contract check connectors/adapters/<agent-name>/conformance-manifest.yaml`.
@@ -274,18 +255,18 @@ wrong and that is worth raising rather than working around.
274
255
 
275
256
  ---
276
257
 
277
- ## Adding a New Hook Type
258
+ ## Adding a New Harness Event Path
278
259
 
279
- Hook types (`UserPromptSubmit`, `PermissionRequest`, `Stop`) are **stable interfaces** listed in `contract/extension-points.yaml`. Adding a new type requires a contract update first.
260
+ Native hook names belong to the adapter. Contract changes are required only when the path adds a
261
+ new normalized capability id, fixture kind, integration shape, or protocol surface.
280
262
 
281
263
  **Steps:**
282
264
 
283
- 1. **Update `contract/extension-points.yaml`**: add the new hook name to `approvedHookTypes`.
284
- 2. **Update `CONTRACT.md`** Connector Layer section with the new hook's event contract.
285
- 3. **Increment the contract version** in `contract/components.yaml` and add a changelog entry to `CONTRACT.md`.
286
- 4. **Implement the hook script** in `connectors/adapters/<agent-name>/hooks/` (or the connector-specific hook location).
287
- 5. **Hook scripts must not write to the database directly** — use `ovld protocol hook-event` or `ovld protocol update` only.
288
- 6. **Update affected conformance manifests** to declare the new hook type.
265
+ 1. **Record the native event** in an adapter fixture and map it to an existing normalized capability.
266
+ 2. **Implement the hook script** in the adapter's native hook location.
267
+ 3. **Keep it local and protocol-only** — use the documented `ovld protocol` command and never write to the database directly.
268
+ 4. **Prove behavior** with a `script-io` fixture and, for mutation evidence, a `mutation-window` fixture.
269
+ 5. **Update the descriptor** and run `yarn connectors:capabilities`.
289
270
 
290
271
  ---
291
272
 
@@ -302,16 +283,17 @@ The connector core is the set of canonical Markdown workflow instructions every
302
283
 
303
284
  ---
304
285
 
305
- ## Adding a New Capability Flag
286
+ ## Adding a New Capability Id
306
287
 
307
- Capability flags (e.g. `sessionEventStream`, `nativeSessionBinding`) are listed in `contract/extension-points.yaml` under `approvedConnectorCapabilities`. New flags require a contract update.
288
+ Normalized capability ids are closed values listed under `agentSession.capabilityIds` in
289
+ `contract/extension-points.yaml` and in `contract/harness-capabilities.schema.yaml`.
308
290
 
309
291
  **Steps:**
310
292
 
311
- 1. **Add the flag** to `approvedConnectorCapabilities` in `contract/extension-points.yaml`.
312
- 2. **Add a description** of what the flag means in `CONTRACT.md` Connector Layer section.
313
- 3. **Increment contract version** if the flag represents a breaking stable-interface change.
314
- 4. **Declare the flag** in the conformance manifests of connectors that support it.
293
+ 1. **Add the id** to the contract vocabulary and descriptor schema in the same change.
294
+ 2. **Define its evidence semantics** and fixture requirements in the Connector Layer contract.
295
+ 3. **Increment the contract version** for the closed-vocabulary change.
296
+ 4. **Declare the id and evidence** in every descriptor, then regenerate manifests and catalogs.
315
297
 
316
298
  ---
317
299
 
@@ -341,7 +323,7 @@ No adapter implementations have landed yet. When they do, the Claude and Codex a
341
323
  ## Cross-Module Checklist
342
324
 
343
325
  - [ ] Read `CONTRACT.md` Connector Layer section
344
- - [ ] New hook type or capability flag → update `contract/extension-points.yaml` first
326
+ - [ ] New capability id, integration shape, or fixture kind → update the contract vocabulary and descriptor schema first
345
327
  - [ ] Hook scripts → use `ovld protocol` commands only, no direct DB writes
346
328
  - [ ] Conformance manifest created and validated for every new connector
347
329
  - [ ] `ovld agent-setup <agent>` and `ovld doctor` behavior documented
@@ -2,24 +2,23 @@
2
2
 
3
3
  # Harness capability matrix
4
4
 
5
- Generated from each adapter's `harness-capabilities.yaml`. This file replaces the
6
- hand-written capability table that used to live in `connectors/README.md`: prose maintained
7
- by hand alongside code drifts, and a matrix that is 60% accurate is worse than none because
8
- it is trusted.
5
+ Generated from each adapter's fixture-backed `harness-capabilities.yaml` descriptor.
6
+ The descriptor is the single authored capability source; the tier and every table cell are
7
+ derived.
9
8
 
10
9
  Legend: ✅ supported (fixture-proven) · ⛔ unsupported (harness cannot) · 🚧 not-implemented
11
10
  (buildable, unbuilt) · ❓ unverified (find out first).
12
11
 
13
12
  ## Adapters
14
13
 
15
- | Adapter | Harness | Verified version | Shape | Tier | Binding | Decision hold |
16
- | --- | --- | --- | --- | --- | --- | --- |
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` | 1 (Observational) | ✅ supported | ✅ supported |
19
- | [`codex`](adapters/codex/CAPABILITIES.md) | Codex CLI | `0.147.0` | `callback` | 1 (Observational) | ✅ supported | ✅ supported |
20
- | [`cursor`](adapters/cursor/CAPABILITIES.md) | Cursor Agent CLI | `2026.08.04-aaa8809` | `callback` | 1 (Observational) | ✅ supported | ✅ supported |
21
- | [`opencode`](adapters/opencode/CAPABILITIES.md) | OpenCode | — | `controlPlane` | 3 (Conversational) | ✅ supported | ✅ supported |
22
- | [`pi`](adapters/pi/CAPABILITIES.md) | Pi Coding Agent | `0.83.0` | `extension` | 1 (Observational) | ✅ supported | 🚧 not-implemented |
14
+ | Adapter | Harness | Verified version | Shape | Tier | Mutation evidence | Binding | Decision hold |
15
+ | --- | --- | --- | --- | --- | --- | --- | --- |
16
+ | [`antigravity`](adapters/antigravity/CAPABILITIES.md) | Antigravity CLI | `docs: Antigravity CLI v1.1.11 / Antigravity 2.0 v2.6.0` | `callback` | 0 (Unsupported) | `unsupported` | ✅ supported | ❓ unverified |
17
+ | [`claude`](adapters/claude/CAPABILITIES.md) | Claude Code | `2.1.227` | `callback` | 1 (Observational) | `post-only` | ✅ supported | ✅ supported |
18
+ | [`codex`](adapters/codex/CAPABILITIES.md) | Codex CLI | `0.147.0` | `callback` | 1 (Observational) | `post-only` | ✅ supported | ✅ supported |
19
+ | [`cursor`](adapters/cursor/CAPABILITIES.md) | Cursor Agent CLI | `2026.08.04-aaa8809` | `callback` | 1 (Observational) | `post-only` | ✅ supported | ✅ supported |
20
+ | [`opencode`](adapters/opencode/CAPABILITIES.md) | OpenCode | — | `controlPlane` | 3 (Conversational) | `post-only` | ✅ supported | ✅ supported |
21
+ | [`pi`](adapters/pi/CAPABILITIES.md) | Pi Coding Agent | `0.83.0` | `extension` | 1 (Observational) | `unsupported` | ✅ supported | 🚧 not-implemented |
23
22
 
24
23
  ## Capabilities
25
24
 
@@ -28,7 +27,7 @@ Legend: ✅ supported (fixture-proven) · ⛔ unsupported (harness cannot) ·
28
27
  | `observe.prompt` | ⛔ unsupported | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented | ✅ supported |
29
28
  | `observe.toolCall` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented |
30
29
  | `observe.toolResult` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented |
31
- | `observe.fileEdit` | 🚧 not-implemented | ✅ supported | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented |
30
+ | `observe.fileEdit` | 🚧 not-implemented | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented | 🚧 not-implemented |
32
31
  | `observe.sessionLifecycle` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | 🚧 not-implemented |
33
32
  | `decide.shell` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | 🚧 not-implemented |
34
33
  | `decide.mcp` | ❓ unverified | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | 🚧 not-implemented |
@@ -49,10 +48,8 @@ Legend: ✅ supported (fixture-proven) · ⛔ unsupported (harness cannot) ·
49
48
  | --- | --- | --- | --- | --- | --- |
50
49
  | `antigravity` | `outside-verification-survey` | medium | unverified | required | `agent-session-verify-antigravity` |
51
50
  | `claude` | `shipped-stop-hook-inert` | medium | verified | required | `agent-session-phase-3` |
52
- | `claude` | `unbound-session-side-effects` | medium | verified | required | `agent-session-phase-4` |
53
51
  | `claude` | `fork-and-subagent-identity-unknown` | medium | unverified | required | `taxonomy-7.6` |
54
52
  | `claude` | `subagent-stop-unregistered` | medium | verified | required | `coo:585` |
55
- | `claude` | `subagent-commits-escape-delivery-delta` | high | verified | required | `coo:585` |
56
53
  | `codex` | `prompt-and-agent-hook-handlers-inert` | low | verified | accepted | — |
57
54
  | `codex` | `hooks-version-and-platform-gate` | medium | verified | required | `agent-session-phase-4` |
58
55
  | `cursor` | `reads-claude-hook-config` | high | unverified | required | `taxonomy-7.1` |
@@ -116,17 +116,22 @@ work as its own mission rather than folding it into a docs change:
116
116
 
117
117
  - `codex` ships no `commands/` while `claude` and `cursor` do, and `antigravity`
118
118
  achieves the same surface through `skills/*.md`. No harness constraint is recorded.
119
- - `codex` and `antigravity` register no `PostToolUse` or `Stop` hooks; whether their
120
- harnesses expose the equivalent events is not documented here.
119
+ - `antigravity` registers no post-tool mutation or Stop hook; whether its harness exposes
120
+ equivalent events is not documented here.
121
121
 
122
122
  ### Generated files
123
123
 
124
- The local MCP shim (`scripts/overlord-mcp.mjs`) is **generated**, not committed per
125
- adapter. One source — [`core/scripts/overlord-mcp.mjs`](core/scripts/overlord-mcp.mjs) —
126
- is rendered per adapter at `ovld agent-setup` time, substituting the adapter key into
127
- `DEFAULT_AGENT` and `serverInfo.name`. Edit the core file; there is no adapter copy to
128
- edit. The rendered artifact stays a standalone runnable `.mjs`, since harnesses start it
129
- directly from the install path.
124
+ The local MCP shim and post-tool capture callback are **generated**, not committed per
125
+ adapter. `ovld agent-setup` renders their core sources with the adapter key substituted:
126
+
127
+ - [`core/scripts/overlord-mcp.mjs`](core/scripts/overlord-mcp.mjs) becomes the local MCP
128
+ shim for Codex, Cursor, and Antigravity.
129
+ - [`core/scripts/capture-change-hook.sh`](core/scripts/capture-change-hook.sh) becomes
130
+ Claude's and Codex's `scripts/post-tool-use-hook.sh` and Cursor's
131
+ `hooks/overlord-post-tool-use.sh`.
132
+
133
+ Edit the core source; there are no adapter copies. Installed paths and native hook
134
+ registrations remain harness-specific.
130
135
 
131
136
  ### Documentation
132
137
 
@@ -1 +1 @@
1
- 0.3.33
1
+ 0.3.36
@@ -6,7 +6,7 @@
6
6
 
7
7
  **Harness version verified** `docs: Antigravity CLI v1.1.11 / Antigravity 2.0 v2.6.0` · **scheme** `opaque`
8
8
 
9
- **Descriptor digest** `e7313b23f98b6ed15a1a32849291a2a391523d4c06403bf395ecbcadfa3b11ac`
9
+ **Descriptor digest** `c5686f1ab4c02e6bb90adeef83c6acd61703f3238be12618fed1e2b833636b2a`
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
@@ -38,6 +38,18 @@ native id is a binding authority.
38
38
 
39
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.
40
40
 
41
+ ## Mutation-window evidence
42
+
43
+ | Field | Value |
44
+ | --- | --- |
45
+ | Classification | `unsupported` |
46
+ | Executable fixture | `fixtures/mutation-window-evidence.json` |
47
+
48
+ No recorded PostToolUse payload or empirical agy hook execution proves a pair.
49
+
50
+ File attribution may not be synthesized for this adapter. Missing mutation evidence is
51
+ reported as unavailable health, never recovered from a worktree-wide delta.
52
+
41
53
  ## Capabilities
42
54
 
43
55
  | Capability | Status | Native | Evidence |
@@ -65,15 +77,9 @@ The first-party docs define command-hook timeouts (30 seconds by default) and a
65
77
  | Hazard | Severity | Verification | Mitigation | Tracked as |
66
78
  | --- | --- | --- | --- | --- |
67
79
  | `outside-verification-survey` | medium | unverified | 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
80
 
71
81
  **`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.
72
82
 
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.
74
-
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.
76
-
77
83
  ## Native decision shape
78
84
 
79
85
  - **Codec** `antigravity`
@@ -51,7 +51,7 @@ ovld protocol help
51
51
 
52
52
  Inside Antigravity the plugin surfaces as:
53
53
 
54
- - skills → `overlord-mission`, `attach`, `connect`, `load`, `create`, `prompt`, `discuss-objective`, `add-objectives`, `record-work`, `spawn` (each markdown skill also auto-registers as a `/<name>` slash command)
54
+ - skills → `overlord-mission`, `attach`, `connect`, `load`, `create`, `prompt`, `discuss-objective`, `add-objectives`, `record-work` (each markdown skill also auto-registers as a `/<name>` slash command)
55
55
  - MCP server → `overlord`
56
56
 
57
57
  Prompts generated by the runner should reference these names in bundle instruction mode.
@@ -71,10 +71,8 @@ This connector is intentionally reviewable against the four connector layers in
71
71
 
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
- - `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.
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` — one skill per protocol operation; Antigravity auto-registers each as a `/<name>` slash command.
75
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
76
  - `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
77
  - `conformance-manifest.yaml` — connector conformance declaration for the Overlord contract.
80
78
  - `prompt-wrapper.md` — Antigravity launch guidance.
@@ -89,21 +87,11 @@ The shared Connector Core source lives at `connectors/core/overlord-mission`. `o
89
87
 
90
88
  See the [adapter capability matrix](../../README.md#adapter-capability-matrix) for how this compares across adapters.
91
89
 
92
- ### Notes on the Antigravity hook mapping
90
+ ### Native evidence status
93
91
 
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
-
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.
92
+ The descriptor records Antigravity's first-party event schema and keeps decision capabilities
93
+ unimplemented until a real installed `agy` binary can exercise exact decision and timeout
94
+ behavior through the channel-scoped agent-session runtime. No mutation attribution is recorded:
95
+ the adapter has no fixture-proven completion hook.
108
96
 
109
97
  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`.
@@ -1,4 +1,4 @@
1
- contractVersion: "52"
1
+ contractVersion: "117"
2
2
  componentType: connector
3
3
  componentKey: antigravity
4
4
  label: "Antigravity Connector"
@@ -8,17 +8,13 @@ connector:
8
8
  agentIdentifier: antigravity
9
9
  # ── GENERATED: do not edit by hand ───────────────────────────────────────────
10
10
  # Projected from connectors/adapters/antigravity/harness-capabilities.yaml by `yarn connectors:capabilities`.
11
- # `capabilities` and `hookTypes` are the DEPRECATED hook-named projection, retained for
12
- # one release. `harnessCapabilities` is the authoritative source.
11
+ # The harness descriptor and its executable fixtures are the only capability source.
13
12
  integrationShape: callback
14
13
  capabilityTier: 0
15
14
  harnessCapabilities:
16
15
  path: connectors/adapters/antigravity/harness-capabilities.yaml
17
16
  schemaVersion: 1
18
- digest: "e7313b23f98b6ed15a1a32849291a2a391523d4c06403bf395ecbcadfa3b11ac"
19
- capabilities:
20
- - contextFilePrompt
21
- - slashCommands
17
+ digest: "c5686f1ab4c02e6bb90adeef83c6acd61703f3238be12618fed1e2b833636b2a"
22
18
  # ── END GENERATED ────────────────────────────────────────────────────────────
23
19
  installPath: "~/.gemini/antigravity-cli/plugins/overlord"
24
20
  managedFiles:
@@ -38,7 +34,6 @@ connector:
38
34
  - "skills/add-objectives.md"
39
35
  - "skills/load.md"
40
36
  - "skills/record-work.md"
41
- - "skills/spawn.md"
42
37
  - "skills/overlord-mission/SKILL.md"
43
38
  - "skills/overlord-mission/reference/cli.md"
44
39
  - "skills/overlord-mission/reference/record-work.md"
@@ -0,0 +1,15 @@
1
+ {
2
+ "fixtureVersion": 1,
3
+ "kind": "mutation-window",
4
+ "description": "Antigravity has a first-party PreToolUse example but no recorded completion payload or runtime evidence.",
5
+ "classification": "unsupported",
6
+ "reason": "No recorded PostToolUse payload or empirical agy hook execution proves completion-side or paired evidence.",
7
+ "preFixture": "fixtures/official-pre-tool-use.json",
8
+ "proof": {
9
+ "pre": {
10
+ "session": "conversationId",
11
+ "workspace": "workspacePaths.0",
12
+ "tool": "toolCall.name"
13
+ }
14
+ }
15
+ }
@@ -7,7 +7,7 @@
7
7
  # capabilities begin conservatively as `unverified` rather than inherited from a harness that
8
8
  # looks similar. Omitting a shipped connector from the generated matrix would make it less
9
9
  # truthful than the hand-written table it replaces; guessing its capabilities would be worse.
10
- # No UI control may be inferred from the agent name — only from a proven capability.
10
+ # No UI control may be derived from the agent name — only from a proven capability.
11
11
  schemaVersion: 1
12
12
  adapter: antigravity
13
13
  codec: antigravity
@@ -40,6 +40,11 @@ decisionHold:
40
40
  JSON fallback behavior. Keep the remote decision hold unverified until an installed binary
41
41
  exercises those failure paths.
42
42
 
43
+ mutationHooks:
44
+ classification: unsupported
45
+ fixture: fixtures/mutation-window-evidence.json
46
+ reason: No recorded PostToolUse payload or empirical agy hook execution proves a pair.
47
+
43
48
  capabilities:
44
49
  observe.prompt:
45
50
  status: unsupported
@@ -121,27 +126,6 @@ hazards:
121
126
  verification: unverified
122
127
  mitigation: required
123
128
  trackedAs: agent-session-verify-antigravity
124
- - id: pre-tool-use-always-allows
125
- severity: medium
126
- summary: >-
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.
131
- verification: verified
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
144
-
145
129
  decisionShape:
146
130
  codec: antigravity
147
131
  neverSend: [allow_tool, hookSpecificOutput, permissionDecision, permission]
@@ -152,9 +136,3 @@ decisionShape:
152
136
  no failure path may manufacture `decision: allow`.
153
137
 
154
138
  unboundSessionFixture: fixtures/unbound-session.json
155
-
156
- legacy:
157
- capabilities:
158
- - contextFilePrompt
159
- - slashCommands
160
- hookTypes: []
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://antigravity.google/schemas/v1/plugin.json",
3
3
  "name": "overlord",
4
- "version": "0.3.33",
4
+ "version": "0.3.36",
5
5
  "description": "Chat-driven access to Overlord mission protocol workflows through skills and MCP.",
6
6
  "author": {
7
7
  "name": "Cooperativ",
@@ -4,13 +4,13 @@ description: Record completed-from-chat work as a mission in review, with a feed
4
4
 
5
5
  Immediately record the work you just completed in this chat as a new Overlord mission via `ovld protocol record-work`. No agent session is opened — the work is already done.
6
6
 
7
- This creates a mission with one completed objective, records the file changes with rationales, lands it in the review column, and runs the standard Gemini delivery summary.
7
+ This creates a mission with one completed objective, lands it in the review column, and runs the standard Gemini delivery summary.
8
8
 
9
9
  Synthesize from the current conversation:
10
10
  - `objective`: what was asked / what was done (1-3 sentences).
11
11
  - `summary`: reviewer-friendly narrative of what changed and why.
12
- - `changeRationales`: one entry per meaningful git-tracked file change (`file_path`, `label`, `summary`, `why`, `impact`, optional `hunks`). Use `git status` and `git diff` to enumerate changed files. Every listed file shows as "covered" in review.
13
- - `changedFiles` (optional): touched files without a full rationale (`filePath`, optional `vcsStatus`).
12
+ - `changeRationales` (optional): reviewer annotations for changes whose reason is not obvious (`filePath`, `label`, `summary`, `why`, `impact`, optional `hunks`).
13
+ - `changedFiles` (optional, `record-work` only): files known from this completed chat work that have no rationale. Each entry is an object with canonical repository-relative `filePath` and optional `vcsStatus`; never infer ownership from a shared-worktree-wide status or diff.
14
14
  - `title` (optional): mission title; defaults to a title derived from the objective.
15
15
  - `artifacts` (optional): `next_steps`, `test_results`, `decision`, `note`, `url`.
16
16
 
@@ -19,7 +19,7 @@ If a command argument is present, treat it as additional context to weave into t
19
19
  Run:
20
20
  `ovld protocol record-work --agent antigravity --payload-file -`
21
21
 
22
- and stream a JSON object `{ "objective": "...", "summary": "...", "artifacts": [...], "changeRationales": [...] }` on stdin via a single-quoted heredoc (`<<'EOF'`).
22
+ and stream a JSON object `{ "objective": "...", "summary": "...", "artifacts": [...], "changeRationales": [...], "changedFiles": [...] }` on stdin via a single-quoted heredoc (`<<'EOF'`).
23
23
 
24
24
  After the command succeeds, report the new `MISSION_ID`.
25
25
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.33",
3
+ "version": "0.3.36",
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",