overlord-cli 5.1.1 → 5.4.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
- Use Node.js 20 or newer for every CLI install or update.
16
- Run `ovld update` any time you want to refresh the global npm install to the latest release.
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
- The CLI exposes the same command set under both names.
26
- `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.
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 from a short objective; supports the same delegate-identifying flags as `ovld protocol create` (`--agent`, `--model`, `--delegate`)
64
- - `prompt` - create a ticket and launch an agent on it
65
- - `auth` - log in, log out, or check auth status
66
- - `tickets` - list or create tickets
67
- - `ticket` - work with a single ticket
68
- - `protocol` - run ticket lifecycle commands such as `discover-project`, `attach`, `connect`, `load-context`, `spawn`, `update`, `record-change-rationales`, `ask`, `read-context`, `write-context`, `deliver`, and artifact upload/download helpers
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` - prepare the Overlord plugin or connector for a supported agent; `ovld setup claude` performs the one-time v3.25.0 to v4 Claude plugin migration
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` - verify installed agent connectors and check whether a newer CLI version is available
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
 
@@ -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; }
@@ -67,7 +67,7 @@ export async function ticketsList(args) {
67
67
  };
68
68
 
69
69
  const data = await apiPost(
70
- `${platformUrl}/api/protocol/list-tickets`,
70
+ `${platformUrl}/api/protocol/search-tickets`,
71
71
  bearerToken,
72
72
  localSecret,
73
73
  organizationId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord-cli",
3
- "version": "5.1.1",
3
+ "version": "5.4.0",
4
4
  "description": "Overlord CLI — launch AI agents on tickets from anywhere",
5
5
  "type": "module",
6
6
  "bin": {
@@ -127,6 +127,15 @@ ovld protocol discover-project
127
127
 
128
128
  You can override with `--project-id` or `--working-directory` if needed.
129
129
 
130
+ ### Choosing `--execution-target`
131
+
132
+ Pass `--execution-target agent` or `--execution-target human` (default: `human`) when creating tickets.
133
+
134
+ - **`agent`** — any task an AI agent can complete in a computer environment: coding, internet research, document editing, data analysis, automated testing, etc.
135
+ - **`human`** — any task requiring human presence or judgment: setting credentials or tokens in a third-party UI (e.g. Vercel, AWS), sending physical mail, making a product or business decision, physical-world actions.
136
+
137
+ When in doubt, ask yourself: *can this be done entirely inside a terminal or browser by an AI without human intervention?* If yes → `agent`. If it requires a human to log in, decide, or act in the real world → `human`.
138
+
130
139
  ## Context And Artifacts
131
140
 
132
141
  ```bash
@@ -145,3 +154,5 @@ ovld protocol artifact-download-url --session-key <sessionKey> --ticket-id $TICK
145
154
  - Use `write-context` for facts a future agent session should know.
146
155
  - Do not add or commit changes unless the user explicitly asks you to commit.
147
156
  - Delivery is the concluding step. After delivering, stop unless the user follows up or the ticket is reopened.
157
+
158
+ <!-- version: 0.2.2 -->
@@ -27,9 +27,21 @@ Use this skill whenever Cursor needs to work with Overlord, whether the session
27
27
  6. If you need other lifecycle commands or flags, run `ovld protocol help` and use the real subcommand list instead of guessing.
28
28
  7. Once you attach to a ticket, switch back to Mode 1 and follow the full ticket lifecycle.
29
29
 
30
+ ## Choosing `--execution-target` When Creating Tickets
31
+
32
+ Pass `--execution-target agent` or `--execution-target human` (default: `human`) when creating tickets.
33
+
34
+ - **`agent`** — any task an AI agent can complete in a computer environment: coding, internet research, document editing, data analysis, automated testing, etc.
35
+ - **`human`** — any task requiring human presence or judgment: setting credentials or tokens in a third-party UI (e.g. Vercel, AWS), sending physical mail, making a product or business decision, physical-world actions.
36
+
37
+ When in doubt, ask yourself: *can this be done entirely inside a terminal or browser by an AI without human intervention?* If yes → `agent`. If it requires a human to log in, decide, or act in the real world → `human`.
38
+
30
39
  ## Rules
31
40
 
32
41
  - Always attach first and always deliver last once you are on a ticket.
33
42
  - Use `ovld protocol` commands, the plugin commands, and the MCP tool instead of ad hoc scripts.
34
43
  - Do not invent protocol subcommands. Use `ovld protocol help` when unsure.
35
44
  - Include at least one progress update before delivering.
45
+ - When creating follow-up tickets, always set `--execution-target` explicitly using the `agent`/`human` rule above.
46
+
47
+ <!-- version: 0.2.2 -->
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Chat-driven access to Overlord ticket protocol workflows.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -23,9 +23,9 @@
23
23
  "privacyPolicyURL": "https://www.ovld.ai/privacy",
24
24
  "termsOfServiceURL": "https://www.ovld.ai/terms",
25
25
  "defaultPrompt": [
26
- "Attach to Overlord ticket 123 and summarize the context before editing code",
27
- "Post an execute update to this Overlord ticket after a meaningful implementation step",
28
- "Deliver this Overlord ticket with artifacts and change rationales"
26
+ "Create an Overlord ticket with the objective 'Implement feature X' and summarize the context before editing code",
27
+ "Execute Overlord ticket [ticket-id]",
28
+ "Find all Overlord tickets with the status 'next-up' and prioritize the most important one"
29
29
  ],
30
30
  "brandColor": "#1E6B5C",
31
31
  "composerIcon": "./assets/icon.png",
@@ -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: `artifact_prepare_upload`, `artifact_finalize_upload`, `artifact_download_url`, `artifact_upload_file`
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: 'artifact_prepare_upload',
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: 'artifact_finalize_upload',
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: 'artifact_download_url',
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: 'artifact_upload_file',
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',
@@ -121,6 +121,15 @@ ovld protocol create --agent codex --objective "Capture follow-up work from this
121
121
  ovld protocol spawn --agent codex --objective "Implement feature X" --priority medium
122
122
  ```
123
123
 
124
+ ### Choosing `--execution-target`
125
+
126
+ Pass `--execution-target agent` or `--execution-target human` (default: `human`) when creating tickets.
127
+
128
+ - **`agent`** — any task an AI agent can complete in a computer environment: coding, internet research, document editing, data analysis, automated testing, etc.
129
+ - **`human`** — any task requiring human presence or judgment: setting credentials or tokens in a third-party UI (e.g. Vercel, AWS), sending physical mail, making a product or business decision, physical-world actions.
130
+
131
+ When in doubt, ask yourself: *can this be done entirely inside a terminal or browser by an AI without human intervention?* If yes → `agent`. If it requires a human to log in, decide, or act in the real world → `human`.
132
+
124
133
  ## Rules
125
134
 
126
135
  - The authoritative lifecycle is the `ovld protocol` CLI once you are on a ticket.
@@ -128,3 +137,5 @@ ovld protocol spawn --agent codex --objective "Implement feature X" --priority m
128
137
  - Prefer the installed `ovld` CLI and the plugin's MCP tools instead of ad hoc repo scripts.
129
138
  - Do not create or rely on a local Codex `AGENTS.md` bundle for Overlord.
130
139
  - When the ticket was launched by Overlord, the ticket prompt remains authoritative for the specific task objective and ticket-level constraints.
140
+
141
+ <!-- version: 0.2.2 -->