overlord-cli 0.2607141312.0 → 0.2607151113.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
@@ -182,7 +182,7 @@ export OVERLORD_BACKEND_URL="https://overlord.example.com"
182
182
  export OVERLORD_USER_TOKEN="out_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
183
183
 
184
184
  # 4. Agent connector — write the local agent connector config (non-interactive).
185
- ovld agent-setup claude # one of: claude | codex | cursor | all
185
+ ovld agent-setup claude # one of: claude | codex | cursor | pi | all
186
186
  ```
187
187
 
188
188
  Then verify the backend is reachable and authenticated:
@@ -22,7 +22,7 @@ OpenCode, Antigravity, and others). A connector is what lets an agent speak the
22
22
  Install or refresh a connector with:
23
23
 
24
24
  ```bash
25
- ovld agent-setup <agent> # claude | codex | cursor | all
25
+ ovld agent-setup <agent> # claude | codex | cursor | pi | all
26
26
  ovld doctor # verify managed files and permissions
27
27
  ```
28
28
 
@@ -35,6 +35,7 @@ connector contract version changes.
35
35
  - [Claude Code](adapters/claude/README.md): installable Claude plugin bundle with a Claude overlay for the shared core, slash commands, hooks, adapter manifest, prompt wrapper notes, and connector conformance manifest.
36
36
  - [Codex](adapters/codex/README.md): Codex plugin with hooks, MCP bridge, and permission warmup.
37
37
  - [Cursor](adapters/cursor/README.md): Cursor plugin with slash commands, hooks, rules, and MCP bridge.
38
+ - [PI](adapters/pi/README.md): PI Agent skill and extension with follow-up capture and native-session resume.
38
39
 
39
40
  ### Extension point
40
41
 
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://antigravity.google/schemas/v1/plugin.json",
3
3
  "name": "overlord",
4
- "version": "0.2.9",
4
+ "version": "0.3.1",
5
5
  "description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
6
6
  "author": {
7
7
  "name": "Cooperativ",
@@ -328,7 +328,7 @@ process.stdin.on('data', async chunk => {
328
328
  result: {
329
329
  protocolVersion: PROTOCOL_VERSION,
330
330
  capabilities: { tools: { listChanged: false } },
331
- serverInfo: { name: 'overlord-antigravity', version: '0.2.9' }
331
+ serverInfo: { name: 'overlord-antigravity', version: '0.3.1' }
332
332
  }
333
333
  });
334
334
  continue;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.2.9",
3
+ "version": "0.3.1",
4
4
  "description": "Overlord mission protocol workflow for Claude Code — attach/update/ask/deliver, slash commands, and hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -9,7 +9,15 @@
9
9
  "homepage": "https://www.ovld.ai",
10
10
  "repository": "https://github.com/cooperativ-labs/overlord",
11
11
  "license": "UNLICENSED",
12
- "keywords": ["overlord", "ticket", "agents", "mission", "workflow", "protocol", "claude-code"],
12
+ "keywords": [
13
+ "overlord",
14
+ "ticket",
15
+ "agents",
16
+ "mission",
17
+ "workflow",
18
+ "protocol",
19
+ "claude-code"
20
+ ],
13
21
  "userConfig": {
14
22
  "overlord_url": {
15
23
  "type": "string",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.2.9",
3
+ "version": "0.3.1",
4
4
  "description": "Chat-driven access to Overlord mission protocol workflows with hook-driven activity capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -28,7 +28,10 @@
28
28
  "longDescription": "Connect Codex to Overlord's local mission workflow through the existing `ovld protocol` CLI. The plugin bundles workflow skills plus MCP tools for mission attachment, progress updates, shared context, artifacts, delivery, and follow-up mission creation.",
29
29
  "developerName": "Cooperativ",
30
30
  "category": "Productivity",
31
- "capabilities": ["Interactive", "Write"],
31
+ "capabilities": [
32
+ "Interactive",
33
+ "Write"
34
+ ],
32
35
  "websiteURL": "https://www.ovld.ai/docs",
33
36
  "privacyPolicyURL": "https://www.ovld.ai/privacy",
34
37
  "termsOfServiceURL": "https://www.ovld.ai/terms",
@@ -40,6 +43,8 @@
40
43
  "brandColor": "#1E6B5C",
41
44
  "composerIcon": "./assets/icon.png",
42
45
  "logo": "./assets/logo.png",
43
- "screenshots": ["./assets/screenshot.svg"]
46
+ "screenshots": [
47
+ "./assets/screenshot.svg"
48
+ ]
44
49
  }
45
50
  }
@@ -328,7 +328,7 @@ process.stdin.on('data', async chunk => {
328
328
  result: {
329
329
  protocolVersion: PROTOCOL_VERSION,
330
330
  capabilities: { tools: { listChanged: false } },
331
- serverInfo: { name: 'overlord-codex', version: '0.2.9' }
331
+ serverInfo: { name: 'overlord-codex', version: '0.3.1' }
332
332
  }
333
333
  });
334
334
  continue;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlord",
3
- "version": "0.2.9",
3
+ "version": "0.3.1",
4
4
  "description": "Overlord mission protocol workflow for Cursor — attach/update/ask/deliver, slash commands, MCP bridge, and follow-up capture.",
5
5
  "author": {
6
6
  "name": "Cooperativ",
@@ -9,7 +9,16 @@
9
9
  "homepage": "https://www.ovld.ai",
10
10
  "repository": "https://github.com/cooperativ-labs/overlord",
11
11
  "license": "UNLICENSED",
12
- "keywords": ["overlord", "cursor", "mcp", "ticket", "agents", "mission", "workflow", "protocol"],
12
+ "keywords": [
13
+ "overlord",
14
+ "cursor",
15
+ "mcp",
16
+ "ticket",
17
+ "agents",
18
+ "mission",
19
+ "workflow",
20
+ "protocol"
21
+ ],
13
22
  "skills": "./skills/",
14
23
  "mcpServers": "./mcp.json",
15
24
  "interface": {
@@ -18,7 +27,10 @@
18
27
  "longDescription": "Connect Cursor to Overlord's local mission workflow through the ovld protocol CLI. Includes workflow rules, slash commands, MCP bridge tools, and follow-up capture.",
19
28
  "developerName": "Cooperativ",
20
29
  "category": "Productivity",
21
- "capabilities": ["Interactive", "Write"],
30
+ "capabilities": [
31
+ "Interactive",
32
+ "Write"
33
+ ],
22
34
  "websiteURL": "https://www.ovld.ai/docs",
23
35
  "privacyPolicyURL": "https://www.ovld.ai/privacy",
24
36
  "termsOfServiceURL": "https://www.ovld.ai/terms"
@@ -328,7 +328,7 @@ process.stdin.on('data', async chunk => {
328
328
  result: {
329
329
  protocolVersion: PROTOCOL_VERSION,
330
330
  capabilities: { tools: { listChanged: false } },
331
- serverInfo: { name: 'overlord-cursor', version: '0.2.9' }
331
+ serverInfo: { name: 'overlord-cursor', version: '0.3.1' }
332
332
  }
333
333
  });
334
334
  continue;
@@ -0,0 +1,42 @@
1
+ # PI Connector
2
+
3
+ The PI connector installs an Overlord Agent Skill and a small PI extension. It gives PI the shared mission lifecycle instructions, records ordinary follow-up prompts, and exposes PI's native session ID for review-session resume.
4
+
5
+ ## Setup
6
+
7
+ Install PI separately, then install or refresh this adapter:
8
+
9
+ ```bash
10
+ ovld agent-setup pi
11
+ ovld doctor
12
+ ```
13
+
14
+ The adapter writes only Overlord-managed files under `~/.pi/agent`:
15
+
16
+ - `extensions/overlord.ts`
17
+ - `skills/overlord-mission/`
18
+ - `prompt-wrapper.md` and this README
19
+
20
+ Re-running setup is idempotent. `ovld doctor` reports missing or modified managed files and whether the `pi` binary is on `PATH`.
21
+
22
+ ## Models and thinking
23
+
24
+ PI accepts provider-qualified models with `--model` and an independent `--thinking` level. The built-in catalog includes:
25
+
26
+ | Display name | PI model ID |
27
+ | --- | --- |
28
+ | GLM 5.2 | `zai/glm-5.2` |
29
+ | Claude Opus 4.8 | `anthropic/claude-opus-4-8` |
30
+ | GPT-5.6 Terra | `openai-codex/gpt-5.6-terra` |
31
+
32
+ Authenticate the matching PI provider through PI's login/configuration flow or its supported environment variables. Use `pi --list-models` to inspect the models available to the current PI configuration.
33
+
34
+ ## Follow-ups and resume
35
+
36
+ The extension records human input after the initial Overlord launch prompt through `ovld protocol hook-event`. It never blocks the PI input pipeline if that protocol call fails. PI has no native permission-request hook, so this connector does not report permission prompts.
37
+
38
+ When PI supplies a native session ID, Overlord's review UI can reopen it with:
39
+
40
+ ```bash
41
+ pi --session <session-id>
42
+ ```
@@ -0,0 +1,27 @@
1
+ contractVersion: "0"
2
+ componentType: connector
3
+ componentKey: pi
4
+ label: "PI Connector"
5
+ description: "PI Agent skill and extension adapter for the Overlord mission protocol workflow."
6
+
7
+ connector:
8
+ agentIdentifier: pi
9
+ capabilities:
10
+ - followUpHook
11
+ - nativeResume
12
+ - modelFlag
13
+ - effortFlag
14
+ - contextFilePrompt
15
+ hookTypes:
16
+ - UserPromptSubmit
17
+ installPath: "~/.pi/agent"
18
+ managedFiles:
19
+ - "README.md"
20
+ - "extensions/overlord.ts"
21
+ - "prompt-wrapper.md"
22
+ - "skills/overlord-mission/SKILL.md"
23
+ - "skills/overlord-mission/reference/cli.md"
24
+ - "skills/overlord-mission/reference/context.md"
25
+ - "skills/overlord-mission/reference/devices.md"
26
+ - "skills/overlord-mission/reference/mcp.md"
27
+ - "skills/overlord-mission/reference/shell-escaping.md"
@@ -0,0 +1,70 @@
1
+ import type { ExtensionAPI, ExtensionContext } from '@earendil-works/pi-coding-agent';
2
+ import { createHash } from 'node:crypto';
3
+ import { mkdir, writeFile } from 'node:fs/promises';
4
+ import { homedir } from 'node:os';
5
+ import path from 'node:path';
6
+
7
+ const missionId = process.env.MISSION_ID ?? process.env.OVERLORD_MISSION_ID ?? '';
8
+ const executionRequestId = process.env.OVERLORD_EXECUTION_REQUEST_ID ?? '';
9
+ const sessionKey = process.env.SESSION_KEY ?? '';
10
+
11
+ function externalSessionId(ctx: ExtensionContext): string | null {
12
+ const id = ctx.sessionManager.getSessionId().trim();
13
+ return id || null;
14
+ }
15
+
16
+ async function cacheNativeSession(ctx: ExtensionContext): Promise<void> {
17
+ if (!missionId) return;
18
+ const sessionId = externalSessionId(ctx);
19
+ if (!sessionId) return;
20
+
21
+ const key = createHash('sha256').update(`${ctx.cwd}\0${missionId}\0pi`).digest('hex');
22
+ const directory = path.join(homedir(), '.ovld', 'native-sessions');
23
+
24
+ await mkdir(directory, { recursive: true });
25
+ await writeFile(
26
+ path.join(directory, key),
27
+ JSON.stringify({ agent: 'pi', missionId, externalSessionId: sessionId }),
28
+ 'utf8'
29
+ );
30
+ }
31
+
32
+ export default function overlordPiExtension(pi: ExtensionAPI): void {
33
+ let skipFirstInput = Boolean(missionId && executionRequestId);
34
+ let turnIndex = 0;
35
+
36
+ pi.on('session_start', (_event, ctx) => {
37
+ void cacheNativeSession(ctx).catch(() => {});
38
+ });
39
+
40
+ pi.on('input', (event, ctx) => {
41
+ void cacheNativeSession(ctx).catch(() => {});
42
+
43
+ if (!missionId || event.source === 'extension' || event.text.trim().length === 0) {
44
+ return { action: 'continue' };
45
+ }
46
+ if (skipFirstInput) {
47
+ skipFirstInput = false;
48
+ return { action: 'continue' };
49
+ }
50
+
51
+ const args = [
52
+ 'protocol',
53
+ 'hook-event',
54
+ '--hook-type',
55
+ 'UserPromptSubmit',
56
+ '--mission-id',
57
+ missionId,
58
+ '--prompt',
59
+ event.text,
60
+ '--turn-index',
61
+ String(++turnIndex)
62
+ ];
63
+ const sessionId = externalSessionId(ctx);
64
+ if (sessionId) args.push('--external-session-id', sessionId);
65
+ if (sessionKey) args.push('--session-key', sessionKey);
66
+
67
+ void pi.exec('ovld', args).catch(() => {});
68
+ return { action: 'continue' };
69
+ });
70
+ }
@@ -0,0 +1,14 @@
1
+ # PI Prompt Wrapper
2
+
3
+ PI receives Overlord's generated mission context as a native file input and a short visible launch message:
4
+
5
+ ```bash
6
+ pi --model <provider/id> --thinking <level> @<context-file> "Start work on <mission>."
7
+ ```
8
+
9
+ Rules:
10
+
11
+ - Pass the selected provider-qualified model unchanged with `--model`; do not split it into `--provider` plus a bare model ID.
12
+ - Pass thinking separately with `--thinking` only when the selected launch configuration specifies it.
13
+ - Place user-configured launch flags before the `@<context-file>` and visible message arguments.
14
+ - The context file contains the mission, objectives, history, artifacts, attachments, and lifecycle instructions. Do not put credentials in it.
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: overlord-mission
3
+ description: PI adapter for the shared Overlord mission workflow.
4
+ ---
5
+
6
+ <!-- @connector-core -->
7
+
8
+ ## PI Adapter Notes
9
+
10
+ - Agent identifier: `pi` for `ovld protocol create` and `ovld protocol prompt`.
11
+ - Model selection: pass PI provider-qualified model IDs with `--model <provider/id>` and thinking separately with `--thinking <off|minimal|low|medium|high|xhigh|max>`.
12
+ - Follow-up capture: the installed PI extension records ordinary user input as `UserPromptSubmit` after the launch-injected turn. Do not manually publish `user_follow_up` unless the extension is unavailable.
13
+ - Native resume: the PI extension reports its native session ID; Overlord review can reopen it with `pi --session <id>`.
14
+ - PI does not expose a native permission-request event. Do not claim permission activity is captured automatically.
15
+ - Authentication: use PI's provider login or API-key configuration for models, and shared `ovld auth` credentials, Overlord-launched environment variables, or `Overlord_USER_TOKEN` / `OVLD_USER_TOKEN` for protocol calls.
16
+
17
+ ## PI Command Mapping
18
+
19
+ - Create draft mission: `ovld protocol create --agent pi --objectives-json '[{"objective":"..."}]'`
20
+ - Create and execute immediately: `ovld protocol prompt --agent pi --objectives-json '[{"objective":"..."}]'`
21
+ - Load context without a session: `ovld protocol load-context --mission-id <mission_id>`
22
+ - Attach for execution: `ovld protocol attach --mission-id <mission_id>`
23
+ - Resume delivered work for follow-up execution: `ovld protocol resume-follow-up --mission-id <mission_id>`
@@ -26,7 +26,7 @@ follow:
26
26
  - repair local auth/setup before asking the user to intervene
27
27
 
28
28
  You do not install Connector Core directly. It is bundled into each agent adapter
29
- (Claude, Codex, Cursor) when you run `ovld agent-setup <agent>`. See the
29
+ (Claude, Codex, Cursor, PI) when you run `ovld agent-setup <agent>`. See the
30
30
  [connectors module README](../README.md) for setup instructions.
31
31
 
32
32
  ## For Developers
@@ -103,6 +103,16 @@ Requirements:
103
103
  - Launch with model flag where supported.
104
104
  - No thinking/effort flag required initially.
105
105
 
106
+ ## PI Connector
107
+
108
+ Requirements:
109
+
110
+ - Install the Overlord Agent Skill and extension beneath `~/.pi/agent`.
111
+ - Use PI's `input` extension event only for `UserPromptSubmit` follow-up capture; PI has no native permission-request hook.
112
+ - Record PI's native session ID through the existing `~/.ovld/native-sessions` cache so the review UI can offer `pi --session <id>`.
113
+ - Launch with provider-qualified models via `--model <provider/id>` and independent thinking via `--thinking <level>`.
114
+ - Pass the generated mission context as PI's native `@<context-file>` input and retain a short visible launch message.
115
+
106
116
  ## Antigravity Connector
107
117
 
108
118
  Can be implemented after local MVP.
@@ -204,7 +204,7 @@ The storage split should be:
204
204
 
205
205
  | Layer | Storage | Purpose |
206
206
  | --- | --- | --- |
207
- | Packaged harnesses | Code-level registry bundled with Overlord | Immutable definitions for built-in agents such as `codex` and `claude`. |
207
+ | Packaged harnesses | Code-level registry bundled with Overlord | Immutable definitions for built-in agents such as `codex`, `claude`, and `pi`. |
208
208
  | Personal extension definitions | `user_harness_extensions` plus local bundle files or hosted blobs | User-authored draft/private custom connectors. |
209
209
  | Workspace extension catalog | `workspace_harness_extensions` | Workspace-approved installed extensions available to members. |
210
210
  | Local connector installation state | `connector_installations` | Doctor/setup state for files installed into a specific local agent runtime. |