overlord-cli 5.1.1 → 5.3.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/README.md
CHANGED
|
@@ -6,15 +6,27 @@ Website: [ovld.ai](https://ovld.ai)
|
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
|
+
Note: Use Node.js 20 or newer for every CLI install or update.
|
|
10
|
+
|
|
9
11
|
Install it globally so the `ovld` and `overlord` commands are available on your `PATH`:
|
|
10
12
|
|
|
11
13
|
```bash
|
|
12
14
|
npm install -g overlord-cli
|
|
13
|
-
```
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
#After installing, run
|
|
17
|
+
ovld setup all #to configure every supported connector (`ovld setup` alone is interactive)
|
|
17
18
|
|
|
19
|
+
#for individual connectors, run `ovld setup <connector>`.
|
|
20
|
+
ovld setup cursor
|
|
21
|
+
ovld setup claude
|
|
22
|
+
ovld setup codex
|
|
23
|
+
ovld setup all
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# To update the CLI to the latest release, run:
|
|
28
|
+
ovld update
|
|
29
|
+
```
|
|
18
30
|
## Usage
|
|
19
31
|
|
|
20
32
|
```bash
|
|
@@ -22,28 +34,36 @@ ovld help
|
|
|
22
34
|
overlord help
|
|
23
35
|
```
|
|
24
36
|
|
|
25
|
-
|
|
26
|
-
|
|
37
|
+
### Auth
|
|
38
|
+
```bash
|
|
39
|
+
# Login to Overlord
|
|
40
|
+
ovld auth login #opens a browser when possible and also prints a verification URL/code so login can be completed from another machine over SSH.
|
|
41
|
+
ovld auth status # show current login status (use --verbose for redacted diagnostics)
|
|
42
|
+
ovld auth repair # mirror and chmod shared Desktop/CLI credentials when possible
|
|
43
|
+
ovld auth logout # remove stored credentials
|
|
44
|
+
```
|
|
27
45
|
|
|
28
46
|
Desktop-installed wrappers default `OVERLORD_URL` to `https://www.ovld.ai` unless you override it explicitly.
|
|
29
47
|
For local dev against the web app on port 3000, export the override before running auth or protocol commands:
|
|
30
|
-
|
|
31
48
|
```bash
|
|
32
49
|
export OVERLORD_URL=http://localhost:3000
|
|
33
|
-
ovld auth login
|
|
34
50
|
```
|
|
35
51
|
|
|
36
52
|
Common commands:
|
|
37
53
|
|
|
38
54
|
```bash
|
|
39
55
|
ovld auth login
|
|
56
|
+
ovld auth status
|
|
40
57
|
ovld attach
|
|
41
58
|
ovld create "Investigate the failing build" --agent codex
|
|
42
59
|
ovld prompt "Draft a fix for the onboarding flow"
|
|
60
|
+
ovld version
|
|
43
61
|
ovld update
|
|
44
62
|
ovld protocol discover-project
|
|
45
63
|
ovld protocol attach --ticket-id <ticket-id>
|
|
64
|
+
ovld protocol search-tickets --query "auth refactor" --status next-up,execute
|
|
46
65
|
ovld protocol update --session-key <session-key> --ticket-id <ticket-id> --summary "Working on it" --phase execute
|
|
66
|
+
ovld setup
|
|
47
67
|
ovld setup codex
|
|
48
68
|
ovld setup claude
|
|
49
69
|
ovld setup cursor
|
|
@@ -57,20 +77,49 @@ ovld doctor
|
|
|
57
77
|
- Node.js 20 or newer
|
|
58
78
|
- Access to an Overlord instance when using authenticated commands
|
|
59
79
|
|
|
60
|
-
## Commands
|
|
80
|
+
## Commands for Humans
|
|
81
|
+
|
|
82
|
+
Find full CLI docs here: https://www.ovld.ai/docs/surfaces/cli
|
|
83
|
+
|
|
84
|
+
Top-level commands (see `ovld help`):
|
|
61
85
|
|
|
62
|
-
- `attach` - search tickets and launch an agent interactively
|
|
63
|
-
- `create` - create a ticket
|
|
64
|
-
- `prompt` - create a ticket
|
|
65
|
-
- `auth` -
|
|
66
|
-
- `tickets` -
|
|
67
|
-
- `ticket` -
|
|
68
|
-
- `
|
|
69
|
-
- `connect`, `restart`, `context` - launch or resume an agent session or print ticket context
|
|
86
|
+
- `attach` - search tickets and launch an agent interactively (`ovld attach [ticketId] [agent]`)
|
|
87
|
+
- `create` - create a ticket with numbered project selection; supports `--agent`, `--model`, `--delegate` (same delegate flags as `ovld protocol create`)
|
|
88
|
+
- `prompt` - create a ticket, then launch an agent on it
|
|
89
|
+
- `auth` - `login`, `status`, `repair` (shared Desktop/CLI credentials), or `logout`
|
|
90
|
+
- `tickets` - `create` or `list` (optional `--status`)
|
|
91
|
+
- `ticket` - `context <ticketId>` to print context for one ticket
|
|
92
|
+
- `connect`, `restart`, `context` - launch or resume an agent session, or print ticket context (`context` requires `TICKET_ID`)
|
|
70
93
|
- `run`, `resume` - legacy aliases for `connect` and `restart`
|
|
71
|
-
- `setup` -
|
|
94
|
+
- `setup` - install the Overlord connector for an agent; `ovld setup [agent|all]` (interactive with no args). `ovld setup claude` also performs the one-time v3.25.0 to v4 Claude plugin migration
|
|
72
95
|
- `update` - install the latest CLI release from npm
|
|
73
|
-
- `doctor` -
|
|
96
|
+
- `doctor` - validate installed connectors and check for CLI updates
|
|
97
|
+
- `version` - print the installed CLI version
|
|
98
|
+
|
|
99
|
+
## Commands for agents
|
|
100
|
+
Agents can find docs here: https://www.ovld.ai/docs/for-agents
|
|
101
|
+
|
|
102
|
+
`ovld protocol <subcommand>` is the surface agents and hooks use for ticket lifecycle work. Run `ovld protocol help` for flags, env fallbacks, and examples.
|
|
103
|
+
|
|
104
|
+
- `auth-status` - return machine-readable auth status for agent runtimes
|
|
105
|
+
- `discover-project` - resolve a project from the current (or given) working directory
|
|
106
|
+
- `attach` - start a ticket session and return full working context
|
|
107
|
+
- `connect` - start a lightweight session without full context
|
|
108
|
+
- `load-context` - read ticket context without creating a session
|
|
109
|
+
- `search-tickets` - find tickets by keyword, status, project, creator, or update date
|
|
110
|
+
- `create` - create a draft ticket without attaching (standalone or follow-up)
|
|
111
|
+
- `spawn` - create a follow-up ticket and attach to it immediately
|
|
112
|
+
- `update` - post progress, activity events, and optional change rationales
|
|
113
|
+
- `record-change-rationales` - persist structured change rationales without a normal progress update
|
|
114
|
+
- `ask` - post a blocking question and move the ticket to review
|
|
115
|
+
- `permission-request` - notify Overlord that the agent is requesting tool permission
|
|
116
|
+
- `read-context` - read shared persistent context for this ticket
|
|
117
|
+
- `write-context` - write shared persistent context for future sessions
|
|
118
|
+
- `deliver` - finish work, send artifacts, and move the ticket to review
|
|
119
|
+
- `artifact-prepare-upload` - get a signed upload URL for a ticket artifact
|
|
120
|
+
- `artifact-finalize-upload` - finalize an uploaded artifact row after storage upload
|
|
121
|
+
- `artifact-download-url` - get a signed download URL for an existing artifact
|
|
122
|
+
- `artifact-upload-file` - prepare, upload, and finalize a local file in one command
|
|
74
123
|
|
|
75
124
|
## License
|
|
76
125
|
|
package/bin/_cli/protocol.mjs
CHANGED
|
@@ -601,7 +601,7 @@ async function protocolRecordChangeRationales(args) {
|
|
|
601
601
|
bearerToken,
|
|
602
602
|
localSecret,
|
|
603
603
|
organizationId,
|
|
604
|
-
'/api/protocol/change-rationales',
|
|
604
|
+
'/api/protocol/record-change-rationales',
|
|
605
605
|
body,
|
|
606
606
|
timeoutMs
|
|
607
607
|
);
|
|
@@ -1202,6 +1202,47 @@ async function protocolCreateTicket(args) {
|
|
|
1202
1202
|
console.log(JSON.stringify(data, null, 2));
|
|
1203
1203
|
}
|
|
1204
1204
|
|
|
1205
|
+
// ---------------------------------------------------------------------------
|
|
1206
|
+
// search-tickets (find tickets by query/status/project/created_by/dates)
|
|
1207
|
+
// ---------------------------------------------------------------------------
|
|
1208
|
+
|
|
1209
|
+
async function protocolSearchTickets(args) {
|
|
1210
|
+
const flags = parseFlags(args);
|
|
1211
|
+
const { platformUrl, bearerToken, localSecret, organizationId } = await resolveAuth();
|
|
1212
|
+
const timeoutMs = resolveTimeout(flags);
|
|
1213
|
+
|
|
1214
|
+
const statuses = flags.status
|
|
1215
|
+
? String(flags.status)
|
|
1216
|
+
.split(',')
|
|
1217
|
+
.map(s => s.trim())
|
|
1218
|
+
.filter(Boolean)
|
|
1219
|
+
: undefined;
|
|
1220
|
+
|
|
1221
|
+
const body = {
|
|
1222
|
+
...(flags.query ? { query: String(flags.query) } : {}),
|
|
1223
|
+
...(statuses?.length ? { statuses } : {}),
|
|
1224
|
+
...(flags['include-completed'] !== undefined
|
|
1225
|
+
? { includeCompleted: flags['include-completed'] !== false && flags['include-completed'] !== 'false' }
|
|
1226
|
+
: {}),
|
|
1227
|
+
...(flags.limit ? { limit: parseInt(String(flags.limit), 10) } : {}),
|
|
1228
|
+
...(flags['project-id'] ? { projectId: String(flags['project-id']) } : {}),
|
|
1229
|
+
...(flags['created-by'] ? { createdBy: String(flags['created-by']) } : {}),
|
|
1230
|
+
...(flags['updated-after'] ? { updatedAfter: String(flags['updated-after']) } : {}),
|
|
1231
|
+
...(flags['updated-before'] ? { updatedBefore: String(flags['updated-before']) } : {})
|
|
1232
|
+
};
|
|
1233
|
+
|
|
1234
|
+
const data = await apiPost(
|
|
1235
|
+
platformUrl,
|
|
1236
|
+
bearerToken,
|
|
1237
|
+
localSecret,
|
|
1238
|
+
organizationId,
|
|
1239
|
+
'/api/protocol/search-tickets',
|
|
1240
|
+
body,
|
|
1241
|
+
timeoutMs
|
|
1242
|
+
);
|
|
1243
|
+
console.log(JSON.stringify(data, null, 2));
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1205
1246
|
// ---------------------------------------------------------------------------
|
|
1206
1247
|
// auth-status (agent-friendly auth diagnostics)
|
|
1207
1248
|
// ---------------------------------------------------------------------------
|
|
@@ -1263,6 +1304,7 @@ Subcommands:
|
|
|
1263
1304
|
attach Start a ticket session and return full working context
|
|
1264
1305
|
connect Start a lightweight session without full context
|
|
1265
1306
|
load-context Read ticket context without creating a session
|
|
1307
|
+
search-tickets Find tickets by keyword, status, project, creator, or update date
|
|
1266
1308
|
create Create a draft ticket without attaching (follow-up or standalone)
|
|
1267
1309
|
spawn Create a follow-up ticket and attach to it immediately
|
|
1268
1310
|
update Post progress, activity events, and optional change rationales
|
|
@@ -1344,6 +1386,22 @@ load-context:
|
|
|
1344
1386
|
Required:
|
|
1345
1387
|
--ticket-id <id>
|
|
1346
1388
|
|
|
1389
|
+
search-tickets:
|
|
1390
|
+
Purpose:
|
|
1391
|
+
Find tickets in your organization by keyword, status, project, creator, or update window.
|
|
1392
|
+
Omit --query to list mode (most recently updated first).
|
|
1393
|
+
Optional:
|
|
1394
|
+
--query <text> Free-text search across the ticket search vector + title fallback
|
|
1395
|
+
--status <csv> Comma-separated statuses, e.g. "draft,next-up,execute"
|
|
1396
|
+
--include-completed <bool> Include completed tickets (default: false)
|
|
1397
|
+
--limit <n> Max results 1..50 (default: 8)
|
|
1398
|
+
--project-id <uuid> Restrict to a single project
|
|
1399
|
+
--created-by <uuid> Restrict to tickets created by this user
|
|
1400
|
+
--updated-after <iso> Updated_at >= ISO timestamp
|
|
1401
|
+
--updated-before <iso> Updated_at <= ISO timestamp
|
|
1402
|
+
Returns:
|
|
1403
|
+
JSON with { tickets, count }.
|
|
1404
|
+
|
|
1347
1405
|
update:
|
|
1348
1406
|
Purpose:
|
|
1349
1407
|
Post progress or activity events during execution
|
|
@@ -1541,6 +1599,7 @@ Examples:
|
|
|
1541
1599
|
ovld protocol attach --ticket-id abc-123 --external-session-id null
|
|
1542
1600
|
ovld protocol connect --ticket-id abc-123
|
|
1543
1601
|
ovld protocol load-context --ticket-id abc-123
|
|
1602
|
+
ovld protocol search-tickets --query "auth refactor" --status next-up,execute --limit 10
|
|
1544
1603
|
ovld protocol create --agent codex --objective "Capture follow-up work from this repo"
|
|
1545
1604
|
ovld protocol create --agent codex --session-key <key> --ticket-id <id> --objective "Capture follow-up work"
|
|
1546
1605
|
ovld protocol spawn --agent codex --objective "Implement user auth" --priority high
|
|
@@ -1568,6 +1627,7 @@ Examples:
|
|
|
1568
1627
|
if (subcommand === 'attach') { await protocolAttach(args); return; }
|
|
1569
1628
|
if (subcommand === 'connect') { await protocolConnect(args); return; }
|
|
1570
1629
|
if (subcommand === 'load-context') { await protocolLoadContext(args); return; }
|
|
1630
|
+
if (subcommand === 'search-tickets') { await protocolSearchTickets(args); return; }
|
|
1571
1631
|
if (subcommand === 'create' || subcommand === 'create-ticket') { await protocolCreateTicket(args); return; }
|
|
1572
1632
|
if (subcommand === 'spawn') { await protocolSpawn(args); return; }
|
|
1573
1633
|
if (subcommand === 'artifact-prepare-upload') { await protocolArtifactPrepareUpload(args); return; }
|
package/bin/_cli/tickets.mjs
CHANGED
package/package.json
CHANGED
|
@@ -24,7 +24,7 @@ personal marketplace entry at `~/.agents/plugins/marketplace.json`.
|
|
|
24
24
|
- Ticket session flow: `attach_ticket`, `connect_ticket`, `load_ticket_context`, `spawn_ticket`
|
|
25
25
|
- Progress and review flow: `post_update`, `record_change_rationales`, `ask_blocking_question`, `deliver_ticket`
|
|
26
26
|
- Shared context: `read_shared_context`, `write_shared_context`
|
|
27
|
-
- Artifacts: `
|
|
27
|
+
- Artifacts: `prepare_artifact_upload`, `finalize_artifact_upload`, `get_artifact_download_url`, `upload_artifact_file`
|
|
28
28
|
|
|
29
29
|
The MCP server shells into the installed `ovld` binary so the plugin stays aligned with the shipped CLI behavior instead of depending on this repository checkout.
|
|
30
30
|
|
|
@@ -296,7 +296,7 @@ const tools = [
|
|
|
296
296
|
subcommand: 'deliver'
|
|
297
297
|
},
|
|
298
298
|
{
|
|
299
|
-
name: '
|
|
299
|
+
name: 'prepare_artifact_upload',
|
|
300
300
|
description: 'Prepare an Overlord artifact upload and return a signed upload URL.',
|
|
301
301
|
inputSchema: {
|
|
302
302
|
type: 'object',
|
|
@@ -325,7 +325,7 @@ const tools = [
|
|
|
325
325
|
subcommand: 'artifact-prepare-upload'
|
|
326
326
|
},
|
|
327
327
|
{
|
|
328
|
-
name: '
|
|
328
|
+
name: 'finalize_artifact_upload',
|
|
329
329
|
description: 'Finalize an artifact after uploading bytes to the signed storage URL.',
|
|
330
330
|
inputSchema: {
|
|
331
331
|
type: 'object',
|
|
@@ -354,7 +354,7 @@ const tools = [
|
|
|
354
354
|
subcommand: 'artifact-finalize-upload'
|
|
355
355
|
},
|
|
356
356
|
{
|
|
357
|
-
name: '
|
|
357
|
+
name: 'get_artifact_download_url',
|
|
358
358
|
description: 'Create a signed download URL for an uploaded Overlord artifact.',
|
|
359
359
|
inputSchema: {
|
|
360
360
|
type: 'object',
|
|
@@ -377,7 +377,7 @@ const tools = [
|
|
|
377
377
|
subcommand: 'artifact-download-url'
|
|
378
378
|
},
|
|
379
379
|
{
|
|
380
|
-
name: '
|
|
380
|
+
name: 'upload_artifact_file',
|
|
381
381
|
description: 'Prepare, upload, and finalize a local file as an Overlord artifact in one step.',
|
|
382
382
|
inputSchema: {
|
|
383
383
|
type: 'object',
|