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 +6 -4
- package/bin/_cli/auth.mjs +22 -7
- package/bin/_cli/index.mjs +2 -4
- package/bin/_cli/launcher.mjs +0 -26
- package/bin/_cli/protocol.mjs +22 -18
- package/bin/_cli/setup.mjs +13 -13
- package/package.json +1 -1
- package/plugins/claude/README.md +4 -3
- package/plugins/claude/commands/connect.md +1 -0
- package/plugins/claude/commands/create.md +1 -0
- package/plugins/claude/commands/load.md +1 -0
- package/plugins/claude/commands/spawn.md +1 -0
- package/plugins/claude/skills/overlord-ticket/SKILL.md +12 -0
- package/plugins/cursor/commands/connect.md +2 -0
- package/plugins/cursor/commands/create.md +2 -0
- package/plugins/cursor/commands/load.md +2 -0
- package/plugins/cursor/commands/spawn.md +2 -0
- package/plugins/cursor/skills/overlord-ticket/SKILL.md +13 -0
- package/plugins/overlord/.codex-plugin/plugin.json +4 -4
- package/plugins/overlord/README.md +2 -1
- package/plugins/overlord/scripts/overlord-mcp.mjs +2 -2
- package/plugins/overlord/skills/overlord-ticket/SKILL.md +12 -0
package/README.md
CHANGED
|
@@ -36,10 +36,12 @@ overlord help
|
|
|
36
36
|
|
|
37
37
|
### Auth
|
|
38
38
|
```bash
|
|
39
|
-
#
|
|
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
|
|
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
|
-
- `
|
|
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
|
-
|
|
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
|
|
616
|
-
if (!
|
|
617
|
-
|
|
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
|
-
|
|
622
|
-
if (creds
|
|
623
|
-
console.log(`
|
|
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
|
|
package/bin/_cli/index.mjs
CHANGED
|
@@ -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,
|
|
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;
|
package/bin/_cli/launcher.mjs
CHANGED
|
@@ -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);
|
package/bin/_cli/protocol.mjs
CHANGED
|
@@ -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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
//
|
|
1072
|
+
// prompt (create ticket + connect in one call)
|
|
1069
1073
|
// ---------------------------------------------------------------------------
|
|
1070
1074
|
|
|
1071
|
-
async function
|
|
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/
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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/
|
|
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
|
-
|
|
1500
|
+
prompt:
|
|
1497
1501
|
Purpose:
|
|
1498
|
-
Create a
|
|
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
|
|
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
|
|
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
|
|
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; }
|
package/bin/_cli/setup.mjs
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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 \`
|
|
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, '
|
|
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
|
|
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, '
|
|
433
|
+
path: path.join(base, 'prompt.md'),
|
|
434
434
|
content:
|
|
435
|
-
'Create a new Overlord ticket.\n\nRun `ovld protocol
|
|
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, '
|
|
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
|
|
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, '
|
|
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
|
|
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
package/plugins/claude/README.md
CHANGED
|
@@ -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,
|
|
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
|
-
- `
|
|
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:
|
|
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 -->
|
|
@@ -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.
|
|
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
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
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
|
-
-
|
|
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.
|
|
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 -->
|