overlord-cli 0.2608121927.0 → 0.2608132027.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/AGENTS.md +6 -0
- package/dist/connectors/HARNESS-MATRIX.md +17 -15
- package/dist/connectors/VERSION +1 -1
- package/dist/connectors/adapters/antigravity/plugin.json +1 -1
- package/dist/connectors/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/claude/CAPABILITIES.md +18 -17
- package/dist/connectors/adapters/claude/README.md +4 -4
- package/dist/connectors/adapters/claude/conformance-manifest.yaml +2 -5
- package/dist/connectors/adapters/claude/fixtures/post-tool-use-parity.json +7 -3
- package/dist/connectors/adapters/claude/harness-capabilities.yaml +32 -40
- package/dist/connectors/adapters/claude/hooks/hooks.json +0 -69
- package/dist/connectors/adapters/codex/.codex-plugin/hooks.json +0 -65
- package/dist/connectors/adapters/codex/.codex-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/codex/CAPABILITIES.md +14 -15
- package/dist/connectors/adapters/codex/README.md +3 -5
- package/dist/connectors/adapters/codex/conformance-manifest.yaml +2 -5
- package/dist/connectors/adapters/codex/fixtures/agent-session-hooks.json +7 -7
- package/dist/connectors/adapters/codex/harness-capabilities.yaml +22 -34
- package/dist/connectors/adapters/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/cursor/CAPABILITIES.md +9 -9
- package/dist/connectors/adapters/cursor/README.md +2 -7
- package/dist/connectors/adapters/cursor/conformance-manifest.yaml +2 -4
- package/dist/connectors/adapters/cursor/fixtures/fail-closed-unset.json +1 -1
- package/dist/connectors/adapters/cursor/fixtures/stop-calls-inbox.json +3 -6
- package/dist/connectors/adapters/cursor/harness-capabilities.yaml +12 -15
- package/dist/connectors/adapters/cursor/hooks/overlord-stop.sh +0 -11
- package/dist/connectors/adapters/pi/CAPABILITIES.md +20 -20
- package/dist/connectors/adapters/pi/conformance-manifest.yaml +2 -2
- package/dist/connectors/adapters/pi/extensions/overlord.ts +1 -184
- package/dist/connectors/adapters/pi/fixtures/agent-session-runtime.json +12 -12
- package/dist/connectors/adapters/pi/fixtures/inject-send-user-message.json +2 -8
- package/dist/connectors/adapters/pi/harness-capabilities.yaml +31 -37
- package/dist/connectors/core/overlord-mission/SKILL.md +11 -5
- package/dist/connectors/core/overlord-mission/reference/cli.md +11 -5
- package/dist/connectors/core/overlord-mission/reference/mcp.md +1 -0
- package/dist/connectors/core/scripts/overlord-mcp.mjs +39 -4
- package/dist/index.js +1180 -606
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
|
@@ -80,6 +80,12 @@ stale. `yarn connectors:check` runs it alongside the connector version check.
|
|
|
80
80
|
|
|
81
81
|
### The rendered agent-session hook
|
|
82
82
|
|
|
83
|
+
Mechanical observe / decide / inject is **not a live Overlord connector path**. Latch owns
|
|
84
|
+
turns, tools, `awaiting_input`, and PTY answers via `latch events` and `latch send`. New
|
|
85
|
+
adapters must not register `ovld agent-session` hooks. Channel 1 stays on `ovld protocol`
|
|
86
|
+
(follow-up capture, touched-file attribution, Stop delivery reminder). The rest of this
|
|
87
|
+
section documents leftover CLI runtime and historical fixtures.
|
|
88
|
+
|
|
83
89
|
Do not write a per-adapter shell script for agent-session traffic. One core script,
|
|
84
90
|
`connectors/core/scripts/agent-session-hook.sh`, is rendered per adapter at `ovld agent-setup`
|
|
85
91
|
time — declare the managed file as `scripts/agent-session-<action>.sh` in the manifest, and the
|
|
@@ -15,30 +15,30 @@ Legend: ✅ supported (fixture-proven) · ⛔ unsupported (harness cannot) ·
|
|
|
15
15
|
| Adapter | Harness | Verified version | Shape | Tier | Binding | Decision hold |
|
|
16
16
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
17
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` |
|
|
19
|
-
| [`codex`](adapters/codex/CAPABILITIES.md) | Codex CLI | `0.147.0` | `callback` |
|
|
20
|
-
| [`cursor`](adapters/cursor/CAPABILITIES.md) | Cursor Agent CLI | `2026.08.04-aaa8809` | `callback` |
|
|
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
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` |
|
|
22
|
+
| [`pi`](adapters/pi/CAPABILITIES.md) | Pi Coding Agent | `0.83.0` | `extension` | 1 (Observational) | ✅ supported | 🚧 not-implemented |
|
|
23
23
|
|
|
24
24
|
## Capabilities
|
|
25
25
|
|
|
26
26
|
| Capability | `antigravity` | `claude` | `codex` | `cursor` | `opencode` | `pi` |
|
|
27
27
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
28
28
|
| `observe.prompt` | ⛔ unsupported | ✅ supported | ✅ supported | ✅ supported | 🚧 not-implemented | ✅ supported |
|
|
29
|
-
| `observe.toolCall` | 🚧 not-implemented | 🚧 not-implemented |
|
|
30
|
-
| `observe.toolResult` | 🚧 not-implemented |
|
|
31
|
-
| `observe.fileEdit` | 🚧 not-implemented | ✅ supported |
|
|
32
|
-
| `observe.sessionLifecycle` | 🚧 not-implemented |
|
|
33
|
-
| `decide.shell` | 🚧 not-implemented |
|
|
34
|
-
| `decide.mcp` | ❓ unverified |
|
|
35
|
-
| `decide.fileWrite` | 🚧 not-implemented |
|
|
36
|
-
| `decide.anyTool` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented |
|
|
37
|
-
| `decide.universal` | ❓ unverified |
|
|
29
|
+
| `observe.toolCall` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented |
|
|
30
|
+
| `observe.toolResult` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented |
|
|
31
|
+
| `observe.fileEdit` | 🚧 not-implemented | ✅ supported | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented |
|
|
32
|
+
| `observe.sessionLifecycle` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | 🚧 not-implemented |
|
|
33
|
+
| `decide.shell` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | 🚧 not-implemented |
|
|
34
|
+
| `decide.mcp` | ❓ unverified | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | 🚧 not-implemented |
|
|
35
|
+
| `decide.fileWrite` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented |
|
|
36
|
+
| `decide.anyTool` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | 🚧 not-implemented |
|
|
37
|
+
| `decide.universal` | ❓ unverified | 🚧 not-implemented | 🚧 not-implemented | ⛔ unsupported | 🚧 not-implemented | 🚧 not-implemented |
|
|
38
38
|
| `answer.structuredQuestion` | ❓ unverified | ❓ unverified | ❓ unverified | ⛔ unsupported | 🚧 not-implemented | 🚧 not-implemented |
|
|
39
39
|
| `answer.persistentAllow` | 🚧 not-implemented | 🚧 not-implemented | ❓ unverified | ⛔ unsupported | 🚧 not-implemented | ⛔ unsupported |
|
|
40
|
-
| `inject.midTurn` | ⛔ unsupported |
|
|
41
|
-
| `inject.turnBoundary` | 🚧 not-implemented |
|
|
40
|
+
| `inject.midTurn` | ⛔ unsupported | 🚧 not-implemented | ❓ unverified | ⛔ unsupported | ✅ supported | 🚧 not-implemented |
|
|
41
|
+
| `inject.turnBoundary` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented |
|
|
42
42
|
| `inject.nextTurn` | 🚧 not-implemented | 🚧 not-implemented | 🚧 not-implemented | ✅ supported | ✅ supported | 🚧 not-implemented |
|
|
43
43
|
| `terminal.concurrentAnswer` | ❓ unverified | ⛔ unsupported | ⛔ unsupported | ⛔ unsupported | ✅ supported | ⛔ unsupported |
|
|
44
44
|
| `terminal.statusSurface` | ❓ unverified | 🚧 not-implemented | ❓ unverified | ❓ unverified | 🚧 not-implemented | 🚧 not-implemented |
|
|
@@ -58,6 +58,8 @@ Legend: ✅ supported (fixture-proven) · ⛔ unsupported (harness cannot) ·
|
|
|
58
58
|
| `cursor` | `reads-claude-hook-config` | high | unverified | required | `taxonomy-7.1` |
|
|
59
59
|
| `cursor` | `allowlist-precedence` | medium | unverified | required | `taxonomy-7.8` |
|
|
60
60
|
| `opencode` | `harness-version-unverified` | medium | unverified | required | `agent-session-verify-opencode-frames` |
|
|
61
|
+
| `pi` | `no-native-floor-fails-open` | high | verified | accepted | — |
|
|
62
|
+
| `pi` | `block-is-visible-to-the-model` | medium | verified | accepted | — |
|
|
61
63
|
| `pi` | `typed-api-version-coupling` | medium | unverified | required | `taxonomy-7.10` |
|
|
62
64
|
|
|
63
65
|
## Reading this table
|
package/dist/connectors/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.3.
|
|
1
|
+
0.3.25
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://antigravity.google/schemas/v1/plugin.json",
|
|
3
3
|
"name": "overlord",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.25",
|
|
5
5
|
"description": "Chat-driven access to Overlord mission protocol workflows through skills and MCP.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Cooperativ",
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
# Claude Code — Overlord agent-session capabilities
|
|
4
4
|
|
|
5
|
-
**Adapter** `claude` · **Codec** `claude` · **Integration shape** `callback` · **Capability tier**
|
|
5
|
+
**Adapter** `claude` · **Codec** `claude` · **Integration shape** `callback` · **Capability tier** 1 (Observational)
|
|
6
6
|
|
|
7
7
|
**Harness version verified** `2.1.227` · **range** `>=2.1.0` · **scheme** `semver`
|
|
8
8
|
|
|
9
|
-
**Descriptor digest** `
|
|
9
|
+
**Descriptor digest** `833a35cecb73aa9b34b40036eb6d3088dd729ca6be465d1ee228dae2c5a8269d`
|
|
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
|
|
@@ -45,33 +45,34 @@ Per-command `timeout` in seconds with no documented ceiling. Omitting `decision`
|
|
|
45
45
|
| --- | --- | --- | --- |
|
|
46
46
|
| `observe.prompt` | ✅ supported | `UserPromptSubmit` | fixtures: `fixtures/normalize-user-prompt-submit.json` |
|
|
47
47
|
| `observe.toolCall` | 🚧 not-implemented | `PreToolUse` | tracked as `agent-session-phase-2` |
|
|
48
|
-
| `observe.toolResult` |
|
|
48
|
+
| `observe.toolResult` | 🚧 not-implemented | `PostToolUse` | tracked as `latch-engine` |
|
|
49
49
|
| `observe.fileEdit` | ✅ supported | `PostToolUse` | fixtures: `fixtures/normalize-post-tool-use-write.json`, `fixtures/post-tool-use-parity.json` |
|
|
50
|
-
| `observe.sessionLifecycle` |
|
|
51
|
-
| `decide.shell` |
|
|
52
|
-
| `decide.mcp` |
|
|
53
|
-
| `decide.fileWrite` |
|
|
54
|
-
| `decide.anyTool` | 🚧 not-implemented | `PreToolUse` | tracked as `
|
|
55
|
-
| `decide.universal` |
|
|
50
|
+
| `observe.sessionLifecycle` | 🚧 not-implemented | `SessionStart` | tracked as `latch-engine` |
|
|
51
|
+
| `decide.shell` | 🚧 not-implemented | `PermissionRequest` | tracked as `latch-engine` |
|
|
52
|
+
| `decide.mcp` | 🚧 not-implemented | `PermissionRequest` | tracked as `latch-engine` |
|
|
53
|
+
| `decide.fileWrite` | 🚧 not-implemented | `PermissionRequest` | tracked as `latch-engine` |
|
|
54
|
+
| `decide.anyTool` | 🚧 not-implemented | `PreToolUse` | tracked as `latch-engine` |
|
|
55
|
+
| `decide.universal` | 🚧 not-implemented | `PermissionRequest` | tracked as `latch-engine` |
|
|
56
56
|
| `answer.structuredQuestion` | ❓ unverified | `Elicitation` | tracked as `agent-session-verify-claude-elicitation` |
|
|
57
57
|
| `answer.persistentAllow` | 🚧 not-implemented | `PermissionRequest.decision.updatedPermissions` | tracked as `agent-session-standing-permissions` |
|
|
58
|
-
| `inject.midTurn` |
|
|
59
|
-
| `inject.turnBoundary` |
|
|
58
|
+
| `inject.midTurn` | 🚧 not-implemented | `asyncRewake` | tracked as `latch-engine` |
|
|
59
|
+
| `inject.turnBoundary` | 🚧 not-implemented | `Stop` | tracked as `latch-engine` |
|
|
60
60
|
| `inject.nextTurn` | 🚧 not-implemented | `Stop` | tracked as `agent-session-phase-4` |
|
|
61
61
|
| `terminal.concurrentAnswer` | ⛔ unsupported | — | The native permission prompt is drawn only after the hook returns, so nobody can answer in the terminal while Overlord holds the decision. Holding is simultaneously the only way to answer remotely and the reason the terminal cannot participate. (evidence: `connector-harness-taxonomy.md#12-the-axis-that-actually-matters`) |
|
|
62
62
|
| `terminal.statusSurface` | 🚧 not-implemented | `statusMessage` | tracked as `agent-session-phase-2` |
|
|
63
63
|
|
|
64
64
|
### Capability notes
|
|
65
65
|
|
|
66
|
-
- **`observe.prompt`** — Two registrations
|
|
66
|
+
- **`observe.prompt`** — Two registrations used to ride UserPromptSubmit. Mechanical agent-session observation moved to Latch `events`. This capability grades the protocol follow-up hook that posts `user_follow_up` mission events; that Channel 1 path stays installed.
|
|
67
67
|
- **`observe.toolCall`** — Deliberately unregistered in Phase 1. PreToolUse is decision-capable: registering it for observation alone would put a script in front of every tool call for no benefit a PostToolUse registration does not already provide, while inheriting the blast radius of the decision path. It lands with the codecs that can actually use it.
|
|
68
|
-
- **`observe.
|
|
69
|
-
- **`observe.
|
|
70
|
-
- **`
|
|
68
|
+
- **`observe.toolResult`** — Mechanical tool-result observation moved to Latch `events`. The protocol PostToolUse hook still records touched files for delivery attribution.
|
|
69
|
+
- **`observe.fileEdit`** — The shipped PostToolUse hook that records touched files into the per-session log used by `deliver` for change attribution remains registered. Mechanical agent-session observation is no longer a live Overlord path.
|
|
70
|
+
- **`observe.sessionLifecycle`** — SessionStart observation moved to Latch `events`. There is no matching Overlord registration.
|
|
71
|
+
- **`decide.universal`** — Remote permission decisions moved to Latch `awaiting_input` / `latch send --resolve`. The native Claude prompt owns approvals when Latch is absent.
|
|
71
72
|
- **`answer.structuredQuestion`** — Elicitation/ElicitationResult hook events exist in the binary but their request and response shapes were not read. Write the fixture before relying on them.
|
|
72
73
|
- **`answer.persistentAllow`** — Structurally available, deliberately unbuilt. A standing permission grant needs its own design, confirmation, audit language, and RBAC review before any remote surface offers it.
|
|
73
|
-
- **`inject.midTurn`** —
|
|
74
|
-
- **`inject.turnBoundary`** —
|
|
74
|
+
- **`inject.midTurn`** — Session-input injection moved off Overlord connectors. Latch PTY write is Phase 3.
|
|
75
|
+
- **`inject.turnBoundary`** — Turn-boundary injection moved off Overlord connectors. The protocol Stop hook still reminds the agent to deliver when needed.
|
|
75
76
|
- **`inject.nextTurn`** — No distinct next-turn-only path yet; turn-boundary Stop covers the portable fallback.
|
|
76
77
|
- **`terminal.statusSurface`** — `statusMessage` is static install-time configuration with no per-request interpolation and no session-binding predicate, so it renders in unbound sessions too. It must be worded as an option, never as an instruction.
|
|
77
78
|
|
|
@@ -19,7 +19,7 @@ Claude Code plugin that exposes the Overlord local mission workflow to any Claud
|
|
|
19
19
|
### Requirements
|
|
20
20
|
|
|
21
21
|
- Overlord CLI (`ovld`) on `PATH`. See the Overlord docs / Settings → Agents & MCP.
|
|
22
|
-
- `MISSION_ID` is exported automatically when a Claude session is launched from Overlord
|
|
22
|
+
- `MISSION_ID` is exported automatically when a Claude session is launched from Overlord.
|
|
23
23
|
|
|
24
24
|
### Install (recommended)
|
|
25
25
|
|
|
@@ -85,9 +85,9 @@ This connector is intentionally reviewable against the four connector layers in
|
|
|
85
85
|
|
|
86
86
|
- `skills/overlord-mission/SKILL.md` — Claude adapter template with a `<!-- @connector-core -->` marker; setup interpolates shared core content at install time.
|
|
87
87
|
- `commands/*.md` — slash commands for session routing, objective discussion, mission creation, and work recording.
|
|
88
|
-
- `hooks/hooks.json` + `scripts/*.sh` — mission follow-up
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
- `hooks/hooks.json` + `scripts/*.sh` — Channel 1 mission follow-up (`UserPromptSubmit`),
|
|
89
|
+
touched-file capture (`PostToolUse`), and Stop delivery reminder. Mechanical harness
|
|
90
|
+
observation, permission, and injection are Latch's (`latch events` / PTY).
|
|
91
91
|
- `userConfig` for `overlord_url` and `user_token`; the hook scripts use the `ovld protocol` CLI and pass the plugin's USER_TOKEN to that CLI as `Overlord_USER_TOKEN`.
|
|
92
92
|
- `conformance-manifest.yaml` — connector conformance declaration for the Overlord contract.
|
|
93
93
|
- `prompt-wrapper.md` — Claude launch context-file guidance.
|
|
@@ -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: 1
|
|
15
15
|
harnessCapabilities:
|
|
16
16
|
path: connectors/adapters/claude/harness-capabilities.yaml
|
|
17
17
|
schemaVersion: 1
|
|
18
|
-
digest: "
|
|
18
|
+
digest: "833a35cecb73aa9b34b40036eb6d3088dd729ca6be465d1ee228dae2c5a8269d"
|
|
19
19
|
capabilities:
|
|
20
20
|
- followUpHook
|
|
21
21
|
- permissionHook
|
|
@@ -48,9 +48,6 @@ connector:
|
|
|
48
48
|
- "commands/record-work.md"
|
|
49
49
|
- "commands/spawn.md"
|
|
50
50
|
- "hooks/hooks.json"
|
|
51
|
-
- "scripts/agent-session-event.sh"
|
|
52
|
-
- "scripts/agent-session-request.sh"
|
|
53
|
-
- "scripts/agent-session-inbox.sh"
|
|
54
51
|
- "scripts/permission-hook.sh"
|
|
55
52
|
- "scripts/post-tool-use-hook.sh"
|
|
56
53
|
- "scripts/stop-hook.sh"
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"fixtureVersion": 1,
|
|
3
3
|
"kind": "source-guard",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Channel 1 protocol hooks remain registered. Mechanical agent-session observe/decide/inject is no longer a live Overlord path.",
|
|
5
5
|
"path": "connectors/adapters/claude/hooks/hooks.json",
|
|
6
6
|
"assert": {
|
|
7
7
|
"mustContain": [
|
|
8
8
|
"scripts/post-tool-use-hook.sh",
|
|
9
|
-
"scripts/user-prompt-submit-hook.sh"
|
|
10
|
-
|
|
9
|
+
"scripts/user-prompt-submit-hook.sh"
|
|
10
|
+
],
|
|
11
|
+
"mustNotContain": [
|
|
12
|
+
"scripts/agent-session-event.sh",
|
|
13
|
+
"scripts/agent-session-request.sh",
|
|
14
|
+
"scripts/agent-session-inbox.sh"
|
|
11
15
|
]
|
|
12
16
|
}
|
|
13
17
|
}
|
|
@@ -50,11 +50,9 @@ capabilities:
|
|
|
50
50
|
native: UserPromptSubmit
|
|
51
51
|
fixtures: [fixtures/normalize-user-prompt-submit.json]
|
|
52
52
|
notes: >-
|
|
53
|
-
Two registrations
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
equivalent follow-up attribution; replacing a working capture with an unproven one is how
|
|
57
|
-
a migration loses data quietly.
|
|
53
|
+
Two registrations used to ride UserPromptSubmit. Mechanical agent-session observation
|
|
54
|
+
moved to Latch `events`. This capability grades the protocol follow-up hook that posts
|
|
55
|
+
`user_follow_up` mission events; that Channel 1 path stays installed.
|
|
58
56
|
observe.toolCall:
|
|
59
57
|
status: not-implemented
|
|
60
58
|
native: PreToolUse
|
|
@@ -65,11 +63,12 @@ capabilities:
|
|
|
65
63
|
PostToolUse registration does not already provide, while inheriting the blast radius of
|
|
66
64
|
the decision path. It lands with the codecs that can actually use it.
|
|
67
65
|
observe.toolResult:
|
|
68
|
-
status:
|
|
66
|
+
status: not-implemented
|
|
69
67
|
native: PostToolUse
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
-
|
|
68
|
+
trackedAs: latch-engine
|
|
69
|
+
notes: >-
|
|
70
|
+
Mechanical tool-result observation moved to Latch `events`. The protocol PostToolUse
|
|
71
|
+
hook still records touched files for delivery attribution.
|
|
73
72
|
observe.fileEdit:
|
|
74
73
|
status: supported
|
|
75
74
|
native: PostToolUse
|
|
@@ -78,40 +77,38 @@ capabilities:
|
|
|
78
77
|
- fixtures/post-tool-use-parity.json
|
|
79
78
|
notes: >-
|
|
80
79
|
The shipped PostToolUse hook that records touched files into the per-session log used by
|
|
81
|
-
`deliver` for change attribution
|
|
82
|
-
is
|
|
83
|
-
because the migration must not repair observation by regressing change attribution.
|
|
80
|
+
`deliver` for change attribution remains registered. Mechanical agent-session observation
|
|
81
|
+
is no longer a live Overlord path.
|
|
84
82
|
observe.sessionLifecycle:
|
|
85
|
-
status:
|
|
83
|
+
status: not-implemented
|
|
86
84
|
native: SessionStart
|
|
87
|
-
|
|
85
|
+
trackedAs: latch-engine
|
|
88
86
|
notes: >-
|
|
89
|
-
SessionStart
|
|
90
|
-
|
|
91
|
-
event is decision-capable in a way SessionStart is not.
|
|
87
|
+
SessionStart observation moved to Latch `events`. There is no matching Overlord
|
|
88
|
+
registration.
|
|
92
89
|
decide.shell:
|
|
93
|
-
status:
|
|
90
|
+
status: not-implemented
|
|
94
91
|
native: PermissionRequest
|
|
95
|
-
|
|
92
|
+
trackedAs: latch-engine
|
|
96
93
|
decide.mcp:
|
|
97
|
-
status:
|
|
94
|
+
status: not-implemented
|
|
98
95
|
native: PermissionRequest
|
|
99
|
-
|
|
96
|
+
trackedAs: latch-engine
|
|
100
97
|
decide.fileWrite:
|
|
101
|
-
status:
|
|
98
|
+
status: not-implemented
|
|
102
99
|
native: PermissionRequest
|
|
103
|
-
|
|
100
|
+
trackedAs: latch-engine
|
|
104
101
|
decide.anyTool:
|
|
105
102
|
status: not-implemented
|
|
106
103
|
native: PreToolUse
|
|
107
|
-
trackedAs:
|
|
104
|
+
trackedAs: latch-engine
|
|
108
105
|
decide.universal:
|
|
109
|
-
status:
|
|
106
|
+
status: not-implemented
|
|
110
107
|
native: PermissionRequest
|
|
111
|
-
|
|
108
|
+
trackedAs: latch-engine
|
|
112
109
|
notes: >-
|
|
113
|
-
|
|
114
|
-
|
|
110
|
+
Remote permission decisions moved to Latch `awaiting_input` / `latch send --resolve`.
|
|
111
|
+
The native Claude prompt owns approvals when Latch is absent.
|
|
115
112
|
answer.structuredQuestion:
|
|
116
113
|
status: unverified
|
|
117
114
|
native: Elicitation
|
|
@@ -127,23 +124,18 @@ capabilities:
|
|
|
127
124
|
Structurally available, deliberately unbuilt. A standing permission grant needs its own
|
|
128
125
|
design, confirmation, audit language, and RBAC review before any remote surface offers it.
|
|
129
126
|
inject.midTurn:
|
|
130
|
-
status:
|
|
127
|
+
status: not-implemented
|
|
131
128
|
native: asyncRewake
|
|
132
|
-
|
|
133
|
-
- fixtures/inject-async-rewake.json
|
|
134
|
-
- fixtures/agent-session-inbox-unbound.json
|
|
129
|
+
trackedAs: latch-engine
|
|
135
130
|
notes: >-
|
|
136
|
-
|
|
137
|
-
Exit code 2 wakes the model with stderr as a system reminder — that is Delivered.
|
|
131
|
+
Session-input injection moved off Overlord connectors. Latch PTY write is Phase 3.
|
|
138
132
|
inject.turnBoundary:
|
|
139
|
-
status:
|
|
133
|
+
status: not-implemented
|
|
140
134
|
native: Stop
|
|
141
|
-
|
|
142
|
-
- fixtures/inject-stop-block.json
|
|
143
|
-
- fixtures/agent-session-inbox-unbound.json
|
|
135
|
+
trackedAs: latch-engine
|
|
144
136
|
notes: >-
|
|
145
|
-
|
|
146
|
-
|
|
137
|
+
Turn-boundary injection moved off Overlord connectors. The protocol Stop hook still
|
|
138
|
+
reminds the agent to deliver when needed.
|
|
147
139
|
inject.nextTurn:
|
|
148
140
|
status: not-implemented
|
|
149
141
|
native: Stop
|
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"hooks": {
|
|
3
|
-
"PermissionRequest": [
|
|
4
|
-
{
|
|
5
|
-
"matcher": ".*",
|
|
6
|
-
"hooks": [
|
|
7
|
-
{
|
|
8
|
-
"type": "command",
|
|
9
|
-
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/agent-session-request.sh"
|
|
10
|
-
}
|
|
11
|
-
]
|
|
12
|
-
}
|
|
13
|
-
],
|
|
14
3
|
"UserPromptSubmit": [
|
|
15
4
|
{
|
|
16
5
|
"matcher": ".*",
|
|
@@ -20,15 +9,6 @@
|
|
|
20
9
|
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/user-prompt-submit-hook.sh"
|
|
21
10
|
}
|
|
22
11
|
]
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"matcher": ".*",
|
|
26
|
-
"hooks": [
|
|
27
|
-
{
|
|
28
|
-
"type": "command",
|
|
29
|
-
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/agent-session-event.sh"
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
12
|
}
|
|
33
13
|
],
|
|
34
14
|
"PostToolUse": [
|
|
@@ -40,25 +20,6 @@
|
|
|
40
20
|
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/post-tool-use-hook.sh"
|
|
41
21
|
}
|
|
42
22
|
]
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"matcher": ".*",
|
|
46
|
-
"hooks": [
|
|
47
|
-
{
|
|
48
|
-
"type": "command",
|
|
49
|
-
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/agent-session-event.sh"
|
|
50
|
-
}
|
|
51
|
-
]
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"matcher": ".*",
|
|
55
|
-
"hooks": [
|
|
56
|
-
{
|
|
57
|
-
"type": "command",
|
|
58
|
-
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/agent-session-inbox.sh",
|
|
59
|
-
"asyncRewake": true
|
|
60
|
-
}
|
|
61
|
-
]
|
|
62
23
|
}
|
|
63
24
|
],
|
|
64
25
|
"Stop": [
|
|
@@ -70,36 +31,6 @@
|
|
|
70
31
|
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/stop-hook.sh"
|
|
71
32
|
}
|
|
72
33
|
]
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"matcher": ".*",
|
|
76
|
-
"hooks": [
|
|
77
|
-
{
|
|
78
|
-
"type": "command",
|
|
79
|
-
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/agent-session-inbox.sh"
|
|
80
|
-
}
|
|
81
|
-
]
|
|
82
|
-
}
|
|
83
|
-
],
|
|
84
|
-
"SessionStart": [
|
|
85
|
-
{
|
|
86
|
-
"matcher": ".*",
|
|
87
|
-
"hooks": [
|
|
88
|
-
{
|
|
89
|
-
"type": "command",
|
|
90
|
-
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/agent-session-event.sh"
|
|
91
|
-
}
|
|
92
|
-
]
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
"matcher": ".*",
|
|
96
|
-
"hooks": [
|
|
97
|
-
{
|
|
98
|
-
"type": "command",
|
|
99
|
-
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/agent-session-inbox.sh",
|
|
100
|
-
"asyncRewake": true
|
|
101
|
-
}
|
|
102
|
-
]
|
|
103
34
|
}
|
|
104
35
|
]
|
|
105
36
|
}
|
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"hooks": {
|
|
3
|
-
"PermissionRequest": [
|
|
4
|
-
{
|
|
5
|
-
"matcher": ".*",
|
|
6
|
-
"hooks": [
|
|
7
|
-
{
|
|
8
|
-
"type": "command",
|
|
9
|
-
"command": "/bin/sh -c 'exec \"${CODEX_PLUGIN_ROOT:-$HOME/.codex/plugins/overlord}/scripts/agent-session-request.sh\"'",
|
|
10
|
-
"timeout": 35
|
|
11
|
-
}
|
|
12
|
-
]
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
3
|
"UserPromptSubmit": [
|
|
16
4
|
{
|
|
17
5
|
"matcher": ".*",
|
|
@@ -21,59 +9,6 @@
|
|
|
21
9
|
"command": "/bin/sh -c 'exec \"${CODEX_PLUGIN_ROOT:-$HOME/.codex/plugins/overlord}/scripts/user-prompt-submit-hook.sh\"'"
|
|
22
10
|
}
|
|
23
11
|
]
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"matcher": ".*",
|
|
27
|
-
"hooks": [
|
|
28
|
-
{
|
|
29
|
-
"type": "command",
|
|
30
|
-
"command": "/bin/sh -c 'exec \"${CODEX_PLUGIN_ROOT:-$HOME/.codex/plugins/overlord}/scripts/agent-session-event.sh\"'"
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
],
|
|
35
|
-
"PreToolUse": [
|
|
36
|
-
{
|
|
37
|
-
"matcher": ".*",
|
|
38
|
-
"hooks": [
|
|
39
|
-
{
|
|
40
|
-
"type": "command",
|
|
41
|
-
"command": "/bin/sh -c 'exec \"${CODEX_PLUGIN_ROOT:-$HOME/.codex/plugins/overlord}/scripts/agent-session-event.sh\"'"
|
|
42
|
-
}
|
|
43
|
-
]
|
|
44
|
-
}
|
|
45
|
-
],
|
|
46
|
-
"PostToolUse": [
|
|
47
|
-
{
|
|
48
|
-
"matcher": ".*",
|
|
49
|
-
"hooks": [
|
|
50
|
-
{
|
|
51
|
-
"type": "command",
|
|
52
|
-
"command": "/bin/sh -c 'exec \"${CODEX_PLUGIN_ROOT:-$HOME/.codex/plugins/overlord}/scripts/agent-session-event.sh\"'"
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
],
|
|
57
|
-
"SessionStart": [
|
|
58
|
-
{
|
|
59
|
-
"matcher": ".*",
|
|
60
|
-
"hooks": [
|
|
61
|
-
{
|
|
62
|
-
"type": "command",
|
|
63
|
-
"command": "/bin/sh -c 'exec \"${CODEX_PLUGIN_ROOT:-$HOME/.codex/plugins/overlord}/scripts/agent-session-event.sh\"'"
|
|
64
|
-
}
|
|
65
|
-
]
|
|
66
|
-
}
|
|
67
|
-
],
|
|
68
|
-
"Stop": [
|
|
69
|
-
{
|
|
70
|
-
"matcher": ".*",
|
|
71
|
-
"hooks": [
|
|
72
|
-
{
|
|
73
|
-
"type": "command",
|
|
74
|
-
"command": "/bin/sh -c 'exec \"${CODEX_PLUGIN_ROOT:-$HOME/.codex/plugins/overlord}/scripts/agent-session-inbox.sh\"'"
|
|
75
|
-
}
|
|
76
|
-
]
|
|
77
12
|
}
|
|
78
13
|
]
|
|
79
14
|
}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
# Codex CLI — Overlord agent-session capabilities
|
|
4
4
|
|
|
5
|
-
**Adapter** `codex` · **Codec** `codex` · **Integration shape** `callback` · **Capability tier**
|
|
5
|
+
**Adapter** `codex` · **Codec** `codex` · **Integration shape** `callback` · **Capability tier** 1 (Observational)
|
|
6
6
|
|
|
7
7
|
**Harness version verified** `0.147.0` · **range** `>=0.124.0` · **scheme** `semver`
|
|
8
8
|
|
|
9
|
-
**Descriptor digest** `
|
|
9
|
+
**Descriptor digest** `e0d536667a5616d1a662c7225fc8ef439b5d7cdce1d6703e577190c9e5c6d9c5`
|
|
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
|
|
@@ -45,28 +45,27 @@ Per-hook timeouts in seconds; the documentation gives a 600-second default. The
|
|
|
45
45
|
| Capability | Status | Native | Evidence |
|
|
46
46
|
| --- | --- | --- | --- |
|
|
47
47
|
| `observe.prompt` | ✅ supported | `UserPromptSubmit` | fixtures: `fixtures/normalize-user-prompt.json` |
|
|
48
|
-
| `observe.toolCall` |
|
|
49
|
-
| `observe.toolResult` |
|
|
50
|
-
| `observe.fileEdit` |
|
|
51
|
-
| `observe.sessionLifecycle` |
|
|
52
|
-
| `decide.shell` |
|
|
53
|
-
| `decide.mcp` |
|
|
54
|
-
| `decide.fileWrite` |
|
|
48
|
+
| `observe.toolCall` | 🚧 not-implemented | `PreToolUse` | tracked as `latch-engine` |
|
|
49
|
+
| `observe.toolResult` | 🚧 not-implemented | `PostToolUse` | tracked as `latch-engine` |
|
|
50
|
+
| `observe.fileEdit` | 🚧 not-implemented | `PostToolUse` | tracked as `latch-engine` |
|
|
51
|
+
| `observe.sessionLifecycle` | 🚧 not-implemented | `SessionStart` | tracked as `latch-engine` |
|
|
52
|
+
| `decide.shell` | 🚧 not-implemented | `PermissionRequest` | tracked as `latch-engine` |
|
|
53
|
+
| `decide.mcp` | 🚧 not-implemented | `PermissionRequest` | tracked as `latch-engine` |
|
|
54
|
+
| `decide.fileWrite` | 🚧 not-implemented | `PermissionRequest` | tracked as `latch-engine` |
|
|
55
55
|
| `decide.anyTool` | 🚧 not-implemented | `PreToolUse` | tracked as `agent-session-phase-4` |
|
|
56
|
-
| `decide.universal` |
|
|
56
|
+
| `decide.universal` | 🚧 not-implemented | `PermissionRequest` | tracked as `latch-engine` |
|
|
57
57
|
| `answer.structuredQuestion` | ❓ unverified | `ToolRequestUserInput` | tracked as `taxonomy-7.2` |
|
|
58
58
|
| `answer.persistentAllow` | ❓ unverified | — | tracked as `taxonomy-7.4` |
|
|
59
59
|
| `inject.midTurn` | ❓ unverified | `ThreadInjectItems` | tracked as `taxonomy-7.2` |
|
|
60
|
-
| `inject.turnBoundary` |
|
|
60
|
+
| `inject.turnBoundary` | 🚧 not-implemented | `Stop` | tracked as `latch-engine` |
|
|
61
61
|
| `inject.nextTurn` | 🚧 not-implemented | `Stop` | tracked as `agent-session-phase-4` |
|
|
62
62
|
| `terminal.concurrentAnswer` | ⛔ unsupported | — | On the hook path the native prompt is drawn only after the callback returns, so the terminal cannot answer while Overlord holds the decision. (A future app-server integration could change this; it would be a different integrationShape.) (evidence: `connector-harness-taxonomy.md#12-the-axis-that-actually-matters`) |
|
|
63
63
|
| `terminal.statusSurface` | ❓ unverified | — | tracked as `taxonomy-7.9` |
|
|
64
64
|
|
|
65
65
|
### Capability notes
|
|
66
66
|
|
|
67
|
-
- **`observe.toolCall`** —
|
|
68
|
-
- **`
|
|
69
|
-
- **`decide.universal`** — Codex PermissionRequest covers Bash, apply_patch/Edit/Write, and MCP tool names. The codec emits only documented allow/deny behavior and deliberately never emits reserved `updatedInput`, `updatedPermissions`, or `interrupt` fields.
|
|
67
|
+
- **`observe.toolCall`** — Mechanical PreToolUse observation moved to Latch `events`.
|
|
68
|
+
- **`decide.universal`** — Remote permission decisions moved to Latch `awaiting_input` / `latch send --resolve`.
|
|
70
69
|
- **`answer.structuredQuestion`** — `codex app-server` exposes ToolRequestUserInput with per-option label/description and an autoResolutionMs — an ACP-shaped structured question in everything but name. It is unreachable until the single-subscriber question is settled.
|
|
71
70
|
- **`inject.midTurn`** — ThreadInjectItems/TurnSteer exist on the experimental app-server surface only. The binary carries "expected exactly one client subscribed to the thread, found {}", so if the TUI is that one client Overlord cannot also subscribe and this path is closed.
|
|
72
71
|
|
|
@@ -81,7 +80,7 @@ Per-hook timeouts in seconds; the documentation gives a 600-second default. The
|
|
|
81
80
|
|
|
82
81
|
**`two-integration-surfaces-could-disagree`** — Hooks and `codex app-server` can both answer a permission. A session driven by both would race in a way no revision CAS can settle, so exactly one surface must be chosen and documented before either is built.
|
|
83
82
|
|
|
84
|
-
**`shipped-permission-hook-inert`** — The former PermissionRequest hook called a nonexistent protocol command in the background. The
|
|
83
|
+
**`shipped-permission-hook-inert`** — The former PermissionRequest hook called a nonexistent protocol command in the background. The connector no longer registers a PermissionRequest hook; the native prompt owns approvals when Latch is absent.
|
|
85
84
|
|
|
86
85
|
**`prompt-and-agent-hook-handlers-inert`** — Codex 0.146.0 accepts three hook handler types — `command`, `prompt`, and `agent` — but only `command` runs. Hook discovery parses `prompt` and `agent` and then skips them with a "not supported yet" warning, so a manifest that used either would install cleanly, list in `hooks`, and never execute. The connector must keep emitting `command` handlers only, and must not read the presence of these variants in the schema as availability. `command` is a shell command line run through `$SHELL -lc` (`/bin/sh` when SHELL is unset) — it is not restricted to Bash and not restricted to shell scripting, since the command may invoke any interpreter.
|
|
87
86
|
|