overlord-cli 5.3.0 → 5.5.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
@@ -36,10 +36,12 @@ overlord help
36
36
 
37
37
  ### Auth
38
38
  ```bash
39
- # Login to Overlord
39
+ # Repair shared credentials first when a session already exists
40
+ ovld auth repair # mirror and chmod shared Desktop/CLI credentials when possible
41
+
42
+ # Login to Overlord if repair does not restore access
40
43
  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
44
  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
45
  ovld auth logout # remove stored credentials
44
46
  ```
45
47
 
@@ -89,7 +91,7 @@ Top-level commands (see `ovld help`):
89
91
  - `auth` - `login`, `status`, `repair` (shared Desktop/CLI credentials), or `logout`
90
92
  - `tickets` - `create` or `list` (optional `--status`)
91
93
  - `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`)
94
+ - `connect`, `restart` - launch or resume an agent session
93
95
  - `run`, `resume` - legacy aliases for `connect` and `restart`
94
96
  - `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
95
97
  - `update` - install the latest CLI release from npm
@@ -108,7 +110,7 @@ Agents can find docs here: https://www.ovld.ai/docs/for-agents
108
110
  - `load-context` - read ticket context without creating a session
109
111
  - `search-tickets` - find tickets by keyword, status, project, creator, or update date
110
112
  - `create` - create a draft ticket without attaching (standalone or follow-up)
111
- - `spawn` - create a follow-up ticket and attach to it immediately
113
+ - `prompt` - create a ticket and attach to it immediately (`spawn` is a backward-compatible alias)
112
114
  - `update` - post progress, activity events, and optional change rationales
113
115
  - `record-change-rationales` - persist structured change rationales without a normal progress update
114
116
  - `ask` - post a blocking question and move the ticket to review
package/bin/_cli/auth.mjs CHANGED
@@ -583,7 +583,13 @@ export async function authLogin(args = []) {
583
583
  async function printVerboseAuthStatus() {
584
584
  const status = await getAuthStatus();
585
585
  if (!status.isLoggedIn) {
586
- console.log('Not logged in. Run: ovld auth login');
586
+ const hasStoredAuth =
587
+ status.credentialsFileExists || status.legacyCredentialsFileExists || status.electronCredentialsFileExists;
588
+ console.log(
589
+ hasStoredAuth
590
+ ? 'Not logged in. Run: ovld auth repair, then ovld auth login if needed.'
591
+ : 'Not logged in. Run: ovld auth login'
592
+ );
587
593
  } else {
588
594
  console.log('Logged in');
589
595
  }
@@ -612,15 +618,24 @@ export async function authStatus(args = []) {
612
618
  return;
613
619
  }
614
620
 
615
- const creds = loadCredentials();
616
- if (!creds) {
617
- console.log('Not logged in. Run: ovld auth login');
621
+ const status = await getAuthStatus();
622
+ if (!status.isLoggedIn) {
623
+ const hasStoredAuth =
624
+ status.credentialsFileExists || status.legacyCredentialsFileExists || status.electronCredentialsFileExists;
625
+ console.log(
626
+ hasStoredAuth
627
+ ? 'Not logged in. Run: ovld auth repair, then ovld auth login if needed.'
628
+ : 'Not logged in. Run: ovld auth login'
629
+ );
618
630
  return;
619
631
  }
620
632
  console.log('Logged in');
621
- console.log(` Platform URL: ${creds.platform_url}`);
622
- if (creds.user_email) {
623
- console.log(` Email: ${creds.user_email}`);
633
+ const creds = loadCredentials();
634
+ if (creds) {
635
+ console.log(` Platform URL: ${creds.platform_url}`);
636
+ if (creds.user_email) {
637
+ console.log(` Email: ${creds.user_email}`);
638
+ }
624
639
  }
625
640
  }
626
641
 
@@ -37,7 +37,6 @@ Usage:
37
37
  ${primaryCommand} protocol <subcommand> Agent workflow commands
38
38
  ${primaryCommand} connect <agent> Launch an agent on a ticket
39
39
  ${primaryCommand} restart <agent> Resume an agent session
40
- ${primaryCommand} context Print ticket context (requires TICKET_ID)
41
40
  ${primaryCommand} setup [agent|all] Install Overlord agent connector (interactive if no args)
42
41
  ${primaryCommand} update Install the latest CLI version from npm
43
42
  ${primaryCommand} doctor Validate installed agent connectors and check for CLI updates
@@ -46,7 +45,7 @@ Usage:
46
45
 
47
46
  Agents:
48
47
  Use ${primaryCommand} protocol help for ticket lifecycle commands.
49
- Key protocol commands: auth-status, discover-project, create, spawn, attach, connect, load-context.
48
+ Key protocol commands: auth-status, discover-project, create, prompt, attach, connect, load-context.
50
49
 
51
50
  Auth:
52
51
  ${primaryCommand} auth login Authorize CLI via browser
@@ -157,8 +156,7 @@ export async function runCli({ primaryCommand }) {
157
156
  command === 'connect' ||
158
157
  command === 'restart' ||
159
158
  command === 'run' ||
160
- command === 'resume' ||
161
- command === 'context'
159
+ command === 'resume'
162
160
  ) {
163
161
  await runLauncherCommand(command, rest);
164
162
  return;
@@ -220,27 +220,6 @@ async function runAgent(agent, mode = 'run') {
220
220
  }
221
221
  }
222
222
 
223
- async function printContext() {
224
- const ticketId = process.env.TICKET_ID;
225
- if (!ticketId) {
226
- console.error('Missing required environment variable: TICKET_ID\n');
227
- console.error('Usage: TICKET_ID=<id> ovld context');
228
- console.error(' ovld ticket context <id> (recommended)');
229
- process.exit(1);
230
- }
231
-
232
- const { platformUrl, bearerToken, localSecret, organizationId } = await resolveAuth();
233
- const context = await fetchContext(
234
- platformUrl,
235
- bearerToken,
236
- localSecret,
237
- organizationId,
238
- ticketId,
239
- 'claude'
240
- );
241
- process.stdout.write(context);
242
- }
243
-
244
223
  export async function runLauncherCommand(command, args) {
245
224
  const normalizedCommand = command === 'connect' ? 'run' : command === 'restart' ? 'resume' : command;
246
225
  const { positionals, flags } = parseLauncherArgs(args);
@@ -265,11 +244,6 @@ export async function runLauncherCommand(command, args) {
265
244
  return;
266
245
  }
267
246
 
268
- if (normalizedCommand === 'context') {
269
- await printContext();
270
- return;
271
- }
272
-
273
247
  // Should not happen if called correctly
274
248
  console.error(`Unknown launcher command: ${command}`);
275
249
  process.exit(1);
@@ -136,13 +136,17 @@ async function apiPost(
136
136
 
137
137
  let hint = 'Check your network and Overlord server settings.';
138
138
  if (causeCode === 'ECONNREFUSED') {
139
- hint = 'Connection refused. Verify Overlord is running and OVERLORD_URL points to the correct port.';
139
+ hint =
140
+ 'Connection refused. Verify Overlord is running and OVERLORD_URL points to the correct port. If this environment is sandboxed or network-restricted, request permission escalation before retrying.';
140
141
  } else if (causeCode === 'ENOTFOUND') {
141
- hint = 'Host not found. Verify OVERLORD_URL uses a valid hostname.';
142
+ hint =
143
+ 'Host not found. Verify OVERLORD_URL uses a valid hostname. If this environment is sandboxed or network-restricted, request permission escalation before retrying.';
142
144
  } else if (causeCode === 'ETIMEDOUT') {
143
- hint = 'Connection timed out. Verify server availability and local firewall/VPN settings.';
145
+ hint =
146
+ 'Connection timed out. Verify server availability and local firewall/VPN settings. If this environment is sandboxed or network-restricted, request permission escalation before retrying.';
144
147
  } else if (requestUrl.includes('localhost') || requestUrl.includes('127.0.0.1')) {
145
- hint = 'Local server unreachable. Start Overlord (usually http://localhost:3000) or update OVERLORD_URL.';
148
+ hint =
149
+ 'Local server unreachable. Start Overlord (usually http://localhost:3000) or update OVERLORD_URL. If this environment is sandboxed or network-restricted, request permission escalation before retrying.';
146
150
  }
147
151
 
148
152
  throw new Error(
@@ -159,7 +163,7 @@ async function apiPost(
159
163
  throw new Error(
160
164
  `Authentication failed (401): ${data.error ?? 'Invalid or missing token.'}\n` +
161
165
  `IMPORTANT: Stop all work immediately. Your Overlord auth session is invalid, expired, or missing required scope.\n` +
162
- `The user should sign in again with Overlord Desktop or \`ovld auth login\`.\n` +
166
+ `The user should try \`ovld auth repair\` first, then sign in again with Overlord Desktop or \`ovld auth login\` if needed.\n` +
163
167
  `Ask the user if they would like to proceed without submitting updates to Overlord.`
164
168
  );
165
169
  }
@@ -1065,10 +1069,10 @@ async function protocolLoadContext(args) {
1065
1069
  }
1066
1070
 
1067
1071
  // ---------------------------------------------------------------------------
1068
- // spawn (create ticket + connect in one call)
1072
+ // prompt (create ticket + connect in one call)
1069
1073
  // ---------------------------------------------------------------------------
1070
1074
 
1071
- async function protocolSpawn(args) {
1075
+ async function protocolPrompt(args) {
1072
1076
  const flags = parseFlags(args);
1073
1077
  const objective = requireFlag(flags, 'objective', undefined);
1074
1078
  const { platformUrl, bearerToken, localSecret, organizationId } = await resolveAuth();
@@ -1106,7 +1110,7 @@ async function protocolSpawn(args) {
1106
1110
  bearerToken,
1107
1111
  localSecret,
1108
1112
  organizationId,
1109
- '/api/protocol/spawn',
1113
+ '/api/protocol/prompt',
1110
1114
  body,
1111
1115
  timeoutMs
1112
1116
  );
@@ -1283,11 +1287,11 @@ export async function runProtocolCommand(subcommand, args) {
1283
1287
  console.log(`ovld protocol <subcommand> [flags]
1284
1288
 
1285
1289
  Use this for ticket lifecycle work from an agent runtime: create a standalone
1286
- draft with \`ovld protocol create\`, create-and-attach with \`ovld protocol spawn\`,
1290
+ draft with \`ovld protocol create\`, create-and-attach with \`ovld protocol prompt\`,
1287
1291
  or attach to an existing ticket with \`ovld protocol attach --ticket-id <id>\`.
1288
1292
 
1289
1293
  Project discovery:
1290
- When spawning or creating tickets, the CLI automatically resolves the correct
1294
+ When prompting or creating tickets, the CLI automatically resolves the correct
1291
1295
  project by matching your current working directory against your configured
1292
1296
  "Local working directory" for that project (stored per user in Overlord).
1293
1297
  You can also discover the project explicitly:
@@ -1295,7 +1299,7 @@ Project discovery:
1295
1299
  ovld protocol discover-project
1296
1300
  ovld protocol discover-project --working-directory /path/to/repo
1297
1301
 
1298
- Use --project-id to override automatic resolution on spawn or ticket creation.
1302
+ Use --project-id to override automatic resolution on prompt or ticket creation.
1299
1303
  Use --personal to create a private ticket without assigning any project.
1300
1304
 
1301
1305
  Subcommands:
@@ -1306,7 +1310,7 @@ Subcommands:
1306
1310
  load-context Read ticket context without creating a session
1307
1311
  search-tickets Find tickets by keyword, status, project, creator, or update date
1308
1312
  create Create a draft ticket without attaching (follow-up or standalone)
1309
- spawn Create a follow-up ticket and attach to it immediately
1313
+ prompt Create a ticket and attach to it immediately
1310
1314
  update Post progress, activity events, and optional change rationales
1311
1315
  record-change-rationales Persist structured change rationales without a progress update
1312
1316
  ask Post a blocking question and move the ticket to review
@@ -1328,7 +1332,7 @@ Environment fallback:
1328
1332
  Common flags:
1329
1333
  --timeout <ms> Request timeout in milliseconds (default: ${DEFAULT_TIMEOUT_MS})
1330
1334
  --ticket-id <id> Ticket id when the subcommand operates on an existing ticket
1331
- --session-key <key> Session key returned by attach/connect/spawn
1335
+ --session-key <key> Session key returned by attach/connect/prompt
1332
1336
  --agent <identifier> Agent identifier sent to Overlord (default: AGENT_IDENTIFIER or claude-code)
1333
1337
  --model <identifier> Model identifier to snapshot on executing objectives
1334
1338
  --method <connectionMethod> Connection method sent to Overlord (default: cli)
@@ -1493,9 +1497,9 @@ deliver:
1493
1497
  Do not combine --payload-file with --artifacts-json/--artifacts-file or change-rationale flags.
1494
1498
  In a git workspace, deliver validates that changed files are represented by changeRationales unless skipped.
1495
1499
 
1496
- spawn:
1500
+ prompt:
1497
1501
  Purpose:
1498
- Create a follow-up ticket and attach to it in one call.
1502
+ Create a ticket and attach to it in one call.
1499
1503
  When --project-id is omitted, automatically resolves the project from the
1500
1504
  current working directory (matching against the caller's project_user.local_working_directory).
1501
1505
  Required:
@@ -1594,7 +1598,7 @@ Examples:
1594
1598
  ovld protocol auth-status
1595
1599
  ovld protocol discover-project
1596
1600
  ovld protocol discover-project --working-directory /path/to/repo
1597
- ovld protocol spawn --agent codex --objective "Implement feature X" # auto-resolves project from cwd
1601
+ ovld protocol prompt --agent codex --objective "Implement feature X" # auto-resolves project from cwd
1598
1602
  ovld protocol attach --ticket-id abc-123
1599
1603
  ovld protocol attach --ticket-id abc-123 --external-session-id null
1600
1604
  ovld protocol connect --ticket-id abc-123
@@ -1602,7 +1606,7 @@ Examples:
1602
1606
  ovld protocol search-tickets --query "auth refactor" --status next-up,execute --limit 10
1603
1607
  ovld protocol create --agent codex --objective "Capture follow-up work from this repo"
1604
1608
  ovld protocol create --agent codex --session-key <key> --ticket-id <id> --objective "Capture follow-up work"
1605
- ovld protocol spawn --agent codex --objective "Implement user auth" --priority high
1609
+ ovld protocol prompt --agent codex --objective "Implement user auth" --priority high
1606
1610
  ovld protocol update --session-key <key> --ticket-id <id> --summary "Did X" --phase execute
1607
1611
  ovld protocol update --session-key <key> --ticket-id <id> --summary-file ./update.txt --event-type user_follow_up
1608
1612
  ovld protocol record-change-rationales --session-key <key> --ticket-id <id> --change-rationales-json '[{"label":"...","file_path":"...","summary":"...","why":"...","impact":"...","hunks":[{"header":"@@ ... @@"}]}]'
@@ -1629,7 +1633,7 @@ Examples:
1629
1633
  if (subcommand === 'load-context') { await protocolLoadContext(args); return; }
1630
1634
  if (subcommand === 'search-tickets') { await protocolSearchTickets(args); return; }
1631
1635
  if (subcommand === 'create' || subcommand === 'create-ticket') { await protocolCreateTicket(args); return; }
1632
- if (subcommand === 'spawn') { await protocolSpawn(args); return; }
1636
+ if (subcommand === 'prompt' || subcommand === 'spawn') { await protocolPrompt(args); return; }
1633
1637
  if (subcommand === 'artifact-prepare-upload') { await protocolArtifactPrepareUpload(args); return; }
1634
1638
  if (subcommand === 'artifact-finalize-upload') { await protocolArtifactFinalizeUpload(args); return; }
1635
1639
  if (subcommand === 'artifact-download-url') { await protocolArtifactGetDownloadUrl(args); return; }
@@ -114,7 +114,7 @@ Record only meaningful behavioral changes — skip formatting-only noise. Prefer
114
114
 
115
115
  When creating tickets from within a repository:
116
116
  - Prefer \`ovld protocol create --agent claude-code\` by default for draft ticket creation.
117
- - Use \`ovld protocol spawn --agent claude-code\` only when the user explicitly asks to create and execute immediately.
117
+ - Use \`ovld protocol prompt --agent claude-code\` only when the user explicitly asks to create and execute immediately.
118
118
  - Both commands can resolve the project from the current working directory; use \`--working-directory\` to override.
119
119
 
120
120
  \`\`\`bash
@@ -122,7 +122,7 @@ ovld protocol create --agent claude-code --objective "Capture follow-up work fro
122
122
  \`\`\`
123
123
 
124
124
  \`\`\`bash
125
- ovld protocol spawn --agent claude-code --objective "Implement feature X" --priority medium
125
+ ovld protocol prompt --agent claude-code --objective "Implement feature X" --priority medium
126
126
  \`\`\`
127
127
 
128
128
  ## Context & Artifacts
@@ -193,7 +193,7 @@ ovld protocol record-change-rationales --session-key <sessionKey> --ticket-id $T
193
193
 
194
194
  When creating tickets from within a repository:
195
195
  - Prefer \`ovld protocol create --agent opencode\` by default for draft ticket creation.
196
- - Use \`ovld protocol spawn --agent opencode\` only when the user explicitly asks to create and execute immediately.
196
+ - Use \`ovld protocol prompt --agent opencode\` only when the user explicitly asks to create and execute immediately.
197
197
  - Both commands can resolve the project from the current working directory; use \`--working-directory\` to override.
198
198
 
199
199
  \`\`\`bash
@@ -201,7 +201,7 @@ ovld protocol create --agent opencode --objective "Capture follow-up work from t
201
201
  \`\`\`
202
202
 
203
203
  \`\`\`bash
204
- ovld protocol spawn --agent opencode --objective "Implement feature X" --priority medium
204
+ ovld protocol prompt --agent opencode --objective "Implement feature X" --priority medium
205
205
  \`\`\`
206
206
 
207
207
  ## Context & Artifacts
@@ -266,7 +266,7 @@ For larger delivery JSON, prefer \`--payload-file -\` with stdin so no scratch f
266
266
  Rules:
267
267
  - Always attach first and deliver last.
268
268
  - Use \`ovld protocol\` commands instead of ad hoc repo scripts for ticket lifecycle work.
269
- - Prefer \`ovld protocol create --agent cursor\` for draft ticket creation; use \`spawn --agent cursor\` only for create-and-execute requests.
269
+ - Prefer \`ovld protocol create --agent cursor\` for draft ticket creation; use \`prompt --agent cursor\` only for create-and-execute requests.
270
270
  - If the user sends a new message during an active ticket session, publish a \`user_follow_up\` event before doing anything else.
271
271
  `;
272
272
 
@@ -399,14 +399,14 @@ disable-model-invocation: true
399
399
  Run \`ovld protocol create --agent claude-code\` with \`$ARGUMENTS\`. If no flags are present, treat the arguments as the objective and call \`ovld protocol create --agent claude-code --objective "<objective>"\`.`
400
400
  },
401
401
  {
402
- path: path.join(base, 'spawn.md'),
402
+ path: path.join(base, 'prompt.md'),
403
403
  content: `---
404
404
  description: Create a new Overlord ticket from the current conversation
405
405
  argument-hint: <objective or raw flags>
406
406
  disable-model-invocation: true
407
407
  ---
408
408
 
409
- Run \`ovld protocol spawn --agent claude-code\` with \`$ARGUMENTS\`. If no flags are present, treat the arguments as the objective and call \`ovld protocol spawn --agent claude-code --objective "<objective>"\`.`
409
+ Run \`ovld protocol prompt --agent claude-code\` with \`$ARGUMENTS\`. If no flags are present, treat the arguments as the objective and call \`ovld protocol prompt --agent claude-code --objective "<objective>"\`.`
410
410
  }
411
411
  ];
412
412
  }
@@ -430,9 +430,9 @@ Run \`ovld protocol spawn --agent claude-code\` with \`$ARGUMENTS\`. If no flags
430
430
  'Create a draft Overlord ticket.\n\nRun `ovld protocol create --agent cursor --objective "<objective>"` using the text after `/create` unless raw flags were provided. If raw flags were provided, pass them after `ovld protocol create --agent cursor`.\n'
431
431
  },
432
432
  {
433
- path: path.join(base, 'spawn.md'),
433
+ path: path.join(base, 'prompt.md'),
434
434
  content:
435
- 'Create a new Overlord ticket.\n\nRun `ovld protocol spawn --agent cursor --objective "<objective>"` using the text after `/spawn` unless raw flags were provided. If raw flags were provided, pass them after `ovld protocol spawn --agent cursor`.\n'
435
+ 'Create a new Overlord ticket.\n\nRun `ovld protocol prompt --agent cursor --objective "<objective>"` using the text after `/prompt` unless raw flags were provided. If raw flags were provided, pass them after `ovld protocol prompt --agent cursor`.\n'
436
436
  }
437
437
  ];
438
438
  }
@@ -456,9 +456,9 @@ Run \`ovld protocol spawn --agent claude-code\` with \`$ARGUMENTS\`. If no flags
456
456
  'description = "Create a draft Overlord ticket from the current conversation."\nprompt = """\nRun `ovld protocol create --agent gemini --objective "<objective>"` using `{{args}}` as the objective unless raw flags were provided. If raw flags were provided, pass them after `ovld protocol create --agent gemini`.\n"""\n'
457
457
  },
458
458
  {
459
- path: path.join(base, 'spawn.toml'),
459
+ path: path.join(base, 'prompt.toml'),
460
460
  content:
461
- 'description = "Create a new Overlord ticket from the current conversation."\nprompt = """\nRun `ovld protocol spawn --agent gemini --objective "<objective>"` using `{{args}}` as the objective unless raw flags were provided. If raw flags were provided, pass them after `ovld protocol spawn --agent gemini`.\n"""\n'
461
+ 'description = "Create a new Overlord ticket from the current conversation."\nprompt = """\nRun `ovld protocol prompt --agent gemini --objective "<objective>"` using `{{args}}` as the objective unless raw flags were provided. If raw flags were provided, pass them after `ovld protocol prompt --agent gemini`.\n"""\n'
462
462
  }
463
463
  ];
464
464
  }
@@ -493,13 +493,13 @@ agent: build
493
493
  Run \`ovld protocol create --agent opencode\` with \`$ARGUMENTS\`. If no flags are present, treat the arguments as the objective and call \`ovld protocol create --agent opencode --objective "<objective>"\`.`
494
494
  },
495
495
  {
496
- path: path.join(base, 'spawn.md'),
496
+ path: path.join(base, 'prompt.md'),
497
497
  content: `---
498
498
  description: Create a new Overlord ticket from the current conversation
499
499
  agent: build
500
500
  ---
501
501
 
502
- Run \`ovld protocol spawn --agent opencode\` with \`$ARGUMENTS\`. If no flags are present, treat the arguments as the objective and call \`ovld protocol spawn --agent opencode --objective "<objective>"\`.`
502
+ Run \`ovld protocol prompt --agent opencode\` with \`$ARGUMENTS\`. If no flags are present, treat the arguments as the objective and call \`ovld protocol prompt --agent opencode --objective "<objective>"\`.`
503
503
  }
504
504
  ];
505
505
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord-cli",
3
- "version": "5.3.0",
3
+ "version": "5.5.0",
4
4
  "description": "Overlord CLI — launch AI agents on tickets from anywhere",
5
5
  "type": "module",
6
6
  "bin": {
@@ -5,9 +5,10 @@ Claude Code plugin that exposes the Overlord local ticket workflow to any Claude
5
5
  ## What ships
6
6
 
7
7
  - `skills/overlord-ticket/SKILL.md` — durable attach → update → ask → deliver workflow.
8
- - `commands/{connect,load,create,spawn}.md` — slash commands for session routing and ticket creation.
8
+ - `commands/{connect,load,create,prompt}.md` — slash commands for session routing and ticket creation.
9
9
  - `hooks/hooks.json` + `scripts/permission-hook.sh` — PermissionRequest notifier that calls `ovld protocol permission-request`.
10
- - `userConfig` for `overlord_url`. Current installs should authenticate with `ovld auth login` or Overlord Desktop; env vars remain optional overrides for remote shells, CI, and explicit OAuth token injection.
10
+ - If `ovld` reports `OVERLORD_URL` is unreachable, the workflow tells agents to request permission escalation or network access before retrying.
11
+ - `userConfig` for `overlord_url`. Current installs should authenticate with `ovld auth repair` first when a shared session already exists, then `ovld auth login` or Overlord Desktop; env vars remain optional overrides for remote shells, CI, and explicit OAuth token injection.
11
12
 
12
13
  ## Requirements
13
14
 
@@ -36,6 +37,6 @@ Older plugin versions prompted for `overlord_url` and a legacy token at install
36
37
  Inside Claude Code the components are surfaced with the plugin prefix:
37
38
 
38
39
  - skill → `overlord:overlord-ticket`
39
- - commands → `/overlord:connect`, `/overlord:load`, `/overlord:create`, `/overlord:spawn`
40
+ - commands → `/overlord:connect`, `/overlord:load`, `/overlord:create`, `/overlord:prompt`
40
41
 
41
42
  Prompts generated by Overlord (see `lib/overlord/ticket-prompt.ts`) already reference these names in `bundle` instruction mode.
@@ -16,3 +16,4 @@ Rules:
16
16
  - Use `connect`, not `attach`.
17
17
  - Do not load extra ticket context unless the user explicitly asks for it.
18
18
  - After the command succeeds, report the returned `SESSION_KEY` and confirm that future updates should use that ticket.
19
+ - If `ovld` reports `OVERLORD_URL` is unreachable, stop and request permission escalation or network access before retrying.
@@ -14,3 +14,4 @@ Otherwise, treat `$ARGUMENTS` as the objective text and run:
14
14
  If no objective was provided, ask the user for one and stop.
15
15
 
16
16
  After the command succeeds, report the new `TICKET_ID`.
17
+ - If `ovld` reports `OVERLORD_URL` is unreachable, stop and request permission escalation or network access before retrying.
@@ -16,3 +16,4 @@ Rules:
16
16
  - Use `load-context`, not `attach`.
17
17
  - Do not create or switch sessions.
18
18
  - Summarize the returned ticket details, history, artifacts, and shared context for the user.
19
+ - If `ovld` reports `OVERLORD_URL` is unreachable, stop and request permission escalation or network access before retrying.
@@ -14,3 +14,4 @@ Otherwise, treat `$ARGUMENTS` as the objective text and run:
14
14
  If no objective was provided, ask the user for one and stop.
15
15
 
16
16
  After the command succeeds, report the new `TICKET_ID` and `SESSION_KEY`.
17
+ - If `ovld` reports `OVERLORD_URL` is unreachable, stop and request permission escalation or network access before retrying.
@@ -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
@@ -143,5 +152,8 @@ ovld protocol artifact-download-url --session-key <sessionKey> --ticket-id $TICK
143
152
  - Do not invent protocol subcommands. Use `ovld protocol help` when unsure.
144
153
  - The `summary` in deliver is what the PM reads first, so write it as a narrative, not a command list.
145
154
  - Use `write-context` for facts a future agent session should know.
155
+ - If `ovld` reports `OVERLORD_URL` is unreachable, request permission escalation or network access before retrying.
146
156
  - Do not add or commit changes unless the user explicitly asks you to commit.
147
157
  - Delivery is the concluding step. After delivering, stop unless the user follows up or the ticket is reopened.
158
+
159
+ <!-- version: 0.2.3 -->
@@ -1 +1,3 @@
1
1
  Run `ovld protocol connect --ticket-id <ticketId>` using the text after `/connect`.
2
+
3
+ If `ovld` reports `OVERLORD_URL` is unreachable, stop and request permission escalation or network access before retrying.
@@ -7,3 +7,5 @@ Run:
7
7
 
8
8
  If raw flags are present, pass them through after:
9
9
  `ovld protocol create --agent cursor`
10
+
11
+ If `ovld` reports `OVERLORD_URL` is unreachable, stop and request permission escalation or network access before retrying.
@@ -1 +1,3 @@
1
1
  Run `ovld protocol load-context --ticket-id <ticketId>` using the text after `/load`.
2
+
3
+ If `ovld` reports `OVERLORD_URL` is unreachable, stop and request permission escalation or network access before retrying.
@@ -1 +1,3 @@
1
1
  Run `ovld protocol spawn --agent cursor --objective "<objective>"` using text after `/spawn` unless raw flags were provided.
2
+
3
+ If `ovld` reports `OVERLORD_URL` is unreachable, stop and request permission escalation or network access before retrying.
@@ -27,9 +27,22 @@ 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.
44
+ - If `ovld` reports `OVERLORD_URL` is unreachable, request permission escalation or network access before retrying.
35
45
  - Include at least one progress update before delivering.
46
+ - When creating follow-up tickets, always set `--execution-target` explicitly using the `agent`/`human` rule above.
47
+
48
+ <!-- version: 0.2.3 -->
@@ -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",
@@ -14,8 +14,9 @@ personal marketplace entry at `~/.agents/plugins/marketplace.json`.
14
14
  ## Requirements
15
15
 
16
16
  - Install the Overlord CLI so `ovld` is available on `PATH`.
17
- - Authenticate with `ovld auth login` or Overlord Desktop. `OVERLORD_URL` can be used to point the CLI at a non-default host.
17
+ - If a shared session already exists but looks stale, authenticate with `ovld auth repair` first. If repair does not help, use `ovld auth login` or Overlord Desktop. `OVERLORD_URL` can be used to point the CLI at a non-default host.
18
18
  - Optionally set `OVLD_BIN` if the CLI lives at a non-standard path.
19
+ - If `ovld` reports `OVERLORD_URL` is unreachable, the bundled workflow tells Codex to request permission escalation or network access before retrying.
19
20
 
20
21
  ## Tool coverage
21
22
 
@@ -610,10 +610,10 @@ async function handleRequest(message) {
610
610
  },
611
611
  serverInfo: {
612
612
  name: 'overlord',
613
- version: '0.1.0'
613
+ version: '0.1.1'
614
614
  },
615
615
  instructions:
616
- 'Use these tools to drive Overlord ticket workflows through the installed ovld CLI. Most operations expect a session key from attach or connect.'
616
+ 'Use these tools to drive Overlord ticket workflows through the installed ovld CLI. Most operations expect a session key from attach or connect. If the CLI reports that OVERLORD_URL is unreachable, request permission escalation or network access before retrying.'
617
617
  });
618
618
  return;
619
619
  }
@@ -121,10 +121,22 @@ 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.
127
136
  - Always attach first and always deliver last once you are working a ticket.
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.
139
+ - If `ovld` reports `OVERLORD_URL` is unreachable, request permission escalation or network access before retrying.
130
140
  - When the ticket was launched by Overlord, the ticket prompt remains authoritative for the specific task objective and ticket-level constraints.
141
+
142
+ <!-- version: 0.2.3 -->