overlord-cli 0.2608181022.0 → 0.2608181528.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/VERSION +1 -1
- package/dist/connectors/adapters/antigravity/plugin.json +1 -1
- package/dist/connectors/adapters/antigravity/skills/attach.md +5 -0
- package/dist/connectors/adapters/antigravity/skills/connect.md +5 -0
- package/dist/connectors/adapters/antigravity/skills/discuss-objective.md +5 -0
- package/dist/connectors/adapters/antigravity/skills/load.md +5 -0
- package/dist/connectors/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/claude/commands/attach.md +5 -0
- package/dist/connectors/adapters/claude/commands/connect.md +5 -0
- package/dist/connectors/adapters/claude/commands/discuss-objective.md +5 -0
- package/dist/connectors/adapters/claude/commands/load.md +5 -0
- package/dist/connectors/adapters/codex/.codex-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/cursor/.cursor-plugin/plugin.json +1 -1
- package/dist/connectors/adapters/cursor/commands/attach.md +5 -0
- package/dist/connectors/adapters/cursor/commands/connect.md +7 -0
- package/dist/connectors/adapters/cursor/commands/discuss-objective.md +5 -0
- package/dist/connectors/adapters/cursor/commands/load.md +7 -0
- package/dist/connectors/core/overlord-mission/SKILL.md +11 -3
- package/dist/connectors/core/overlord-mission/reference/cli.md +24 -0
- package/dist/connectors/core/overlord-mission/reference/mcp.md +3 -2
- package/dist/connectors/core/scripts/overlord-mcp.mjs +68 -25
- package/dist/index.js +458 -308
- package/dist/index.js.map +4 -4
- package/package.json +1 -1
package/dist/connectors/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.3.
|
|
1
|
+
0.3.27
|
|
@@ -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.27",
|
|
5
5
|
"description": "Chat-driven access to Overlord mission protocol workflows through skills and MCP.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Cooperativ",
|
|
@@ -10,7 +10,12 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
10
10
|
Run:
|
|
11
11
|
`ovld protocol attach --mission-id <missionId>`
|
|
12
12
|
|
|
13
|
+
or, when the argument is an objective display id:
|
|
14
|
+
|
|
15
|
+
`ovld protocol attach --objective-id <objectiveId>`
|
|
16
|
+
|
|
13
17
|
Rules:
|
|
18
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
14
19
|
- Use `attach` only when the user explicitly wants this Antigravity session to execute mission work.
|
|
15
20
|
- After the command succeeds, report the returned `SESSION_KEY`.
|
|
16
21
|
- Follow the `overlord-mission` skill workflow after attaching: update while working, ask exactly one blocking question if blocked, and deliver last.
|
|
@@ -10,7 +10,12 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
10
10
|
Run:
|
|
11
11
|
`ovld protocol connect --mission-id <missionId>`
|
|
12
12
|
|
|
13
|
+
or, when the argument is an objective display id:
|
|
14
|
+
|
|
15
|
+
`ovld protocol connect --objective-id <objectiveId>`
|
|
16
|
+
|
|
13
17
|
Rules:
|
|
18
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
14
19
|
- Use `connect`, not `attach`.
|
|
15
20
|
- Do not load extra mission context unless the user explicitly asks for it.
|
|
16
21
|
- After the command succeeds, report the returned `SESSION_KEY` and confirm that future updates should use that mission.
|
|
@@ -10,7 +10,12 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
10
10
|
Run:
|
|
11
11
|
`ovld protocol discuss-objective --mission-id <missionId>`
|
|
12
12
|
|
|
13
|
+
or, when the argument is an objective display id:
|
|
14
|
+
|
|
15
|
+
`ovld protocol discuss-objective --objective-id <objectiveId>`
|
|
16
|
+
|
|
13
17
|
Rules:
|
|
18
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
14
19
|
- Use `discuss-objective`, not `attach`, when the user is opening or discussing a mission but has not asked Antigravity to execute it.
|
|
15
20
|
- Do not create or switch sessions.
|
|
16
21
|
- Summarize the returned objective state for the user.
|
|
@@ -10,7 +10,12 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
10
10
|
Run:
|
|
11
11
|
`ovld protocol load-context --mission-id <missionId>`
|
|
12
12
|
|
|
13
|
+
or, when the argument is an objective display id:
|
|
14
|
+
|
|
15
|
+
`ovld protocol load-context --objective-id <objectiveId>`
|
|
16
|
+
|
|
13
17
|
Rules:
|
|
18
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
14
19
|
- Use `load-context`, not `attach`.
|
|
15
20
|
- Do not create or switch sessions.
|
|
16
21
|
- Summarize the returned mission details, history, artifacts, and shared context for the user.
|
|
@@ -12,7 +12,12 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
12
12
|
Run:
|
|
13
13
|
`ovld protocol attach --mission-id <missionId>`
|
|
14
14
|
|
|
15
|
+
or, when the argument is an objective display id:
|
|
16
|
+
|
|
17
|
+
`ovld protocol attach --objective-id <objectiveId>`
|
|
18
|
+
|
|
15
19
|
Rules:
|
|
20
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
16
21
|
- Use `attach` only when the user explicitly wants this Claude session to execute mission work.
|
|
17
22
|
- After the command succeeds, report the returned `SESSION_KEY`.
|
|
18
23
|
- Follow the `overlord-mission` skill workflow after attaching: update while working, ask exactly one blocking question if blocked, and deliver last.
|
|
@@ -13,7 +13,12 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
13
13
|
Run:
|
|
14
14
|
`ovld protocol connect --mission-id <missionId>`
|
|
15
15
|
|
|
16
|
+
or, when the argument is an objective display id:
|
|
17
|
+
|
|
18
|
+
`ovld protocol connect --objective-id <objectiveId>`
|
|
19
|
+
|
|
16
20
|
Rules:
|
|
21
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
17
22
|
- Use `connect`, not `attach`.
|
|
18
23
|
- Do not load extra mission context unless the user explicitly asks for it.
|
|
19
24
|
- After the command succeeds, report the returned `SESSION_KEY` and confirm that future updates should use that mission.
|
|
@@ -12,7 +12,12 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
12
12
|
Run:
|
|
13
13
|
`ovld protocol discuss-objective --mission-id <missionId>`
|
|
14
14
|
|
|
15
|
+
or, when the argument is an objective display id:
|
|
16
|
+
|
|
17
|
+
`ovld protocol discuss-objective --objective-id <objectiveId>`
|
|
18
|
+
|
|
15
19
|
Rules:
|
|
20
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
16
21
|
- Use `discuss-objective`, not `attach`, when the user is opening or discussing a mission but has not asked Claude to execute it.
|
|
17
22
|
- Do not create or switch sessions.
|
|
18
23
|
- Summarize the returned objective state for the user.
|
|
@@ -14,7 +14,12 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
14
14
|
Run:
|
|
15
15
|
`ovld protocol load-context --mission-id <missionId>`
|
|
16
16
|
|
|
17
|
+
or, when the argument is an objective display id:
|
|
18
|
+
|
|
19
|
+
`ovld protocol load-context --objective-id <objectiveId>`
|
|
20
|
+
|
|
17
21
|
Rules:
|
|
22
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
18
23
|
- Use `load-context`, not `attach`.
|
|
19
24
|
- Do not create or switch sessions.
|
|
20
25
|
- Summarize the returned mission details, history, artifacts, and shared context for the user.
|
|
@@ -6,7 +6,12 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
6
6
|
Run:
|
|
7
7
|
`ovld protocol attach --mission-id <missionId>`
|
|
8
8
|
|
|
9
|
+
or, when the argument is an objective display id:
|
|
10
|
+
|
|
11
|
+
`ovld protocol attach --objective-id <objectiveId>`
|
|
12
|
+
|
|
9
13
|
Rules:
|
|
14
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
10
15
|
- Use attach only when the user explicitly wants this session to execute mission work.
|
|
11
16
|
- After the command succeeds, report the returned `SESSION_KEY`.
|
|
12
17
|
- Follow the `overlord-mission` skill workflow after attaching: update while working, ask exactly one blocking question if blocked, and deliver last.
|
|
@@ -4,3 +4,10 @@ Use the text after `/connect` as the mission ID.
|
|
|
4
4
|
|
|
5
5
|
Run:
|
|
6
6
|
`ovld protocol connect --mission-id <missionId>`
|
|
7
|
+
|
|
8
|
+
or, when the argument is an objective display id:
|
|
9
|
+
|
|
10
|
+
`ovld protocol connect --objective-id <objectiveId>`
|
|
11
|
+
|
|
12
|
+
Rules:
|
|
13
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
@@ -6,6 +6,11 @@ If no mission ID was provided, ask the user for one and stop.
|
|
|
6
6
|
Run:
|
|
7
7
|
`ovld protocol discuss-objective --mission-id <missionId>`
|
|
8
8
|
|
|
9
|
+
or, when the argument is an objective display id:
|
|
10
|
+
|
|
11
|
+
`ovld protocol discuss-objective --objective-id <objectiveId>`
|
|
12
|
+
|
|
9
13
|
Rules:
|
|
14
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
10
15
|
- Use this when the user wants to open or discuss a mission, not execute it.
|
|
11
16
|
- Do not attach after this command unless the user explicitly asks to execute.
|
|
@@ -5,5 +5,12 @@ Use the text after `/load` as the mission ID.
|
|
|
5
5
|
Run:
|
|
6
6
|
`ovld protocol load-context --mission-id <missionId>`
|
|
7
7
|
|
|
8
|
+
or, when the argument is an objective display id:
|
|
9
|
+
|
|
10
|
+
`ovld protocol load-context --objective-id <objectiveId>`
|
|
11
|
+
|
|
8
12
|
When you open or discuss an existing mission that has a draft objective, submit it with:
|
|
9
13
|
`ovld protocol discuss-objective --mission-id <missionId>`
|
|
14
|
+
|
|
15
|
+
Rules:
|
|
16
|
+
- The argument may be a mission display id (`coo:756`) or an objective display id (`coo:756.k7xm`). An objective display id already names its mission, so pass it as `--objective-id` on its own — do not split it or pass it as `--mission-id`.
|
|
@@ -15,6 +15,8 @@ Use this mode when the prompt already contains a mission ID or explicitly says t
|
|
|
15
15
|
|
|
16
16
|
**`<mission_id>` is always the short display id** — `coo:695`, `1:899`: a workspace prefix, a colon, and a number. Pass it as `--mission-id`. **`<objective_id>`** is the objective display id (`coo:695.k7xm`) or UUID; pass it as `--objective-id` when you know which objective to execute. Never pass an objective id as `--mission-id`. If the prompt includes `OVERLORD_OBJECTIVE_ID` or an Objective ID line, include `--objective-id` on attach. If the only id you can find is a bare UUID with no mission display id, re-read the prompt or run `ovld protocol search-missions` rather than guessing.
|
|
17
17
|
|
|
18
|
+
**An objective display id is a complete address.** `coo:695.k7xm` already spells its mission, so `--mission-id` is optional on every command whenever you pass a full objective display id as `--objective-id`; Overlord derives `coo:695` from it. This is the identifier to reach for when reconnecting to a mission that is running more than one objective, where "the active objective" is ambiguous and a mission id alone is not enough. An objective **UUID** names no mission, so it still needs `--mission-id` alongside it.
|
|
19
|
+
|
|
18
20
|
1. Attach first with `ovld protocol attach --mission-id <mission_id> [--objective-id <objective_id>]`.
|
|
19
21
|
2. The attach response prints JSON to stdout containing `session.sessionKey`. The CLI also persists this key automatically so subsequent `ovld protocol` commands in the same working directory resolve it without `--session-key`. If auto-resolution fails, pass `--session-key <sessionKey>` explicitly on every subsequent call.
|
|
20
22
|
3. Treat the Overlord mission prompt as authoritative for the objective, constraints, and delivery target. Begin executing the current objective immediately after attach; do not wait for more instructions or ask for confirmation. This differs from `connect` or `load-context`, which only retrieve mission context and never imply the agent should act.
|
|
@@ -61,7 +63,7 @@ ovld protocol add-objectives --mission-id <mission_id> --objectives-json '[{"obj
|
|
|
61
63
|
|
|
62
64
|
Discussing or otherwise opening a mission from within a chat should cause the draft objective to be marked **submitted** — this signals the mission is in active discussion with an agent, but not yet being executed. Only an explicit order to execute (e.g. "execute this", "do this", "start working on it") should cause you to **attach** to the mission and trigger execution.
|
|
63
65
|
|
|
64
|
-
- **Discussing / opening a mission** → `ovld protocol discuss-objective --mission-id $MISSION_ID` (draft → submitted, no session).
|
|
66
|
+
- **Discussing / opening a mission** → `ovld protocol discuss-objective --mission-id $MISSION_ID` (draft → submitted, no session). Add `--objective-id <objective_id>` when the mission holds more than one draft and you mean a specific one.
|
|
65
67
|
- **Creating a mission** via `ovld protocol create` keeps the objective in `draft` state.
|
|
66
68
|
- **Explicitly ordered to execute** → `ovld protocol attach --mission-id $MISSION_ID` (draft/submitted → executing, session begins).
|
|
67
69
|
|
|
@@ -78,9 +80,9 @@ Use this mode when the conversation starts normally and the user asks the agent
|
|
|
78
80
|
- If the user wants to **add more objectives to an existing mission** (not create a new mission), use `ovld protocol add-objectives --mission-id <mission_id> --objectives-json '[{"objective":"..."}]'` instead.
|
|
79
81
|
2. Default to `create` for new missions. Only use `ovld protocol prompt --agent <agent-identifier> --objectives-json '[{"objective":"..."}]'` when the user explicitly asks to create and execute immediately.
|
|
80
82
|
`prompt` creates the mission in `execute` status and attaches immediately.
|
|
81
|
-
3. If the user already has a mission ID and only wants to inspect it, run `ovld protocol load-context --mission-id <mission_id>`.
|
|
83
|
+
3. If the user already has a mission ID and only wants to inspect it, run `ovld protocol load-context --mission-id <mission_id>`. To read one specific objective's context — the only way to read context on a mission running objectives in parallel — add `--objective-id <objective_id>` (or pass it alone).
|
|
82
84
|
When you open or discuss an existing mission that has a draft objective, submit it with `ovld protocol discuss-objective --mission-id <mission_id>`.
|
|
83
|
-
4. If the user wants to route the current session onto an existing mission by ID, run `ovld protocol connect --mission-id <mission_id
|
|
85
|
+
4. If the user wants to route the current session onto an existing mission by ID, run `ovld protocol connect --mission-id <mission_id>` (add `--objective-id <objective_id>` to pin the session to a specific objective).
|
|
84
86
|
5. If the user wants to establish a persistent session with a mission by ID, run `ovld protocol attach --mission-id <mission_id>`.
|
|
85
87
|
6. If the user wants to find a mission but does not know the ID, run `ovld protocol search-missions --query "..." --status next-up,execute` and ask the user to confirm.
|
|
86
88
|
7. If you need to understand project routing before prompting, use `ovld protocol discover-project`.
|
|
@@ -96,8 +98,13 @@ For mission creation examples, project discovery, and `--objectives-json` format
|
|
|
96
98
|
|
|
97
99
|
```bash
|
|
98
100
|
ovld protocol attach --mission-id $MISSION_ID
|
|
101
|
+
ovld protocol attach --mission-id $MISSION_ID --objective-id $OBJECTIVE_ID # pin the objective
|
|
102
|
+
ovld protocol attach --objective-id $OBJECTIVE_ID # display id only
|
|
99
103
|
```
|
|
100
104
|
|
|
105
|
+
The third form works because an objective display id (`coo:695.k7xm`) already
|
|
106
|
+
names its mission — use it when reconnecting and the mission id is not at hand.
|
|
107
|
+
|
|
101
108
|
In a git workspace, `attach` records a VCS baseline (changed file paths from local `git status`) so delivery can compute the run-attributable delta automatically.
|
|
102
109
|
|
|
103
110
|
### Update
|
|
@@ -394,6 +401,7 @@ Field shape, inline vs stdin piping, and `record-change-rationales` syntax are i
|
|
|
394
401
|
## Rules
|
|
395
402
|
|
|
396
403
|
- Always attach first and always deliver last once you are on a mission.
|
|
404
|
+
- `--objective-id` is accepted anywhere `--mission-id` is, and a full objective display id (`coo:695.k7xm`) makes `--mission-id` optional. Prefer passing it on every call once you know which objective you are running, so events, artifacts, and file changes land on that objective rather than on whichever one Overlord would rediscover.
|
|
397
405
|
- `attach` is itself the go-ahead to start work — proceed with implementation immediately after attaching, without pausing to ask the user whether to continue. Only `connect` or `load-context` are for inspection without action; do not treat `attach` the same way.
|
|
398
406
|
- Use `ovld protocol` commands and the connector's native commands/tools instead of ad hoc scripts.
|
|
399
407
|
- Do not invent protocol subcommands. Use `ovld protocol help` when unsure.
|
|
@@ -1,9 +1,33 @@
|
|
|
1
1
|
# CLI Command Reference
|
|
2
2
|
|
|
3
|
+
## Addressing a mission or an objective
|
|
4
|
+
|
|
5
|
+
Every `ovld protocol` subcommand that takes `--mission-id` also takes
|
|
6
|
+
`--objective-id`, and an objective **display** id (`coo:756.k7xm`) already names
|
|
7
|
+
its mission — so `--mission-id` is optional whenever you pass one:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ovld protocol update --objective-id coo:756.k7xm --summary "..." # mission derived
|
|
11
|
+
ovld protocol update --mission-id coo:756 --objective-id coo:756.k7xm # same thing
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Use the objective form when reconnecting to a mission that is running more than
|
|
15
|
+
one objective: "the active objective" is ambiguous there, and commands that
|
|
16
|
+
rediscover it (`attach`, `load-context`, `connect`) fail with
|
|
17
|
+
`ambiguous_active_objective` until you name one.
|
|
18
|
+
|
|
19
|
+
An objective **UUID** carries no parent mission, so it still needs
|
|
20
|
+
`--mission-id` next to it. The CLI also fills `--objective-id` in from
|
|
21
|
+
`OVERLORD_OBJECTIVE_ID` on session-scoped commands, so a launched agent rarely
|
|
22
|
+
types it at all. Two commands deliberately never inherit it:
|
|
23
|
+
`update-objective` (the id names the row being changed) and `discuss-objective`
|
|
24
|
+
(it wants a draft, not the objective already executing).
|
|
25
|
+
|
|
3
26
|
## Attach
|
|
4
27
|
|
|
5
28
|
```bash
|
|
6
29
|
ovld protocol attach --mission-id $MISSION_ID [--objective-id $OVERLORD_OBJECTIVE_ID]
|
|
30
|
+
ovld protocol attach --objective-id coo:756.k7xm
|
|
7
31
|
```
|
|
8
32
|
|
|
9
33
|
In a git workspace, `attach` records a VCS baseline (changed file paths from local `git status`) so delivery can compute the run-attributable delta automatically.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# MCP And API Defaults
|
|
2
2
|
|
|
3
|
+
- Every mission-scoped tool accepts `objectiveId` (hosted MCP) / `objective_id` (local shim) alongside `missionId`, taking an objective UUID or a display id such as `coo:756.k7xm`. A display id already names its mission, so `missionId` is **optional** whenever one is supplied — `overlord_load_mission_context`, `overlord_attach_session`, `overlord_update_session`, `overlord_deliver_session`, `overlord_add_artifact`, `overlord_add_objectives`, and `overlord_update_artifact` all resolve the mission from it. An objective **UUID** names no mission and still needs `missionId`. On `overlord_load_mission_context` and `overlord_attach_session` the objective is also a *pin*: it selects which objective to read or execute, which is the only way to address a mission that is running objectives in parallel.
|
|
3
4
|
- API requires `agentIdentifier` and `connectionMethod` on attach/connect/prompt. Connector adapters set the appropriate agent identifier; the CLI uses `cli` as the connection method, and the MCP tool defaults to `mcp`. Override with `--agent` / `--method` when calling from a different runtime.
|
|
4
5
|
- Hosted Overlord MCP (`/mcp`) uses camelCase JSON keys (`missionId`, `sessionKey`, `deviceFingerprint`) matching `POST /api/protocol/*` bodies. The local shim uses snake_case keys mapped to CLI flags (`mission_id`, `session_key`, `device_fingerprint`). Some local-only operations (`connect`, `revert`, `prompt`, runner queue tools) intentionally remain out of hosted MCP for now.
|
|
5
6
|
- `discover_project` accepts an explicit project id (`projectId` hosted, `project_id` local shim) or a working directory (`workingDirectory` hosted, `working_directory` local shim). When resolving by directory and a device fingerprint is available, include `deviceFingerprint` / `device_fingerprint` so resource-directory matching prefers the current device.
|
|
@@ -7,8 +8,8 @@
|
|
|
7
8
|
- 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
9
|
- `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
10
|
- `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_add_artifact` (hosted MCP) and `ovld protocol add-artifact` (CLI) create a mission artifact during a turn without delivering. Required: `
|
|
11
|
-
- `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: `
|
|
11
|
+
- `overlord_add_artifact` (hosted MCP) and `ovld protocol add-artifact` (CLI) create a mission artifact during a turn without delivering. Required: `type` / `--type`, `label` / `--label`, mission scope (`missionId` / `--mission-id`, or an objective display id as `objectiveId` / `--objective-id`), plus at least one of `contentText` / `--content-text`/`--content-text-file` or `externalUrl` / `--external-url`. Optional `sessionKey` / `--session-key` stamps session/objective provenance; `objectiveId` / `--objective-id` does the same when there is no live session, and the session key wins if both are given. Same service as REST `POST /api/missions/:id/artifacts`. The route is `POST /api/protocol/add-artifact`.
|
|
12
|
+
- `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: `artifactId` / `--artifact-id`, `expectedRevision` / `--expected-revision`, and mission scope (`missionId` / `--mission-id`, or an objective display id as `objectiveId` / `--objective-id`). 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`.
|
|
12
13
|
- `overlord_create_mission` / `overlord_add_objectives` accept optional `autoAdvance` (boolean; default false). `overlord_update_objective` (`objectiveId` plus optional `autoAdvance` and/or `instructionText`) and `ovld protocol update-objective --objective-id <id>` with `--auto-advance|--no-auto-advance` and/or `--instruction-text|--instruction-text-file` update an existing objective. Instruction text is editable only in `draft` or `future` state. The route is `POST /api/protocol/update-objective`.
|
|
13
14
|
- 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.
|
|
14
15
|
- "Artifacts" may be published mid-turn with `add-artifact` / `overlord_add_artifact`, revised with `update-artifact` / `overlord_update_artifact`, or attached at `deliver` 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.
|
|
@@ -164,12 +164,15 @@ const tools = [
|
|
|
164
164
|
'Load structured mission context, objectives, history, artifacts, and shared context.',
|
|
165
165
|
inputSchema: objectSchema(
|
|
166
166
|
{
|
|
167
|
-
missionId: stringProperty('Mission UUID or workspace display id such as coo:
|
|
167
|
+
missionId: stringProperty('Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'),
|
|
168
|
+
objectiveId: stringProperty(
|
|
169
|
+
'Objective UUID or display id such as coo:756.k7xm. Returns that objective as the current one instead of rediscovering the mission active objective.'
|
|
170
|
+
),
|
|
168
171
|
executionTargetId: stringProperty(
|
|
169
172
|
'Optional local execution target id for resolving sibling project resource paths.'
|
|
170
173
|
)
|
|
171
174
|
},
|
|
172
|
-
[
|
|
175
|
+
[]
|
|
173
176
|
)
|
|
174
177
|
},
|
|
175
178
|
{
|
|
@@ -178,7 +181,10 @@ const tools = [
|
|
|
178
181
|
description: 'Append one or more draft objectives to an existing mission.',
|
|
179
182
|
inputSchema: objectSchema(
|
|
180
183
|
{
|
|
181
|
-
missionId: stringProperty('Mission UUID or workspace display id.'),
|
|
184
|
+
missionId: stringProperty('Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'),
|
|
185
|
+
objectiveId: stringProperty(
|
|
186
|
+
'Objective UUID or display id such as coo:756.k7xm. Used only to supply missionId when it is omitted.'
|
|
187
|
+
),
|
|
182
188
|
objectives: {
|
|
183
189
|
type: 'array',
|
|
184
190
|
description:
|
|
@@ -193,7 +199,7 @@ const tools = [
|
|
|
193
199
|
})
|
|
194
200
|
}
|
|
195
201
|
},
|
|
196
|
-
['
|
|
202
|
+
['objectives']
|
|
197
203
|
)
|
|
198
204
|
},
|
|
199
205
|
{
|
|
@@ -221,7 +227,7 @@ const tools = [
|
|
|
221
227
|
'Attach an MCP-hosted agent session to a mission before update/ask/deliver. Pass objectiveId when the caller already knows which objective to execute.',
|
|
222
228
|
inputSchema: objectSchema(
|
|
223
229
|
{
|
|
224
|
-
missionId: stringProperty('Mission UUID or workspace display id.'),
|
|
230
|
+
missionId: stringProperty('Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'),
|
|
225
231
|
objectiveId: stringProperty(
|
|
226
232
|
'Optional objective UUID or display id (e.g. coo:756.k7xm). Pins attach to that objective.'
|
|
227
233
|
),
|
|
@@ -231,7 +237,7 @@ const tools = [
|
|
|
231
237
|
'Optional local execution target id for resolving sibling project resource paths.'
|
|
232
238
|
)
|
|
233
239
|
},
|
|
234
|
-
[
|
|
240
|
+
[]
|
|
235
241
|
)
|
|
236
242
|
},
|
|
237
243
|
{
|
|
@@ -240,13 +246,16 @@ const tools = [
|
|
|
240
246
|
description: 'Post an update, alert, decision, or discussion summary for an attached session.',
|
|
241
247
|
inputSchema: objectSchema(
|
|
242
248
|
{
|
|
243
|
-
missionId: stringProperty('Mission UUID or workspace display id.'),
|
|
249
|
+
missionId: stringProperty('Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'),
|
|
250
|
+
objectiveId: stringProperty(
|
|
251
|
+
'Objective UUID or display id such as coo:756.k7xm. Supplies missionId when it is omitted; the session key still determines which objective the event lands on.'
|
|
252
|
+
),
|
|
244
253
|
sessionKey: stringProperty('Session key returned by overlord_attach_session.'),
|
|
245
254
|
summary: stringProperty('Update text.'),
|
|
246
255
|
phase: stringProperty('Optional protocol phase.'),
|
|
247
256
|
eventType: stringProperty('Optional event type. Defaults to update.')
|
|
248
257
|
},
|
|
249
|
-
['
|
|
258
|
+
['sessionKey', 'summary']
|
|
250
259
|
)
|
|
251
260
|
},
|
|
252
261
|
{
|
|
@@ -256,7 +265,10 @@ const tools = [
|
|
|
256
265
|
'Deliver an attached session with explicit summary, optional change rationales, and optional human-action/tradeoff evidence.',
|
|
257
266
|
inputSchema: objectSchema(
|
|
258
267
|
{
|
|
259
|
-
missionId: stringProperty('Mission UUID or workspace display id.'),
|
|
268
|
+
missionId: stringProperty('Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'),
|
|
269
|
+
objectiveId: stringProperty(
|
|
270
|
+
'Objective UUID or display id such as coo:756.k7xm. Supplies missionId when it is omitted; the session key still determines which objective is delivered.'
|
|
271
|
+
),
|
|
260
272
|
sessionKey: stringProperty('Session key returned by overlord_attach_session.'),
|
|
261
273
|
summary: stringProperty('Delivery summary.'),
|
|
262
274
|
artifacts: {
|
|
@@ -284,7 +296,7 @@ const tools = [
|
|
|
284
296
|
deferredWork: { type: 'array', description: 'Intentionally deferred work.' },
|
|
285
297
|
assumptions: { type: 'array', description: 'Material implementation assumptions.' }
|
|
286
298
|
},
|
|
287
|
-
['
|
|
299
|
+
['sessionKey', 'summary']
|
|
288
300
|
)
|
|
289
301
|
},
|
|
290
302
|
{
|
|
@@ -294,7 +306,10 @@ const tools = [
|
|
|
294
306
|
'Create a mission artifact during a turn without delivering (plan, notes, decision, URL). Provide type, label, and at least one of contentText or externalUrl. Optional sessionKey stamps provenance. Revise later with overlord_update_artifact.',
|
|
295
307
|
inputSchema: objectSchema(
|
|
296
308
|
{
|
|
297
|
-
missionId: stringProperty('Mission UUID or workspace display id.'),
|
|
309
|
+
missionId: stringProperty('Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'),
|
|
310
|
+
objectiveId: stringProperty(
|
|
311
|
+
'Objective UUID or display id such as coo:756.k7xm. Stamps objective provenance when no live sessionKey is available.'
|
|
312
|
+
),
|
|
298
313
|
type: stringProperty(
|
|
299
314
|
'Artifact type: test_results, next_steps, note, url, decision, or migration.'
|
|
300
315
|
),
|
|
@@ -303,7 +318,7 @@ const tools = [
|
|
|
303
318
|
externalUrl: stringProperty('Optional HTTP(S) URL.'),
|
|
304
319
|
sessionKey: stringProperty('Optional live session key from attach.')
|
|
305
320
|
},
|
|
306
|
-
['
|
|
321
|
+
['type', 'label']
|
|
307
322
|
)
|
|
308
323
|
},
|
|
309
324
|
{
|
|
@@ -313,7 +328,10 @@ const tools = [
|
|
|
313
328
|
'Revise an existing mission artifact in place (label, Markdown content, and/or URL) using optimistic concurrency via expectedRevision.',
|
|
314
329
|
inputSchema: objectSchema(
|
|
315
330
|
{
|
|
316
|
-
missionId: stringProperty('Mission UUID or workspace display id.'),
|
|
331
|
+
missionId: stringProperty('Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'),
|
|
332
|
+
objectiveId: stringProperty(
|
|
333
|
+
'Objective UUID or display id such as coo:756.k7xm. Used only to supply missionId when it is omitted.'
|
|
334
|
+
),
|
|
317
335
|
artifactId: stringProperty('Artifact id from mission context.'),
|
|
318
336
|
expectedRevision: {
|
|
319
337
|
type: 'number',
|
|
@@ -323,7 +341,7 @@ const tools = [
|
|
|
323
341
|
contentText: stringProperty('Optional new Markdown/text content.'),
|
|
324
342
|
externalUrl: stringProperty('Optional HTTP(S) URL.')
|
|
325
343
|
},
|
|
326
|
-
['
|
|
344
|
+
['artifactId', 'expectedRevision']
|
|
327
345
|
)
|
|
328
346
|
},
|
|
329
347
|
{
|
|
@@ -366,6 +384,32 @@ function requiredString(args, name) {
|
|
|
366
384
|
return value;
|
|
367
385
|
}
|
|
368
386
|
|
|
387
|
+
/** Mission display id spelled inside an objective display id (`coo:756.k7xm`). */
|
|
388
|
+
function missionFromObjectiveRef(ref) {
|
|
389
|
+
const match =
|
|
390
|
+
typeof ref === 'string' ? /^(.+:\d+)\.[0-9a-hjkmnp-tv-z]{4,5}$/i.exec(ref.trim()) : null;
|
|
391
|
+
return match ? match[1] : null;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Mission/objective addressing shared by every mission-scoped tool: an objective
|
|
396
|
+
* display id already names its mission, so a caller holding only that identifier
|
|
397
|
+
* can address the tool with it. Mirrors `missionScopeFlags` in mcp/server.ts.
|
|
398
|
+
*/
|
|
399
|
+
function missionScopeFlags(args) {
|
|
400
|
+
const objectiveId = optionalString(args, 'objectiveId');
|
|
401
|
+
const missionId = optionalString(args, 'missionId') ?? missionFromObjectiveRef(objectiveId);
|
|
402
|
+
if (!missionId) {
|
|
403
|
+
throw new Error(
|
|
404
|
+
'Missing required argument: missionId (pass it, or an objective display id such as coo:756.k7xm as objectiveId)'
|
|
405
|
+
);
|
|
406
|
+
}
|
|
407
|
+
return {
|
|
408
|
+
'mission-id': missionId,
|
|
409
|
+
...(objectiveId ? { 'objective-id': objectiveId } : {})
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
|
|
369
413
|
function callOverlordTool(name, args) {
|
|
370
414
|
if (name === 'overlord_resolve_project') {
|
|
371
415
|
return runProtocol('discover-project', {
|
|
@@ -425,7 +469,7 @@ function callOverlordTool(name, args) {
|
|
|
425
469
|
}
|
|
426
470
|
if (name === 'overlord_load_mission_context') {
|
|
427
471
|
return runProtocol('load-context', {
|
|
428
|
-
|
|
472
|
+
...missionScopeFlags(args),
|
|
429
473
|
...(optionalString(args, 'executionTargetId')
|
|
430
474
|
? { 'execution-target-id': requiredString(args, 'executionTargetId') }
|
|
431
475
|
: {})
|
|
@@ -434,7 +478,8 @@ function callOverlordTool(name, args) {
|
|
|
434
478
|
if (name === 'overlord_add_objectives') {
|
|
435
479
|
if (!Array.isArray(args.objectives)) throw new Error('objectives must be an array');
|
|
436
480
|
return runProtocol('add-objectives', {
|
|
437
|
-
|
|
481
|
+
// objectiveId here only names the mission; the new objectives are appended.
|
|
482
|
+
'mission-id': missionScopeFlags(args)['mission-id'],
|
|
438
483
|
'objectives-json': args.objectives
|
|
439
484
|
});
|
|
440
485
|
}
|
|
@@ -452,11 +497,8 @@ function callOverlordTool(name, args) {
|
|
|
452
497
|
}
|
|
453
498
|
if (name === 'overlord_attach_session') {
|
|
454
499
|
return runProtocol('attach', {
|
|
455
|
-
|
|
500
|
+
...missionScopeFlags(args),
|
|
456
501
|
agent: optionalString(args, 'agent') ?? DEFAULT_AGENT,
|
|
457
|
-
...(optionalString(args, 'objectiveId')
|
|
458
|
-
? { 'objective-id': requiredString(args, 'objectiveId') }
|
|
459
|
-
: {}),
|
|
460
502
|
...(optionalString(args, 'model') ? { model: requiredString(args, 'model') } : {}),
|
|
461
503
|
...(optionalString(args, 'executionTargetId')
|
|
462
504
|
? { 'execution-target-id': requiredString(args, 'executionTargetId') }
|
|
@@ -465,7 +507,7 @@ function callOverlordTool(name, args) {
|
|
|
465
507
|
}
|
|
466
508
|
if (name === 'overlord_update_session') {
|
|
467
509
|
return runProtocol('update', {
|
|
468
|
-
|
|
510
|
+
...missionScopeFlags(args),
|
|
469
511
|
'session-key': requiredString(args, 'sessionKey'),
|
|
470
512
|
summary: requiredString(args, 'summary'),
|
|
471
513
|
...(optionalString(args, 'phase') ? { phase: requiredString(args, 'phase') } : {}),
|
|
@@ -476,7 +518,7 @@ function callOverlordTool(name, args) {
|
|
|
476
518
|
}
|
|
477
519
|
if (name === 'overlord_deliver_session') {
|
|
478
520
|
return runProtocol('deliver', {
|
|
479
|
-
|
|
521
|
+
...missionScopeFlags(args),
|
|
480
522
|
'session-key': requiredString(args, 'sessionKey'),
|
|
481
523
|
summary: requiredString(args, 'summary'),
|
|
482
524
|
...(args.noFileChanges === true ? { 'no-file-changes': true } : {}),
|
|
@@ -515,7 +557,7 @@ function callOverlordTool(name, args) {
|
|
|
515
557
|
throw new Error('Provide at least one of contentText or externalUrl');
|
|
516
558
|
}
|
|
517
559
|
return runProtocol('add-artifact', {
|
|
518
|
-
|
|
560
|
+
...missionScopeFlags(args),
|
|
519
561
|
type: requiredString(args, 'type'),
|
|
520
562
|
label: requiredString(args, 'label'),
|
|
521
563
|
...(hasContentText ? { 'content-text': args.contentText } : {}),
|
|
@@ -536,7 +578,8 @@ function callOverlordTool(name, args) {
|
|
|
536
578
|
throw new Error('Provide at least one of label, contentText, or externalUrl');
|
|
537
579
|
}
|
|
538
580
|
return runProtocol('update-artifact', {
|
|
539
|
-
|
|
581
|
+
// The artifact is addressed by its own id; objectiveId only scopes the mission.
|
|
582
|
+
'mission-id': missionScopeFlags(args)['mission-id'],
|
|
540
583
|
'artifact-id': requiredString(args, 'artifactId'),
|
|
541
584
|
'expected-revision': String(Math.trunc(args.expectedRevision)),
|
|
542
585
|
...(hasLabel ? { label: args.label } : {}),
|
|
@@ -590,7 +633,7 @@ process.stdin.on('data', async chunk => {
|
|
|
590
633
|
result: {
|
|
591
634
|
protocolVersion: PROTOCOL_VERSION,
|
|
592
635
|
capabilities: { tools: { listChanged: false } },
|
|
593
|
-
serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.
|
|
636
|
+
serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.27' }
|
|
594
637
|
}
|
|
595
638
|
});
|
|
596
639
|
continue;
|