overlord-cli 0.2607280953.0 → 0.2607292110.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/README.md +46 -0
- package/dist/connectors/VERSION +1 -1
- package/dist/connectors/adapters/antigravity/README.md +9 -1
- package/dist/connectors/adapters/antigravity/conformance-manifest.yaml +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/README.md +7 -0
- package/dist/connectors/adapters/claude/conformance-manifest.yaml +1 -1
- package/dist/connectors/adapters/codex/.codex-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/codex/README.md +8 -1
- package/dist/connectors/adapters/codex/conformance-manifest.yaml +1 -1
- package/dist/connectors/adapters/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/cursor/README.md +8 -1
- package/dist/connectors/adapters/cursor/conformance-manifest.yaml +1 -1
- package/dist/connectors/adapters/pi/README.md +8 -0
- package/dist/connectors/adapters/pi/conformance-manifest.yaml +1 -1
- package/dist/connectors/core/README.md +17 -0
- package/dist/connectors/core/overlord-mission/SKILL.md +1 -0
- package/dist/connectors/core/overlord-mission/reference/context.md +7 -1
- package/dist/connectors/core/overlord-mission/reference/mcp.md +2 -1
- package/dist/connectors/{adapters/antigravity → core}/scripts/overlord-mcp.mjs +46 -2
- package/dist/connectors/docs/05-connectors-and-agent-plugins.md +19 -0
- package/dist/connectors/docs/agent-harness-configuration-architecture.md +1 -1
- package/dist/index.js +400 -195
- package/dist/index.js.map +4 -4
- package/package.json +3 -3
- package/dist/connectors/adapters/codex/scripts/overlord-mcp.mjs +0 -479
- package/dist/connectors/adapters/cursor/scripts/overlord-mcp.mjs +0 -479
|
@@ -13,6 +13,8 @@ OpenCode, Antigravity, and others). A connector is what lets an agent speak the
|
|
|
13
13
|
- [For Developers](#for-developers)
|
|
14
14
|
- [Contract Component](#contract-component)
|
|
15
15
|
- [The four layers](#the-four-layers)
|
|
16
|
+
- [Adapter capability matrix](#adapter-capability-matrix)
|
|
17
|
+
- [Generated files](#generated-files)
|
|
16
18
|
- [Documentation](#documentation)
|
|
17
19
|
|
|
18
20
|
## For Users
|
|
@@ -66,6 +68,50 @@ or the harness extension catalog (→ Extension System, see [Database module](..
|
|
|
66
68
|
- **Plugin Adapters** — package plugins into a harness via its native plugin/connector manager (Claude, Codex, Cursor).
|
|
67
69
|
- **Prompt Wrappers** — instructions + key data wrapping the user's prompt at LLM submission time.
|
|
68
70
|
|
|
71
|
+
### Adapter capability matrix
|
|
72
|
+
|
|
73
|
+
Adapters deliberately differ. This table records what each one ships and, where a
|
|
74
|
+
mechanism is absent, whether the gap is a decision or simply unported work — so a
|
|
75
|
+
contributor adding an adapter can tell signal from neglect. Source of truth for the
|
|
76
|
+
"ships" columns is each adapter's `conformance-manifest.yaml`.
|
|
77
|
+
|
|
78
|
+
| Adapter | Commands | Hooks | Local MCP shim | MCP config | Rules | Native resume |
|
|
79
|
+
|---|---|---|---|---|---|---|
|
|
80
|
+
| `claude` | `commands/` | `hooks/hooks.json` (4 types) | — | — | — | — |
|
|
81
|
+
| `codex` | — | `.codex-plugin/hooks.json` + `scripts/*.sh` (2 types) | rendered | `.mcp.json` | — | yes |
|
|
82
|
+
| `cursor` | `commands/` | `hooks/*.sh` (4 types) | rendered | `mcp.json` | `rules/` | — |
|
|
83
|
+
| `antigravity` | `skills/*.md` | `hooks.json` + `scripts/*.sh` (2 types) | rendered | `mcp_config.json` | — | — |
|
|
84
|
+
| `pi` | — | `extensions/overlord.ts` (`input` event) | — | — | — | yes |
|
|
85
|
+
|
|
86
|
+
Intentional omissions:
|
|
87
|
+
|
|
88
|
+
- **`claude` ships no local MCP shim.** The Claude plugin reaches Overlord's hosted
|
|
89
|
+
MCP server, so a local stdio bridge would duplicate it.
|
|
90
|
+
- **`pi` ships no shim, hooks directory, or commands.** PI integrates through a
|
|
91
|
+
single TypeScript extension, and it has no native permission-request hook — its
|
|
92
|
+
`input` event carries follow-up capture only.
|
|
93
|
+
- **`antigravity` passes no model or effort flag.** Antigravity selects the model
|
|
94
|
+
internally; see [05 — Connectors and Agent Plugins](docs/05-connectors-and-agent-plugins.md#antigravity-connector).
|
|
95
|
+
- **`cursor` passes no effort/thinking flag.** Deferred, not declined — recorded in
|
|
96
|
+
the Cursor requirements as "no thinking/effort flag required initially".
|
|
97
|
+
|
|
98
|
+
Unconfirmed gaps — read these as unported rather than declined, and file feature
|
|
99
|
+
work as its own mission rather than folding it into a docs change:
|
|
100
|
+
|
|
101
|
+
- `codex` ships no `commands/` while `claude` and `cursor` do, and `antigravity`
|
|
102
|
+
achieves the same surface through `skills/*.md`. No harness constraint is recorded.
|
|
103
|
+
- `codex` and `antigravity` register no `PostToolUse` or `Stop` hooks; whether their
|
|
104
|
+
harnesses expose the equivalent events is not documented here.
|
|
105
|
+
|
|
106
|
+
### Generated files
|
|
107
|
+
|
|
108
|
+
The local MCP shim (`scripts/overlord-mcp.mjs`) is **generated**, not committed per
|
|
109
|
+
adapter. One source — [`core/scripts/overlord-mcp.mjs`](core/scripts/overlord-mcp.mjs) —
|
|
110
|
+
is rendered per adapter at `ovld agent-setup` time, substituting the adapter key into
|
|
111
|
+
`DEFAULT_AGENT` and `serverInfo.name`. Edit the core file; there is no adapter copy to
|
|
112
|
+
edit. The rendered artifact stays a standalone runnable `.mjs`, since harnesses start it
|
|
113
|
+
directly from the install path.
|
|
114
|
+
|
|
69
115
|
### Documentation
|
|
70
116
|
|
|
71
117
|
- [Connector Core](core/README.md): shared workflow instructions and protocol references consumed by connector plugins.
|
package/dist/connectors/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.3.
|
|
1
|
+
0.3.10
|
|
@@ -73,12 +73,20 @@ This connector is intentionally reviewable against the four connector layers in
|
|
|
73
73
|
- `skills/overlord-mission/SKILL.md` — Antigravity adapter template with a `<!-- @connector-core -->` marker; setup interpolates shared core content at install time.
|
|
74
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.
|
|
75
75
|
- `hooks.json` + `scripts/pre-invocation-hook.sh` + `scripts/pre-tool-use-hook.sh` — follow-up and permission activity capture through `ovld protocol` (see mapping notes below).
|
|
76
|
-
- `mcp_config.json` + `scripts/overlord-mcp.mjs` — MCP bridge to common `ovld protocol` operations.
|
|
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.
|
|
77
77
|
- `conformance-manifest.yaml` — connector conformance declaration for the Overlord contract.
|
|
78
78
|
- `prompt-wrapper.md` — Antigravity launch guidance.
|
|
79
79
|
|
|
80
80
|
The shared Connector Core source lives at `connectors/core/overlord-mission`. `ovld agent-setup antigravity` interpolates that core into the adapter skill template and installs core reference files so the runtime package is self-contained.
|
|
81
81
|
|
|
82
|
+
### Omissions
|
|
83
|
+
|
|
84
|
+
- **No model or effort flag at launch.** Antigravity selects the model internally, so Overlord passes neither. Deliberate.
|
|
85
|
+
- **No `commands/` directory.** Antigravity auto-registers each `skills/*.md` as a `/<name>` slash command, so a separate commands surface would be redundant. Deliberate.
|
|
86
|
+
- **No `PostToolUse` or `Stop` hooks.** Only follow-up and permission capture are mapped; whether Antigravity exposes the equivalent events is not yet established. Treat as open work.
|
|
87
|
+
|
|
88
|
+
See the [adapter capability matrix](../../README.md#adapter-capability-matrix) for how this compares across adapters.
|
|
89
|
+
|
|
82
90
|
### Notes on the Antigravity hook mapping
|
|
83
91
|
|
|
84
92
|
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`:
|
|
@@ -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.10",
|
|
5
5
|
"description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Cooperativ",
|
|
@@ -91,3 +91,10 @@ This connector is intentionally reviewable against the four connector layers in
|
|
|
91
91
|
- `prompt-wrapper.md` — Claude launch context-file guidance.
|
|
92
92
|
|
|
93
93
|
The shared Connector Core source lives at `connectors/core/overlord-mission`. `ovld agent-setup claude` interpolates that core into the adapter skill template and installs core reference files so the runtime package is self-contained.
|
|
94
|
+
|
|
95
|
+
### Deliberate omissions
|
|
96
|
+
|
|
97
|
+
- **No local MCP shim.** The Claude plugin reaches Overlord's hosted MCP server, so the local stdio bridge that Codex, Cursor, and Antigravity install would only duplicate it.
|
|
98
|
+
- **No native resume flag.** Sessions are re-entered through the plugin's own surfaces rather than a `--session` launch flag.
|
|
99
|
+
|
|
100
|
+
See the [adapter capability matrix](../../README.md#adapter-capability-matrix) for how this compares across adapters.
|
|
@@ -70,9 +70,16 @@ This connector is intentionally reviewable against the four connector layers in
|
|
|
70
70
|
|
|
71
71
|
- `skills/overlord-mission/SKILL.md` — Codex adapter template with a `<!-- @connector-core -->` marker; setup interpolates shared core content at install time.
|
|
72
72
|
- `.codex-plugin/hooks.json` + `scripts/*.sh` — `UserPromptSubmit` follow-up capture and `PermissionRequest` notifications through `ovld protocol`.
|
|
73
|
-
- `.mcp.json` + `scripts/overlord-mcp.mjs` — MCP bridge to common `ovld protocol` operations.
|
|
73
|
+
- `.mcp.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.
|
|
74
74
|
- `assets/` — branded plugin assets for Codex install surfaces.
|
|
75
75
|
- `conformance-manifest.yaml` — connector conformance declaration for the Overlord contract.
|
|
76
76
|
- `prompt-wrapper.md` — Codex launch guidance.
|
|
77
77
|
|
|
78
78
|
The shared Connector Core source lives at `connectors/core/overlord-mission`. `ovld agent-setup codex` interpolates that core into the adapter skill template and installs core reference files so the runtime package is self-contained.
|
|
79
|
+
|
|
80
|
+
### Omissions
|
|
81
|
+
|
|
82
|
+
- **No `commands/` directory.** Codex reaches protocol operations through the MCP bridge and the mission skill. This is unported rather than declined — no Codex constraint is recorded against slash commands — so treat it as open work with its own mission, not as a settled decision.
|
|
83
|
+
- **No `PostToolUse` or `Stop` hooks.** Only `UserPromptSubmit` and `PermissionRequest` are registered; the equivalent Codex events are not yet mapped.
|
|
84
|
+
|
|
85
|
+
See the [adapter capability matrix](../../README.md#adapter-capability-matrix) for how this compares across adapters.
|
|
@@ -80,10 +80,17 @@ This connector is intentionally reviewable against the four connector layers in
|
|
|
80
80
|
- `hooks/overlord-post-tool-use.sh` — records `postToolUse` file edits and shell-mediated changes for exact per-session delivery attribution.
|
|
81
81
|
- `hooks/overlord-stop.sh` — checks pending delivery through `ovld protocol hook-event`; when needed, it asks Cursor to continue once so the agent can finish delivery.
|
|
82
82
|
- `rules/overlord-local.mdc` — always-on workflow rules for Cursor sessions.
|
|
83
|
-
- `mcp.json` + `scripts/overlord-mcp.mjs` — MCP bridge to common `ovld protocol` operations.
|
|
83
|
+
- `mcp.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.
|
|
84
84
|
- `conformance-manifest.yaml` — connector conformance declaration for the Overlord contract.
|
|
85
85
|
- `prompt-wrapper.md` — Cursor launch guidance.
|
|
86
86
|
|
|
87
87
|
The shared Connector Core source lives at `connectors/core/overlord-mission`. `ovld agent-setup cursor` interpolates that core into the adapter skill template and installs core reference files so the runtime package is self-contained.
|
|
88
88
|
|
|
89
|
+
### Deliberate omissions
|
|
90
|
+
|
|
91
|
+
- **No effort/thinking flag.** Launch passes a model flag only; the Cursor requirements record no thinking/effort flag as needed initially. Deferred, not declined.
|
|
92
|
+
- **No native resume flag.** Cursor sessions are re-entered through the harness rather than an Overlord-passed session flag.
|
|
93
|
+
|
|
94
|
+
See the [adapter capability matrix](../../README.md#adapter-capability-matrix) for how this compares across adapters.
|
|
95
|
+
|
|
89
96
|
Cursor's generic `preToolUse` hook is intentionally not used for permission capture. Cursor currently documents that `ask` is not enforced for `preToolUse`; the narrower shell and MCP hooks expose the native permission-decision schema without changing the user's policy. Cursor also documents hook execution as fail-open by default, so Overlord telemetry failures do not strand the agent.
|
|
@@ -40,3 +40,11 @@ When PI supplies a native session ID, Overlord's review UI can reopen it with:
|
|
|
40
40
|
```bash
|
|
41
41
|
pi --session <session-id>
|
|
42
42
|
```
|
|
43
|
+
|
|
44
|
+
## Deliberate omissions
|
|
45
|
+
|
|
46
|
+
- **No local MCP shim and no MCP config.** PI integrates through the single `extensions/overlord.ts` extension, which calls `ovld protocol` directly.
|
|
47
|
+
- **No permission hook.** PI exposes no native permission-request event, so there is nothing to observe.
|
|
48
|
+
- **No `commands/` directory or rules file.** Protocol operations are reached through the mission skill and the extension.
|
|
49
|
+
|
|
50
|
+
See the [adapter capability matrix](../../README.md#adapter-capability-matrix) for how this compares across adapters.
|
|
@@ -46,7 +46,24 @@ When building a Connector Plugin, adapter skill templates include `<!-- @connect
|
|
|
46
46
|
`connectors/core/overlord-mission/` into that marker and copies core reference files
|
|
47
47
|
into the installable plugin package. Do not fork the core protocol rules into each adapter.
|
|
48
48
|
|
|
49
|
+
The same rendering path carries the local MCP shim. `scripts/overlord-mcp.mjs` is the
|
|
50
|
+
single source for the stdio MCP bridge that Codex, Cursor, and Antigravity install;
|
|
51
|
+
`ovld agent-setup <agent>` substitutes `__OVERLORD_ADAPTER_KEY__` with the adapter key
|
|
52
|
+
(`DEFAULT_AGENT` and `serverInfo.name`) and writes the result into the adapter's install
|
|
53
|
+
path. There are no adapter-local copies to keep in step. Two constraints hold when
|
|
54
|
+
editing it:
|
|
55
|
+
|
|
56
|
+
- It must stay a standalone runnable `.mjs`. The rendered file is copied into the
|
|
57
|
+
user's home and started directly by the harness, so it may not import anything
|
|
58
|
+
repo-local or require a build step.
|
|
59
|
+
- The tool list must stay in parity with the hosted MCP catalog; `backend/mcp.test.ts`
|
|
60
|
+
asserts this against `mcp/tool-catalog.ts`.
|
|
61
|
+
|
|
62
|
+
`connectors/VERSION` drives the reported `serverInfo.version`; patch it with
|
|
63
|
+
`yarn connectors:version:sync`, never by hand.
|
|
64
|
+
|
|
49
65
|
### Files
|
|
50
66
|
|
|
51
67
|
- `overlord-mission/SKILL.md` — shared mission lifecycle workflow.
|
|
52
68
|
- `overlord-mission/reference/` — shared protocol, context, device, MCP/API, and shell-escaping references.
|
|
69
|
+
- `scripts/overlord-mcp.mjs` — shared local MCP shim, rendered per adapter.
|
|
@@ -407,6 +407,7 @@ Field shape, inline vs stdin piping, and `record-change-rationales` syntax are i
|
|
|
407
407
|
- The `summary` in deliver is what the PM reads first, so write it as a narrative, not a command list.
|
|
408
408
|
- When a summary or question contains backticks, `$vars`, or other shell-special characters, always use `--summary-file -` (or `--question-file -`) with a single-quoted heredoc (`<<'EOF'`). Never retry by stripping or escaping content — pipe stdin instead. See [reference/shell-escaping.md](reference/shell-escaping.md).
|
|
409
409
|
- Use `write-context` for facts a future agent session should know.
|
|
410
|
+
- Use `update-artifact` (or MCP `overlord_update_artifact`) to revise an existing mission artifact in place instead of delivering a duplicate when a later objective updates a plan or notes.
|
|
410
411
|
- If a protocol or MCP call fails with auth/session errors, run `ovld auth repair` yourself before asking the user to log in again or proceed without Overlord updates.
|
|
411
412
|
- If you must run `ovld auth login`, `--organization-id <id>` is optional — it validates/scopes that login or command but does not create a stored default organization.
|
|
412
413
|
- Do not add or commit changes unless the user explicitly asks you to commit.
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
```bash
|
|
4
4
|
ovld protocol read-context --session-key <sessionKey> --mission-id $MISSION_ID
|
|
5
5
|
ovld protocol write-context --session-key <sessionKey> --mission-id $MISSION_ID --key "key" --value '"json-value"'
|
|
6
|
+
ovld protocol update-artifact --mission-id $MISSION_ID --artifact-id <artifact-id> \
|
|
7
|
+
--expected-revision <n> --label "Revised plan" --content-text-file -
|
|
6
8
|
ovld protocol attachment-list --session-key <sessionKey> --objective-id <objective-id>
|
|
7
9
|
ovld protocol attachment-upload-file --session-key <sessionKey> --objective-id <objective-id> --file ./spec.pdf --content-type application/pdf
|
|
8
10
|
ovld protocol attachment-download-url --session-key <sessionKey> --attachment-id <attachment-id>
|
|
@@ -10,6 +12,10 @@ ovld protocol attachment-download-url --session-key <sessionKey> --attachment-id
|
|
|
10
12
|
|
|
11
13
|
The `attach` and `load-context` responses already include an `attachments` array plus `previousObjectives` and `futureObjectives` arrays — use those for `<attachment-id>` and `<objective-id>` values. The objective currently being executed is not repeated in those arrays; it is the top-level `objective`. `previousObjectives` are the objectives already worked (before the current one) and `futureObjectives` are the ones queued after it. Run `attachment-list` mid-session if new files have been uploaded since attach. `--mission-id` is optional for attachment calls when `--objective-id` or `--attachment-id` lets the server derive the mission.
|
|
12
14
|
|
|
15
|
+
## Updating existing artifacts
|
|
16
|
+
|
|
17
|
+
When a later objective or follow-up must revise a plan, notes, or URL artifact created earlier, call `update-artifact` (or MCP `overlord_update_artifact`) instead of delivering a duplicate. Use the artifact `id` and `revision` from the mission `artifacts` array (or `ovld mission artifacts`). Provide at least one of `--label`, `--content-text` / `--content-text-file`, or `--external-url`. No session key is required. Stale `--expected-revision` returns a conflict — refresh and retry. Delivery/session/objective provenance and `contentJson` remain immutable.
|
|
18
|
+
|
|
13
19
|
## Large Artifacts
|
|
14
20
|
|
|
15
21
|
For large artifacts such as planning documents, architecture decisions, research summaries, or design documents: **save the full content as a markdown file in the linked repository, then summarize it in the artifact returned to the mission.**
|
|
@@ -18,5 +24,5 @@ For large artifacts such as planning documents, architecture decisions, research
|
|
|
18
24
|
- Commit the file as part of the mission's work so it appears in `changeRationales`.
|
|
19
25
|
- In the delivery, include a `note` or `decision` artifact with a concise summary and the repository file path — not the full document content.
|
|
20
26
|
|
|
21
|
-
This keeps the mission feed readable while preserving the full document in version control where it can be reviewed, diffed, and referenced later.
|
|
27
|
+
This keeps the mission feed readable while preserving the full document in version control where it can be reviewed, diffed, and referenced later. If that summary artifact already exists on the mission, revise it with `update-artifact` rather than creating another copy.
|
|
22
28
|
|
|
@@ -7,5 +7,6 @@
|
|
|
7
7
|
- Execution request tools (`request_execution`, `claim_execution`, `list_execution_requests`, `clear_execution_requests`, `complete_execution_launch`, `fail_execution_launch`) back the local runner queue. Agents normally work missions with `attach`/`update`/`deliver`; runner processes use these queue tools.
|
|
8
8
|
- `record_change_rationales` (MCP) and `ovld protocol record-change-rationales` (CLI) both write to the same `file_changes` table. The dedicated CLI route is `POST /api/protocol/record-change-rationales`.
|
|
9
9
|
- `overlord_record_work` (hosted MCP) and `ovld protocol record-work` (CLI) record already-completed chat work as a single review-column mission with a completed objective, file-change rationales, and the standard Gemini delivery summary — no `attach`/`deliver`. Hosted MCP requires `projectId` (it never chooses a project implicitly); the CLI resolves the project from the working directory or `--project-id`. The submission format is in [record-work.md](record-work.md). The route is `POST /api/protocol/record-work`.
|
|
10
|
+
- `overlord_update_artifact` (hosted MCP) and `ovld protocol update-artifact` (CLI) revise an existing mission artifact's label, Markdown content, and/or HTTP(S) URL in place. Required: `missionId` / `--mission-id`, `artifactId` / `--artifact-id`, `expectedRevision` / `--expected-revision`. Provide at least one editable field. No session key is required. Same service as REST `PATCH /api/missions/:id/artifacts/:artifactId`. The route is `POST /api/protocol/update-artifact`.
|
|
10
11
|
- Objective attachment tools follow the `<verb>_<noun>` MCP naming: `list_attachments`, `prepare_attachment_upload`, `finalize_attachment_upload`, `get_attachment_download_url`, `upload_attachment_file`. CLI commands use `attachment-*`. `mission_id` / `missionId` is optional for attachment calls when the objective or attachment id lets the server derive mission scope.
|
|
11
|
-
- "Artifacts" in `deliver` are the structured records an agent submits at delivery time (next_steps, test_results, migration, decision, note, url) — not user-uploaded files. Files attached by users live on objectives via the attachment tools above.
|
|
12
|
+
- "Artifacts" in `deliver` are the structured records an agent submits at delivery time (next_steps, test_results, migration, decision, note, url) — not user-uploaded files. Files attached by users live on objectives via the attachment tools above. Prefer `update-artifact` / `overlord_update_artifact` when a later pass must revise an artifact already on the mission.
|
|
@@ -6,7 +6,7 @@ import { promisify } from 'node:util';
|
|
|
6
6
|
const execFileAsync = promisify(execFile);
|
|
7
7
|
const OVLD_BIN = process.env.OVLD_BIN?.trim() || 'ovld';
|
|
8
8
|
const PROTOCOL_VERSION = '2025-06-18';
|
|
9
|
-
const DEFAULT_AGENT = '
|
|
9
|
+
const DEFAULT_AGENT = '__OVERLORD_ADAPTER_KEY__';
|
|
10
10
|
let buffer = Buffer.alloc(0);
|
|
11
11
|
|
|
12
12
|
function send(message) {
|
|
@@ -211,6 +211,10 @@ const tools = [
|
|
|
211
211
|
missionId: stringProperty('Mission UUID or workspace display id.'),
|
|
212
212
|
sessionKey: stringProperty('Session key returned by overlord_attach_session.'),
|
|
213
213
|
summary: stringProperty('Delivery summary.'),
|
|
214
|
+
artifacts: {
|
|
215
|
+
type: 'array',
|
|
216
|
+
description: 'Optional mission artifacts to persist with this delivery.'
|
|
217
|
+
},
|
|
214
218
|
noFileChanges: {
|
|
215
219
|
type: 'boolean',
|
|
216
220
|
description: 'Set true when the MCP run changed no files.'
|
|
@@ -235,6 +239,26 @@ const tools = [
|
|
|
235
239
|
['missionId', 'sessionKey', 'summary']
|
|
236
240
|
)
|
|
237
241
|
},
|
|
242
|
+
{
|
|
243
|
+
name: 'overlord_update_artifact',
|
|
244
|
+
title: 'Update mission artifact',
|
|
245
|
+
description:
|
|
246
|
+
'Revise an existing mission artifact in place (label, Markdown content, and/or URL) using optimistic concurrency via expectedRevision.',
|
|
247
|
+
inputSchema: objectSchema(
|
|
248
|
+
{
|
|
249
|
+
missionId: stringProperty('Mission UUID or workspace display id.'),
|
|
250
|
+
artifactId: stringProperty('Artifact id from mission context.'),
|
|
251
|
+
expectedRevision: {
|
|
252
|
+
type: 'number',
|
|
253
|
+
description: 'Current artifact.revision. Stale values return a conflict error.'
|
|
254
|
+
},
|
|
255
|
+
label: stringProperty('Optional new human-facing label.'),
|
|
256
|
+
contentText: stringProperty('Optional new Markdown/text content.'),
|
|
257
|
+
externalUrl: stringProperty('Optional HTTP(S) URL.')
|
|
258
|
+
},
|
|
259
|
+
['missionId', 'artifactId', 'expectedRevision']
|
|
260
|
+
)
|
|
261
|
+
},
|
|
238
262
|
{
|
|
239
263
|
name: 'overlord_record_work',
|
|
240
264
|
title: 'Record completed work as a mission',
|
|
@@ -360,6 +384,7 @@ function callOverlordTool(name, args) {
|
|
|
360
384
|
'session-key': requiredString(args, 'sessionKey'),
|
|
361
385
|
summary: requiredString(args, 'summary'),
|
|
362
386
|
...(args.noFileChanges === true ? { 'no-file-changes': true } : {}),
|
|
387
|
+
...(Array.isArray(args.artifacts) ? { 'artifacts-json': args.artifacts } : {}),
|
|
363
388
|
...(Array.isArray(args.changeRationales)
|
|
364
389
|
? { 'change-rationales-json': args.changeRationales }
|
|
365
390
|
: {}),
|
|
@@ -387,6 +412,25 @@ function callOverlordTool(name, args) {
|
|
|
387
412
|
: {})
|
|
388
413
|
});
|
|
389
414
|
}
|
|
415
|
+
if (name === 'overlord_update_artifact') {
|
|
416
|
+
if (typeof args.expectedRevision !== 'number' || !Number.isInteger(args.expectedRevision)) {
|
|
417
|
+
throw new Error('expectedRevision must be an integer');
|
|
418
|
+
}
|
|
419
|
+
const hasLabel = typeof args.label === 'string';
|
|
420
|
+
const hasContentText = typeof args.contentText === 'string';
|
|
421
|
+
const hasExternalUrl = typeof args.externalUrl === 'string';
|
|
422
|
+
if (!hasLabel && !hasContentText && !hasExternalUrl) {
|
|
423
|
+
throw new Error('Provide at least one of label, contentText, or externalUrl');
|
|
424
|
+
}
|
|
425
|
+
return runProtocol('update-artifact', {
|
|
426
|
+
'mission-id': requiredString(args, 'missionId'),
|
|
427
|
+
'artifact-id': requiredString(args, 'artifactId'),
|
|
428
|
+
'expected-revision': String(Math.trunc(args.expectedRevision)),
|
|
429
|
+
...(hasLabel ? { label: args.label } : {}),
|
|
430
|
+
...(hasContentText ? { 'content-text': args.contentText } : {}),
|
|
431
|
+
...(hasExternalUrl ? { 'external-url': args.externalUrl } : {})
|
|
432
|
+
});
|
|
433
|
+
}
|
|
390
434
|
if (name === 'overlord_record_work') {
|
|
391
435
|
return runProtocol('record-work', {
|
|
392
436
|
'project-id': requiredString(args, 'projectId'),
|
|
@@ -433,7 +477,7 @@ process.stdin.on('data', async chunk => {
|
|
|
433
477
|
result: {
|
|
434
478
|
protocolVersion: PROTOCOL_VERSION,
|
|
435
479
|
capabilities: { tools: { listChanged: false } },
|
|
436
|
-
serverInfo: { name: 'overlord-
|
|
480
|
+
serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.10' }
|
|
437
481
|
}
|
|
438
482
|
});
|
|
439
483
|
continue;
|
|
@@ -46,6 +46,25 @@ Required content:
|
|
|
46
46
|
- Do not continue implementation after delivery unless follow-up execution is explicitly requested.
|
|
47
47
|
- Run local repair/diagnostic commands before asking the user to fix connector setup.
|
|
48
48
|
|
|
49
|
+
## Canonical Local MCP Shim
|
|
50
|
+
|
|
51
|
+
Source location:
|
|
52
|
+
|
|
53
|
+
- `connectors/core/scripts/overlord-mcp.mjs`
|
|
54
|
+
|
|
55
|
+
Codex, Cursor, and Antigravity each install a local stdio MCP bridge that delegates to `ovld protocol`. All three are rendered from this one core script at `ovld agent-setup` time: the adapter key is substituted for `__OVERLORD_ADAPTER_KEY__` in `DEFAULT_AGENT` and `serverInfo.name`. Adapter directories contain no committed copy — edit the core file.
|
|
56
|
+
|
|
57
|
+
Requirements:
|
|
58
|
+
|
|
59
|
+
- The rendered shim must remain a standalone runnable `.mjs`; harnesses start it directly from the install path, so no bundler or repo-local import may appear at runtime.
|
|
60
|
+
- Adapter-specific behavior beyond the agent identifier belongs in the adapter, not in a fork of the shim.
|
|
61
|
+
- The shim tool list must stay in parity with the hosted MCP catalog (`mcp/tool-catalog.ts`).
|
|
62
|
+
- `serverInfo.version` follows `connectors/VERSION` through `scripts/sync-connector-versions.mjs`.
|
|
63
|
+
|
|
64
|
+
## Adapter Capability Differences
|
|
65
|
+
|
|
66
|
+
Adapters intentionally differ in which mechanisms they ship. The per-adapter matrix, the omissions that are decisions, and the gaps that are merely unported are recorded in the [connectors module README](../README.md#adapter-capability-matrix). Update that table when an adapter gains or drops a mechanism.
|
|
67
|
+
|
|
49
68
|
## Codex Connector
|
|
50
69
|
|
|
51
70
|
Requirements:
|
|
@@ -50,7 +50,7 @@ fingerprint.
|
|
|
50
50
|
|
|
51
51
|
| Concern | Owner | Overlord storage | Notes |
|
|
52
52
|
| --- | --- | --- | --- |
|
|
53
|
-
| Built-in agent connector capabilities | Overlord | Connector registry or static config | Examples: `codex`, `claude`, `cursor`. |
|
|
53
|
+
| Built-in agent connector capabilities | Overlord | Connector registry or static config | Examples: `codex`, `claude`, `cursor`. Which mechanisms each adapter ships, and which omissions are deliberate, are recorded in the [adapter capability matrix](../README.md#adapter-capability-matrix). |
|
|
54
54
|
| Agents and models available by default | Workspace | `workspaces.settings_json`, future `workspace_agent_catalog` | Model config is workspace-level, not project-level. |
|
|
55
55
|
| Personal custom harness extensions | User | `user_harness_extensions` | User-owned source of truth for draft/private custom connectors. |
|
|
56
56
|
| Workspace custom harness extensions | Workspace admin/member with permission | `workspace_harness_extensions` | Workspace-installed catalog entries, optionally copied from a personal extension version. |
|