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.
- 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/scripts/overlord-mcp.mjs +33 -6
- package/dist/index.js +97 -52
- 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,7 +14,7 @@ decisionCodecSpec: codec/claude.decision-codec.yaml
|
|
|
14
14
|
|
|
15
15
|
harness:
|
|
16
16
|
name: Claude Code
|
|
17
|
-
verifiedVersion: '2.1.
|
|
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
|
|
234
|
-
|
|
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.
|
|
249
|
-
|
|
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
|
|
@@ -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.
|
|
7
|
+
**Harness version verified** `0.147.0` · **range** `>=0.124.0` · **scheme** `semver`
|
|
8
8
|
|
|
9
|
-
**Descriptor digest** `
|
|
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: "
|
|
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.
|
|
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:
|
|
@@ -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**
|
|
5
|
+
**Adapter** `cursor` · **Codec** `cursor` · **Integration shape** `callback` · **Capability tier** 3 (Conversational)
|
|
6
6
|
|
|
7
|
-
**Harness version verified** `2026.
|
|
7
|
+
**Harness version verified** `2026.08.04-aaa8809` · **range** `>=2026.07.01` · **scheme** `calendar`
|
|
8
8
|
|
|
9
|
-
**Descriptor digest** `
|
|
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 |
|
|
20
|
+
| Status | ✅ supported |
|
|
21
21
|
| Source | `payload` |
|
|
22
|
-
| Field | `
|
|
23
|
-
| Fallback field | `
|
|
24
|
-
| Evidence |
|
|
22
|
+
| Field | `conversation_id` |
|
|
23
|
+
| Fallback field | `session_id` |
|
|
24
|
+
| Evidence | fixtures: `fixtures/normalize-before-submit-prompt.json` |
|
|
25
25
|
|
|
26
|
-
|
|
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:
|
|
14
|
+
capabilityTier: 3
|
|
15
15
|
harnessCapabilities:
|
|
16
16
|
path: connectors/adapters/cursor/harness-capabilities.yaml
|
|
17
17
|
schemaVersion: 1
|
|
18
|
-
digest: "
|
|
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.
|
|
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:
|
|
28
|
-
fallbackField:
|
|
29
|
-
status:
|
|
30
|
-
|
|
27
|
+
field: conversation_id
|
|
28
|
+
fallbackField: session_id
|
|
29
|
+
status: supported
|
|
30
|
+
fixture: fixtures/normalize-before-submit-prompt.json
|
|
31
31
|
notes: >-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
|
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('
|
|
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
|
-
['
|
|
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
|
-
|
|
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.
|
|
543
|
+
serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.21' }
|
|
517
544
|
}
|
|
518
545
|
});
|
|
519
546
|
continue;
|