overlord-cli 4.13.0 → 4.14.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
@@ -30,7 +30,7 @@ Common commands:
30
30
  ```bash
31
31
  ovld auth login
32
32
  ovld attach
33
- ovld create "Investigate the failing build"
33
+ ovld create "Investigate the failing build" --agent codex
34
34
  ovld prompt "Draft a fix for the onboarding flow"
35
35
  ovld update
36
36
  ovld protocol discover-project
@@ -52,7 +52,7 @@ ovld doctor
52
52
  ## Commands
53
53
 
54
54
  - `attach` - search tickets and launch an agent interactively
55
- - `create` - create a ticket from a short objective
55
+ - `create` - create a ticket from a short objective; supports the same delegate-identifying flags as `ovld protocol create` (`--agent`, `--model`, `--delegate`)
56
56
  - `prompt` - create a ticket and launch an agent on it
57
57
  - `auth` - log in, log out, or check auth status
58
58
  - `tickets` - list or create tickets
@@ -29,7 +29,7 @@ Primary command: ${primaryCommand}
29
29
 
30
30
  Usage:
31
31
  ${primaryCommand} attach [ticketId] [agent] Search tickets and launch an agent (interactive)
32
- ${primaryCommand} create "<objective>" Create a ticket with numbered project selection
32
+ ${primaryCommand} create "<objective>" Create a ticket with numbered project selection; supports --agent/--model/--delegate
33
33
  ${primaryCommand} prompt "<objective>" Create a ticket, then launch an agent on it
34
34
  ${primaryCommand} auth <subcommand> Login, logout, repair, or check auth status
35
35
  ${primaryCommand} tickets <subcommand> Create or list tickets
@@ -46,7 +46,7 @@ Usage:
46
46
 
47
47
  Agents:
48
48
  Use ${primaryCommand} protocol help for ticket lifecycle commands.
49
- Key protocol commands: auth-status, discover-project, spawn, attach, connect, load-context.
49
+ Key protocol commands: auth-status, discover-project, create, spawn, attach, connect, load-context.
50
50
 
51
51
  Auth:
52
52
  ${primaryCommand} auth login Authorize CLI via browser
@@ -55,7 +55,7 @@ Auth:
55
55
  ${primaryCommand} auth logout Remove stored credentials
56
56
 
57
57
  Tickets:
58
- ${primaryCommand} create "..." [options]
58
+ ${primaryCommand} create "..." [--agent <agent>] [--model <identifier>] [--delegate <agent>] [options]
59
59
  ${primaryCommand} prompt "..." [options]
60
60
  ${primaryCommand} tickets create "..." [options]
61
61
  ${primaryCommand} tickets list [--status <status>]
@@ -47,10 +47,10 @@ function parseFlags(args) {
47
47
 
48
48
  function buildUsage(commandName) {
49
49
  if (commandName === 'prompt') {
50
- return 'Usage: ovld prompt "<objective>" [--title "..."] [--acceptance-criteria "..."] [--available-tools "..."] [--execution-target agent|human] [--priority low|medium|high|urgent] [--project-id <id>] [--agent <agent>] [--delegate <agent>]';
50
+ return 'Usage: ovld prompt "<objective>" [--title "..."] [--acceptance-criteria "..."] [--available-tools "..."] [--execution-target agent|human] [--priority low|medium|high|urgent] [--project-id <id>] [--agent <agent>] [--model <identifier>] [--delegate <agent>]';
51
51
  }
52
52
 
53
- return 'Usage: ovld create "<objective>" [--title "..."] [--acceptance-criteria "..."] [--available-tools "..."] [--execution-target agent|human] [--priority low|medium|high|urgent] [--project-id <id>] [--delegate <agent>]';
53
+ return 'Usage: ovld create "<objective>" [--title "..."] [--acceptance-criteria "..."] [--available-tools "..."] [--execution-target agent|human] [--priority low|medium|high|urgent] [--project-id <id>] [--agent <agent>] [--model <identifier>] [--delegate <agent>]';
54
54
  }
55
55
 
56
56
  function ensureObjective(commandName, objective) {
@@ -192,10 +192,27 @@ export function resolvePromptAgentIdentifier(agent) {
192
192
  return PROMPT_AGENT_IDENTIFIERS[agent] ?? agent;
193
193
  }
194
194
 
195
- export function resolveTicketCreationDelegate(flags = {}, selectedAgent = null) {
195
+ export function resolveTicketCreationModelIdentifier(flags = {}) {
196
+ const explicitModel = typeof flags.model === 'string' ? flags.model.trim() : '';
197
+ if (explicitModel) return explicitModel;
198
+
199
+ const envModel =
200
+ process.env.OVERLORD_MODEL_IDENTIFIER?.trim() ||
201
+ process.env.MODEL_IDENTIFIER?.trim() ||
202
+ process.env.AGENT_MODEL?.trim();
203
+ return envModel || null;
204
+ }
205
+
206
+ export function resolveTicketCreationDelegate(flags = {}, selectedAgent = null, modelIdentifier = '') {
196
207
  const explicitDelegate = typeof flags.delegate === 'string' ? flags.delegate.trim() : '';
197
208
  if (explicitDelegate) return explicitDelegate;
198
209
 
210
+ const resolvedModel = typeof modelIdentifier === 'string' ? modelIdentifier.trim() : '';
211
+ if (resolvedModel) return resolvedModel;
212
+
213
+ const explicitAgent = typeof flags.agent === 'string' ? flags.agent.trim() : '';
214
+ if (explicitAgent) return resolvePromptAgentIdentifier(explicitAgent.toLowerCase()) ?? explicitAgent;
215
+
199
216
  if (selectedAgent) return resolvePromptAgentIdentifier(selectedAgent);
200
217
 
201
218
  const envAgent = process.env.AGENT_IDENTIFIER?.trim();
@@ -233,7 +250,8 @@ async function runTicketCreationFlow(args, { commandName, launchAgent }) {
233
250
  })))
234
251
  : null;
235
252
 
236
- const ticketDelegate = resolveTicketCreationDelegate(flags, selectedAgent);
253
+ const modelIdentifier = resolveTicketCreationModelIdentifier(flags);
254
+ const ticketDelegate = resolveTicketCreationDelegate(flags, selectedAgent, modelIdentifier);
237
255
 
238
256
  const ticket = await createTicket(platformUrl, agentToken, localSecret, {
239
257
  objective,
@@ -262,7 +280,7 @@ export async function runCreateCommand(args) {
262
280
  Creates a ticket after interactive numbered project selection.
263
281
 
264
282
  Examples:
265
- ovld create "Implement login page"
283
+ ovld create "Implement login page" --agent codex
266
284
  ovld create "Fix sync bug" --project-id <project-id>
267
285
  `);
268
286
  return;
@@ -279,7 +297,7 @@ Creates a ticket after interactive numbered project selection, then lets you pic
279
297
 
280
298
  Examples:
281
299
  ovld prompt "Implement login page"
282
- ovld prompt "Investigate flaky tests" --agent codex
300
+ ovld prompt "Investigate flaky tests" --agent codex --model gpt-5.4
283
301
  `);
284
302
  return;
285
303
  }
@@ -43,10 +43,13 @@ export function resolveProtocolAgentIdentifier(flags = {}) {
43
43
  return envAgent || 'claude-code';
44
44
  }
45
45
 
46
- export function resolveProtocolTicketDelegate(flags = {}, agentIdentifier = '') {
46
+ export function resolveProtocolTicketDelegate(flags = {}, modelIdentifier = '', agentIdentifier = '') {
47
47
  const explicitDelegate = typeof flags.delegate === 'string' ? flags.delegate.trim() : '';
48
48
  if (explicitDelegate) return explicitDelegate;
49
49
 
50
+ const resolvedModel = typeof modelIdentifier === 'string' ? modelIdentifier.trim() : '';
51
+ if (resolvedModel) return resolvedModel;
52
+
50
53
  const resolvedAgent = String(agentIdentifier).trim();
51
54
  return resolvedAgent || null;
52
55
  }
@@ -1039,6 +1042,7 @@ async function protocolSpawn(args) {
1039
1042
  const { platformUrl, agentToken, localSecret } = resolveAuth();
1040
1043
  const timeoutMs = resolveTimeout(flags);
1041
1044
  const agentIdentifier = resolveProtocolAgentIdentifier(flags);
1045
+ const modelIdentifier = resolveProtocolModelIdentifier(flags);
1042
1046
 
1043
1047
  // When --project-id is not provided, auto-send cwd as workingDirectory
1044
1048
  // so the server can resolve the project from the local_working_directory setting.
@@ -1056,7 +1060,7 @@ async function protocolSpawn(args) {
1056
1060
  ...(flags['acceptance-criteria'] ? { acceptanceCriteria: String(flags['acceptance-criteria']) } : {}),
1057
1061
  ...(flags['available-tools'] ? { availableTools: String(flags['available-tools']) } : {}),
1058
1062
  ...(flags['execution-target'] ? { executionTarget: String(flags['execution-target']) } : {}),
1059
- delegate: resolveProtocolTicketDelegate(flags, agentIdentifier),
1063
+ delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier),
1060
1064
  ...(flags['parent-session-key'] ? { parentSessionKey: String(flags['parent-session-key']) } : {}),
1061
1065
  ...(flags['parent-ticket-id'] ? { parentTicketId: String(flags['parent-ticket-id'] ?? process.env.TICKET_ID ?? '') } : {})
1062
1066
  };
@@ -1093,6 +1097,7 @@ async function protocolCreateTicket(args) {
1093
1097
  const { platformUrl, agentToken, localSecret } = resolveAuth();
1094
1098
  const timeoutMs = resolveTimeout(flags);
1095
1099
  const agentIdentifier = resolveProtocolAgentIdentifier(flags);
1100
+ const modelIdentifier = resolveProtocolModelIdentifier(flags);
1096
1101
 
1097
1102
  const hasSessionContext = Boolean(sessionKey && ticketId);
1098
1103
 
@@ -1107,7 +1112,7 @@ async function protocolCreateTicket(args) {
1107
1112
  ...(flags['acceptance-criteria'] ? { acceptanceCriteria: String(flags['acceptance-criteria']) } : {}),
1108
1113
  ...(flags['available-tools'] ? { availableTools: String(flags['available-tools']) } : {}),
1109
1114
  ...(flags['execution-target'] ? { executionTarget: String(flags['execution-target']) } : {}),
1110
- delegate: resolveProtocolTicketDelegate(flags, agentIdentifier)
1115
+ delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier)
1111
1116
  };
1112
1117
 
1113
1118
  const data = await apiPost(
@@ -1154,7 +1159,7 @@ async function protocolCreateTicket(args) {
1154
1159
  ...(flags['acceptance-criteria'] ? { acceptanceCriteria: String(flags['acceptance-criteria']) } : {}),
1155
1160
  ...(flags['available-tools'] ? { availableTools: String(flags['available-tools']) } : {}),
1156
1161
  ...(flags['execution-target'] ? { executionTarget: String(flags['execution-target']) } : {}),
1157
- delegate: resolveProtocolTicketDelegate(flags, agentIdentifier)
1162
+ delegate: resolveProtocolTicketDelegate(flags, modelIdentifier, agentIdentifier)
1158
1163
  };
1159
1164
 
1160
1165
  const data = await apiPost(
@@ -1204,9 +1209,9 @@ export async function runProtocolCommand(subcommand, args) {
1204
1209
  if (!subcommand || subcommand === 'help' || subcommand === '--help') {
1205
1210
  console.log(`ovld protocol <subcommand> [flags]
1206
1211
 
1207
- Use this for agent workflow on a ticket: create one with \`ovld protocol spawn\`,
1208
- attach with \`ovld protocol attach --ticket-id <id>\`, then begin executing with
1209
- \`ovld protocol update --phase execute\`.
1212
+ Use this for ticket lifecycle work from an agent runtime: create a standalone
1213
+ draft with \`ovld protocol create\`, create-and-attach with \`ovld protocol spawn\`,
1214
+ or attach to an existing ticket with \`ovld protocol attach --ticket-id <id>\`.
1210
1215
 
1211
1216
  Project discovery:
1212
1217
  When spawning or creating tickets, the CLI automatically resolves the correct
@@ -1440,8 +1445,12 @@ create:
1440
1445
  --execution-target <t> agent | human
1441
1446
  --delegate <model> Model or delegate identifier that created the ticket
1442
1447
  --agent <identifier>
1448
+ --model <identifier>
1443
1449
  Returns:
1444
1450
  New draft ticket JSON (follow-up draft when session flags are provided)
1451
+ Notes:
1452
+ Standalone create auto-discovers the project from the current working directory.
1453
+ Follow-up create requires both --session-key and --ticket-id.
1445
1454
 
1446
1455
  artifact-prepare-upload:
1447
1456
  Required:
@@ -1496,8 +1505,8 @@ Examples:
1496
1505
  ovld protocol attach --ticket-id abc-123 --external-session-id null
1497
1506
  ovld protocol connect --ticket-id abc-123
1498
1507
  ovld protocol load-context --ticket-id abc-123
1499
- ovld protocol create --objective "Capture follow-up work from this repo"
1500
- ovld protocol create --session-key <key> --ticket-id <id> --objective "Capture follow-up work"
1508
+ ovld protocol create --agent codex --objective "Capture follow-up work from this repo"
1509
+ ovld protocol create --agent codex --session-key <key> --ticket-id <id> --objective "Capture follow-up work"
1501
1510
  ovld protocol spawn --agent codex --objective "Implement user auth" --priority high
1502
1511
  ovld protocol update --session-key <key> --ticket-id <id> --summary "Did X" --phase execute
1503
1512
  ovld protocol update --session-key <key> --ticket-id <id> --summary-file ./update.txt --event-type user_follow_up
@@ -14,7 +14,7 @@ import path from 'node:path';
14
14
  import { fileURLToPath } from 'node:url';
15
15
  import { checkForCliUpdate, getCurrentCliVersion, printCliUpdateNotice } from './cli-update.mjs';
16
16
 
17
- const BUNDLE_VERSION = '1.8.0';
17
+ const BUNDLE_VERSION = '1.9.0';
18
18
  const MD_MARKER_START = '<!-- overlord:managed:start -->';
19
19
  const MD_MARKER_END = '<!-- overlord:managed:end -->';
20
20
  const MANIFEST_DIR = path.join(os.homedir(), '.ovld');
@@ -110,6 +110,21 @@ ovld protocol record-change-rationales --session-key <sessionKey> --ticket-id $T
110
110
 
111
111
  Record only meaningful behavioral changes — skip formatting-only noise. Prefer 1–5 concise rationales per ticket, each tied to a specific file and diff hunk.
112
112
 
113
+ ## Project Discovery & Ticket Creation
114
+
115
+ When creating tickets from within a repository:
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.
118
+ - Both commands can resolve the project from the current working directory; use \`--working-directory\` to override.
119
+
120
+ \`\`\`bash
121
+ ovld protocol create --agent claude-code --objective "Capture follow-up work from this repository"
122
+ \`\`\`
123
+
124
+ \`\`\`bash
125
+ ovld protocol spawn --agent claude-code --objective "Implement feature X" --priority medium
126
+ \`\`\`
127
+
113
128
  ## Context & Artifacts
114
129
 
115
130
  \`\`\`bash
@@ -174,6 +189,21 @@ ovld protocol record-change-rationales --session-key <sessionKey> --ticket-id $T
174
189
  --change-rationales-json '[{"label":"Add backoff","file_path":"lib/api.ts","summary":"Added retry.","why":"Transient failures.","impact":"Retries 3x.","hunks":[{"header":"@@ -22,4 +22,18 @@"}]}]'
175
190
  \`\`\`
176
191
 
192
+ ## Project Discovery & Ticket Creation
193
+
194
+ When creating tickets from within a repository:
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.
197
+ - Both commands can resolve the project from the current working directory; use \`--working-directory\` to override.
198
+
199
+ \`\`\`bash
200
+ ovld protocol create --agent opencode --objective "Capture follow-up work from this repository"
201
+ \`\`\`
202
+
203
+ \`\`\`bash
204
+ ovld protocol spawn --agent opencode --objective "Implement feature X" --priority medium
205
+ \`\`\`
206
+
177
207
  ## Context & Artifacts
178
208
 
179
209
  \`\`\`bash
@@ -236,6 +266,7 @@ For larger delivery JSON, prefer \`--payload-file -\` with stdin so no scratch f
236
266
  Rules:
237
267
  - Always attach first and deliver last.
238
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.
239
270
  - If the user sends a new message during an active ticket session, publish a \`user_follow_up\` event before doing anything else.
240
271
  `;
241
272
 
@@ -356,6 +387,16 @@ disable-model-invocation: true
356
387
  ---
357
388
 
358
389
  Run \`ovld protocol load-context --ticket-id <ticketId>\` using \`$ARGUMENTS\` as the ticket ID.`
390
+ },
391
+ {
392
+ path: path.join(base, 'create.md'),
393
+ content: `---
394
+ description: Create a draft Overlord ticket from the current conversation
395
+ argument-hint: <objective or raw flags>
396
+ disable-model-invocation: true
397
+ ---
398
+
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>"\`.`
359
400
  },
360
401
  {
361
402
  path: path.join(base, 'spawn.md'),
@@ -383,6 +424,11 @@ Run \`ovld protocol spawn --agent claude-code\` with \`$ARGUMENTS\`. If no flags
383
424
  content:
384
425
  'Load Overlord ticket context without attaching.\n\nRun `ovld protocol load-context --ticket-id <ticketId>` using the text after `/load` as the ticket ID.\n'
385
426
  },
427
+ {
428
+ path: path.join(base, 'create.md'),
429
+ content:
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
+ },
386
432
  {
387
433
  path: path.join(base, 'spawn.md'),
388
434
  content:
@@ -404,6 +450,11 @@ Run \`ovld protocol spawn --agent claude-code\` with \`$ARGUMENTS\`. If no flags
404
450
  content:
405
451
  'description = "Load Overlord ticket context without creating a new session."\nprompt = """\nRun `ovld protocol load-context --ticket-id <ticketId>` using `{{args}}` as the ticket ID.\n"""\n'
406
452
  },
453
+ {
454
+ path: path.join(base, 'create.toml'),
455
+ content:
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
+ },
407
458
  {
408
459
  path: path.join(base, 'spawn.toml'),
409
460
  content:
@@ -431,6 +482,15 @@ agent: build
431
482
  ---
432
483
 
433
484
  Run \`ovld protocol load-context --ticket-id <ticketId>\` using \`$ARGUMENTS\` as the ticket ID. If no ticket ID was provided, ask the user for one and stop.`
485
+ },
486
+ {
487
+ path: path.join(base, 'create.md'),
488
+ content: `---
489
+ description: Create a draft Overlord ticket from the current conversation
490
+ agent: build
491
+ ---
492
+
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>"\`.`
434
494
  },
435
495
  {
436
496
  path: path.join(base, 'spawn.md'),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord-cli",
3
- "version": "4.13.0",
3
+ "version": "4.14.0",
4
4
  "description": "Overlord CLI — launch AI agents on tickets from anywhere",
5
5
  "type": "module",
6
6
  "bin": {
@@ -5,7 +5,7 @@ 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,spawn}.md` — slash commands for session routing and ticket creation.
8
+ - `commands/{connect,load,create,spawn}.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
10
  - `userConfig` for legacy `overlord_url` and `agent_token` installs. Current installs should authenticate with `ovld auth login` or Overlord Desktop; env vars remain optional overrides for remote shells, CI, and explicit token injection.
11
11
 
@@ -36,6 +36,6 @@ Older plugin versions prompted for `overlord_url` and `agent_token` at install t
36
36
  Inside Claude Code the components are surfaced with the plugin prefix:
37
37
 
38
38
  - skill → `overlord:overlord-ticket`
39
- - commands → `/overlord:connect`, `/overlord:load`, `/overlord:spawn`
39
+ - commands → `/overlord:connect`, `/overlord:load`, `/overlord:create`, `/overlord:spawn`
40
40
 
41
41
  Prompts generated by Overlord (see `lib/overlord/ticket-prompt.ts`) already reference these names in `bundle` instruction mode.
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Create a draft Overlord ticket from the current conversation
3
+ argument-hint: <objective or raw flags>
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ Create a draft Overlord ticket from the user's request.
8
+
9
+ Use `$ARGUMENTS` as the input.
10
+ If it already contains flags such as `--title`, `--priority`, `--project-id`, or `--execution-target`, pass those flags through after `ovld protocol create --agent claude-code`.
11
+ Otherwise, treat `$ARGUMENTS` as the objective text and run:
12
+ `ovld protocol create --agent claude-code --objective "<objective>"`
13
+
14
+ If no objective was provided, ask the user for one and stop.
15
+
16
+ After the command succeeds, report the new `TICKET_ID`.
@@ -71,11 +71,11 @@ For larger delivery payloads, prefer `--payload-file -` and stream the full JSON
71
71
 
72
72
  Use this mode when the conversation starts normally and the user asks Claude to create, inspect, connect to, or otherwise use Overlord.
73
73
 
74
- 1. If the user wants to create ticket drafts only (do not start execution), run `ovld protocol create --objective "..."`.
74
+ 1. If the user wants to create tickets (and does not ask to start execution), run `ovld protocol create --agent claude-code --objective "..."`.
75
75
  - When `--session-key` and `--ticket-id` are provided, it creates a follow-up draft.
76
76
  - When session flags are omitted, it resolves the project by matching current working directory (or `--working-directory`) to Overlord `local_working_directory`, then creates a standalone draft.
77
- 2. If the user wants to create and start execution immediately, use `/overlord:spawn` or run `ovld protocol spawn --agent claude-code --objective "..."`.
78
- This creates the ticket in `execute` status and attaches immediately.
77
+ 2. Default to `create` for new tickets. Only use `/overlord:spawn` or `ovld protocol spawn --agent claude-code --objective "..."` when the user explicitly asks to create and execute immediately.
78
+ `spawn` creates the ticket in `execute` status and attaches immediately.
79
79
  3. If the user already has a ticket ID and only wants to inspect it, use `/overlord:load` or run `ovld protocol load-context --ticket-id <ticket-id>`.
80
80
  4. If the user wants to route the current session onto an existing ticket by ID, use `/overlord:connect` or run `ovld protocol connect --ticket-id <ticket-id>`.
81
81
  5. If the user wants to find a ticket but does not know the ID, use `ovld attach` for interactive ticket search and agent launch, or ask the user for the ticket ID if staying strictly inside chat is the better fit.
@@ -107,9 +107,13 @@ Record only meaningful behavioral changes. Skip formatting-only noise.
107
107
  ## Project Discovery And Ticket Creation
108
108
 
109
109
  When creating tickets from within a repository:
110
- - `spawn` automatically resolves the correct project from the current working directory and starts execution.
111
- - `create` creates a draft follow-up ticket (no auto-attach execution session).
112
- No `--project-id` flag is needed for `spawn` unless you want to override resolution.
110
+ - Prefer `create` by default for draft ticket creation.
111
+ - Use `spawn` only when the user explicitly asks to start execution immediately.
112
+ - Both commands can resolve the project from the current working directory; use `--working-directory` to override.
113
+
114
+ ```bash
115
+ ovld protocol create --agent claude-code --objective "Capture follow-up work from this repository"
116
+ ```
113
117
 
114
118
  ```bash
115
119
  ovld protocol spawn --agent claude-code --objective "Implement feature X" --priority medium
@@ -0,0 +1,9 @@
1
+ Create a draft Overlord ticket.
2
+
3
+ Use the text after `/create` as the objective unless raw flags are present.
4
+
5
+ Run:
6
+ `ovld protocol create --agent cursor --objective "<objective>"`
7
+
8
+ If raw flags are present, pass them through after:
9
+ `ovld protocol create --agent cursor`
@@ -19,12 +19,13 @@ Use this skill whenever Cursor needs to work with Overlord, whether the session
19
19
 
20
20
  ## Mode 2: Asked From Chat To Use Overlord
21
21
 
22
- 1. If the user wants a new ticket, use `/spawn` or run `ovld protocol spawn --agent cursor --objective "..."`.
23
- 2. If the user already has a ticket ID and only wants to inspect it, use `/load` or run `ovld protocol load-context --ticket-id <ticket-id>`.
24
- 3. If the user wants to route the current session onto an existing ticket by ID, use `/connect` or run `ovld protocol connect --ticket-id <ticket-id>`.
25
- 4. If the user wants to search for tickets by keyword or status, use the `search_tickets` MCP tool.
26
- 5. If you need other lifecycle commands or flags, run `ovld protocol help` and use the real subcommand list instead of guessing.
27
- 6. Once you attach to a ticket, switch back to Mode 1 and follow the full ticket lifecycle.
22
+ 1. If the user wants to create tickets (and does not ask to start execution), use `/create` or run `ovld protocol create --agent cursor --objective "..."`.
23
+ 2. Default to `create` for new tickets. Only use `/spawn` or `ovld protocol spawn --agent cursor --objective "..."` when the user explicitly asks to create and execute immediately.
24
+ 3. If the user already has a ticket ID and only wants to inspect it, use `/load` or run `ovld protocol load-context --ticket-id <ticket-id>`.
25
+ 4. If the user wants to route the current session onto an existing ticket by ID, use `/connect` or run `ovld protocol connect --ticket-id <ticket-id>`.
26
+ 5. If the user wants to search for tickets by keyword or status, use the `search_tickets` MCP tool.
27
+ 6. If you need other lifecycle commands or flags, run `ovld protocol help` and use the real subcommand list instead of guessing.
28
+ 7. Once you attach to a ticket, switch back to Mode 1 and follow the full ticket lifecycle.
28
29
 
29
30
  ## Rules
30
31
 
@@ -67,12 +67,13 @@ For larger delivery payloads, prefer `--payload-file -` and stream the full JSON
67
67
 
68
68
  ## Mode 2: Asked From Chat To Use Overlord
69
69
 
70
- 1. If the user wants a new ticket, use `ovld protocol spawn --objective "..."`. It creates the ticket and attaches immediately.
71
- 2. If the user wants to inspect an existing ticket without starting work, use `ovld protocol load-context --ticket-id <ticket-id>`.
72
- 3. If the user wants to work an existing ticket, attach with `ovld protocol attach --ticket-id <ticket-id>` and then switch to Mode 1.
73
- 4. If the user wants to find existing tickets by keyword or workflow state, use the `search_tickets` tool.
74
- 5. If you need to understand project routing before spawning, use `ovld protocol discover-project`.
75
- 6. If you need other lifecycle commands or flags, run `ovld protocol help` and use the real subcommand list instead of guessing.
70
+ 1. If the user wants to create tickets (and does not ask to start execution), run `ovld protocol create --agent codex --objective "..."`.
71
+ 2. Default to `create` for new tickets. Only use `ovld protocol spawn --agent codex --objective "..."` when the user explicitly asks to create and execute immediately.
72
+ 3. If the user wants to inspect an existing ticket without starting work, use `ovld protocol load-context --ticket-id <ticket-id>`.
73
+ 4. If the user wants to work an existing ticket, attach with `ovld protocol attach --ticket-id <ticket-id>` and then switch to Mode 1.
74
+ 5. If the user wants to find existing tickets by keyword or workflow state, use the `search_tickets` tool.
75
+ 6. If you need to understand project routing before spawning, use `ovld protocol discover-project`.
76
+ 7. If you need other lifecycle commands or flags, run `ovld protocol help` and use the real subcommand list instead of guessing.
76
77
 
77
78
  ## Change Rationales
78
79
 
@@ -105,6 +106,21 @@ ovld protocol artifact-upload-file --session-key <sessionKey> --ticket-id $TICKE
105
106
  ovld protocol artifact-download-url --session-key <sessionKey> --ticket-id $TICKET_ID --artifact-id <artifact-id>
106
107
  ```
107
108
 
109
+ ## Project Discovery And Ticket Creation
110
+
111
+ When creating tickets from within a repository:
112
+ - Prefer `create` by default for draft ticket creation.
113
+ - Use `spawn` only when the user explicitly asks to start execution immediately.
114
+ - Both commands can resolve the project from the current working directory; use `--working-directory` to override.
115
+
116
+ ```bash
117
+ ovld protocol create --agent codex --objective "Capture follow-up work from this repository"
118
+ ```
119
+
120
+ ```bash
121
+ ovld protocol spawn --agent codex --objective "Implement feature X" --priority medium
122
+ ```
123
+
108
124
  ## Rules
109
125
 
110
126
  - The authoritative lifecycle is the `ovld protocol` CLI once you are on a ticket.