overlord-cli 0.2608181255.0 → 0.2608181615.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/context.md +1 -2
- package/dist/connectors/core/overlord-mission/reference/mcp.md +3 -2
- package/dist/connectors/core/scripts/overlord-mcp.mjs +81 -27
- package/dist/index.js +492 -294
- 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.28
|
|
@@ -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.28",
|
|
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.
|
|
@@ -12,7 +12,7 @@ ovld protocol attachment-upload-file --session-key <sessionKey> --objective-id <
|
|
|
12
12
|
ovld protocol attachment-download-url --session-key <sessionKey> --attachment-id <attachment-id>
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
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`
|
|
15
|
+
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` is a full display ID that lets the server derive the mission; an attachment ID alone does not carry mission scope.
|
|
16
16
|
|
|
17
17
|
## Creating artifacts during a turn
|
|
18
18
|
|
|
@@ -31,4 +31,3 @@ For large artifacts such as planning documents, architecture decisions, research
|
|
|
31
31
|
- Prefer `add-artifact` mid-turn (or a delivery artifact) with a `note` or `decision` type, a concise summary, and the repository file path — not the full document content.
|
|
32
32
|
|
|
33
33
|
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.
|
|
34
|
-
|
|
@@ -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,17 @@ const tools = [
|
|
|
164
164
|
'Load structured mission context, objectives, history, artifacts, and shared context.',
|
|
165
165
|
inputSchema: objectSchema(
|
|
166
166
|
{
|
|
167
|
-
missionId: stringProperty(
|
|
167
|
+
missionId: stringProperty(
|
|
168
|
+
'Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'
|
|
169
|
+
),
|
|
170
|
+
objectiveId: stringProperty(
|
|
171
|
+
'Objective UUID or display id such as coo:756.k7xm. Returns that objective as the current one instead of rediscovering the mission active objective.'
|
|
172
|
+
),
|
|
168
173
|
executionTargetId: stringProperty(
|
|
169
174
|
'Optional local execution target id for resolving sibling project resource paths.'
|
|
170
175
|
)
|
|
171
176
|
},
|
|
172
|
-
[
|
|
177
|
+
[]
|
|
173
178
|
)
|
|
174
179
|
},
|
|
175
180
|
{
|
|
@@ -178,7 +183,12 @@ const tools = [
|
|
|
178
183
|
description: 'Append one or more draft objectives to an existing mission.',
|
|
179
184
|
inputSchema: objectSchema(
|
|
180
185
|
{
|
|
181
|
-
missionId: stringProperty(
|
|
186
|
+
missionId: stringProperty(
|
|
187
|
+
'Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'
|
|
188
|
+
),
|
|
189
|
+
objectiveId: stringProperty(
|
|
190
|
+
'Objective UUID or display id such as coo:756.k7xm. Used only to supply missionId when it is omitted.'
|
|
191
|
+
),
|
|
182
192
|
objectives: {
|
|
183
193
|
type: 'array',
|
|
184
194
|
description:
|
|
@@ -193,7 +203,7 @@ const tools = [
|
|
|
193
203
|
})
|
|
194
204
|
}
|
|
195
205
|
},
|
|
196
|
-
['
|
|
206
|
+
['objectives']
|
|
197
207
|
)
|
|
198
208
|
},
|
|
199
209
|
{
|
|
@@ -221,7 +231,9 @@ const tools = [
|
|
|
221
231
|
'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
232
|
inputSchema: objectSchema(
|
|
223
233
|
{
|
|
224
|
-
missionId: stringProperty(
|
|
234
|
+
missionId: stringProperty(
|
|
235
|
+
'Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'
|
|
236
|
+
),
|
|
225
237
|
objectiveId: stringProperty(
|
|
226
238
|
'Optional objective UUID or display id (e.g. coo:756.k7xm). Pins attach to that objective.'
|
|
227
239
|
),
|
|
@@ -231,7 +243,7 @@ const tools = [
|
|
|
231
243
|
'Optional local execution target id for resolving sibling project resource paths.'
|
|
232
244
|
)
|
|
233
245
|
},
|
|
234
|
-
[
|
|
246
|
+
[]
|
|
235
247
|
)
|
|
236
248
|
},
|
|
237
249
|
{
|
|
@@ -240,13 +252,18 @@ const tools = [
|
|
|
240
252
|
description: 'Post an update, alert, decision, or discussion summary for an attached session.',
|
|
241
253
|
inputSchema: objectSchema(
|
|
242
254
|
{
|
|
243
|
-
missionId: stringProperty(
|
|
255
|
+
missionId: stringProperty(
|
|
256
|
+
'Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'
|
|
257
|
+
),
|
|
258
|
+
objectiveId: stringProperty(
|
|
259
|
+
'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.'
|
|
260
|
+
),
|
|
244
261
|
sessionKey: stringProperty('Session key returned by overlord_attach_session.'),
|
|
245
262
|
summary: stringProperty('Update text.'),
|
|
246
263
|
phase: stringProperty('Optional protocol phase.'),
|
|
247
264
|
eventType: stringProperty('Optional event type. Defaults to update.')
|
|
248
265
|
},
|
|
249
|
-
['
|
|
266
|
+
['sessionKey', 'summary']
|
|
250
267
|
)
|
|
251
268
|
},
|
|
252
269
|
{
|
|
@@ -256,7 +273,12 @@ const tools = [
|
|
|
256
273
|
'Deliver an attached session with explicit summary, optional change rationales, and optional human-action/tradeoff evidence.',
|
|
257
274
|
inputSchema: objectSchema(
|
|
258
275
|
{
|
|
259
|
-
missionId: stringProperty(
|
|
276
|
+
missionId: stringProperty(
|
|
277
|
+
'Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'
|
|
278
|
+
),
|
|
279
|
+
objectiveId: stringProperty(
|
|
280
|
+
'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.'
|
|
281
|
+
),
|
|
260
282
|
sessionKey: stringProperty('Session key returned by overlord_attach_session.'),
|
|
261
283
|
summary: stringProperty('Delivery summary.'),
|
|
262
284
|
artifacts: {
|
|
@@ -284,7 +306,7 @@ const tools = [
|
|
|
284
306
|
deferredWork: { type: 'array', description: 'Intentionally deferred work.' },
|
|
285
307
|
assumptions: { type: 'array', description: 'Material implementation assumptions.' }
|
|
286
308
|
},
|
|
287
|
-
['
|
|
309
|
+
['sessionKey', 'summary']
|
|
288
310
|
)
|
|
289
311
|
},
|
|
290
312
|
{
|
|
@@ -294,7 +316,12 @@ const tools = [
|
|
|
294
316
|
'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
317
|
inputSchema: objectSchema(
|
|
296
318
|
{
|
|
297
|
-
missionId: stringProperty(
|
|
319
|
+
missionId: stringProperty(
|
|
320
|
+
'Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'
|
|
321
|
+
),
|
|
322
|
+
objectiveId: stringProperty(
|
|
323
|
+
'Objective UUID or display id such as coo:756.k7xm. Stamps objective provenance when no live sessionKey is available.'
|
|
324
|
+
),
|
|
298
325
|
type: stringProperty(
|
|
299
326
|
'Artifact type: test_results, next_steps, note, url, decision, or migration.'
|
|
300
327
|
),
|
|
@@ -303,7 +330,7 @@ const tools = [
|
|
|
303
330
|
externalUrl: stringProperty('Optional HTTP(S) URL.'),
|
|
304
331
|
sessionKey: stringProperty('Optional live session key from attach.')
|
|
305
332
|
},
|
|
306
|
-
['
|
|
333
|
+
['type', 'label']
|
|
307
334
|
)
|
|
308
335
|
},
|
|
309
336
|
{
|
|
@@ -313,7 +340,12 @@ const tools = [
|
|
|
313
340
|
'Revise an existing mission artifact in place (label, Markdown content, and/or URL) using optimistic concurrency via expectedRevision.',
|
|
314
341
|
inputSchema: objectSchema(
|
|
315
342
|
{
|
|
316
|
-
missionId: stringProperty(
|
|
343
|
+
missionId: stringProperty(
|
|
344
|
+
'Mission UUID or workspace display id. Optional when objectiveId is a display id such as coo:756.k7xm, which already names its mission.'
|
|
345
|
+
),
|
|
346
|
+
objectiveId: stringProperty(
|
|
347
|
+
'Objective UUID or display id such as coo:756.k7xm. Used only to supply missionId when it is omitted.'
|
|
348
|
+
),
|
|
317
349
|
artifactId: stringProperty('Artifact id from mission context.'),
|
|
318
350
|
expectedRevision: {
|
|
319
351
|
type: 'number',
|
|
@@ -323,7 +355,7 @@ const tools = [
|
|
|
323
355
|
contentText: stringProperty('Optional new Markdown/text content.'),
|
|
324
356
|
externalUrl: stringProperty('Optional HTTP(S) URL.')
|
|
325
357
|
},
|
|
326
|
-
['
|
|
358
|
+
['artifactId', 'expectedRevision']
|
|
327
359
|
)
|
|
328
360
|
},
|
|
329
361
|
{
|
|
@@ -339,7 +371,8 @@ const tools = [
|
|
|
339
371
|
title: stringProperty('Optional mission title.'),
|
|
340
372
|
changeRationales: {
|
|
341
373
|
type: 'array',
|
|
342
|
-
description:
|
|
374
|
+
description:
|
|
375
|
+
'One entry per meaningful file change (filePath, label, summary, why, impact).'
|
|
343
376
|
},
|
|
344
377
|
changedFiles: {
|
|
345
378
|
type: 'array',
|
|
@@ -366,6 +399,26 @@ function requiredString(args, name) {
|
|
|
366
399
|
return value;
|
|
367
400
|
}
|
|
368
401
|
|
|
402
|
+
/**
|
|
403
|
+
* Forward mission/objective addressing to the CLI. The CLI owns the shared
|
|
404
|
+
* `@overlord/contract` parser and derives a mission from a display id before it
|
|
405
|
+
* performs local bookkeeping or calls the backend, so this standalone shim
|
|
406
|
+
* does not carry a second copy of the public-id regex.
|
|
407
|
+
*/
|
|
408
|
+
function missionScopeFlags(args) {
|
|
409
|
+
const objectiveId = optionalString(args, 'objectiveId');
|
|
410
|
+
const missionId = optionalString(args, 'missionId');
|
|
411
|
+
if (!missionId && !objectiveId) {
|
|
412
|
+
throw new Error(
|
|
413
|
+
'Missing required argument: missionId (pass it, or an objective display id such as coo:756.k7xm as objectiveId)'
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
return {
|
|
417
|
+
...(missionId ? { 'mission-id': missionId } : {}),
|
|
418
|
+
...(objectiveId ? { 'objective-id': objectiveId } : {})
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
|
|
369
422
|
function callOverlordTool(name, args) {
|
|
370
423
|
if (name === 'overlord_resolve_project') {
|
|
371
424
|
return runProtocol('discover-project', {
|
|
@@ -425,7 +478,7 @@ function callOverlordTool(name, args) {
|
|
|
425
478
|
}
|
|
426
479
|
if (name === 'overlord_load_mission_context') {
|
|
427
480
|
return runProtocol('load-context', {
|
|
428
|
-
|
|
481
|
+
...missionScopeFlags(args),
|
|
429
482
|
...(optionalString(args, 'executionTargetId')
|
|
430
483
|
? { 'execution-target-id': requiredString(args, 'executionTargetId') }
|
|
431
484
|
: {})
|
|
@@ -434,7 +487,7 @@ function callOverlordTool(name, args) {
|
|
|
434
487
|
if (name === 'overlord_add_objectives') {
|
|
435
488
|
if (!Array.isArray(args.objectives)) throw new Error('objectives must be an array');
|
|
436
489
|
return runProtocol('add-objectives', {
|
|
437
|
-
|
|
490
|
+
...missionScopeFlags(args),
|
|
438
491
|
'objectives-json': args.objectives
|
|
439
492
|
});
|
|
440
493
|
}
|
|
@@ -446,17 +499,18 @@ function callOverlordTool(name, args) {
|
|
|
446
499
|
}
|
|
447
500
|
return runProtocol('update-objective', {
|
|
448
501
|
'objective-id': requiredString(args, 'objectiveId'),
|
|
449
|
-
...(hasAutoAdvance
|
|
502
|
+
...(hasAutoAdvance
|
|
503
|
+
? args.autoAdvance
|
|
504
|
+
? { 'auto-advance': true }
|
|
505
|
+
: { 'no-auto-advance': true }
|
|
506
|
+
: {}),
|
|
450
507
|
...(hasInstructionText ? { 'instruction-text': requiredString(args, 'instructionText') } : {})
|
|
451
508
|
});
|
|
452
509
|
}
|
|
453
510
|
if (name === 'overlord_attach_session') {
|
|
454
511
|
return runProtocol('attach', {
|
|
455
|
-
|
|
512
|
+
...missionScopeFlags(args),
|
|
456
513
|
agent: optionalString(args, 'agent') ?? DEFAULT_AGENT,
|
|
457
|
-
...(optionalString(args, 'objectiveId')
|
|
458
|
-
? { 'objective-id': requiredString(args, 'objectiveId') }
|
|
459
|
-
: {}),
|
|
460
514
|
...(optionalString(args, 'model') ? { model: requiredString(args, 'model') } : {}),
|
|
461
515
|
...(optionalString(args, 'executionTargetId')
|
|
462
516
|
? { 'execution-target-id': requiredString(args, 'executionTargetId') }
|
|
@@ -465,7 +519,7 @@ function callOverlordTool(name, args) {
|
|
|
465
519
|
}
|
|
466
520
|
if (name === 'overlord_update_session') {
|
|
467
521
|
return runProtocol('update', {
|
|
468
|
-
|
|
522
|
+
...missionScopeFlags(args),
|
|
469
523
|
'session-key': requiredString(args, 'sessionKey'),
|
|
470
524
|
summary: requiredString(args, 'summary'),
|
|
471
525
|
...(optionalString(args, 'phase') ? { phase: requiredString(args, 'phase') } : {}),
|
|
@@ -476,7 +530,7 @@ function callOverlordTool(name, args) {
|
|
|
476
530
|
}
|
|
477
531
|
if (name === 'overlord_deliver_session') {
|
|
478
532
|
return runProtocol('deliver', {
|
|
479
|
-
|
|
533
|
+
...missionScopeFlags(args),
|
|
480
534
|
'session-key': requiredString(args, 'sessionKey'),
|
|
481
535
|
summary: requiredString(args, 'summary'),
|
|
482
536
|
...(args.noFileChanges === true ? { 'no-file-changes': true } : {}),
|
|
@@ -515,7 +569,7 @@ function callOverlordTool(name, args) {
|
|
|
515
569
|
throw new Error('Provide at least one of contentText or externalUrl');
|
|
516
570
|
}
|
|
517
571
|
return runProtocol('add-artifact', {
|
|
518
|
-
|
|
572
|
+
...missionScopeFlags(args),
|
|
519
573
|
type: requiredString(args, 'type'),
|
|
520
574
|
label: requiredString(args, 'label'),
|
|
521
575
|
...(hasContentText ? { 'content-text': args.contentText } : {}),
|
|
@@ -536,7 +590,7 @@ function callOverlordTool(name, args) {
|
|
|
536
590
|
throw new Error('Provide at least one of label, contentText, or externalUrl');
|
|
537
591
|
}
|
|
538
592
|
return runProtocol('update-artifact', {
|
|
539
|
-
|
|
593
|
+
...missionScopeFlags(args),
|
|
540
594
|
'artifact-id': requiredString(args, 'artifactId'),
|
|
541
595
|
'expected-revision': String(Math.trunc(args.expectedRevision)),
|
|
542
596
|
...(hasLabel ? { label: args.label } : {}),
|
|
@@ -590,7 +644,7 @@ process.stdin.on('data', async chunk => {
|
|
|
590
644
|
result: {
|
|
591
645
|
protocolVersion: PROTOCOL_VERSION,
|
|
592
646
|
capabilities: { tools: { listChanged: false } },
|
|
593
|
-
serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.
|
|
647
|
+
serverInfo: { name: 'overlord-__OVERLORD_ADAPTER_KEY__', version: '0.3.28' }
|
|
594
648
|
}
|
|
595
649
|
});
|
|
596
650
|
continue;
|