overlord-cli 0.2608311101.0 → 0.2609011854.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.
@@ -162,12 +162,23 @@ emits back to the harness.
162
162
 
163
163
  ### Where the session channel comes from
164
164
 
165
+ **As of the Latch v2 cutover, this creation path is not currently wired into either launch
166
+ surface.** `createSessionChannel` (`packages/core/service/agent-session/channels.ts`) has no
167
+ production callers today: `POST /api/missions/:id/session-channel` is a permanent stub that
168
+ throws `410 session_controls_gone` for every caller (`backend/agent-session-routes.ts`,
169
+ `prepareMissionSessionChannel`), and neither `ovld launch`'s call site nor the runner-dispatched
170
+ launch call site passes a `sessionChannelId`/`sessionChannelToken` into `launchAgent`. In
171
+ practice, a launched agent's environment does not carry `OVERLORD_SESSION_CHANNEL_ID` today, so
172
+ `connectors/core/scripts/agent-session-hook.sh` exits before spawning `ovld` on every
173
+ invocation. Treat the table below as the intended design this module retains, not live
174
+ behavior — do not build against it assuming a channel exists at launch.
175
+
165
176
  The credential your adapter's CLI call presents is not something the adapter finds or derives:
166
177
 
167
178
  | Launch | Channel created at | Credential reaches the process via |
168
179
  | ---------------------- | ---------------------------------------- | --------------------------------------------------- |
169
- | Queued (runner) | the `launching` transition | owner-only local cache, keyed by channel id |
170
- | Manual (`ovld launch`) | `POST /api/missions/:id/session-channel` | owner-only local cache, keyed by channel id |
180
+ | Queued (runner) | the `launching` transition (not wired) | owner-only local cache, keyed by channel id |
181
+ | Manual (`ovld launch`) | `POST /api/missions/:id/session-channel` (retired; returns 410) | owner-only local cache, keyed by channel id |
171
182
  | Virtual gateway | the same preparation service | `OVERLORD_SESSION_CHANNEL_TOKEN` in the environment |
172
183
 
173
184
  Only `OVERLORD_SESSION_CHANNEL_ID` is exported into the launch environment and the terminal
@@ -86,10 +86,10 @@ contributor adding an adapter can tell signal from neglect. Source of truth for
86
86
 
87
87
  | Adapter | Commands | Hooks | Local MCP shim | MCP config | Rules | Native resume |
88
88
  | ------------- | ------------- | ----------------------------------------------------- | -------------- | ----------------- | -------- | ------------- |
89
- | `claude` | `commands/` | `hooks/hooks.json` (5 types) | — | — | — | — |
89
+ | `claude` | `commands/` | `hooks/hooks.json` (3 types) | — | — | — | — |
90
90
  | `codex` | — | `.codex-plugin/hooks.json` + `scripts/*.sh` (2 types) | rendered | `.mcp.json` | — | yes |
91
91
  | `cursor` | `commands/` | `hooks/*.sh` (4 types) | rendered | `mcp.json` | `rules/` | — |
92
- | `antigravity` | `skills/*.md` | `hooks.json` + `scripts/*.sh` (2 types) | rendered | `mcp_config.json` | — | — |
92
+ | `antigravity` | `skills/*.md` | `hooks.json` (0 types — none shipped yet) | rendered | `mcp_config.json` | — | — |
93
93
  | `pi` | — | `extensions/overlord.ts` (input/tool/session events) | — | — | — | yes |
94
94
  | `opencode` | — | none — control plane, see below | — | — | — | — |
95
95
 
@@ -103,6 +103,11 @@ Intentional omissions:
103
103
  yet start it automatically. A supervised execution target must supply that launch integration.
104
104
  - **`claude` ships no local MCP shim.** The Claude plugin reaches Overlord's hosted
105
105
  MCP server, so a local stdio bridge would duplicate it.
106
+ - **`claude` ships a 4th hook script, `scripts/permission-hook.sh`, that is not registered in
107
+ `hooks/hooks.json`.** It is a declared hazard (`shipped-permission-hook-inert` in
108
+ `connectors/adapters/claude/CAPABILITIES.md`), not live behavior: it calls a
109
+ `ovld protocol permission-request` subcommand that does not exist and is structurally
110
+ incapable of returning a decision even once wired in.
106
111
  - **`pi` ships no shim, hooks directory, or commands.** PI integrates through one TypeScript
107
112
  extension. It has no native permission dialog; its optional `tool_call` decision interceptor
108
113
  is fail-open and requires explicit workspace and project opt-in.
@@ -1 +1 @@
1
- 0.3.40
1
+ 0.3.41
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://antigravity.google/schemas/v1/plugin.json",
3
3
  "name": "overlord",
4
- "version": "0.3.40",
4
+ "version": "0.3.41",
5
5
  "description": "Chat-driven access to Overlord mission protocol workflows through skills and MCP.",
6
6
  "author": {
7
7
  "name": "Cooperativ",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.40",
3
+ "version": "0.3.41",
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",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.40",
3
+ "version": "0.3.41",
4
4
  "description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.40",
3
+ "version": "0.3.41",
4
4
  "description": "Overlord mission protocol workflow for Cursor — attach/update/ask/deliver, slash commands, MCP bridge, and follow-up capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -21,7 +21,7 @@ Use this mode when the prompt already contains a mission ID or explicitly says t
21
21
  2. The attach response prints JSON to stdout containing `session.sessionKey`. The CLI also persists this key automatically so subsequent `ovld protocol` commands in the same working directory resolve it without `--session-key`. If auto-resolution fails, pass `--session-key <sessionKey>` explicitly on every subsequent call.
22
22
  3. Treat the Overlord mission prompt as authoritative for the objective, constraints, and delivery target. Begin executing the current objective immediately after attach; do not wait for more instructions or ask for confirmation. This differs from `connect` or `load-context`, which only retrieve mission context and never imply the agent should act.
23
23
  4. Post updates while working: `ovld protocol update --session-key <sessionKey> --mission-id <mission_id> --summary "..." --phase execute`.
24
- During long mechanical stretches with nothing meaningful to post, send `ovld protocol heartbeat --session-key <sessionKey> --mission-id <mission_id> [--phase execute] [--percent <0-100>] [--note "..."]` instead of an empty update.
24
+ During long mechanical stretches with nothing meaningful to post, send `ovld protocol heartbeat --session-key <sessionKey> --mission-id <mission_id> [--phase execute] [--note "..."]` instead of an empty update.
25
25
  5. Follow-up messages after the initial mission are captured automatically by the installed `UserPromptSubmit` hook and stay in discussion intent while the mission is in review. Do not post `user_follow_up` manually unless the hook is unavailable.
26
26
  6. If blocked, call `ovld protocol ask --session-key <sessionKey> --mission-id <mission_id> --question "..."` and stop.
27
27
  7. Deliver last with `ovld protocol deliver --session-key <sessionKey> --mission-id <mission_id> --summary "..."`. Normal delivery is summary-only; objective-ledger evidence syncs independently.
@@ -116,7 +116,7 @@ ovld protocol update --session-key <sessionKey> --mission-id $MISSION_ID --summa
116
116
  ### Heartbeat
117
117
 
118
118
  ```bash
119
- ovld protocol heartbeat --session-key <sessionKey> --mission-id $MISSION_ID --phase execute --percent 40 --note "Running the integration suite"
119
+ ovld protocol heartbeat --session-key <sessionKey> --mission-id $MISSION_ID --phase execute --note "Running the integration suite"
120
120
  ```
121
121
 
122
122
  Use `heartbeat` for liveness pings and transient UI telemetry when you have no meaningful narrative summary to post. It updates the attached session without creating a mission event.
@@ -293,7 +293,7 @@ ovld protocol create --agent <agent-identifier> --objectives-json '[{"objective"
293
293
  ```
294
294
 
295
295
  ```bash
296
- ovld protocol prompt --agent <agent-identifier> --objectives-json '[{"objective":"Implement feature X"}]' --priority medium
296
+ ovld protocol prompt --agent <agent-identifier> --objectives-json '[{"objective":"Implement feature X"}]'
297
297
  ```
298
298
 
299
299
  ```bash
@@ -304,17 +304,6 @@ ovld protocol add-objectives --mission-id 1:899 --objectives-json '[{"objective"
304
304
  ovld protocol update-objective --objective-id <objective-uuid> --auto-advance
305
305
  ```
306
306
 
307
- #### Local Durability For New Missions
308
-
309
- `create`, `prompt`, `add-objectives`, and `record-work` save the objective/mission text to a local draft (`~/.overlord/pending-missions/`) **before** sending it, and delete that draft only once the server confirms the write. If the network drops mid-call, your text is never lost — the failure message points at the saved file. Manage outstanding drafts with `pending-missions`:
310
-
311
- ```bash
312
- ovld protocol pending-missions # list drafts the server never confirmed
313
- ovld protocol pending-missions --retry <id> # re-send a saved draft; clears it on success
314
- ovld protocol pending-missions --clear <id> # delete one draft after confirming it landed
315
- ovld protocol pending-missions --clear-all # delete every draft
316
- ```
317
-
318
307
  To inspect project resolution explicitly:
319
308
 
320
309
  ```bash
@@ -343,11 +332,17 @@ ovld protocol create-project --name "Acme Web" --directory /path/to/repo
343
332
  ovld protocol create-project --name "Acme Web" --no-directory
344
333
  ```
345
334
 
346
- `ovld create-project` is a friendly top-level alias for `ovld protocol create-project`.
347
- When a directory is registered the command also writes `.overlord/project.json` so
348
- future cwd-based resolution finds the project. Pass `--organization-id <id>` to create
349
- in a specific organization (defaults to your membership); `--color <#rrggbb>` sets the
350
- project color.
335
+ `ovld create-project --name "<name>"` is the top-level convenience command; it accepts
336
+ only `--name`, `--directory`/`--no-directory`, and `--json`, and always creates the
337
+ project in your resolved workspace. When a directory is registered it also writes
338
+ `.overlord/project.json` so future cwd-based resolution finds the project.
339
+
340
+ `ovld protocol create-project --name "<name>"` is the parentless Protocol surface;
341
+ unlike the top-level command it does not link a local directory. Pass
342
+ `--workspace-id <id|slug|name>` to choose a workspace when you belong to more than one
343
+ (omitting it returns `workspace_selection_required` with your choices); optional
344
+ `--description <text>` and `--slug <text>` are also accepted. There is no `--color`
345
+ flag on either surface.
351
346
 
352
347
  #### Resolving the project ID when you don't have one
353
348
 
@@ -41,7 +41,7 @@ ovld protocol update --session-key <sessionKey> --mission-id $MISSION_ID --summa
41
41
  ## Heartbeat
42
42
 
43
43
  ```bash
44
- ovld protocol heartbeat --session-key <sessionKey> --mission-id $MISSION_ID --phase execute --percent 40 --note "Running the integration suite"
44
+ ovld protocol heartbeat --session-key <sessionKey> --mission-id $MISSION_ID --phase execute --note "Running the integration suite"
45
45
  ```
46
46
 
47
47
  Use `heartbeat` for liveness pings and transient UI telemetry when you have no meaningful narrative summary to post. It updates the attached session without creating a mission event.
@@ -189,7 +189,7 @@ ovld protocol create --agent <agent-identifier> --objectives-json '[{"objective"
189
189
  ```
190
190
 
191
191
  ```bash
192
- ovld protocol prompt --agent <agent-identifier> --objectives-json '[{"objective":"Implement feature X"}]' --priority medium
192
+ ovld protocol prompt --agent <agent-identifier> --objectives-json '[{"objective":"Implement feature X"}]'
193
193
  ```
194
194
 
195
195
  ```bash
@@ -223,17 +223,6 @@ EOF
223
223
  The full submission format, including the `record-work`-only `changedFiles` field and MCP
224
224
  equivalent, is in [record-work.md](record-work.md).
225
225
 
226
- ### Local Durability For New Missions
227
-
228
- `create`, `prompt`, `add-objectives`, and `record-work` save the objective/mission text to a local draft (`~/.overlord/pending-missions/`) **before** sending it, and delete that draft only once the server confirms the write. If the network drops mid-call, your text is never lost — the failure message points at the saved file. Manage outstanding drafts with `pending-missions`:
229
-
230
- ```bash
231
- ovld protocol pending-missions # list drafts the server never confirmed
232
- ovld protocol pending-missions --retry <id> # re-send a saved draft; clears it on success
233
- ovld protocol pending-missions --clear <id> # delete one draft after confirming it landed
234
- ovld protocol pending-missions --clear-all # delete every draft
235
- ```
236
-
237
226
  To inspect project resolution explicitly:
238
227
 
239
228
  ```bash
@@ -262,11 +251,17 @@ ovld protocol create-project --name "Acme Web" --directory /path/to/repo
262
251
  ovld protocol create-project --name "Acme Web" --no-directory
263
252
  ```
264
253
 
265
- `ovld create-project` is a friendly top-level alias for `ovld protocol create-project`.
266
- When a directory is registered the command also writes `.overlord/project.json` so
267
- future cwd-based resolution finds the project. Pass `--organization-id <id>` to create
268
- in a specific organization (defaults to your membership); `--color <#rrggbb>` sets the
269
- project color.
254
+ `ovld create-project --name "<name>"` is the top-level convenience command; it accepts
255
+ only `--name`, `--directory`/`--no-directory`, and `--json`, and always creates the
256
+ project in your resolved workspace. When a directory is registered it also writes
257
+ `.overlord/project.json` so future cwd-based resolution finds the project.
258
+
259
+ `ovld protocol create-project --name "<name>"` is the parentless Protocol surface;
260
+ unlike the top-level command it does not link a local directory. Pass
261
+ `--workspace-id <id|slug|name>` to choose a workspace when you belong to more than one
262
+ (omitting it returns `workspace_selection_required` with your choices); optional
263
+ `--description <text>` and `--slug <text>` are also accepted. There is no `--color`
264
+ flag on either surface.
270
265
 
271
266
  ### Resolving the project ID when you don't have one
272
267
 
@@ -1175,7 +1175,7 @@ process.stdin.on('data', async chunk => {
1175
1175
  result: {
1176
1176
  protocolVersion: PROTOCOL_VERSION,
1177
1177
  capabilities: { tools: { listChanged: false } },
1178
- serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.40' }
1178
+ serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.41' }
1179
1179
  }
1180
1180
  });
1181
1181
  continue;
@@ -236,6 +236,14 @@ Requirements:
236
236
  - Degrades gracefully without a web app open: the harness's own fallback
237
237
  decision (allow/deny/ask) applies when no one answers in time.
238
238
 
239
+ As of the Latch v2 cutover, no shipped launch path currently supplies the session-channel
240
+ credential this mechanism depends on (`createSessionChannel` has no production callers), so
241
+ "blocks the harness's tool call until answered" does not happen end-to-end for any existing
242
+ adapter today — do not assume a new connector can exercise this path against a real Overlord
243
+ deployment without first restoring that wiring. The one decision kind that is still remotely
244
+ answerable — a blocking **question** — goes through the mission protocol's `ask`/resolve flow
245
+ and a live Latch terminal session, not through this session-channel mechanism.
246
+
239
247
  ### Stop Hook
240
248
 
241
249
  Future requirement:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord-cli",
3
- "version": "0.2608311101.0",
3
+ "version": "0.2609011854.0",
4
4
  "description": "Overlord CLI — management, agent protocol, and runner for OpenOverlord",
5
5
  "type": "module",
6
6
  "engines": {