overlord-cli 0.2608101034.0 → 0.2608110816.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/connectors/HARNESS-MATRIX.md +16 -17
  2. package/dist/connectors/VERSION +1 -1
  3. package/dist/connectors/adapters/antigravity/CAPABILITIES.md +27 -23
  4. package/dist/connectors/adapters/antigravity/README.md +15 -11
  5. package/dist/connectors/adapters/antigravity/conformance-manifest.yaml +1 -6
  6. package/dist/connectors/adapters/antigravity/fixtures/official-pre-tool-use.json +36 -0
  7. package/dist/connectors/adapters/antigravity/fixtures/unbound-session.json +10 -20
  8. package/dist/connectors/adapters/antigravity/harness-capabilities.yaml +66 -36
  9. package/dist/connectors/adapters/antigravity/hooks.json +1 -30
  10. package/dist/connectors/adapters/antigravity/plugin.json +2 -2
  11. package/dist/connectors/adapters/antigravity/skills/overlord-mission/SKILL.md +2 -2
  12. package/dist/connectors/adapters/claude/.claude-plugin/plugin.json +1 -1
  13. package/dist/connectors/adapters/claude/CAPABILITIES.md +4 -4
  14. package/dist/connectors/adapters/claude/conformance-manifest.yaml +1 -1
  15. package/dist/connectors/adapters/claude/harness-capabilities.yaml +9 -5
  16. package/dist/connectors/adapters/codex/.codex-plugin/plugin.json +1 -1
  17. package/dist/connectors/adapters/codex/CAPABILITIES.md +3 -3
  18. package/dist/connectors/adapters/codex/conformance-manifest.yaml +1 -1
  19. package/dist/connectors/adapters/codex/harness-capabilities.yaml +5 -2
  20. package/dist/connectors/adapters/cursor/.cursor-plugin/plugin.json +1 -1
  21. package/dist/connectors/adapters/cursor/CAPABILITIES.md +8 -9
  22. package/dist/connectors/adapters/cursor/conformance-manifest.yaml +2 -2
  23. package/dist/connectors/adapters/cursor/harness-capabilities.yaml +11 -18
  24. package/dist/connectors/core/scripts/overlord-mcp.mjs +33 -6
  25. package/dist/index.js +97 -52
  26. package/dist/index.js.map +3 -3
  27. package/package.json +1 -1
  28. package/dist/connectors/adapters/antigravity/scripts/pre-invocation-hook.sh +0 -79
  29. package/dist/connectors/adapters/antigravity/scripts/pre-tool-use-hook.sh +0 -25
@@ -14,7 +14,7 @@ decisionCodecSpec: codec/claude.decision-codec.yaml
14
14
 
15
15
  harness:
16
16
  name: Claude Code
17
- verifiedVersion: '2.1.221'
17
+ verifiedVersion: '2.1.227'
18
18
  versionRange: '>=2.1.0'
19
19
  versionScheme: semver
20
20
 
@@ -230,8 +230,10 @@ hazards:
230
230
  summary: >-
231
231
  The adapter registers `Stop` and no subagent-lifecycle event. Claude Code 2.1.221 fires
232
232
  `SubagentStop` — not `Stop` — when a subagent finishes, and subagents now run in the
233
- background past the parent's turn boundary, so the shipped Stop registration is
234
- guaranteed not to run for work a subagent completes after the parent stopped. Nothing is
233
+ background past the parent's turn boundary. Version 2.1.224 also removed the
234
+ 200-subagent-per-session spawn cap, increasing the frequency of this gap,
235
+ so the shipped Stop registration is guaranteed not to run for work a
236
+ subagent completes after the parent stopped. Nothing is
235
237
  lost today because that registration is already inert (see `shipped-stop-hook-inert`),
236
238
  which is exactly why the fix is to repair the Stop path first and only then decide
237
239
  whether the repaired body should also ride `SubagentStop`. Registering the current
@@ -245,8 +247,10 @@ hazards:
245
247
  summary: >-
246
248
  Delivery change attribution is computed from `git status --porcelain` against the attach
247
249
  baseline (cli/src/vcs.ts `readChangedFiles` / `filterRunAttributableChanges`); nothing in
248
- that path consults HEAD or the commit graph. A background subagent that commits, merges,
249
- or opens a PR for its own work therefore removes those files from the worktree delta, and
250
+ that path consults HEAD or the commit graph. Claude Code 2.1.221 made background-session
251
+ commit-and-push behavior an explicit work-preservation default. A
252
+ background subagent that commits, merges, or opens a PR for its own work
253
+ therefore removes those files from the worktree delta, and
250
254
  they vanish from the delivery report entirely — not flagged, not skipped, silently
251
255
  absent. The PostToolUse touched-files log is unaffected (its key is
252
256
  `sha256(abspath(cwd) + "\0" + MISSION_ID)`, so a subagent sharing the cwd writes to the
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.20",
3
+ "version": "0.3.21",
4
4
  "description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -4,9 +4,9 @@
4
4
 
5
5
  **Adapter** `codex` · **Codec** `codex` · **Integration shape** `callback` · **Capability tier** 3 (Conversational)
6
6
 
7
- **Harness version verified** `0.146.0` · **range** `>=0.124.0` · **scheme** `semver`
7
+ **Harness version verified** `0.147.0` · **range** `>=0.124.0` · **scheme** `semver`
8
8
 
9
- **Descriptor digest** `ad12a2a5006966b0d00f074290a6d8d2396c23343305fb8504d6d489313dacc7`
9
+ **Descriptor digest** `4b318751579af39c81ea0c1ea7be718d66cda313622f1c5edb1cff5e3dfe8659`
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,7 +38,7 @@ native id is a binding authority.
38
38
  | Harness ceiling | none documented |
39
39
  | Evidence | fixtures: `fixtures/permission-request.json` |
40
40
 
41
- Per-hook timeouts in seconds; the documentation gives a 600-second default. The adapter must set `timeout` explicitly from the window policy and well below that default.
41
+ Per-hook timeouts in seconds; the documentation gives a 600-second default. The adapter must set `timeout` explicitly from the window policy and well below that default. A local 0.147.0 `codex exec --approve-for-me` smoke test still emitted PermissionRequest after the workspace sandbox failed and automatic review retried the shell command, so auto-review does not bypass the installed request hook.
42
42
 
43
43
  ## Capabilities
44
44
 
@@ -15,7 +15,7 @@ connector:
15
15
  harnessCapabilities:
16
16
  path: connectors/adapters/codex/harness-capabilities.yaml
17
17
  schemaVersion: 1
18
- digest: "ad12a2a5006966b0d00f074290a6d8d2396c23343305fb8504d6d489313dacc7"
18
+ digest: "4b318751579af39c81ea0c1ea7be718d66cda313622f1c5edb1cff5e3dfe8659"
19
19
  capabilities:
20
20
  - followUpHook
21
21
  - permissionHook
@@ -14,7 +14,7 @@ decisionCodecSpec: codec/codex.decision-codec.yaml
14
14
 
15
15
  harness:
16
16
  name: Codex CLI
17
- verifiedVersion: '0.146.0'
17
+ verifiedVersion: '0.147.0'
18
18
  versionRange: '>=0.124.0'
19
19
  versionScheme: semver
20
20
 
@@ -41,7 +41,10 @@ decisionHold:
41
41
  trackedAs: agent-session-phase-4
42
42
  notes: >-
43
43
  Per-hook timeouts in seconds; the documentation gives a 600-second default. The adapter
44
- must set `timeout` explicitly from the window policy and well below that default.
44
+ must set `timeout` explicitly from the window policy and well below that default. A local
45
+ 0.147.0 `codex exec --approve-for-me` smoke test still emitted PermissionRequest after the
46
+ workspace sandbox failed and automatic review retried the shell command, so auto-review does
47
+ not bypass the installed request hook.
45
48
 
46
49
  capabilities:
47
50
  observe.prompt:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.3.20",
3
+ "version": "0.3.21",
4
4
  "description": "Overlord mission protocol workflow for Cursor — attach/update/ask/deliver, slash commands, MCP bridge, and follow-up capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -2,11 +2,11 @@
2
2
 
3
3
  # Cursor Agent CLI — Overlord agent-session capabilities
4
4
 
5
- **Adapter** `cursor` · **Codec** `cursor` · **Integration shape** `callback` · **Capability tier** 0 (Unsupported)
5
+ **Adapter** `cursor` · **Codec** `cursor` · **Integration shape** `callback` · **Capability tier** 3 (Conversational)
6
6
 
7
- **Harness version verified** `2026.07.23-e383d2b` · **range** `>=2026.07.01` · **scheme** `calendar`
7
+ **Harness version verified** `2026.08.04-aaa8809` · **range** `>=2026.07.01` · **scheme** `calendar`
8
8
 
9
- **Descriptor digest** `4f6c4bb7a8c3637a6fc3ddd31e0ea98c8fd354badbb61117c3263561ec17ff74`
9
+ **Descriptor digest** `f5cf848a2f9287bda3ddd2a4158ce8c05ce0fdadde32212c975062edf6f64ce8`
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,14 +17,13 @@
17
17
 
18
18
  | Field | Value |
19
19
  | --- | --- |
20
- | Status | ❓ unverified |
20
+ | Status | ✅ supported |
21
21
  | Source | `payload` |
22
- | Field | `session_id` |
23
- | Fallback field | `conversation_id` |
24
- | Evidence | tracked as `agent-session-verify-cursor-binding` |
22
+ | Field | `conversation_id` |
23
+ | Fallback field | `session_id` |
24
+ | Evidence | fixtures: `fixtures/normalize-before-submit-prompt.json` |
25
25
 
26
- Hook input carries `conversation_id` and an optional `session_id`. Which of the two is stable across a resumed conversation, and whether either appears in the environment of a tool subprocess, were not established. Binding on the wrong one silently misattributes a session, so this must be settled by fixture before the adapter binds on it.
27
- This is now the *only* thing holding Cursor at tier 0. Four `observe.*` capabilities and three `decide.*` capabilities are fixture-proven, and `inject.turnBoundary` with them — enough for tier 3 on every axis the tier derivation reads except this one. Recording a real Cursor hook payload across a resume, and flipping this node, is therefore a single-session piece of work with a three-tier payoff, not an incremental improvement. Note that the shipped prompt hook and `codec/cursor.codec.yaml` both already treat `conversation_id` as the primary identity; if the recorded evidence says `session_id` is the stable one, both must change together or one session splits into two.
26
+ Cursor's current first-party hook reference defines `conversation_id` as stable across many turns. The executable prompt fixture and the shipped prompt/event codecs already use that field as the primary correlation alias, so the descriptor now matches the runtime instead of preferring the optional `session_id`. The verified channel credential remains the authority; neither identifier grants mission scope. A local authenticated resume probe was unavailable, so `session_id` remains a compatibility fallback rather than a competing primary identity.
28
27
 
29
28
  The native session id is a **correlation alias only**. Authorization and mission scope come
30
29
  from the verified channel/session credential; neither the working directory nor an unverified
@@ -11,11 +11,11 @@ connector:
11
11
  # `capabilities` and `hookTypes` are the DEPRECATED hook-named projection, retained for
12
12
  # one release. `harnessCapabilities` is the authoritative source.
13
13
  integrationShape: callback
14
- capabilityTier: 0
14
+ capabilityTier: 3
15
15
  harnessCapabilities:
16
16
  path: connectors/adapters/cursor/harness-capabilities.yaml
17
17
  schemaVersion: 1
18
- digest: "4f6c4bb7a8c3637a6fc3ddd31e0ea98c8fd354badbb61117c3263561ec17ff74"
18
+ digest: "f5cf848a2f9287bda3ddd2a4158ce8c05ce0fdadde32212c975062edf6f64ce8"
19
19
  capabilities:
20
20
  - followUpHook
21
21
  - stopHook
@@ -16,7 +16,7 @@ decisionCodecSpec: codec/cursor.decision-codec.yaml
16
16
 
17
17
  harness:
18
18
  name: Cursor Agent CLI
19
- verifiedVersion: '2026.07.23-e383d2b'
19
+ verifiedVersion: '2026.08.04-aaa8809'
20
20
  versionRange: '>=2026.07.01'
21
21
  versionScheme: calendar
22
22
 
@@ -24,24 +24,17 @@ integrationShape: callback
24
24
 
25
25
  binding:
26
26
  source: payload
27
- field: session_id
28
- fallbackField: conversation_id
29
- status: unverified
30
- trackedAs: agent-session-verify-cursor-binding
27
+ field: conversation_id
28
+ fallbackField: session_id
29
+ status: supported
30
+ fixture: fixtures/normalize-before-submit-prompt.json
31
31
  notes: >-
32
- Hook input carries `conversation_id` and an optional `session_id`. Which of the two is
33
- stable across a resumed conversation, and whether either appears in the environment of a
34
- tool subprocess, were not established. Binding on the wrong one silently misattributes a
35
- session, so this must be settled by fixture before the adapter binds on it.
36
-
37
- This is now the *only* thing holding Cursor at tier 0. Four `observe.*` capabilities and
38
- three `decide.*` capabilities are fixture-proven, and `inject.turnBoundary` with them —
39
- enough for tier 3 on every axis the tier derivation reads except this one. Recording a
40
- real Cursor hook payload across a resume, and flipping this node, is therefore a
41
- single-session piece of work with a three-tier payoff, not an incremental improvement.
42
- Note that the shipped prompt hook and `codec/cursor.codec.yaml` both already treat
43
- `conversation_id` as the primary identity; if the recorded evidence says `session_id` is
44
- the stable one, both must change together or one session splits into two.
32
+ Cursor's current first-party hook reference defines `conversation_id` as stable across many
33
+ turns. The executable prompt fixture and the shipped prompt/event codecs already use that
34
+ field as the primary correlation alias, so the descriptor now matches the runtime instead of
35
+ preferring the optional `session_id`. The verified channel credential remains the authority;
36
+ neither identifier grants mission scope. A local authenticated resume probe was unavailable,
37
+ so `session_id` remains a compatibility fallback rather than a competing primary identity.
45
38
 
46
39
  decisionHold:
47
40
  status: supported
@@ -124,15 +124,30 @@ const tools = [
124
124
  name: 'overlord_create_mission',
125
125
  title: 'Create Overlord mission',
126
126
  description:
127
- 'Create a mission in an explicit project. Hosted MCP never chooses a default project implicitly.',
127
+ 'Create a draft mission in projectId, or an account-owned inbox item when projectId is omitted. This connector never chooses a project implicitly.',
128
128
  inputSchema: objectSchema(
129
129
  {
130
- projectId: stringProperty('Required Overlord project id, slug, or name.'),
130
+ projectId: stringProperty('Optional Overlord project id, slug, or name.'),
131
131
  objective: stringProperty('Initial objective text.'),
132
132
  title: stringProperty('Optional mission title.'),
133
- resourceKey: stringProperty('Optional logical project resource key for the objective.')
133
+ resourceKey: stringProperty('Optional logical project resource key for the objective.'),
134
+ assignedTo: stringProperty(
135
+ 'Optional workspace member to own the mission (workspace_users.id, profile UUID, orgid:username, bare username, or email). Rejected when the member is not in the workspace; meaningless on the inbox fallback.'
136
+ )
137
+ },
138
+ ['objective']
139
+ )
140
+ },
141
+ {
142
+ name: 'overlord_create_inbox_item',
143
+ title: 'Create inbox item',
144
+ description: 'Create a private, account-owned unassigned task capture.',
145
+ inputSchema: objectSchema(
146
+ {
147
+ title: stringProperty('Inbox item title.'),
148
+ objective: stringProperty('The one objective captured in v1.')
134
149
  },
135
- ['projectId', 'objective']
150
+ ['title', 'objective']
136
151
  )
137
152
  },
138
153
  {
@@ -353,14 +368,26 @@ function callOverlordTool(name, args) {
353
368
  }
354
369
  if (name === 'overlord_create_mission') {
355
370
  return runProtocol('create', {
356
- 'project-id': requiredString(args, 'projectId'),
371
+ ...(optionalString(args, 'projectId')
372
+ ? { 'project-id': requiredString(args, 'projectId') }
373
+ : { inbox: true }),
357
374
  objective: requiredString(args, 'objective'),
358
375
  ...(optionalString(args, 'title') ? { title: requiredString(args, 'title') } : {}),
359
376
  ...(optionalString(args, 'resourceKey')
360
377
  ? { resource: requiredString(args, 'resourceKey') }
378
+ : {}),
379
+ ...(optionalString(args, 'assignedTo')
380
+ ? { 'assigned-to': requiredString(args, 'assignedTo') }
361
381
  : {})
362
382
  });
363
383
  }
384
+ if (name === 'overlord_create_inbox_item') {
385
+ return runProtocol('create', {
386
+ inbox: true,
387
+ title: requiredString(args, 'title'),
388
+ objective: requiredString(args, 'objective')
389
+ });
390
+ }
364
391
  if (name === 'overlord_load_mission_context') {
365
392
  return runProtocol('load-context', {
366
393
  'mission-id': requiredString(args, 'missionId'),
@@ -513,7 +540,7 @@ process.stdin.on('data', async chunk => {
513
540
  result: {
514
541
  protocolVersion: PROTOCOL_VERSION,
515
542
  capabilities: { tools: { listChanged: false } },
516
- serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.20' }
543
+ serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.21' }
517
544
  }
518
545
  });
519
546
  continue;