vgxness 1.9.8 → 1.10.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 (43) hide show
  1. package/README.md +5 -4
  2. package/dist/cli/cli-flags.js +15 -2
  3. package/dist/cli/cli-help.js +13 -13
  4. package/dist/cli/commands/mcp-dispatcher.js +8 -4
  5. package/dist/cli/commands/setup-dispatcher.js +4 -4
  6. package/dist/cli/doctor-renderer.js +1 -1
  7. package/dist/cli/setup-plan-renderer.js +2 -2
  8. package/dist/cli/setup-status-renderer.js +2 -2
  9. package/dist/cli/tui/main-menu/main-menu-read-model.js +28 -28
  10. package/dist/cli/tui/main-menu/main-menu-render-shape.js +5 -1
  11. package/dist/cli/tui/opentui/main-menu/view.js +1 -1
  12. package/dist/cli/tui/setup/setup-tui-read-model.js +23 -23
  13. package/dist/cli/tui/setup/setup-tui-render-shape.js +15 -12
  14. package/dist/cli/tui/setup/setup-tui-state.js +1 -3
  15. package/dist/cli/tui/setup/setup-tui-view-helpers.js +18 -2
  16. package/dist/mcp/claude-code-config.js +2 -0
  17. package/dist/mcp/claude-code-scope.js +1 -0
  18. package/dist/mcp/claude-code-user-config.js +2 -0
  19. package/dist/mcp/client-install-claude-code-contract.js +15 -72
  20. package/dist/mcp/client-install-claude-code.js +4 -6
  21. package/dist/mcp/client-install-opencode-contract.js +5 -79
  22. package/dist/mcp/opencode-visibility.js +4 -3
  23. package/dist/mcp/provider-change-plan.js +17 -14
  24. package/dist/mcp/provider-doctor.js +38 -20
  25. package/dist/mcp/provider-health-types.js +19 -0
  26. package/dist/mcp/provider-status.js +29 -18
  27. package/dist/mcp/schema.js +5 -4
  28. package/dist/mcp/validation.js +11 -1
  29. package/dist/setup/backup-rollback-service.js +33 -2
  30. package/dist/setup/providers/claude-setup-adapter.js +13 -15
  31. package/dist/setup/providers/opencode-setup-adapter.js +12 -12
  32. package/dist/setup/setup-defaults.js +1 -0
  33. package/dist/setup/setup-plan.js +6 -6
  34. package/docs/architecture.md +3 -3
  35. package/docs/cli.md +29 -33
  36. package/docs/glossary.md +2 -2
  37. package/docs/mcp.md +1 -1
  38. package/docs/prd.md +3 -3
  39. package/docs/providers.md +14 -15
  40. package/docs/roadmap.md +1 -1
  41. package/docs/safety.md +1 -1
  42. package/docs/storage.md +1 -1
  43. package/package.json +1 -1
@@ -7,23 +7,21 @@ export const claudeSetupAdapter = {
7
7
  supportLevel: 'supported',
8
8
  capabilities: ['mcp-preview', 'mcp-install-plan', 'cli-mcp-plan', 'agent-preview', 'doctor', 'manual-guidance'],
9
9
  targets: [
10
- { kind: 'project-config', label: 'Project .mcp.json', path: '.mcp.json', writableBySetup: false },
11
- { kind: 'project-config', label: 'Project Claude agents', path: '.claude/agents/*.md', writableBySetup: false },
12
- { kind: 'project-config', label: 'Project Claude memory', path: 'CLAUDE.md', writableBySetup: false },
13
- { kind: 'user-config', label: 'User Claude MCP config', path: '~/.claude.json', writableBySetup: false },
14
- { kind: 'user-config', label: 'User Claude agents', path: '~/.claude/agents/*.md', writableBySetup: false },
15
- { kind: 'user-config', label: 'User Claude memory', path: '~/.claude/CLAUDE.md', writableBySetup: false },
10
+ { kind: 'user-config', label: 'Managed user-global Claude MCP config', path: '~/.claude.json', writableBySetup: false },
11
+ { kind: 'user-config', label: 'Managed user-global Claude agents', path: '~/.claude/agents/*.md', writableBySetup: false },
12
+ { kind: 'user-config', label: 'Managed user-global Claude memory', path: '~/.claude/CLAUDE.md', writableBySetup: false },
13
+ { kind: 'project-config', label: 'Project Claude files (external/manual diagnostic only)', path: '.mcp.json, .claude/agents/*.md, CLAUDE.md', writableBySetup: false },
16
14
  ],
17
15
  getStatus(context) {
18
16
  const plan = this.getInstallPlan?.(context);
19
17
  return {
20
18
  providerId: 'claude',
21
19
  status: plan?.status === 'blocked' ? 'blocked' : 'available',
22
- summary: 'Claude provider setup is available for CLI MCP registration planning/apply, project .mcp.json compatibility, guarded CLAUDE.md memory, user ~/.claude.json MCP merge, and project/user agents; explicit guarded apply is required for writes or CLI execution.',
20
+ summary: 'Claude provider setup is available for user-global CLI MCP registration planning/apply, ~/.claude.json MCP merge, ~/.claude/agents/*.md, and guarded ~/.claude/CLAUDE.md memory; explicit guarded apply is required for writes or CLI execution. Project-local provider files are external/manual diagnostics and will not be modified.',
23
21
  evidence: context.databasePath !== undefined
24
22
  ? ['Claude MCP preview can be generated from the selected database path.']
25
23
  : ['Claude MCP preview uses a placeholder until a database path is selected.'],
26
- guidance: ['Use `vgxness mcp install claude --scope local|project|user --yes --run-id <id>` for explicit guarded apply. Project scope may write .mcp.json, .claude/agents/*.md, and the project-root CLAUDE.md managed block. User/global scope narrowly merges only mcpServers.vgxness in ~/.claude.json, writes ~/.claude/agents/*.md, and manages only the VGXNESS block in ~/.claude/CLAUDE.md. Read-only setup/status surfaces do not execute Claude Code.'],
24
+ guidance: ['VGXNESS will manage user-global provider configuration. Use `vgxness mcp install claude --yes --run-id <id>` for explicit guarded apply. Project-local provider files are external/manual diagnostics and will not be modified. Read-only setup/status surfaces do not execute Claude Code.'],
27
25
  actions: [
28
26
  {
29
27
  id: 'claude-manual-guidance',
@@ -56,7 +54,7 @@ export const claudeSetupAdapter = {
56
54
  cwd: context.workspaceRoot,
57
55
  databasePath: context.databasePath ?? '<database-path>',
58
56
  ...(context.databasePathSource !== undefined ? { databasePathSource: context.databasePathSource } : {}),
59
- scope: 'project',
57
+ scope: 'user',
60
58
  ...(context.env !== undefined ? { env: context.env } : {}),
61
59
  ...(context.overwriteVgxness !== undefined ? { overwriteVgxness: context.overwriteVgxness } : {}),
62
60
  });
@@ -72,7 +70,7 @@ function claudeInstallPlan(_context, contract) {
72
70
  mutating: false,
73
71
  writesProviderConfig: false,
74
72
  summary: contract.status === 'would_install'
75
- ? 'Claude project install plan is available for external guarded application; the read-only setup status does not write provider config.'
73
+ ? 'Claude user-global install plan is available for external guarded application; the read-only setup status does not write provider config. Project-local provider files are external/manual diagnostics and will not be modified.'
76
74
  : contract.message,
77
75
  targetPath: contract.targetPath,
78
76
  warnings: contract.warnings,
@@ -82,13 +80,13 @@ function claudeInstallPlan(_context, contract) {
82
80
  }
83
81
  function externalInstallAction(targetPath, overwriteVgxness = false) {
84
82
  return {
85
- id: 'claude-mcp-install-project',
86
- label: 'Copy external Claude project install command',
83
+ id: 'claude-mcp-install-user-global',
84
+ label: 'Copy external Claude user-global install command',
87
85
  kind: 'copy-command',
88
- command: ['vgxness', 'mcp', 'install', 'claude', '--scope', 'project', '--yes', ...(overwriteVgxness ? ['--overwrite-vgxness'] : [])],
86
+ command: ['vgxness', 'mcp', 'install', 'claude', '--yes', ...(overwriteVgxness ? ['--overwrite-vgxness'] : [])],
89
87
  description: overwriteVgxness
90
- ? 'Copy and run this outside setup status only after reviewing that VGXNESS entries will be overwritten and unrelated config preserved.'
91
- : 'Copy and run this outside setup status only after reviewing the read-only plan.',
88
+ ? 'Copy and run this outside setup status only after reviewing that user-global VGXNESS entries will be overwritten and unrelated config preserved.'
89
+ : 'Copy and run this outside setup status only after reviewing the read-only user-global plan.',
92
90
  safety: externalProviderWriteSafety(targetPath),
93
91
  };
94
92
  }
@@ -8,8 +8,8 @@ export const openCodeSetupAdapter = {
8
8
  supportLevel: 'supported',
9
9
  capabilities: ['mcp-preview', 'mcp-install-plan', 'mcp-install-apply-external', 'agent-preview', 'doctor', 'visibility-check'],
10
10
  targets: [
11
- { kind: 'user-config', label: 'User/global OpenCode config (default)', path: '$HOME/.config/opencode/opencode.json', writableBySetup: false },
12
- { kind: 'project-config', label: 'Project OpenCode config (explicit opt-in)', path: '.opencode/opencode.json', writableBySetup: false },
11
+ { kind: 'user-config', label: 'Managed user-global OpenCode config', path: '$HOME/.config/opencode/opencode.json', writableBySetup: false },
12
+ { kind: 'project-config', label: 'Project OpenCode config (external/manual diagnostic only)', path: '.opencode/opencode.json', writableBySetup: false },
13
13
  ],
14
14
  getStatus(context) {
15
15
  const visibility = this.getVisibility?.(context);
@@ -21,7 +21,7 @@ export const openCodeSetupAdapter = {
21
21
  ? 'OpenCode MCP visibility is ready.'
22
22
  : 'OpenCode provider setup is available; install/apply remains external and explicit.',
23
23
  evidence: visibility?.evidence ?? ['OpenCode setup preview and install planning are available.'],
24
- guidance: visibility?.guidance ?? ['Preview setup first, then copy and run external install commands only after review.'],
24
+ guidance: visibility?.guidance ?? ['VGXNESS will manage user-global provider configuration. Project-local provider files are external/manual diagnostics and will not be modified.'],
25
25
  actions: plan?.actions ?? [],
26
26
  ...previewField(openCodePlanPreview(visibility, plan)),
27
27
  };
@@ -52,7 +52,7 @@ export const openCodeSetupAdapter = {
52
52
  ...(context.overwriteVgxness !== undefined ? { overwriteVgxness: context.overwriteVgxness } : {}),
53
53
  });
54
54
  const targetPath = 'targetPath' in contract ? contract.targetPath : undefined;
55
- const actions = contract.status === 'would_install' ? [externalInstallAction(contract.scope, targetPath, contract.overwriteVgxness)] : [];
55
+ const actions = contract.status === 'would_install' ? [externalInstallAction(targetPath, contract.overwriteVgxness)] : [];
56
56
  return {
57
57
  providerId: 'opencode',
58
58
  status: contract.status === 'would_install' ? 'available' : 'blocked',
@@ -61,8 +61,8 @@ export const openCodeSetupAdapter = {
61
61
  writesProviderConfig: false,
62
62
  summary: contract.status === 'would_install'
63
63
  ? contract.overwriteVgxness
64
- ? `OpenCode ${contract.action} reinstall plan is available; confirmed apply overwrites VGXNESS entries only, preserves unrelated config, sets top-level permission.bash=ask and manager bash=allow, and creates managed backups for existing targets.`
65
- : `OpenCode ${contract.action} plan is available for external application; confirmed applies mcp.vgxness, top-level permission.bash=ask, and manager bash=allow, and creates managed VGXNESS backups when merging.`
64
+ ? `OpenCode ${contract.action} reinstall plan is available for user-global provider configuration; confirmed apply overwrites VGXNESS entries only, preserves unrelated config, sets top-level permission.bash=ask and manager bash=allow, and creates managed backups for existing user-global targets.`
65
+ : `OpenCode ${contract.action} plan is available for user-global provider configuration; confirmed applies mcp.vgxness, top-level permission.bash=ask, and manager bash=allow, and creates managed VGXNESS backups when merging. Project-local provider files are external/manual diagnostics and will not be modified.`
66
66
  : contract.message,
67
67
  ...(targetPath !== undefined ? { targetPath } : {}),
68
68
  warnings: contract.warnings,
@@ -174,15 +174,15 @@ function isOpenCodeInstallContract(value) {
174
174
  function databasePathOrPlaceholder(context) {
175
175
  return context.databasePath ?? '<database-path>';
176
176
  }
177
- function externalInstallAction(scope, targetPath, overwriteVgxness = false) {
177
+ function externalInstallAction(targetPath, overwriteVgxness = false) {
178
178
  return {
179
- id: `opencode-mcp-install-${scope}`,
180
- label: `Copy external OpenCode ${scope === 'user' ? 'user/global' : 'project'} install command`,
179
+ id: 'opencode-mcp-install-user-global',
180
+ label: 'Copy external OpenCode user-global install command',
181
181
  kind: 'copy-command',
182
- command: ['vgxness', 'mcp', 'install', 'opencode', '--scope', scope, '--yes', ...(overwriteVgxness ? ['--overwrite-vgxness'] : [])],
182
+ command: ['vgxness', 'mcp', 'install', 'opencode', '--yes', ...(overwriteVgxness ? ['--overwrite-vgxness'] : [])],
183
183
  description: overwriteVgxness
184
- ? 'Copy and run this outside the TUI only after reviewing that VGXNESS entries will be overwritten, unrelated config preserved, top-level bash prompts, and manager bash is allowed.'
185
- : 'Copy and run this outside the TUI only after reviewing the read-only plan and scoped bash permission behavior.',
184
+ ? 'Copy and run this outside the TUI only after reviewing that user-global VGXNESS entries will be overwritten, unrelated config preserved, top-level bash prompts, and manager bash is allowed.'
185
+ : 'Copy and run this outside the TUI only after reviewing the read-only user-global plan and scoped bash permission behavior.',
186
186
  safety: externalProviderWriteSafety(targetPath),
187
187
  };
188
188
  }
@@ -3,6 +3,7 @@ export const vgxnessSetupDefaults = {
3
3
  minimumNodeMajor: 22,
4
4
  defaultProvider: 'opencode',
5
5
  primaryProvider: 'opencode',
6
+ defaultProviderInstallTarget: 'user-global',
6
7
  defaultDatabaseMode: 'global',
7
8
  defaultOpenCodeScope: 'user',
8
9
  defaultInstallMode: 'mcp-plus-agents',
@@ -69,11 +69,11 @@ export function createSetupPlan(input) {
69
69
  severity: 'blocking',
70
70
  message: claude.message,
71
71
  targetPath,
72
- recovery: claude.reason === 'malformed_claude_project_memory' || claude.reason === 'conflicting_claude_project_memory' ? 'Manually reconcile the VGXNESS markers in project-root CLAUDE.md, then rerun `vgxness setup plan --provider claude`.' : 'Inspect the Claude project config, resolve the conflict, then rerun `vgxness setup plan --provider claude`.',
72
+ recovery: claude.reason === 'malformed_claude_project_memory' || claude.reason === 'conflicting_claude_project_memory' ? 'Manually reconcile the VGXNESS markers in user-global ~/.claude/CLAUDE.md, then rerun `vgxness setup plan --provider claude`.' : 'Inspect the Claude user-global config, resolve the conflict, then rerun `vgxness setup plan --provider claude`.',
73
73
  },
74
74
  ],
75
75
  backupsPlanned: [],
76
- nextCommands: ['vgxness mcp install claude --plan --scope project', 'Resolve the reported Claude project conflict before guarded apply.'],
76
+ nextCommands: ['vgxness mcp install claude --plan', 'Resolve the reported Claude user-global config conflict before guarded apply.'],
77
77
  },
78
78
  };
79
79
  }
@@ -87,7 +87,7 @@ export function createSetupPlan(input) {
87
87
  actions: [
88
88
  {
89
89
  id: 'claude-guarded-install',
90
- description: `Review first-class supported Claude plan for CLI MCP registration, .mcp.json compatibility, ${claude.agentNames.length} .claude/agents/*.md file(s), and guarded project-root CLAUDE.md managed block; apply only with vgxness mcp install claude --scope project --yes --run-id <id>.`,
90
+ description: `Review first-class supported Claude user-global plan for CLI MCP registration, ~/.claude.json, ${claude.agentNames.length} ~/.claude/agents/*.md file(s), and guarded ~/.claude/CLAUDE.md managed block; project-local provider files are diagnostics only and will not be modified; apply only with vgxness mcp install claude --yes --run-id <id>.`,
91
91
  mutating: false,
92
92
  targetPath,
93
93
  backupRequired: claude.backupRequired,
@@ -95,12 +95,12 @@ export function createSetupPlan(input) {
95
95
  ],
96
96
  conflicts: [],
97
97
  backupsPlanned: claude.targets
98
- .filter((target) => target.kind !== 'cli-mcp-registration' && ((target.kind === 'project-memory' && target.backupRequired) || target.action === 'merge' || target.action === 'update-vgxness'))
98
+ .filter((target) => target.kind !== 'cli-mcp-registration' && ((target.kind === 'user-memory' && target.backupRequired) || target.action === 'merge' || target.action === 'update-vgxness'))
99
99
  .map((target) => ({
100
100
  targetPath: target.path,
101
- reason: target.kind === 'project-memory' ? 'A future guarded Claude apply would create a managed VGXNESS backup before appending or updating the project-root CLAUDE.md managed block.' : 'A future guarded Claude apply would create a managed VGXNESS backup before merging or updating Claude project configuration.',
101
+ reason: target.kind === 'user-memory' ? 'A future guarded Claude apply would create a managed VGXNESS backup before appending or updating the user-global ~/.claude/CLAUDE.md managed block.' : 'A future guarded Claude apply would create a managed VGXNESS backup before merging or updating Claude user-global configuration.',
102
102
  })),
103
- nextCommands: ['vgxness mcp install claude --plan --scope project', 'vgxness mcp install claude --scope project --yes --run-id <id>', 'OpenCode remains the default guided setup provider.'],
103
+ nextCommands: ['vgxness mcp install claude --plan', 'vgxness mcp install claude --yes --run-id <id>', 'OpenCode remains the default guided setup provider.'],
104
104
  },
105
105
  };
106
106
  }
@@ -18,7 +18,7 @@ The user-facing shape is deliberately four-surface: **MCP for agents**, **CLI fo
18
18
  | Core workflow | SDD-first canonical state: explore → proposal → spec → design → tasks → apply-progress → verify → archive. |
19
19
  | Interfaces | MCP server for AI tools, CLI for automation/power users, TUI for guided install/status/profile/SDD workflows, and `vgxness code` runtime for bounded workspace work. |
20
20
  | Installation UX | Step-based guided setup with doctor checks, dry-run support, and no manual provider JSON editing on the happy path. |
21
- | Provider strategy | Provider-agnostic domain model with OpenCode as the primary/default supported provider; Claude Code is supported secondary for CLI MCP registration, project `.mcp.json` compatibility, guarded `CLAUDE.md` managed memory, direct user `~/.claude.json` MCP merge, and project/user agent files. Claude scopes are `local`, `project`, and `user` (`personal`/`global` map to `user`). Read-only status/doctor/change-plan never execute Claude Code; user/global apply mutates only `mcpServers.vgxness`, VGXNESS-owned `~/.claude/agents/*.md`, and the VGXNESS block in `~/.claude/CLAUDE.md` after confirmation/preflight. Pi/`gentle-pi` compatibility is a future adapter/reference target. The code runtime speaks to any OpenAI-compatible endpoint through `src/code/providers/openai-compatible-provider-adapter.ts`. |
21
+ | Provider strategy | Provider-agnostic domain model with OpenCode as the primary/default supported provider; Claude Code is supported secondary for user-global CLI MCP registration, direct user `~/.claude.json` MCP merge, and VGXNESS-owned user agent/memory files. VGX-managed OpenCode and Claude provider configuration is user-global only. Project-local provider files are external/manual diagnostics that may still affect providers externally, but VGXNESS does not repair, write, back up, or delete them. Read-only status/doctor/change-plan never execute providers. Pi/`gentle-pi` compatibility is a future adapter/reference target. The code runtime speaks to any OpenAI-compatible endpoint through `src/code/providers/openai-compatible-provider-adapter.ts`. |
22
22
  | Memory | Project memory plus personal/global memory, backed locally. |
23
23
  | Agents | Agents/subagents are registered in a neutral schema, then rendered into provider-specific config. |
24
24
  | Skills | Skills are first-class, versioned, attachable to agents/workflows/adapters, and improved through reviewable proposals. |
@@ -97,7 +97,7 @@ The canonical agent manifest in `src/agents/canonical-agent-manifest.ts` is the
97
97
 
98
98
  ### Manager overlay parity across providers
99
99
 
100
- A user-saved `manager_profile_overlay` flows to both providers symmetrically. OpenCode consults the overlay inside `OpenCodeManagerPayloadService.applyManagerOverlayWhenAvailable` (`src/providers/opencode/manager-payload.ts:152-156`), which calls `ManagerProfileOverlayService.resolveEffectiveManager` before producing the OpenCode manager payload. Claude Code was previously canonical-only; the fix routes the overlay through `withEffectiveManagerInstructions` (`src/agents/canonical-agent-projection.ts`) into the render path (`expectedClaudeCodeRenderedAgents` / `expectedClaudeCodeRenderedUserAgents`), with the caller (`mcp install claude` in `src/cli/commands/mcp-dispatcher.ts`) computing the effective instructions via `computeEffectiveManagerInstructions(database)` and passing them into `installClaudeCodeMcpClient`. As a result, `vgxness mcp install claude` writes the user's customized instructions into `.claude/agents/vgxness-manager.md` instead of silently falling back to canonical.
100
+ A user-saved `manager_profile_overlay` flows to both providers symmetrically. OpenCode consults the overlay inside `OpenCodeManagerPayloadService.applyManagerOverlayWhenAvailable` (`src/providers/opencode/manager-payload.ts:152-156`), which calls `ManagerProfileOverlayService.resolveEffectiveManager` before producing the OpenCode manager payload. Claude Code was previously canonical-only; the fix routes the overlay through `withEffectiveManagerInstructions` (`src/agents/canonical-agent-projection.ts`) into the render path (`expectedClaudeCodeRenderedAgents` / `expectedClaudeCodeRenderedUserAgents`), with the caller (`mcp install claude` in `src/cli/commands/mcp-dispatcher.ts`) computing the effective instructions via `computeEffectiveManagerInstructions(database)` and passing them into `installClaudeCodeMcpClient`. As a result, `vgxness mcp install claude` writes the user's customized instructions into the user-global `~/.claude/agents/vgxness-manager.md` instead of silently falling back to canonical; project-local Claude agent files remain external/manual diagnostics.
101
101
 
102
102
  ## Storage model
103
103
 
@@ -447,7 +447,7 @@ vgxness agents render --provider opencode --project vgxness --name apply-agent
447
447
  Rendering is intentionally read-only: it returns generated content in the CLI response. It does **not** write `.opencode/`, `.claude/`, or any user/global provider config.
448
448
  OpenCode agent keys are sanitized deterministically from registry names, and rendering rejects key collisions instead of overwriting generated config.
449
449
 
450
- Claude Code install planning/apply is supported through the guarded MCP install path. Rendering remains read-only; confirmed project compatibility writes are limited to `.mcp.json`, `.claude/agents/*.md`, and the project-root `CLAUDE.md` managed block with run preflight metadata. User/global install is a guarded direct path that backs up existing files, merges only `mcpServers.vgxness` in `~/.claude.json`, writes VGXNESS-owned `~/.claude/agents/*.md`, and manages only the VGXNESS block in `~/.claude/CLAUDE.md`.
450
+ Claude Code install planning/apply is supported through the guarded MCP install path. Rendering remains read-only. VGX-managed Claude writes are user-global only: the guarded path backs up existing user-global files, merges only `mcpServers.vgxness` in `~/.claude.json`, writes VGXNESS-owned `~/.claude/agents/*.md`, and manages only the VGXNESS block in `~/.claude/CLAUDE.md`. Project-local `.mcp.json`, `.claude/agents/*.md`, and project-root `CLAUDE.md` are external/manual diagnostics and are not repaired, written, backed up, or deleted by VGXNESS setup.
451
451
 
452
452
  ### OpenCode injection preview
453
453
 
package/docs/cli.md CHANGED
@@ -26,7 +26,7 @@ vgxness mcp start --db <temp-memory.sqlite> # then call verification_plan with {
26
26
 
27
27
  `vgxness setup plan` and `vgxness setup status` are human-readable and do not write provider config by default; local VGXNESS store initialization may occur when the selected SQLite store is needed. Pass `--json` when you need parseable automation output. The MCP plan does not write provider config. Installed-package setup plans should use `vgxness mcp start` and must not mention `npm run cli`, `tsx`, or repository-relative source paths.
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
+ Only apply the OpenCode user-global config after reviewing the plan. VGXNESS does not manage project/local OpenCode or Claude provider files:
30
30
 
31
31
  ```bash
32
32
  vgxness mcp install opencode --yes --db "$VGXNESS_SMOKE_DB"
@@ -45,7 +45,7 @@ Release defaults used by the guided setup are:
45
45
  - Bun package evidence as the release artifact and isolated install-smoke path.
46
46
  - Provider: OpenCode.
47
47
  - Database: global user data location by default.
48
- - OpenCode scope: user/global config by default (`$HOME/.config/opencode/opencode.json`).
48
+ - OpenCode/Claude provider config: user-global only for VGX-managed writes (`$HOME/.config/opencode/opencode.json`, `~/.claude.json`, `~/.claude/agents/*.md`, `~/.claude/CLAUDE.md`).
49
49
  - Install mode: MCP plus manager/SDD agents (`mcp-plus-agents`).
50
50
  - Public CLI language: English.
51
51
 
@@ -68,9 +68,9 @@ vgxness setup rollback --backup <path>
68
68
 
69
69
  Daily SDD phase progression is OpenCode-first: talk to OpenCode with the VGXNESS MCP server installed, and let the hidden SDD subagents use MCP tools for phase work. The CLI and TUI remain supported for bootstrap/setup, diagnostics, recovery, manual fallback, and scripting; they are not the primary daily surface.
70
70
 
71
- `setup plan`, `setup status`, and non-TTY `init` planning do not write provider config. Local VGXNESS store initialization may occur when the selected SQLite store is needed. 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`.
71
+ `setup plan`, `setup status`, and non-TTY `init` planning do not write provider config. Local VGXNESS store initialization may occur when the selected SQLite store is needed. 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 and only VGX-managed OpenCode target is `$HOME/.config/opencode/opencode.json`; Claude managed targets are user-global (`~/.claude.json`, `~/.claude/agents/*.md`, and `~/.claude/CLAUDE.md`). `setup apply --yes` is the explicit 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 user-global target when present, restores the selected backup byte-for-byte, and recommends `vgxness doctor`.
72
72
 
73
- `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 cockpit`, `vgxness sdd get-artifact`, and `vgxness sdd list-artifacts` are also human-readable by default; use `--json` for scripts.
73
+ `vgxness init` prompts in English when stdin/stdout are TTYs: project name, DB location, provider, user-global provider target, 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 cockpit`, `vgxness sdd get-artifact`, and `vgxness sdd list-artifacts` are also human-readable by default; use `--json` for scripts.
74
74
 
75
75
  `vgxness sdd cockpit --json` returns the same additive compatibility shape as the MCP cockpit: all existing raw `SddCockpit` top-level fields remain present, with an additional top-level `readModel`. The cockpit is read-only and metadata-only: it does not include artifact bodies, infer acceptance from artifact presence, advance phases, execute acceptance, call providers, or write provider config. Text output renders from read-model concepts such as next action, phase metadata, blockers, guidance, and `Content included: no`.
76
76
 
@@ -256,7 +256,7 @@ bun run cli:bun -- resume --project vgxness --run-id <id>
256
256
  Provider support shown in the Installation surface is:
257
257
 
258
258
  - **OpenCode** — supported primary provider with preview/status/doctor and read-only install planning.
259
- - **Claude** — supported secondary provider for Claude CLI MCP registration, project `.mcp.json` compatibility, guarded `CLAUDE.md` managed memory, user `~/.claude.json` MCP merge, and project/user agents. Scopes are `local|project|user`; `personal`/`global` map to `user`. Explicit guarded apply is outside the guided OpenCode flow and requires `mcp install claude --scope <scope> --yes --run-id <id>`. Read-only status/doctor/change-plan do not execute Claude Code.
259
+ - **Claude** — supported secondary provider for user-global Claude CLI MCP registration, user `~/.claude.json` MCP merge, and VGXNESS-owned user agents/memory. Project-local Claude files are external/manual diagnostics only. Explicit guarded apply is outside the guided OpenCode flow and requires `mcp install claude --scope user --yes --run-id <id>`. Read-only status/doctor/change-plan do not execute Claude Code.
260
260
  - **Antigravity** — placeholder/coming-soon guidance only.
261
261
  - **Custom/future** — extension point with safe manual/default unsupported behavior.
262
262
 
@@ -469,55 +469,53 @@ bun run cli:bun -- mcp setup --preview --provider claude --db <path>
469
469
  bun run cli:bun -- mcp doctor --db <path> --project vgxness --change manual-smoke
470
470
  ```
471
471
 
472
- 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`. For Claude config, inspect `mcp install claude --plan --scope local|project|user`; confirmed writes or CLI execution require `mcp install claude --scope <scope> --yes --run-id <id>` so VGXNESS run preflight can authorize each target.
472
+ 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 only VGX-managed target is `$HOME/.config/opencode/opencode.json`. For Claude config, inspect `mcp install claude --plan --scope user`; confirmed writes require `mcp install claude --scope user --yes --run-id <id>` so VGXNESS run preflight can authorize user-global targets.
473
473
 
474
474
  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.
475
475
 
476
476
  ## OpenCode MCP visibility
477
477
 
478
- 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:
478
+ Use this read-only diagnostic when you need to understand OpenCode visibility for the current workspace and any external/manual project-local provider files:
479
479
 
480
480
  ```bash
481
481
  bun run cli:bun -- mcp doctor opencode
482
482
  opencode mcp list
483
483
  ```
484
484
 
485
- Run both commands from the `vgxness` repo or a directory inside its worktree. The diagnostic reports the current cwd, detected project root, expected project target `.opencode/opencode.json`, optional user target `$HOME/.config/opencode/opencode.json`, whether each target contains `mcp.vgxness`, and whether the project config is inside OpenCode's project-local discovery boundary for the current cwd.
485
+ Run both commands from the `vgxness` repo or a directory inside its worktree. The diagnostic reports the current cwd, detected project root, managed user-global target `$HOME/.config/opencode/opencode.json`, external/manual project-local paths such as `.opencode/opencode.json`, whether each contains `mcp.vgxness`, and whether project-local config is inside OpenCode's discovery boundary for the current cwd.
486
486
 
487
- Expected happy path: after OpenCode starts inside `vgxness`, `opencode mcp list` should show `vgxness` with the registered VGXNESS MCP tools exposed by the current build. Treat `SUPPORTED_VGX_MCP_TOOL_NAMES` and `client.listTools()` as the source of truth rather than a fixed count. Restart OpenCode if the server is not listed after project-local config changes.
487
+ Expected happy path: after OpenCode starts inside `vgxness`, `opencode mcp list` should show `vgxness` with the registered VGXNESS MCP tools exposed by the current build. Treat `SUPPORTED_VGX_MCP_TOOL_NAMES` and `client.listTools()` as the source of truth rather than a fixed count. Restart OpenCode if the server is not listed after user-global config changes.
488
488
 
489
- From a parent directory or another path outside the worktree, the project-local `vgxness` server is not expected to appear. Use `mcp install opencode --scope user --plan` to inspect the user/global target without writing it. OpenCode may load project config with higher precedence than user config for a workspace, so check project config first when both define `mcp.vgxness`.
489
+ From a parent directory or another path outside the worktree, project-local provider files may not affect OpenCode. Use `mcp install opencode --scope user --plan` to inspect the user-global target without writing it. OpenCode may load project config with higher precedence than user config for a workspace, so status/doctor reports project-local files as external/manual diagnostics. VGXNESS will not repair, write, back up, or delete them.
490
490
 
491
491
  ## OpenCode MCP install
492
492
 
493
- 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:
493
+ Use the installer when you want `vgxness` registered in OpenCode instead of copying the setup preview by hand. User-global scope is the default and only VGX-managed target:
494
494
 
495
495
  ```bash
496
496
  bun run cli:bun -- mcp doctor --db <path> --project vgxness --change manual-smoke
497
497
  bun run cli:bun -- mcp install opencode --plan
498
498
  bun run cli:bun -- mcp install opencode --yes
499
- bun run cli:bun -- mcp install opencode --plan --scope project --db <path>
500
- bun run cli:bun -- mcp install opencode --yes --scope project --db <path>
501
499
  ```
502
500
 
503
- 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.
501
+ 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`; project/local install scopes are rejected with migration guidance.
504
502
 
505
503
  The `--yes` flag is required for apply because this path writes OpenCode config. If `--db` and `VGXNESS_DB_PATH` are omitted, the installed server and manual doctor commands omit `--db` and resolve the global default database at runtime. Pass `--db .vgx/memory.sqlite` when you intentionally want the old project-local database, or another explicit path when you need an isolated store preserved in the installed command.
506
504
 
507
- On success, the installer creates or updates exactly one target: project scope writes `<workspace>/.opencode/opencode.json`; user scope writes `$HOME/.config/opencode/opencode.json`. It writes top-level `mcp.vgxness` as an OpenCode local server, preserves unrelated fields and `$schema`, and reports the installed `targetPath`, optional `backupPath`, server command, restart warning, and manual doctor command.
505
+ On success, the installer creates or updates exactly one user-global target: `$HOME/.config/opencode/opencode.json`. It writes top-level `mcp.vgxness` as an OpenCode local server, preserves unrelated fields and `$schema`, and reports the installed `targetPath`, optional `backupPath`, server command, restart warning, and manual doctor command.
508
506
 
509
507
  Safety boundaries:
510
508
 
511
- - User/global scope is the default. `--scope user` is an explicit alias for the default; `--scope project` is required for `<workspace>/.opencode/opencode.json`.
509
+ - User/global scope is the default. `--scope user`, `--scope global`, and `--scope personal` are user-global aliases; `--scope project` and `--scope local` are rejected for managed provider writes.
512
510
  - `--plan` is read-only and `--yes` is the explicit mutating apply path.
513
511
  - It refuses to proceed without `--yes`.
514
512
  - It refuses ambiguous project targets, missing `HOME` for user scope, malformed JSON, JSONC config, unsupported `mcp` shapes, and existing `mcp.vgxness` by default.
515
- - Before modifying an existing JSON config, it writes a sibling backup such as `.opencode/opencode.json.backup-20260515T052852123Z` or `$HOME/.config/opencode/opencode.json.backup-20260515T052852123Z`.
516
- - OpenCode project config may override user config for a workspace; if user-scope install succeeds but `vgxness` is not visible, inspect project `.opencode/opencode.json` first.
513
+ - Before modifying an existing JSON config, it writes a sibling backup such as `$HOME/.config/opencode/opencode.json.backup-20260515T052852123Z`.
514
+ - OpenCode project config may override user config for a workspace; if user-scope install succeeds but `vgxness` is not visible, inspect project `.opencode/opencode.json` as external/manual config. VGXNESS will not repair, write, back up, or delete it.
517
515
 
518
516
  Rollback is file-based:
519
517
 
520
- - 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).
518
+ - If install created a new config, delete the reported user-global `targetPath` (`$HOME/.config/opencode/opencode.json`).
521
519
  - If install modified an existing config, restore the reported backup over `targetPath`.
522
520
  - Run `bun run cli:bun -- mcp doctor --db <path> --project vgxness --change manual-smoke` again after rollback.
523
521
 
@@ -532,38 +530,36 @@ Manual OpenCode verification checklist:
532
530
 
533
531
  ## Claude Code MCP install
534
532
 
535
- Claude Code is supported as a secondary, non-default provider for VGXNESS MCP/subagent configuration. Planning/status/doctor/change-plan are read-only and do not require Claude Code, network, or credentials. Scopes are `local`, `project`, and `user`; compatibility aliases `personal` and legacy `global` map to Claude `user` with warnings. MCP registration is represented as structured config/argv (`claude mcp add --scope <scope> vgxness -- vgxness mcp start`), never shell strings. User/global apply narrowly merges only `mcpServers.vgxness` in `~/.claude.json` and preserves unknown keys/auth/session data.
533
+ Claude Code is supported as a secondary, non-default provider for VGXNESS MCP/subagent configuration. Planning/status/doctor/change-plan are read-only and do not require Claude Code, network, or credentials. VGX-managed Claude writes are user-global only; compatibility aliases `personal` and legacy `global` map to `user`. MCP registration is represented as structured config/argv (`claude mcp add --scope user vgxness -- vgxness mcp start`), never shell strings. User/global apply narrowly merges only `mcpServers.vgxness` in `~/.claude.json`, writes VGXNESS-owned user agent/memory files, and preserves unknown keys/auth/session data.
536
534
 
537
535
  ```bash
538
- bun run cli:bun -- mcp install claude --plan --scope project --db <path>
539
536
  bun run cli:bun -- mcp install claude --plan --scope user --db <path>
540
- bun run cli:bun -- mcp install claude --yes --scope project --run-id <id> --db <path>
537
+ bun run cli:bun -- mcp install claude --yes --scope user --run-id <id> --db <path>
541
538
  ```
542
539
 
543
- Allowed project-scope writes after explicit confirmation and run preflight:
540
+ Project-local provider files are external/manual diagnostics only:
544
541
 
545
542
  - `.mcp.json`
546
543
  - `.claude/agents/*.md`
547
- - project-root `CLAUDE.md`, only the VGXNESS managed block; user-authored content outside the block is preserved and existing files are backed up before append/update
544
+ - project-root `CLAUDE.md`
548
545
 
549
- User agent files target `~/.claude/agents/*.md` only when a future apply path explicitly preflights that external directory. Read-only plans/status/doctor/change-plan never write it.
546
+ Existing files remain untouched by VGXNESS setup. They may still affect Claude Code behavior externally, but VGXNESS will not repair, write, back up, or delete them.
550
547
 
551
548
  Forbidden writes:
552
549
 
553
- - `~/.claude.json` except guarded user/global `mcpServers.vgxness` merge
550
+ - project-local `.mcp.json`, `.claude/agents/*.md`, and project-root `CLAUDE.md`
554
551
  - `.claude/CLAUDE.md`; user/global uses `~/.claude/CLAUDE.md` and manages only the VGXNESS block
555
552
 
556
- Malformed or conflicting VGXNESS markers in project-root `CLAUDE.md` refuse the full Claude project install before any Claude target is mutated.
553
+ Malformed or conflicting VGXNESS markers in project-root `CLAUDE.md` are reported as advisory diagnostics only; they do not cause VGXNESS to mutate project-local Claude files.
557
554
 
558
555
  Manual/opt-in runtime validation checklist (not normal CI):
559
556
 
560
- 1. Apply Claude project-local config through the guarded VGXNESS flow.
557
+ 1. Apply Claude user-global config through the guarded VGXNESS flow.
561
558
  2. Open Claude Code in the project manually.
562
- 3. Approve the project MCP server if prompted.
563
- 4. Run `/mcp` and verify `vgxness` is connected.
564
- 5. Run `/agents` and verify expected project subagents are visible.
565
- 6. Ask Claude to call a safe read-only VGXNESS MCP tool.
566
- 7. Confirm forbidden files were not written by VGXNESS.
559
+ 3. Run `/mcp` and verify `vgxness` is connected.
560
+ 4. Run `/agents` and verify expected user-global subagents are visible.
561
+ 5. Ask Claude to call a safe read-only VGXNESS MCP tool with a project context.
562
+ 6. Confirm project-local provider files were not written, backed up, repaired, or deleted by VGXNESS.
567
563
 
568
564
  ## SDD workflow examples
569
565
 
package/docs/glossary.md CHANGED
@@ -8,7 +8,7 @@ A human-only action that records explicit approval of a SDD phase artifact. `vgx
8
8
 
9
9
  ## Adapter
10
10
 
11
- A translator between VGXNESS's provider-neutral domain and a specific provider. The control plane uses renderers/install planners (OpenCode, JSON, Claude project-local support). The code runtime uses `CodeProviderAdapter` implementations (`openai-compatible`, `fake`).
11
+ A translator between VGXNESS's provider-neutral domain and a specific provider. The control plane uses renderers/install planners for OpenCode, JSON previews, and user-global Claude support. The code runtime uses `CodeProviderAdapter` implementations (`openai-compatible`, `fake`).
12
12
 
13
13
  ## Agent
14
14
 
@@ -92,7 +92,7 @@ The provider-agnostic front-door classifier for operator text. Maps an intent to
92
92
 
93
93
  ## OpenCode
94
94
 
95
- The primary/default supported provider for the control plane. The configurator renders OpenCode MCP config and manager/SDD agent definitions. Claude Code is supported secondary for project-local VGXNESS MCP/subagent configuration through explicit guarded apply.
95
+ The primary/default supported provider for the control plane. The configurator renders OpenCode MCP config and manager/SDD agent definitions. VGX-managed OpenCode and Claude provider configuration is user-global only; project-local provider files are external/manual diagnostics and remain outside VGXNESS repair/write/delete flows.
96
96
 
97
97
  ## Operation attempt
98
98
 
package/docs/mcp.md CHANGED
@@ -148,7 +148,7 @@ vgxness_run_resume_gate { approvalId, policy }
148
148
 
149
149
  MCP tools do not:
150
150
 
151
- - Write provider config (`.opencode/`, `.claude/`, `opencode.json`, `CLAUDE.md`).
151
+ - Write project-local provider config (`.opencode/`, `.mcp.json`, `.claude/`, project-root `CLAUDE.md`). VGX-managed OpenCode and Claude writes are user-global only and must stay behind explicit install/apply confirmation outside read-only status/preview tools.
152
152
  - Execute providers (`opencode`, `claude`, etc.).
153
153
  - Install global memory.
154
154
  - Create `openspec/`.
package/docs/prd.md CHANGED
@@ -202,8 +202,8 @@ The same flow must be available through CLI flags for automation and CI-friendly
202
202
 
203
203
  Initial integration targets:
204
204
 
205
- - OpenCode — primary supported provider. The configurator plane renders OpenCode MCP config and manager/SDD agent definitions; the code runtime speaks to any OpenAI-compatible endpoint, including OpenCode's local bridge.
206
- - Claude Code — supported secondary for project-local VGXNESS MCP/subagent configuration and guarded project-root `CLAUDE.md` managed memory. Confirmed writes are explicit and guarded (`.mcp.json`, `.claude/agents/*.md`, and the `CLAUDE.md` managed block only); VGXNESS does not install/execute Claude Code and never manually writes `~/.claude.json` or `.claude/CLAUDE.md`.
205
+ - OpenCode — primary supported provider. VGX-managed configuration is user-global only; the code runtime speaks to any OpenAI-compatible endpoint, including OpenCode's local bridge.
206
+ - Claude Code — supported secondary for user-global VGXNESS MCP/subagent configuration. VGX-managed configuration is user-global only (`~/.claude.json`, `~/.claude/agents/*.md`, and `~/.claude/CLAUDE.md` after confirmation/preflight). Project-local provider files remain external/manual diagnostics and may still affect Claude Code externally, but VGXNESS does not repair, write, back up, or delete them.
207
207
 
208
208
  Pi/`gentle-pi` is a design reference and future adapter target, not part of the first integration target list unless the MVP scope is explicitly expanded.
209
209
 
@@ -351,7 +351,7 @@ Many of the early PRD questions are resolved in v1.5.1. Tracking them here keeps
351
351
 
352
352
  | Question | Resolved as of v1.5.1 |
353
353
  |---|---|
354
- | First integration adapter | OpenCode primary/default; Claude is supported secondary for project-local explicit apply. |
354
+ | First integration adapter | OpenCode primary/default; Claude is supported secondary for user-global explicit apply. Project-local provider files are external/manual diagnostics only. |
355
355
  | Memory storage scopes | Project memory and personal/global memory live in separate SQLite stores; `--db` flag and `VGXNESS_DB_PATH` env var override. |
356
356
  | Agent config format | Provider-neutral schema in `src/agents/schema.ts`; canonical manifest with validation in `src/agents/canonical-agent-manifest.ts`. |
357
357
  | Skill config format | Versioned skills with source metadata (`path`/`url`/`inline`); active version gating in `src/skills/skill-registry-service.ts`. |
package/docs/providers.md CHANGED
@@ -6,8 +6,8 @@ VGXNESS is provider-agnostic at the core: the registry stores provider-neutral d
6
6
 
7
7
  | Provider | Control plane | Code runtime | Notes |
8
8
  |---|---|---|---|
9
- | OpenCode | `managed` | n/a (target) | Primary supported provider. The configurator renders OpenCode MCP config and manager/SDD agent definitions into the chosen scope. |
10
- | Claude Code | `supported-secondary` | n/a | Supported for Claude CLI MCP registration planning/apply, project `.mcp.json` compatibility, guarded `CLAUDE.md` managed memory, user `~/.claude.json` MCP merge, and project/user agent files. Scopes are `local`, `project`, and `user`; `personal`/`global` map to `user` for compatibility. Confirmed applies are explicit and guarded; read-only surfaces inspect files without executing Claude Code. |
9
+ | OpenCode | `managed` | n/a (target) | Primary supported provider. VGX-managed provider configuration is user-global only; project-local OpenCode files are external/manual diagnostics. |
10
+ | Claude Code | `supported-secondary` | n/a | Supported for user-global Claude CLI MCP registration planning/apply, `~/.claude.json` MCP merge, and VGXNESS-owned user agent/memory files. Project `.mcp.json`, `.claude/agents/*.md`, and `CLAUDE.md` are external/manual diagnostics only. |
11
11
  | Antigravity | `placeholder` | n/a | Listed in the TUI Installation surface as coming-soon. |
12
12
  | Custom / future | `extension` | extension point | Per the [Architecture](./architecture.md) decision, anything not OpenCode or Claude is a custom extension. |
13
13
  | OpenAI-compatible | n/a | `openai-compatible-provider-adapter.ts` | Real adapter used by `vgxness code`. Speaks to any OpenAI-compatible endpoint. |
@@ -46,32 +46,31 @@ vgxness agents render --provider json --project vgxness --name apply-agent
46
46
 
47
47
  Claude Code is supported as a secondary, non-default control-plane target. Status, doctor, setup plan, and change-plan surfaces can inspect or preview Claude targets without Claude Code installed and without writing provider config. Local VGXNESS store initialization may occur when the selected SQLite store is needed.
48
48
 
49
- Claude scopes are canonicalized to `local`, `project`, and `user`; VGXNESS compatibility aliases `personal` and legacy `global` map to Claude `user` with warnings. MCP registration is represented as structured config/argv, for example `claude mcp add --scope user vgxness -- vgxness mcp start`; no shell strings are generated. For user/global apply, VGXNESS narrowly merges only `mcpServers.vgxness` in `~/.claude.json`, preserves unknown keys, backs up existing files, and does not manage auth/session data. Status/doctor/change-plan are read-only and do not execute Claude Code.
49
+ VGX-managed Claude provider configuration is user-global only. Compatibility aliases `personal` and legacy `global` map to Claude `user`; project/local install scopes are rejected for managed writes. MCP registration is represented as structured config/argv, for example `claude mcp add --scope user vgxness -- vgxness mcp start`; no shell strings are generated. For user/global apply, VGXNESS narrowly merges only `mcpServers.vgxness` in `~/.claude.json`, preserves unknown keys, backs up existing user-global files, writes VGXNESS-owned `~/.claude/agents/*.md` and `~/.claude/CLAUDE.md`, and does not manage auth/session data. Status/doctor/change-plan are read-only and do not execute Claude Code.
50
50
 
51
- Allowed project-scope writes, only after explicit guarded apply with run preflight metadata (`vgxness mcp install claude --scope project --yes --run-id <id>`):
51
+ Project-local provider files are external/manual diagnostics only:
52
52
 
53
53
  - `.mcp.json`
54
54
  - `.claude/agents/*.md`
55
- - project-root `CLAUDE.md`, only the VGXNESS managed block; user content outside the block is preserved exactly and existing files are backed up before append/update
55
+ - project-root `CLAUDE.md`
56
56
 
57
- User-scoped agent files target `~/.claude/agents/*.md` only as an explicit external-directory/preflighted operation. They are never written by read-only planning/status/doctor/change-plan.
57
+ These files remain untouched by VGXNESS setup. They may still affect Claude Code behavior externally, but VGXNESS will not repair, write, back up, or delete them. Runtime VGXNESS state remains project-aware through the selected project, workspace root, change, and database context.
58
58
 
59
59
  Forbidden writes:
60
60
 
61
- - `~/.claude.json` except the guarded user/global merge of `mcpServers.vgxness`
61
+ - project-local `.mcp.json`, `.claude/agents/*.md`, and project-root `CLAUDE.md`
62
62
  - `.claude/CLAUDE.md`; user/global memory is `~/.claude/CLAUDE.md` and only the VGXNESS managed block is touched
63
63
 
64
- Malformed, duplicate, partial, or conflicting VGXNESS markers in `CLAUDE.md` cause the full Claude project install to be refused before `.mcp.json`, `.claude/agents/*.md`, or `CLAUDE.md` are mutated.
64
+ Malformed, duplicate, partial, or conflicting VGXNESS markers in project-root `CLAUDE.md` are reported as advisory diagnostics only and do not cause VGXNESS to mutate project-local Claude files.
65
65
 
66
66
  Manual/opt-in runtime validation checklist (not normal CI):
67
67
 
68
- 1. Apply Claude project-local config through the guarded VGXNESS flow.
68
+ 1. Apply Claude user-global config through the guarded VGXNESS flow.
69
69
  2. Open Claude Code in the project manually.
70
- 3. Approve the project MCP server if prompted.
71
- 4. Run `/mcp` and verify `vgxness` is connected.
72
- 5. Run `/agents` and verify expected project subagents are visible.
73
- 6. Ask Claude to call a safe read-only VGXNESS MCP tool.
74
- 7. Confirm forbidden files were not written by VGXNESS.
70
+ 3. Run `/mcp` and verify `vgxness` is connected.
71
+ 4. Run `/agents` and verify expected user-global subagents are visible.
72
+ 5. Ask Claude to call a safe read-only VGXNESS MCP tool with project context.
73
+ 6. Confirm project-local provider files were not written, backed up, repaired, or deleted by VGXNESS.
75
74
 
76
75
  ### OpenCode injection preview
77
76
 
@@ -140,7 +139,7 @@ Provider config writes happen only through `apply` with explicit consent. Plans,
140
139
 
141
140
  Adapters and renderers must not:
142
141
 
143
- - Write provider config outside explicit guarded apply. OpenCode install writes only its selected target; Claude project compatibility apply writes only `.mcp.json`, `.claude/agents/*.md`, and the guarded project-root `CLAUDE.md` managed block. Claude user/global apply narrowly merges `mcpServers.vgxness` in `~/.claude.json`, writes VGXNESS-owned `~/.claude/agents/*.md`, and manages only the VGXNESS block in `~/.claude/CLAUDE.md` after confirmation/preflight.
142
+ - Write provider config outside explicit guarded apply. VGX-managed OpenCode and Claude writes are user-global only. Project-local provider files such as `.opencode/`, `opencode.json`, `.mcp.json`, `.claude/agents/*.md`, and project-root `CLAUDE.md` are external/manual diagnostics and must not be repaired, written, backed up, or deleted by VGXNESS setup.
144
143
  - Call providers (`opencode`, `claude`, etc.) during preview or status.
145
144
  - Install global memory.
146
145
  - Create `openspec/`.
package/docs/roadmap.md CHANGED
@@ -63,7 +63,7 @@ The main menu and setup screens are in via OpenTUI. The dashboard directory is e
63
63
 
64
64
  ## Provider coverage
65
65
 
66
- - **Claude Code runtime validation.** Project-local install planning/apply is supported behind explicit run preflight. Remaining work is optional manual runtime smoke guidance or future live smoke tooling; it must stay out of normal CI.
66
+ - **Claude Code runtime validation.** User-global install planning/apply is supported behind explicit run preflight. Project-local Claude files are external/manual diagnostics only. Remaining work is optional manual runtime smoke guidance or future live smoke tooling; it must stay out of normal CI.
67
67
  - **Antigravity and other custom adapters.** Listed as placeholders; a real adapter would unblock those workflows.
68
68
  - **Provider doctor upgrades.** Doctor checks could surface real config drift, not just existence of expected files.
69
69
 
package/docs/safety.md CHANGED
@@ -133,7 +133,7 @@ Retry policy evaluation is separate from execution. `vgxness_run_resume_gate` ev
133
133
  ## Safety boundaries (enforced everywhere)
134
134
 
135
135
  - Read-only/preview commands must not mutate provider config or external tool state: setup plans, MCP setup previews, OpenCode previews, workflow previews, status views, and the natural-language orchestrator preview never write provider config, call providers, or install global memory. Local VGXNESS store initialization may occur when a command needs the selected SQLite store.
136
- - Provider config writes (`opencode.json`, `.opencode/`, `.claude/`, `CLAUDE.md`) require explicit consent (`--yes` or an equivalent confirmed flow) plus backup/rollback behavior.
136
+ - VGX-managed OpenCode and Claude provider config writes are user-global only and require explicit consent (`--yes` or an equivalent confirmed flow) plus backup/rollback behavior. Project-local provider files such as `.opencode/`, `.mcp.json`, `.claude/`, and project-root `CLAUDE.md` are external/manual diagnostics: VGXNESS may report that they exist and may affect provider behavior externally, but it must not repair, write, back up, or delete them.
137
137
  - The control plane and the code runtime do not create or write `openspec/`. SDD artifacts are stored through the local SQLite artifact service under canonical topic keys.
138
138
  - Human acceptance is distinct from artifact presence: `vgxness_sdd_accept_artifact` records explicit human-only acceptance; saving a draft never implies acceptance.
139
139
  - Unrelated user work is preserved. Workspace boundary denials cannot be relaxed by agent or subagent overrides.
package/docs/storage.md CHANGED
@@ -80,7 +80,7 @@ The schema follows a small set of conventions:
80
80
 
81
81
  There is no automatic backup of the SQLite database in v1.5.1. The recommended pattern is to treat the database file as a normal file in the user's data directory and use OS-level snapshots if needed.
82
82
 
83
- Provider config (OpenCode) has its own backup/rollback path through `vgxness setup rollback --backup <path>`. That is separate from the database and is documented in the [CLI reference](./cli.md).
83
+ VGX-managed provider config backups/rollback apply to user-global OpenCode/Claude targets only. Project-local provider files remain untouched external/manual diagnostics: they may still affect provider behavior externally, but VGXNESS will not repair, write, back up, or delete them. Provider config recovery is separate from the database and is documented in the [CLI reference](./cli.md).
84
84
 
85
85
  ## Wiping and migrating
86
86
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vgxness",
3
- "version": "1.9.8",
3
+ "version": "1.10.1",
4
4
  "description": "CLI and MCP control plane for guided AI-agent workflows, SDD, memory, and OpenCode setup.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "repository": {