vgxness 1.3.0 → 1.3.1

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.
Files changed (35) hide show
  1. package/README.md +16 -16
  2. package/dist/cli/commands/interactive-entrypoint-dispatcher.js +4 -4
  3. package/dist/cli/commands/setup-dispatcher.js +4 -4
  4. package/dist/cli/doctor-renderer.js +1 -1
  5. package/dist/cli/sdd-renderer.js +7 -7
  6. package/dist/cli/setup-status-renderer.js +1 -0
  7. package/dist/cli/tui/main-menu/main-menu-read-model.js +8 -0
  8. package/dist/cli/tui/main-menu/main-menu-render-shape.js +14 -1
  9. package/dist/cli/tui/opentui/code/index.js +4 -4
  10. package/dist/cli/tui/opentui/main-menu/screen.js +6 -0
  11. package/dist/cli/tui/opentui/setup/screen.js +1 -1
  12. package/dist/cli/tui/opentui/setup/smoke.js +1 -1
  13. package/dist/cli/tui/setup/setup-tui-read-model.js +3 -3
  14. package/dist/cli/tui/setup/setup-tui-render-shape.js +8 -9
  15. package/dist/cli/tui/setup/setup-tui-state.js +1 -1
  16. package/dist/code/runtime/sdd-context.js +2 -2
  17. package/dist/mcp/validation.js +6 -2
  18. package/dist/orchestrator/natural-language-planner.js +1 -1
  19. package/dist/sdd/sdd-workflow-service.js +1 -1
  20. package/dist/setup/backup-rollback-service.js +2 -2
  21. package/dist/setup/setup-lifecycle-service.js +6 -6
  22. package/dist/setup/setup-plan.js +3 -3
  23. package/dist/verification/verification-plan-service.js +1 -1
  24. package/docs/architecture.md +39 -38
  25. package/docs/cli.md +134 -127
  26. package/docs/funcionamiento-del-sistema.md +16 -16
  27. package/docs/harness-gap-analysis.md +15 -1
  28. package/docs/prd.md +10 -10
  29. package/docs/vgxcode.md +20 -9
  30. package/docs/vgxness-code.md +6 -4
  31. package/package.json +1 -1
  32. package/dist/cli/guided-main-menu.js +0 -470
  33. package/dist/cli/setup-wizard-read-model.js +0 -72
  34. package/dist/cli/setup-wizard-renderer.js +0 -155
  35. package/dist/cli/setup-wizard-state.js +0 -82
package/docs/cli.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Use the local CLI
2
2
 
3
- Run `vgxness` commands from the repo with `bun run cli -- ...`. The CLI is intentionally thin: it parses flags, opens the local SQLite store, and calls the existing domain services for memory, agents, runs, and permissions. `npm run cli -- ...` remains available for Node development tooling compatibility when dependencies are already installed, but installed `vgxness`/`vgx` bins require Bun.
3
+ Run `vgxness` commands from the repo with `bun run cli:bun -- ...` when you need the same Bun runtime path used by installed `vgxness`/`vgx` bins. The CLI is intentionally thin: it parses flags, opens the local SQLite store, and calls the existing domain services for memory, agents, runs, and permissions. `npm run cli -- ...` remains available for Node development tooling compatibility when dependencies are already installed, but installed `vgxness`/`vgx` bins require Bun.
4
4
 
5
5
  ## Local tarball install and dogfood
6
6
 
7
- Use the Bun package evidence workflow to dogfood the installable package without publishing. It builds package artifacts, validates package contents, installs into an isolated Bun environment, and checks both CLI bins.
7
+ Use the Bun package evidence workflow to dogfood the installable package without publishing. It builds package artifacts, validates package contents, installs into an isolated Bun environment, checks both CLI bins, and runs an installed MCP read-only smoke.
8
8
 
9
9
  ```bash
10
10
  bun run package:bun:evidence
@@ -21,9 +21,10 @@ The evidence includes these smoke checks from the isolated install location:
21
21
  ```bash
22
22
  vgxness --help
23
23
  vgx --help
24
+ vgxness mcp start --db <temp-memory.sqlite> # then call verification_plan with { changeType: 'mcp' }
24
25
  ```
25
26
 
26
- `vgx setup plan` and `vgx setup status` are human-readable and read-only by default; pass `--json` when you need parseable automation output. The MCP plan is read-only. Installed-package setup plans should use `vgxness mcp start` and must not mention `npm run cli`, `tsx`, or repository-relative source paths.
27
+ `vgxness setup plan` and `vgxness setup status` are human-readable and read-only by default; pass `--json` when you need parseable automation output. The MCP plan is read-only. Installed-package setup plans should use `vgxness mcp start` and must not mention `npm run cli`, `tsx`, or repository-relative source paths.
27
28
 
28
29
  Only apply the OpenCode user/global config after reviewing the plan (use `--scope project` only when you intentionally want project config):
29
30
 
@@ -51,20 +52,20 @@ Release defaults used by the guided setup are:
51
52
  Recommended user flow after `npm install -g vgxness`:
52
53
 
53
54
  ```bash
54
- vgx --help
55
- vgx # OpenTUI main menu in a TTY; static safe setup guidance in CI/non-TTY
56
- vgx init # setup wizard in a TTY; read-only plan in CI/non-TTY
57
- vgx setup plan # human-readable, read-only plan
58
- vgx setup status # human-readable, read-only setup status
59
- vgx setup apply --yes # writes OpenCode config only after explicit consent
60
- vgx doctor # human-readable readiness checks
61
- vgx sdd next --project <project> --change <change>
62
- vgx setup rollback --backup <path>
55
+ vgxness --help
56
+ vgxness # OpenTUI main menu in a TTY; static safe setup guidance in CI/non-TTY
57
+ vgxness init # setup wizard in a TTY; read-only plan in CI/non-TTY
58
+ vgxness setup plan # human-readable, read-only plan
59
+ vgxness setup status # human-readable, read-only setup status
60
+ vgxness setup apply --yes # writes OpenCode config only after explicit consent
61
+ vgxness doctor # human-readable readiness checks
62
+ vgxness sdd next --project <project> --change <change>
63
+ vgxness setup rollback --backup <path>
63
64
  ```
64
65
 
65
- `setup plan`, `setup status`, and non-TTY `init` planning are read-only and do not write provider config. They are human-readable by default; pass `--json` when you need parseable automation output. With the default global database, the OpenCode MCP command is `vgxness mcp start`; for custom/project-local DBs it includes `--db <path>`. The default OpenCode target is `$HOME/.config/opencode/opencode.json`; pass `--scope project` to opt into `<workspace>/.opencode/opencode.json`. `setup apply --yes` is the explicit OpenCode provider-config write path. `setup rollback --backup <path>` validates a VGXNESS/OpenCode backup such as `opencode.json.backup-<timestamp>`, creates a pre-rollback backup of the current target when present, restores the selected backup byte-for-byte, and recommends `vgx doctor`.
66
+ `setup plan`, `setup status`, and non-TTY `init` planning are read-only and do not write provider config. They are human-readable by default; pass `--json` when you need parseable automation output. With the default global database, the OpenCode MCP command is `vgxness mcp start`; for custom/project-local DBs it includes `--db <path>`. The default OpenCode target is `$HOME/.config/opencode/opencode.json`; pass `--scope project` to opt into `<workspace>/.opencode/opencode.json`. `setup apply --yes` is the explicit OpenCode provider-config write path. `setup rollback --backup <path>` validates a VGXNESS/OpenCode backup such as `opencode.json.backup-<timestamp>`, creates a pre-rollback backup of the current target when present, restores the selected backup byte-for-byte, and recommends `vgxness doctor`.
66
67
 
67
- `vgx init` prompts in English when stdin/stdout are TTYs: project name, DB location, provider, OpenCode scope, install mode, then shows the plan and asks `Apply this setup? Type "yes" to continue:`. Any answer other than `yes` exits successfully without writes. In CI/non-TTY without `--yes`, `init` returns the read-only plan and never waits for input. `vgx doctor`, `vgx sdd status`, `vgx sdd next`, `vgx sdd get-artifact`, and `vgx sdd list-artifacts` are also human-readable by default; use `--json` for scripts.
68
+ `vgxness init` prompts in English when stdin/stdout are TTYs: project name, DB location, provider, OpenCode scope, install mode, then shows the plan and asks `Apply this setup? Type "yes" to continue:`. Any answer other than `yes` exits successfully without writes. In CI/non-TTY without `--yes`, `init` returns the read-only plan and never waits for input. `vgxness doctor`, `vgxness sdd status`, `vgxness sdd next`, `vgxness sdd get-artifact`, and `vgxness sdd list-artifacts` are also human-readable by default; use `--json` for scripts.
68
69
 
69
70
  ## Bun-first repository verification
70
71
 
@@ -105,7 +106,7 @@ This default mode is diagnostic: it may emit `status: incompatible` and exit `0`
105
106
  bun run package:bun:evidence -- --require-pass
106
107
  ```
107
108
 
108
- It validates package metadata, artifact contents, forbidden workspace-only files, isolated Bun global install behavior, both `vgxness --help` and `vgx --help`, Bun runtime identity evidence for the installed wrapper, retired bridge invariants, no `package-lock.json`, and `publicationAttempted: false`. It must not invoke registry publication commands.
109
+ It validates package metadata, artifact contents, forbidden workspace-only files, isolated Bun global install behavior, both `vgxness --help` and `vgx --help`, installed MCP `verification_plan` read-only behavior, Bun runtime identity evidence for the installed wrapper, retired bridge invariants, no `package-lock.json`, and `publicationAttempted: false`. It must not invoke registry publication commands or write provider config.
109
110
 
110
111
  Release-candidate checklist, without publishing:
111
112
 
@@ -185,20 +186,24 @@ bun run package:bun:evidence
185
186
 
186
187
  When reporting a Bun failure, include the Bun version, OS/CPU, Node version, whether `bun install --frozen-lockfile` completed, which `bun run verify:*` command failed, and whether the error points to `bun:sqlite`, migration application, package evidence, or another install step.
187
188
 
188
- ## Quick path
189
+ ## Repository quick path
190
+
191
+ These examples are for a source checkout. They use repo-local seeds and `bun run cli:bun -- ...`; they are not installed-package quick-start commands.
189
192
 
190
193
  ```bash
191
- npm run cli -- agents register --project vgxness --name apply-agent --description "Applies focused slices" --instructions "Follow SDD apply rules."
192
- npm run cli -- agents seed load --file seeds/agents/agent-seed-v1.json
193
- npm run cli -- agents list --project vgxness
194
- npm run cli -- agents get --project vgxness --name apply-agent
195
- npm run cli -- agents resolve --project vgxness --capabilities implementation,typescript --workflow sdd --phase apply --provider opencode --task "Implement a focused slice"
196
- npm run cli -- agents render --provider json --project vgxness --name apply-agent
197
- npm run cli -- agents render --provider opencode --project vgxness --name apply-agent
198
- npm run cli -- opencode preview --provider opencode --agent apply-agent --project vgxness --change my-change --phase apply-progress
199
- npm run cli -- sdd status --project vgxness --change my-change
194
+ bun run cli:bun -- agents register --project vgxness --name apply-agent --description "Applies focused slices" --instructions "Follow SDD apply rules."
195
+ bun run cli:bun -- agents seed load --file seeds/agents/agent-seed-v1.json
196
+ bun run cli:bun -- agents list --project vgxness
197
+ bun run cli:bun -- agents get --project vgxness --name apply-agent
198
+ bun run cli:bun -- agents resolve --project vgxness --capabilities implementation,typescript --workflow sdd --phase apply --provider opencode --task "Implement a focused slice"
199
+ bun run cli:bun -- agents render --provider json --project vgxness --name apply-agent
200
+ bun run cli:bun -- agents render --provider opencode --project vgxness --name apply-agent
201
+ bun run cli:bun -- opencode preview --provider opencode --agent apply-agent --project vgxness --change my-change --phase apply-progress
202
+ bun run cli:bun -- sdd status --project vgxness --change my-change
200
203
  ```
201
204
 
205
+ The checked-in agent seed is currently a repository development asset. It is not part of the published package whitelist; installed users should rely on setup-generated manager/agent config unless a release explicitly ships `seeds/agents/agent-seed-v1.json`.
206
+
202
207
  `agents render` returns generated artifacts in JSON. It does **not** install them or write `.opencode/`, `.claude/`, or any user/global provider config.
203
208
 
204
209
  `agents seed load` reads a project-local JSON manifest and upserts those agents into the local SQLite registry. It does **not** install OpenCode, create `.opencode/` or `.claude/`, or write provider/user/global config.
@@ -207,10 +212,10 @@ npm run cli -- sdd status --project vgxness --change my-change
207
212
 
208
213
  ## OpenTUI main menu
209
214
 
210
- Use no arguments in a TTY to open the main menu:
215
+ Use no arguments in a TTY to open the main menu from a checkout:
211
216
 
212
217
  ```bash
213
- npm run cli --
218
+ bun run cli:bun --
214
219
  ```
215
220
 
216
221
  The installed `vgxness`/`vgx` binary opens the OpenTUI main menu when run with no arguments in a TTY. With no TTY, no-args prints deterministic safe setup guidance, exits 0, and does not infer a project, open project state, toggle raw mode, or write provider/config artifacts. Use `vgxness --help` or `vgxness -h` to print command help without starting the main menu; explicit subcommands keep their normal behavior.
@@ -220,8 +225,8 @@ The top-level menu is: **Installation, Doctor / recovery, SDD / workflow guidanc
220
225
  For scriptable status, use explicit read-only commands:
221
226
 
222
227
  ```bash
223
- npm run cli -- setup status --project vgxness
224
- npm run cli -- sdd status --project vgxness --change my-change
228
+ bun run cli:bun -- setup status --project vgxness
229
+ bun run cli:bun -- sdd status --project vgxness --change my-change
225
230
  ```
226
231
 
227
232
  Provider support shown in the Installation surface is:
@@ -238,7 +243,7 @@ Setup and main-menu TUI surfaces do **not** silently write OpenCode or other pro
238
243
  Use `orchestrator preview` when you want `vgxness` to classify a request before deciding whether to answer directly, plan manually, diagnose, or enter SDD:
239
244
 
240
245
  ```bash
241
- npm run cli -- orchestrator preview \
246
+ bun run cli:bun -- orchestrator preview \
242
247
  --project vgxness \
243
248
  --intent "Build a new persistent checkout workflow" \
244
249
  --change checkout-workflow \
@@ -263,9 +268,9 @@ Use workflow commands when you want an explicit operator-controlled path from in
263
268
  Each workflow has three modes:
264
269
 
265
270
  ```bash
266
- npm run cli -- <workflow> preview --project <name> --intent <text>
267
- npm run cli -- <workflow> run --project <name> --intent <text> [--phase <name>] [--agent-id <id>] [--db <path>]
268
- npm run cli -- <workflow> execute --run-id <id> --confirm [--override-escalation] [--workspace <path>] [--db <path>] [--executor safe-non-dispatching|provider|command]
271
+ bun run cli:bun -- <workflow> preview --project <name> --intent <text>
272
+ bun run cli:bun -- <workflow> run --project <name> --intent <text> [--phase <name>] [--agent-id <id>] [--db <path>]
273
+ bun run cli:bun -- <workflow> execute --run-id <id> --confirm [--override-escalation] [--workspace <path>] [--db <path>] [--executor safe-non-dispatching|provider|command]
269
274
  ```
270
275
 
271
276
  `preview` is read-only: it returns the workflow registry plus optional planner output, does not open or write the database, does not create runs, does not call providers, does not edit files, and does not write provider config. Use it to choose between `quickfix`, `debug`, `sdd`, or another workflow before recording state.
@@ -278,25 +283,25 @@ Examples:
278
283
 
279
284
  ```bash
280
285
  # Preview a small docs/help fix.
281
- npm run cli -- quickfix preview \
286
+ bun run cli:bun -- quickfix preview \
282
287
  --project vgxness \
283
288
  --intent "Fix the CLI help copy for workflow execute"
284
289
 
285
290
  # Record a debug workflow run, then inspect the run id in the JSON output.
286
- npm run cli -- debug run \
291
+ bun run cli:bun -- debug run \
287
292
  --project vgxness \
288
293
  --intent "Investigate why workflow execute is blocked" \
289
294
  --db /tmp/vgxness-debug.sqlite
290
295
 
291
296
  # Record formal SDD work at a canonical phase.
292
- npm run cli -- sdd run \
297
+ bun run cli:bun -- sdd run \
293
298
  --project vgxness \
294
299
  --intent "Implement the workflow CLI documentation" \
295
300
  --phase apply-progress \
296
301
  --db /tmp/vgxness-sdd.sqlite
297
302
 
298
303
  # Execute a previously recorded run with the default non-dispatching gate.
299
- npm run cli -- quickfix execute \
304
+ bun run cli:bun -- quickfix execute \
300
305
  --run-id <run-id> \
301
306
  --confirm \
302
307
  --db /tmp/vgxness-debug.sqlite
@@ -312,7 +317,7 @@ Use `--executor command` only for the built-in bounded-process checks. It never
312
317
  | `node-version` | `node --version` | 5s | 8 KiB | Harmless local runtime smoke check. |
313
318
 
314
319
  ```bash
315
- npm run cli -- quickfix execute \
320
+ bun run cli:bun -- quickfix execute \
316
321
  --run-id <run-id> \
317
322
  --confirm \
318
323
  --executor command \
@@ -329,9 +334,9 @@ Command execution is bounded to the workspace: `--command-cwd` must resolve insi
329
334
  Use approval commands to resolve per-operation human approval requests without loosening global permissions:
330
335
 
331
336
  ```bash
332
- npm run cli -- approvals list [--run-id <id>] [--db <path>]
333
- npm run cli -- approvals approve --id <approval-id> [--db <path>]
334
- npm run cli -- approvals reject --id <approval-id> [--reason <text>] [--db <path>]
337
+ bun run cli:bun -- approvals list [--run-id <id>] [--db <path>]
338
+ bun run cli:bun -- approvals approve --id <approval-id> [--db <path>]
339
+ bun run cli:bun -- approvals reject --id <approval-id> [--reason <text>] [--db <path>]
335
340
  ```
336
341
 
337
342
  The safer default is unchanged: shell operations use `shell: ask` unless explicitly configured otherwise. Approval records let an operator authorize one exact pending operation, instead of changing provider or global permissions to make future shell operations pass automatically.
@@ -340,13 +345,13 @@ Command executor approval flow:
340
345
 
341
346
  ```bash
342
347
  # 1. Record the workflow run and keep the returned run id.
343
- npm run cli -- quickfix run \
348
+ bun run cli:bun -- quickfix run \
344
349
  --project vgxness \
345
350
  --intent "Check the local Node runtime" \
346
351
  --db /tmp/vgxness-workflow.sqlite
347
352
 
348
353
  # 2. Request an allowlisted command dispatch. With shell ask, this stops at approval.
349
- npm run cli -- quickfix execute \
354
+ bun run cli:bun -- quickfix execute \
350
355
  --run-id <run-id> \
351
356
  --confirm \
352
357
  --executor command \
@@ -354,17 +359,17 @@ npm run cli -- quickfix execute \
354
359
  --db /tmp/vgxness-workflow.sqlite
355
360
 
356
361
  # 3. Inspect the pending approval for that run.
357
- npm run cli -- approvals list \
362
+ bun run cli:bun -- approvals list \
358
363
  --run-id <run-id> \
359
364
  --db /tmp/vgxness-workflow.sqlite
360
365
 
361
366
  # 4. Approve the exact recorded operation.
362
- npm run cli -- approvals approve \
367
+ bun run cli:bun -- approvals approve \
363
368
  --id <approval-id> \
364
369
  --db /tmp/vgxness-workflow.sqlite
365
370
 
366
371
  # 5. Re-run the same execute command; the command now dispatches.
367
- npm run cli -- quickfix execute \
372
+ bun run cli:bun -- quickfix execute \
368
373
  --run-id <run-id> \
369
374
  --confirm \
370
375
  --executor command \
@@ -379,7 +384,7 @@ Approval reuse is intentionally narrow. A resolved approval must match the run i
379
384
  To deny an operation, reject the approval instead of approving it:
380
385
 
381
386
  ```bash
382
- npm run cli -- approvals reject \
387
+ bun run cli:bun -- approvals reject \
383
388
  --id <approval-id> \
384
389
  --reason "not appropriate for this run" \
385
390
  --db /tmp/vgxness-workflow.sqlite
@@ -396,21 +401,21 @@ A rejected approval is recorded in the run audit trail and prevents the matching
396
401
  Use this flow to manually verify MCP readiness after implementation. Setup preview is read-only: it does **not** install anything, create `.opencode/` or `.claude/`, or write provider/user/global config.
397
402
 
398
403
  ```bash
399
- npm run cli -- mcp setup --preview --provider opencode --db <path>
400
- npm run cli -- mcp setup --preview --provider claude --db <path>
401
- npm run cli -- mcp doctor --db <path> --project vgxness --change manual-smoke
404
+ bun run cli:bun -- mcp setup --preview --provider opencode --db <path>
405
+ bun run cli:bun -- mcp setup --preview --provider claude --db <path>
406
+ bun run cli:bun -- mcp doctor --db <path> --project vgxness --change manual-smoke
402
407
  ```
403
408
 
404
409
  The setup preview JSON includes `installable:false`, `readOnly:true`, `writesProviderConfig:false`, plus a copyable MCP server command. Without `--db`, preview snippets omit `--db` and rely on the global default database; with `--db <path>` or `VGXNESS_DB_PATH`, snippets keep the explicit database argument. If needed, copy the `server.command` and `server.args` from the preview into your client manually; the preview itself never writes that config. For OpenCode config automation, inspect `mcp install opencode --plan` before applying with `--yes`; the default target is `$HOME/.config/opencode/opencode.json`.
405
410
 
406
- The top-level `vgx doctor` command prints human-readable readiness checks by default and accepts `--json` for scriptable output. Lower-level `mcp doctor` remains useful for MCP-specific checks and manual diagnostics; use `--json` where parseable output is needed. `ready:true` means required checks passed. `ready:false` means at least one required check failed; read the failed check `id`, `detail`, and optional `remediation` to fix the local setup, then run doctor again.
411
+ The top-level `vgxness doctor` command prints human-readable readiness checks by default and accepts `--json` for scriptable output. Lower-level `mcp doctor` remains useful for MCP-specific checks and manual diagnostics; use `--json` where parseable output is needed. `ready:true` means required checks passed. `ready:false` means at least one required check failed; read the failed check `id`, `detail`, and optional `remediation` to fix the local setup, then run doctor again.
407
412
 
408
413
  ## OpenCode MCP visibility
409
414
 
410
415
  Use this read-only diagnostic when you need to confirm why OpenCode sees the project-local `vgxness` server from the repo but not from outside the worktree:
411
416
 
412
417
  ```bash
413
- npm run cli -- mcp doctor opencode
418
+ bun run cli:bun -- mcp doctor opencode
414
419
  opencode mcp list
415
420
  ```
416
421
 
@@ -425,11 +430,11 @@ From a parent directory or another path outside the worktree, the project-local
425
430
  Use the installer when you want `vgxness` registered in OpenCode instead of copying the setup preview by hand. User/global scope is the default; project scope is opt-in:
426
431
 
427
432
  ```bash
428
- npm run cli -- mcp doctor --db <path> --project vgxness --change manual-smoke
429
- npm run cli -- mcp install opencode --plan
430
- npm run cli -- mcp install opencode --yes
431
- npm run cli -- mcp install opencode --plan --scope project --db <path>
432
- npm run cli -- mcp install opencode --yes --scope project --db <path>
433
+ bun run cli:bun -- mcp doctor --db <path> --project vgxness --change manual-smoke
434
+ bun run cli:bun -- mcp install opencode --plan
435
+ bun run cli:bun -- mcp install opencode --yes
436
+ bun run cli:bun -- mcp install opencode --plan --scope project --db <path>
437
+ bun run cli:bun -- mcp install opencode --yes --scope project --db <path>
433
438
  ```
434
439
 
435
440
  Use `--plan` first when you want concrete target analysis without mutation. It prints the same OpenCode install contract the apply path uses, including `scope`, `targetPath`, `safety`, backup requirement, merge policy, verification hints, and any refusal reason. It does not create `.opencode/`, write user config, touch `$HOME/.config/opencode`, or create backups. User/global scope plans target `$HOME/.config/opencode/opencode.json` by default; project scope requires explicit `--scope project` and targets only the project config path.
@@ -451,12 +456,12 @@ Rollback is file-based:
451
456
 
452
457
  - If install created a new config, delete the reported `targetPath` (`.opencode/opencode.json` for project scope or `$HOME/.config/opencode/opencode.json` for user scope).
453
458
  - If install modified an existing config, restore the reported backup over `targetPath`.
454
- - Run `npm run cli -- mcp doctor --db <path> --project vgxness --change manual-smoke` again after rollback.
459
+ - Run `bun run cli:bun -- mcp doctor --db <path> --project vgxness --change manual-smoke` again after rollback.
455
460
 
456
461
  Manual OpenCode verification checklist:
457
462
 
458
463
  1. Run doctor before install and note any failed checks.
459
- 2. Run `npm run cli -- mcp install opencode --yes --db <path>`.
464
+ 2. Run `bun run cli:bun -- mcp install opencode --yes --db <path>`.
460
465
  3. Inspect the reported target path (default `$HOME/.config/opencode/opencode.json`) and confirm `mcp.vgxness` has `type:"local"`, a `command` array, and `enabled:true`.
461
466
  4. Restart OpenCode so it reloads config.
462
467
  5. In OpenCode, confirm the `vgxness` MCP tools are available.
@@ -467,14 +472,14 @@ Manual OpenCode verification checklist:
467
472
  Use `sdd` commands to inspect local SDD artifact state and save, read, or list phase artifacts. These commands read and write only the selected `vgxness` local SQLite memory store: `--db <path>` when passed, `VGXNESS_DB_PATH` when set, or the global default database when neither override is present.
468
473
 
469
474
  ```bash
470
- npm run cli -- sdd status --project vgxness --change sdd-workflow-engine --db /tmp/vgxness-memory.sqlite
471
- npm run cli -- sdd ready --project vgxness --change sdd-workflow-engine --phase spec --db /tmp/vgxness-memory.sqlite
472
- npm run cli -- sdd save-artifact --project vgxness --change sdd-workflow-engine --phase proposal --content "# Proposal" --db /tmp/vgxness-memory.sqlite
473
- npm run cli -- sdd accept-artifact --project vgxness --change sdd-workflow-engine --phase proposal --actor user --note "Approved for spec" --db /tmp/vgxness-memory.sqlite
474
- npm run cli -- sdd get-artifact --project vgxness --change sdd-workflow-engine --phase proposal --db /tmp/vgxness-memory.sqlite
475
- npm run cli -- sdd list-artifacts --project vgxness --change sdd-workflow-engine --db /tmp/vgxness-memory.sqlite
476
- npm run cli -- sdd next --project vgxness --change sdd-workflow-engine --db /tmp/vgxness-memory.sqlite
477
- VGXNESS_DB_PATH=/tmp/vgxness-memory.sqlite npm run cli -- sdd list-artifacts --project vgxness --change sdd-workflow-engine
475
+ bun run cli:bun -- sdd status --project vgxness --change sdd-workflow-engine --db /tmp/vgxness-memory.sqlite
476
+ bun run cli:bun -- sdd ready --project vgxness --change sdd-workflow-engine --phase spec --db /tmp/vgxness-memory.sqlite
477
+ bun run cli:bun -- sdd save-artifact --project vgxness --change sdd-workflow-engine --phase proposal --content "# Proposal" --db /tmp/vgxness-memory.sqlite
478
+ bun run cli:bun -- sdd accept-artifact --project vgxness --change sdd-workflow-engine --phase proposal --actor user --note "Approved for spec" --db /tmp/vgxness-memory.sqlite
479
+ bun run cli:bun -- sdd get-artifact --project vgxness --change sdd-workflow-engine --phase proposal --db /tmp/vgxness-memory.sqlite
480
+ bun run cli:bun -- sdd list-artifacts --project vgxness --change sdd-workflow-engine --db /tmp/vgxness-memory.sqlite
481
+ bun run cli:bun -- sdd next --project vgxness --change sdd-workflow-engine --db /tmp/vgxness-memory.sqlite
482
+ VGXNESS_DB_PATH=/tmp/vgxness-memory.sqlite bun run cli:bun -- sdd list-artifacts --project vgxness --change sdd-workflow-engine
478
483
  ```
479
484
 
480
485
  Current phases are `explore`, `proposal`, `spec`, `design`, `tasks`, `apply-progress`, `verify`, and `archive`. Each artifact is stored under `sdd/{change}/{phase}` in the local SQLite memory store. `sdd status` reports which phase artifacts are present and the next ready missing phase. `sdd next` reports the next SDD action for a project/change. `sdd status`, `sdd next`, `sdd get-artifact`, and `sdd list-artifacts` are human-readable by default; pass `--json` for automation/stable structured output. `sdd ready` reports satisfied prerequisites and missing artifact topic keys for one phase. `sdd get-artifact` shows artifact metadata and then full content after `--- Content ---`; `sdd list-artifacts` shows one compact row for every canonical SDD phase in phase order and does not print full artifact content.
@@ -488,8 +493,8 @@ The SDD CLI is status/persistence only. It does **not** execute providers, conti
488
493
  `agents resolve` ranks registered agents/subagents for a task using transparent metadata rules. It is read-only and does not execute agents, call a model, or mutate provider configuration.
489
494
 
490
495
  ```bash
491
- npm run cli -- agents resolve --project vgxness --capabilities implementation,typescript --workflow sdd --phase apply --provider opencode --task "Implement the next PRD slice"
492
- npm run cli -- agents resolve --project vgxness --mode subagent --capabilities review --workflow sdd --phase verify
496
+ bun run cli:bun -- agents resolve --project vgxness --capabilities implementation,typescript --workflow sdd --phase apply --provider opencode --task "Implement the next PRD slice"
497
+ bun run cli:bun -- agents resolve --project vgxness --mode subagent --capabilities review --workflow sdd --phase verify
493
498
  ```
494
499
 
495
500
  The response includes ranked `candidates` with `score` and `reasons`, plus `skipped` definitions with reasons such as provider, workflow, capability, scope, or mode mismatch. Exact workflow/phase matches are reported as `workflow phase matched: sdd:<phase>`, and SDD planning or verification task semantics are reported as `phase semantics matched: sdd-planning` or `phase semantics matched: sdd-verification`. Empty adapter maps are treated as provider-neutral; explicit adapter maps must include the requested provider.
@@ -498,12 +503,14 @@ Resolution v1 uses only current registry metadata: capabilities, workflows/phase
498
503
 
499
504
  ## Agent seed loading
500
505
 
501
- Load the checked-in v1 seed when a local registry should contain the project manager and seed subagents:
506
+ Load the checked-in v1 seed from a source checkout when a local registry should contain the project manager and seed subagents:
502
507
 
503
508
  ```bash
504
- npm run cli -- agents seed load --file seeds/agents/agent-seed-v1.json
509
+ bun run cli:bun -- agents seed load --file seeds/agents/agent-seed-v1.json
505
510
  ```
506
511
 
512
+ This seed file is repo-only in v1.3.0 package contents. If installed-package workflows need it, first make an explicit package-contract change by adding it to `package.json.files` and the package evidence expectations.
513
+
507
514
  The command prints an `AgentSeedLoadSummary` JSON payload with `created`, `updated`, `agents`, `subagents`, and `warnings`. Re-running the same seed is safe: records are upserted by the current project, scope, and name, so existing seed records are updated in place instead of duplicated.
508
515
 
509
516
  The checked-in `vgxness-manager` and SDD subagents are self-contained: their seed instructions describe the MCP-first orchestration contract inline and do not require installing `~/.config/opencode/skills/sdd-*`. SDD skills can still be registered and attached as optional registry assets when a project wants extra reusable guidance.
@@ -513,8 +520,8 @@ Seed loading preserves user-created agents that are absent from the manifest. It
513
520
  After loading, you can inspect or preview the seed manager through normal registry commands:
514
521
 
515
522
  ```bash
516
- npm run cli -- agents get --project vgxness --name vgxness-manager
517
- npm run cli -- agents render --provider opencode --project vgxness --name vgxness-manager
523
+ bun run cli:bun -- agents get --project vgxness --name vgxness-manager
524
+ bun run cli:bun -- agents render --provider opencode --project vgxness --name vgxness-manager
518
525
  ```
519
526
 
520
527
  The render command returns preview artifacts only and keeps provider config untouched.
@@ -524,17 +531,17 @@ The render command returns preview artifacts only and keeps provider config unto
524
531
  Register an optional provider-agnostic skill, add an active version, attach it to a workflow phase, and record a simple run outcome. These examples are registry-managed enhancements, not requirements for the checked-in OpenCode manager/subagents:
525
532
 
526
533
  ```bash
527
- npm run cli -- skills register --project vgxness --name sdd-apply --description "Applies focused SDD slices"
528
- npm run cli -- skills add-version --project vgxness --name sdd-apply --version 1.0.0 --source-kind path --source-path .config/opencode/skills/sdd-apply/SKILL.md --activate
529
- npm run cli -- skills attach --project vgxness --name sdd-apply --target-type workflow-phase --target-key sdd:apply
530
- npm run cli -- skills record-usage --project vgxness --name sdd-apply --outcome helped --run-id <run-id> --target-type workflow-phase --target-key sdd:apply
534
+ bun run cli:bun -- skills register --project vgxness --name sdd-apply --description "Applies focused SDD slices"
535
+ bun run cli:bun -- skills add-version --project vgxness --name sdd-apply --version 1.0.0 --source-kind path --source-path .config/opencode/skills/sdd-apply/SKILL.md --activate
536
+ bun run cli:bun -- skills attach --project vgxness --name sdd-apply --target-type workflow-phase --target-key sdd:apply
537
+ bun run cli:bun -- skills record-usage --project vgxness --name sdd-apply --outcome helped --run-id <run-id> --target-type workflow-phase --target-key sdd:apply
531
538
  ```
532
539
 
533
540
  Resolve the skills that would be available to a runtime context:
534
541
 
535
542
  ```bash
536
- npm run cli -- skills resolve --agent apply-agent --project vgxness --workflow sdd --phase apply --provider opencode
537
- npm run cli -- skills resolve --agent apply-agent --project vgxness --phase apply --run <run-id> --record-usage selected
543
+ bun run cli:bun -- skills resolve --agent apply-agent --project vgxness --workflow sdd --phase apply --provider opencode
544
+ bun run cli:bun -- skills resolve --agent apply-agent --project vgxness --phase apply --run <run-id> --record-usage selected
538
545
  ```
539
546
 
540
547
  `skills resolve` is read-only by default. It combines matching skill attachments plus the agent definition `skills` field, returns active/current versions only, and includes source metadata plus inline `summary`/`content` when available. It records `selected` or `injected` usage only when both `--run` and `--record-usage` are explicit.
@@ -542,8 +549,8 @@ npm run cli -- skills resolve --agent apply-agent --project vgxness --phase appl
542
549
  Inspect skill registry and agent/subagent linkage status without mutating provider config:
543
550
 
544
551
  ```bash
545
- npm run cli -- skills status --project vgxness
546
- npm run cli -- skills status --project vgxness --scope project --provider opencode --mode agent --agent apply-agent
552
+ bun run cli:bun -- skills status --project vgxness
553
+ bun run cli:bun -- skills status --project vgxness --scope project --provider opencode --mode agent --agent apply-agent
547
554
  ```
548
555
 
549
556
  `skills status` prints deterministic JSON with `kind: "skills-status"` and `version: 1`. It includes project/scope/provider context, registry skill counts and current-version status, declared/resolved/missing skills for matching agents or subagents, resolver diagnostics, and safety markers. The command is read-only: it does not repair, install, or write provider configuration and does not record skill usage. A missing `--agent` match returns valid JSON with a warning diagnostic instead of crashing.
@@ -551,17 +558,17 @@ npm run cli -- skills status --project vgxness --scope project --provider openco
551
558
  Create and review a skill improvement proposal without activating it:
552
559
 
553
560
  ```bash
554
- npm run cli -- skills propose --project vgxness --name sdd-apply --proposed-version 1.1.0 --source-kind inline --inline-metadata '{"content":"Updated skill body"}' --rationale "Repeated correction from trace" --source-signal '{"kind":"trace-failure"}'
555
- npm run cli -- skills proposals --status draft
556
- npm run cli -- skills get-proposal --proposal <proposal-id>
561
+ bun run cli:bun -- skills propose --project vgxness --name sdd-apply --proposed-version 1.1.0 --source-kind inline --inline-metadata '{"content":"Updated skill body"}' --rationale "Repeated correction from trace" --source-signal '{"kind":"trace-failure"}'
562
+ bun run cli:bun -- skills proposals --status draft
563
+ bun run cli:bun -- skills get-proposal --proposal <proposal-id>
557
564
  ```
558
565
 
559
566
  Activation is gated. Submitting and approving a proposal still does **not** change the active skill; only explicit apply creates the new active/current skill version:
560
567
 
561
568
  ```bash
562
- npm run cli -- skills submit-proposal --proposal <proposal-id> --actor uziel --reason "Ready for review"
563
- npm run cli -- skills approve-proposal --proposal <proposal-id> --actor uziel --reason "Reviewed diff"
564
- npm run cli -- skills apply-proposal --proposal <proposal-id> --actor uziel --reason "Activate approved proposal"
569
+ bun run cli:bun -- skills submit-proposal --proposal <proposal-id> --actor uziel --reason "Ready for review"
570
+ bun run cli:bun -- skills approve-proposal --proposal <proposal-id> --actor uziel --reason "Reviewed diff"
571
+ bun run cli:bun -- skills apply-proposal --proposal <proposal-id> --actor uziel --reason "Activate approved proposal"
565
572
  ```
566
573
 
567
574
  Rejected or cancelled proposals cannot be applied. These commands store reviewable diffs and audit metadata in SQLite only; they do not rewrite external skill files or provider configs.
@@ -569,7 +576,7 @@ Rejected or cancelled proposals cannot be applied. These commands store reviewab
569
576
  Build an injection-ready payload without mutating provider config:
570
577
 
571
578
  ```bash
572
- npm run cli -- skills payload --agent apply-agent --project vgxness --workflow sdd --phase apply --provider opencode
579
+ bun run cli:bun -- skills payload --agent apply-agent --project vgxness --workflow sdd --phase apply --provider opencode
573
580
  ```
574
581
 
575
582
  `skills payload` resolves the same active skills and returns payload v1 JSON: skill identity/version, source kind, available content or an unavailable reason, attachment reasons, and ordering metadata. Inline `content` is included directly. Local `path` sources are loaded read-only only when they resolve inside the current workspace root. URL sources are never fetched in v1 and return `url_fetch_disabled`. The command does **not** write `.opencode/`, `.claude/`, provider prompts, or external skill files.
@@ -577,8 +584,8 @@ npm run cli -- skills payload --agent apply-agent --project vgxness --workflow s
577
584
  `skills get` returns the current version, all versions, attachments, and usage records:
578
585
 
579
586
  ```bash
580
- npm run cli -- skills get --project vgxness --name sdd-apply
581
- npm run cli -- skills list --project vgxness
587
+ bun run cli:bun -- skills get --project vgxness --name sdd-apply
588
+ bun run cli:bun -- skills list --project vgxness
582
589
  ```
583
590
 
584
591
  Skill registry/resolution v1 is descriptive and controlled. It stores source metadata, compatibility hints, attachments, usage outcomes, and reviewable improvement proposals. Payload v1 can load inline content and safe workspace-local path content. It does **not** fetch URLs, mutate provider config, rewrite external skill files, generate unapproved diffs, or activate autonomous updates.
@@ -586,9 +593,9 @@ Skill registry/resolution v1 is descriptive and controlled. It stores source met
586
593
  ## Subagent examples
587
594
 
588
595
  ```bash
589
- npm run cli -- subagents register --parent-agent-id <agent-id> --project vgxness --name review-subagent --description "Reviews focused slices" --instructions "Review the current slice."
590
- npm run cli -- subagents list --parent-agent-id <agent-id>
591
- npm run cli -- subagents get --project vgxness --name review-subagent
596
+ bun run cli:bun -- subagents register --parent-agent-id <agent-id> --project vgxness --name review-subagent --description "Reviews focused slices" --instructions "Review the current slice."
597
+ bun run cli:bun -- subagents list --parent-agent-id <agent-id>
598
+ bun run cli:bun -- subagents get --project vgxness --name review-subagent
592
599
  ```
593
600
 
594
601
  ## JSON definitions
@@ -611,8 +618,8 @@ Use `--file` when a definition has permissions, memory, workflows, skills, or ad
611
618
  ```
612
619
 
613
620
  ```bash
614
- npm run cli -- agents register --file ./agent.json
615
- npm run cli -- subagents register --file ./subagent.json
621
+ bun run cli:bun -- agents register --file ./agent.json
622
+ bun run cli:bun -- subagents register --file ./subagent.json
616
623
  ```
617
624
 
618
625
  For subagents, include `parentAgentId` in the JSON file.
@@ -622,8 +629,8 @@ For subagents, include `parentAgentId` in the JSON file.
622
629
  Render uses the provider-agnostic registry as input and returns generated content only:
623
630
 
624
631
  ```bash
625
- npm run cli -- agents render --provider json --id <agent-id>
626
- npm run cli -- agents render --provider opencode --id <agent-id>
632
+ bun run cli:bun -- agents render --provider json --id <agent-id>
633
+ bun run cli:bun -- agents render --provider opencode --id <agent-id>
627
634
  ```
628
635
 
629
636
  Example response shape:
@@ -666,7 +673,7 @@ The preview `opencode.json` includes `$schema` and an `agent` object. Top-level
666
673
  Use `opencode preview` when you want to inspect the full SDD context that could later be handed to an OpenCode integration:
667
674
 
668
675
  ```bash
669
- npm run cli -- opencode preview \
676
+ bun run cli:bun -- opencode preview \
670
677
  --provider opencode \
671
678
  --agent apply-agent \
672
679
  --project vgxness \
@@ -714,8 +721,8 @@ The boundary is intentionally strict: the preview composes the existing OpenCode
714
721
  ## Memory examples
715
722
 
716
723
  ```bash
717
- npm run cli -- memory save --project vgxness --type decision --title "CLI path" --content "Use local SQLite by default."
718
- npm run cli -- memory search --project vgxness --query SQLite
724
+ bun run cli:bun -- memory save --project vgxness --type decision --title "CLI path" --content "Use local SQLite by default."
725
+ bun run cli:bun -- memory search --project vgxness --query SQLite
719
726
  ```
720
727
 
721
728
  ## Run examples
@@ -723,16 +730,16 @@ npm run cli -- memory search --project vgxness --query SQLite
723
730
  Create an auditable local run record, add a checkpoint, inspect it, and finish it:
724
731
 
725
732
  ```bash
726
- npm run cli -- runs create --project vgxness --intent "Build runtime foundation" --workflow sdd --phase apply --agent-id apply-agent --provider-adapter opencode --model openai/gpt-5.5
727
- npm run cli -- runs permission-check --run-id <run-id> --category shell --operation npm-test
728
- npm run cli -- runs approvals --run <run-id>
729
- npm run cli -- runs approve --approval <approval-id> --actor uziel --reason "Approved for local verification"
730
- npm run cli -- runs checkpoint --run-id <run-id> --label after-plan --state '{"next":"tests"}'
731
- npm run cli -- runs get --id <run-id>
732
- npm run cli -- runs resume-inspect --id <run-id>
733
- npm run cli -- runs resume-gate --approval <approval-id>
734
- npm run cli -- runs list --project vgxness
735
- npm run cli -- runs finish --run-id <run-id> --status completed --outcome success
733
+ bun run cli:bun -- runs create --project vgxness --intent "Build runtime foundation" --workflow sdd --phase apply --agent-id apply-agent --provider-adapter opencode --model openai/gpt-5.5
734
+ bun run cli:bun -- runs permission-check --run-id <run-id> --category shell --operation npm-test
735
+ bun run cli:bun -- runs approvals --run <run-id>
736
+ bun run cli:bun -- runs approve --approval <approval-id> --actor uziel --reason "Approved for local verification"
737
+ bun run cli:bun -- runs checkpoint --run-id <run-id> --label after-plan --state '{"next":"tests"}'
738
+ bun run cli:bun -- runs get --id <run-id>
739
+ bun run cli:bun -- runs resume-inspect --id <run-id>
740
+ bun run cli:bun -- runs resume-gate --approval <approval-id>
741
+ bun run cli:bun -- runs list --project vgxness
742
+ bun run cli:bun -- runs finish --run-id <run-id> --status completed --outcome success
736
743
  ```
737
744
 
738
745
  Runs are runtime state, not long-term memory. Use event and checkpoint payloads to reference memory observation IDs or artifact IDs when needed; do not duplicate durable observations into run state.
@@ -742,9 +749,9 @@ Runs are runtime state, not long-term memory. Use event and checkpoint payloads
742
749
  Resolving an approval appends an `approval` audit event and updates the approval status:
743
750
 
744
751
  ```bash
745
- npm run cli -- runs approve --approval <approval-id> --actor uziel --reason "Looks safe"
746
- npm run cli -- runs reject --approval <approval-id> --actor uziel --reason "Too broad"
747
- npm run cli -- runs cancel-approval --approval <approval-id> --actor uziel --reason "No longer needed"
752
+ bun run cli:bun -- runs approve --approval <approval-id> --actor uziel --reason "Looks safe"
753
+ bun run cli:bun -- runs reject --approval <approval-id> --actor uziel --reason "Too broad"
754
+ bun run cli:bun -- runs cancel-approval --approval <approval-id> --actor uziel --reason "No longer needed"
748
755
  ```
749
756
 
750
757
  Approval resolution is persistence-only: approving records human consent but does **not** execute by itself. Resume-after-approval currently exists only in the runtime service through `RunService.resumeApprovedOperation({ approvalId, executor })`, and it requires an injected fake/test/sandbox executor supplied by code. Before that injected executor is called, the service writes a durable operation attempt reservation with an ordered attempt sequence. Storage supports multiple attempts per approval for future retries, but active `reserved` attempts still block another reservation. The default retry policy is `never`: repeated resume calls for the same approval fail before executor invocation after `reserved`, `succeeded`, `failed`, or `abandoned` attempts, even if the final runtime event was not recorded.
@@ -752,8 +759,8 @@ Approval resolution is persistence-only: approving records human consent but doe
752
759
  `runs retry-check` evaluates whether an approval is eligible for another attempt. It is read-only: it does **not** retry, reserve an attempt, invoke an executor, append events, or mutate retry state. Without `--policy`, it uses the safe default policy, `never`.
753
760
 
754
761
  ```bash
755
- npm run cli -- runs retry-check --approval <approval-id>
756
- npm run cli -- runs retry-check --approval <approval-id> --policy '{"mode":"after-failure","retryableStatuses":["failed"]}'
762
+ bun run cli:bun -- runs retry-check --approval <approval-id>
763
+ bun run cli:bun -- runs retry-check --approval <approval-id> --policy '{"mode":"after-failure","retryableStatuses":["failed"]}'
757
764
  ```
758
765
 
759
766
  Example blocked response:
@@ -781,7 +788,7 @@ Policy input is strict JSON. Current policy modes are `never`, `after-abandoned`
781
788
  Use `runs resume-inspect --id <run-id>` when an operator needs checkpoint and blocker context before deciding what to do manually:
782
789
 
783
790
  ```bash
784
- npm run cli -- runs resume-inspect --id <run-id>
791
+ bun run cli:bun -- runs resume-inspect --id <run-id>
785
792
  ```
786
793
 
787
794
  The JSON output includes the run identity and status, latest checkpoint or `null`, blockers, pending approvals, active and failed attempts, debug evidence references, conservative `manualNextCommands`, and safety flags:
@@ -808,17 +815,17 @@ This flow is inspection only. It does **not** execute provider work, run preflig
808
815
  Use `runs resume-gate --approval <approval-id>` after `resume-inspect` identifies a pending approval and you want one approval-scoped planner response:
809
816
 
810
817
  ```bash
811
- npm run cli -- runs resume-inspect --id <run-id>
812
- npm run cli -- runs resume-gate --approval <approval-id>
813
- npm run cli -- runs resume-gate --approval <approval-id> --policy '{"mode":"after-failure","retryableStatuses":["failed"]}'
818
+ bun run cli:bun -- runs resume-inspect --id <run-id>
819
+ bun run cli:bun -- runs resume-gate --approval <approval-id>
820
+ bun run cli:bun -- runs resume-gate --approval <approval-id> --policy '{"mode":"after-failure","retryableStatuses":["failed"]}'
814
821
  ```
815
822
 
816
823
  resume-gate is plan-only. It returns the `RunService.getRunResumeOrchestrationPlan` JSON with run and approval status, reconstructed pending operation context, retry-check guidance, blockers, manual next commands, and read-only safety flags. It does **not** run preflight, admit retry, invoke executors, execute operations, write provider config, create sandboxes, create worktrees, or append audit mutation records.
817
824
 
818
825
  Manual next-step examples:
819
826
 
820
- - `npm run cli -- runs approve --approval <approval-id> --actor <name> --reason "Reviewed"` when the approval is still pending.
821
- - `npm run cli -- runs retry-check --approval <approval-id>` to inspect retry eligibility separately.
827
+ - `bun run cli:bun -- runs approve --approval <approval-id> --actor <name> --reason "Reviewed"` when the approval is still pending.
828
+ - `bun run cli:bun -- runs retry-check --approval <approval-id>` to inspect retry eligibility separately.
822
829
  - Inspect the returned operation and continue manually outside the CLI if policy and human review allow it.
823
830
 
824
831
  There is still no executable `runs resume` CLI surface. The gate only explains the next safe manual step.
@@ -834,9 +841,9 @@ The runtime service has an enforcement gate for operation attempts, but there is
834
841
  Preview the current core policy without executing the operation:
835
842
 
836
843
  ```bash
837
- npm run cli -- permissions check --category read --operation read-file --path src/index.ts
838
- npm run cli -- permissions check --category edit --operation write-file --path ../outside.txt
839
- npm run cli -- permissions check --category provider-tool --operation call-tool --provider-tool vendor.tool
844
+ bun run cli:bun -- permissions check --category read --operation read-file --path src/index.ts
845
+ bun run cli:bun -- permissions check --category edit --operation write-file --path ../outside.txt
846
+ bun run cli:bun -- permissions check --category provider-tool --operation call-tool --provider-tool vendor.tool
840
847
  ```
841
848
 
842
849
  The response is a decision object with `decision`, `reason`, and `message`. This is a policy decision service only; use `runs permission-check` when you also want an auditable run event and approval record for `ask`. Real provider/tool execution, CLI resume wiring, and isolated sandbox execution remain follow-up work.
@@ -856,12 +863,12 @@ Selection precedence is `--db <path>` (selected source: `flag`) > `VGXNESS_DB_PA
856
863
  Override the path when you need an isolated store:
857
864
 
858
865
  ```bash
859
- npm run cli -- agents list --db /tmp/vgxness.sqlite
860
- VGXNESS_DB_PATH=/tmp/vgxness.sqlite npm run cli -- memory search --project vgxness
866
+ bun run cli:bun -- agents list --db /tmp/vgxness.sqlite
867
+ VGXNESS_DB_PATH=/tmp/vgxness.sqlite bun run cli:bun -- memory search --project vgxness
861
868
  ```
862
869
 
863
870
  Existing project-local stores remain compatible; opt in explicitly when needed:
864
871
 
865
872
  ```bash
866
- npm run cli -- memory search --project vgxness --db .vgx/memory.sqlite
873
+ bun run cli:bun -- memory search --project vgxness --db .vgx/memory.sqlite
867
874
  ```