@useorgx/wizard 0.1.11 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,27 +17,27 @@ For local development, use `pnpm dev -- --help`.
17
17
  The wizard modifies local tool configuration only. Depending on the command, it can:
18
18
 
19
19
  - add OrgX MCP server entries to Claude, Cursor, Codex, VS Code, Windsurf, and Zed;
20
- - install OrgX skills/rules into Cursor and Claude Code;
21
- - install companion OrgX plugins/rules for Cursor, Claude Code, Codex, and OpenClaw.
20
+ - install standalone OrgX skills/rules into Cursor and Claude Code;
21
+ - install companion OrgX plugins for Cursor, Claude Code, Codex, and OpenClaw so those tools receive OrgX skills, rules, MCP config, commands, hooks, and agent prompts through their plugin systems.
22
22
 
23
23
  ## Commands
24
24
 
25
- - `setup` adds OrgX MCP configs, skills/rules, and companion plugins/rules to detected AI tools. When OrgX auth is available in an interactive shell, it also guides workspace selection or creation, optional onboarding extras, and optional Cursor rules or companion plugin installs for detected Cursor, Claude Code, Codex, and OpenClaw hosts. The founder preset preplans plugin installs before it writes standalone skills so plugin-backed hosts do not get duplicate standalone Claude assets in the same run.
25
+ - `setup` adds OrgX MCP configs, standalone skills/rules, and companion plugins to detected AI tools. When OrgX auth is available in an interactive shell, it also guides workspace selection or creation, optional onboarding extras, and optional companion plugin installs for detected Cursor, Claude Code, Codex, and OpenClaw hosts. The founder preset preplans plugin installs before it writes standalone skills so plugin-backed hosts do not get duplicate standalone assets in the same run.
26
26
  - `surface list` shows supported surfaces and current status.
27
27
  - `surface add <name>` patches a specific surface.
28
28
  - `surface remove <name>` removes OrgX-managed config from a specific surface.
29
29
  - `mcp add [surface]` and `mcp remove [surface]` manage OrgX MCP entries in Claude, Cursor, Codex, VS Code, Windsurf, and Zed tool configs.
30
- - `plugins list` shows Cursor rules and companion plugin/rules availability and install status for Cursor, Claude Code, Codex, and OpenClaw.
31
- - `plugins add [target...]` installs managed Cursor OrgX rules or managed OrgX companion plugins/rules into Claude Code, Codex, and/or OpenClaw. Claude Code and Codex plugins carry their own OrgX skills, so they become the source of truth for those hosts.
32
- - `plugins remove [target...]` uninstalls managed Cursor OrgX rules or managed OrgX companion plugins/rules from Claude Code, Codex, and/or OpenClaw.
33
- - `uninstall` removes OrgX-managed tool config, Cursor rules and companion plugins, wizard-local auth, and wizard-local setup state. Use `--keep-auth`, `--keep-state`, `--skip-plugins`, or `--skip-surfaces` to preserve specific pieces.
30
+ - `plugins list` shows companion plugin availability and install status for Cursor, Claude Code, Codex, and OpenClaw.
31
+ - `plugins add [target...]` installs the managed Cursor plugin bundle and managed OrgX companion plugins into Claude Code, Codex, and/or OpenClaw. Cursor, Claude Code, and Codex companion plugins carry their own OrgX skills/rules/MCP config and become the source of truth for those hosts.
32
+ - `plugins remove [target...]` uninstalls the managed Cursor plugin bundle, legacy managed Cursor rules, and managed OrgX companion plugins from Claude Code, Codex, and/or OpenClaw.
33
+ - `uninstall` removes OrgX-managed tool config, companion plugins, legacy managed Cursor rules, wizard-local auth, and wizard-local setup state. Use `--keep-auth`, `--keep-state`, `--skip-plugins`, or `--skip-surfaces` to preserve specific pieces.
34
34
  - `doctor` verifies local config, hosted MCP reachability, npm registry readiness, current-workspace connectivity, local OpenClaw health, and optionally the remote setup status API. Hosted MCP tools are OAuth-scoped inside the client connector, so the wizard does not preflight them with `oxk_` API keys. It exits non-zero when blocking connectivity issues remain.
35
35
  - `auth status` shows the resolved OrgX API key source and verifies it against `POST /api/client/sync`.
36
36
  - `auth login [--base-url <url>]` starts browser pairing against OrgX, waits for approval, saves the returned per-user key to the wizard auth store, and bootstraps OpenClaw auth if OpenClaw is detected. Use `--api-key <oxk_...>` for CI or blocked-browser fallback.
37
37
  - `auth set-key <oxk_...> [--base-url <url>]` verifies a per-user OrgX key, saves it to the wizard auth store, and bootstraps OpenClaw auth if OpenClaw is detected.
38
38
  - `auth clear` removes the wizard-local saved OrgX API key.
39
39
  - `workspace current`, `workspace list`, `workspace create <name>`, and `workspace set-default <id>` inspect and manage OrgX workspaces.
40
- - `skills add [pack...]` writes OrgX skills/rules into supported local tools: `.cursor/rules/orgx.md`, `.claude/skills/orgx/SKILL.md`, and available OrgX Claude skill packs from `useorgx/skills`. If the Claude Code companion plugin is already installed, the wizard skips those overlapping standalone Claude assets and only installs the remaining standalone pieces.
40
+ - `skills add [pack...]` writes standalone OrgX skills/rules into supported local tools: `.cursor/rules/orgx.md`, `.claude/skills/orgx/SKILL.md`, and available OrgX Claude skill packs from `useorgx/skills`. If a companion plugin already owns a tool's OrgX skills/rules, the wizard skips those overlapping standalone assets and only installs the remaining standalone pieces.
41
41
  - `skills sync [pack...]` recomposes generated skill/rule files from the OrgX-managed core plus any enabled local skill extensions.
42
42
  - `skills status` shows local extension files and generated skill files tracked for drift protection.
43
43
  - `skills extensions add|edit|enable|disable|list` manages user-editable skill extensions without changing the OrgX-managed core skill source.
@@ -65,12 +65,14 @@ The wizard modifies local tool configuration only. Depending on the command, it
65
65
  - `wizard workspace create "Founders" --description "Initial OrgX workspace"` creates a new workspace through `POST /api/entities`.
66
66
  - `wizard workspace set-default <id>` updates the default workspace through the generic entity API.
67
67
 
68
- ## Editor Rules And Skills
68
+ ## Editor Rules, Skills, And Plugins
69
69
 
70
70
  - `wizard skills add` writes the OrgX Cursor rule file at `.cursor/rules/orgx.md`.
71
+ - `wizard plugins add cursor` installs the full Cursor local plugin bundle at `.cursor/plugins/local/cursor-plugin`; it includes OrgX skills, rules, MCP config, commands, hooks, and agent prompts.
71
72
  - `wizard skills add` also generates a hosted OrgX Claude skill at `.claude/skills/orgx/SKILL.md`.
72
73
  - The same command installs available OrgX Claude skill packs by pulling their source files from `useorgx/skills`; pass specific pack names to limit what is installed.
73
74
  - `wizard skills add` and `wizard skills sync` both compose generated outputs from OrgX-managed core skills plus any enabled extension files from the wizard skill-extension store.
75
+ - When the Cursor companion plugin is installed, that plugin owns Cursor-side OrgX skills, rules, MCP config, commands, hooks, and agent prompts. In that case `wizard skills add` remains the standalone rules fallback for Cursor installs that are not using the plugin.
74
76
  - When the Claude Code companion plugin is installed, that plugin owns Claude-side OrgX skills and skill sync. In that case `wizard skills add` skips overlapping Claude assets instead of writing duplicate copies.
75
77
  - The Codex companion plugin also bundles its own OrgX skills, so `wizard skills add` does not try to manage Codex skill files at all.
76
78
  - Those generated rules expect artifact proof to use durable sources such as GitHub permalinks, public URLs, or absolute file paths / `file://...`, not OrgX wrapper routes like `/live/...`, `/artifacts/...`, or `/console/...`.
@@ -88,7 +90,7 @@ OrgX core skills are treated as managed upstream content. User behavior lives in
88
90
  ## Release Flow
89
91
 
90
92
  - GitHub Actions publishes to npm on pushes of version tags matching `v*`.
91
- - The publish workflow installs dependencies with pnpm, runs `pnpm typecheck`, `pnpm test`, and `pnpm build`, then runs `pnpm publish --no-git-checks --provenance`.
93
+ - The publish workflow installs dependencies with pnpm, runs `pnpm typecheck`, `pnpm test`, and `pnpm build`, then runs `pnpm publish --no-git-checks`.
92
94
  - The workflow expects an `NPM_TOKEN` repository secret.
93
95
 
94
96
  ## Troubleshooting
package/dist/cli.js CHANGED
@@ -82,6 +82,8 @@ var CLAUDE_ORGX_SKILL_DIR = join(CLAUDE_SKILLS_DIR, "orgx");
82
82
  var CLAUDE_ORGX_SKILL_PATH = join(CLAUDE_ORGX_SKILL_DIR, "SKILL.md");
83
83
  var CURSOR_RULES_DIR = join(CURSOR_DIR, "rules");
84
84
  var CURSOR_ORGX_RULE_PATH = join(CURSOR_RULES_DIR, "orgx.md");
85
+ var CURSOR_PLUGINS_DIR = join(CURSOR_DIR, "plugins", "local");
86
+ var CURSOR_ORGX_PLUGIN_DIR = join(CURSOR_PLUGINS_DIR, "cursor-plugin");
85
87
  var CODEX_PLUGINS_DIR = join(CODEX_DIR, "plugins");
86
88
  var CODEX_ORGX_PLUGIN_DIR = join(CODEX_PLUGINS_DIR, "orgx-codex-plugin");
87
89
  var CODEX_MARKETPLACE_DIR = join(AGENTS_DIR, "plugins");
@@ -3652,6 +3654,7 @@ var ORGX_PLUGIN_GITHUB_REF = "main";
3652
3654
  var ORGX_CLAUDE_PLUGIN_NAME = "orgx-claude-code-plugin";
3653
3655
  var ORGX_CLAUDE_MARKETPLACE_NAME = "orgx-local";
3654
3656
  var ORGX_CODEX_PLUGIN_NAME = "orgx-codex-plugin";
3657
+ var ORGX_CURSOR_PLUGIN_NAME = "cursor-plugin";
3655
3658
  var ORGX_OPENCLAW_PLUGIN_ID = "orgx";
3656
3659
  var ORGX_OPENCLAW_PLUGIN_PACKAGE_NAME = "@useorgx/openclaw-plugin";
3657
3660
  var CLAUDE_PLUGIN_SYNC_SPEC = {
@@ -3679,6 +3682,22 @@ var CODEX_PLUGIN_SYNC_SPEC = {
3679
3682
  { localPath: "skills", remotePath: "skills" }
3680
3683
  ]
3681
3684
  };
3685
+ var CURSOR_PLUGIN_SYNC_SPEC = {
3686
+ owner: ORGX_PLUGIN_GITHUB_OWNER,
3687
+ repo: ORGX_CURSOR_PLUGIN_NAME,
3688
+ ref: ORGX_PLUGIN_GITHUB_REF,
3689
+ include: [
3690
+ { localPath: ".cursor-plugin", remotePath: ".cursor-plugin" },
3691
+ { localPath: ".mcp.json", remotePath: ".mcp.json" },
3692
+ { localPath: "agents", remotePath: "agents" },
3693
+ { localPath: "assets", remotePath: "assets" },
3694
+ { localPath: "commands", remotePath: "commands" },
3695
+ { localPath: "hooks", remotePath: "hooks" },
3696
+ { localPath: "rules", remotePath: "rules" },
3697
+ { localPath: "scripts", remotePath: "scripts" },
3698
+ { localPath: "skills", remotePath: "skills" }
3699
+ ]
3700
+ };
3682
3701
  function defaultPluginPaths() {
3683
3702
  return {
3684
3703
  claudeMarketplaceDir: CLAUDE_MANAGED_MARKETPLACE_DIR,
@@ -3686,6 +3705,7 @@ function defaultPluginPaths() {
3686
3705
  claudePluginDir: CLAUDE_MANAGED_PLUGIN_DIR,
3687
3706
  codexMarketplacePath: CODEX_MARKETPLACE_PATH,
3688
3707
  codexPluginDir: CODEX_ORGX_PLUGIN_DIR,
3708
+ cursorPluginDir: CURSOR_ORGX_PLUGIN_DIR,
3689
3709
  cursorRulePath: CURSOR_ORGX_RULE_PATH
3690
3710
  };
3691
3711
  }
@@ -4106,15 +4126,36 @@ async function getOpenclawInstallState(runner) {
4106
4126
  installed: extractOpenclawPluginIds(result.stdout).includes(ORGX_OPENCLAW_PLUGIN_ID)
4107
4127
  };
4108
4128
  }
4129
+ function cursorPluginManifestPath(paths) {
4130
+ return join3(paths.cursorPluginDir, ".cursor-plugin", "plugin.json");
4131
+ }
4132
+ function cursorPluginMcpPath(paths) {
4133
+ return join3(paths.cursorPluginDir, ".mcp.json");
4134
+ }
4135
+ function isCursorPluginInstalled(paths) {
4136
+ return existsSync4(cursorPluginManifestPath(paths)) && existsSync4(cursorPluginMcpPath(paths));
4137
+ }
4138
+ function isCursorPluginAvailable(paths) {
4139
+ return detectSurface("cursor").detected || existsSync4(paths.cursorPluginDir) || existsSync4(dirname3(paths.cursorPluginDir)) || readTextIfExists(paths.cursorRulePath) !== null;
4140
+ }
4109
4141
  function buildCursorStatus(paths) {
4110
4142
  const existingRules = readTextIfExists(paths.cursorRulePath);
4111
- const available = detectSurface("cursor").detected || existingRules !== null;
4112
- if (existingRules === CURSOR_RULES_CONTENT) {
4143
+ const available = isCursorPluginAvailable(paths);
4144
+ const installed = isCursorPluginInstalled(paths);
4145
+ if (installed) {
4113
4146
  return {
4114
4147
  target: "cursor",
4115
4148
  available: true,
4116
4149
  installed: true,
4117
- message: "Cursor OrgX rules are installed."
4150
+ message: "Cursor OrgX plugin bundle is installed."
4151
+ };
4152
+ }
4153
+ if (existingRules === CURSOR_RULES_CONTENT) {
4154
+ return {
4155
+ target: "cursor",
4156
+ available: true,
4157
+ installed: false,
4158
+ message: "Legacy Cursor OrgX rules are installed; run plugins add cursor to install the full plugin bundle."
4118
4159
  };
4119
4160
  }
4120
4161
  if (existingRules !== null) {
@@ -4122,14 +4163,14 @@ function buildCursorStatus(paths) {
4122
4163
  target: "cursor",
4123
4164
  available: true,
4124
4165
  installed: false,
4125
- message: "Cursor OrgX rules file exists, but differs from the managed rules."
4166
+ message: "Cursor rules file exists, but the OrgX plugin bundle is missing."
4126
4167
  };
4127
4168
  }
4128
4169
  return {
4129
4170
  target: "cursor",
4130
4171
  available,
4131
4172
  installed: false,
4132
- message: available ? "Cursor is available and ready for OrgX rules install." : "Cursor was not detected."
4173
+ message: available ? "Cursor is available and ready for OrgX plugin install." : "Cursor was not detected."
4133
4174
  };
4134
4175
  }
4135
4176
  async function buildClaudeStatus(paths, runner) {
@@ -4247,28 +4288,19 @@ async function resolveOpenclawTarball(fetchImpl) {
4247
4288
  version: latestVersion
4248
4289
  };
4249
4290
  }
4250
- function installCursorPlugin(paths) {
4251
- const existingRules = readTextIfExists(paths.cursorRulePath);
4252
- const available = detectSurface("cursor").detected || existingRules !== null;
4253
- if (!available) {
4291
+ async function installCursorPlugin(paths, fetchImpl) {
4292
+ if (!isCursorPluginAvailable(paths)) {
4254
4293
  return {
4255
4294
  target: "cursor",
4256
4295
  changed: false,
4257
4296
  message: "Cursor is not available on this machine."
4258
4297
  };
4259
4298
  }
4260
- if (existingRules === CURSOR_RULES_CONTENT) {
4261
- return {
4262
- target: "cursor",
4263
- changed: false,
4264
- message: "Cursor OrgX rules are already installed."
4265
- };
4266
- }
4267
- writeTextFile(paths.cursorRulePath, CURSOR_RULES_CONTENT);
4299
+ const syncResult = await syncManagedRepoTree(CURSOR_PLUGIN_SYNC_SPEC, paths.cursorPluginDir, fetchImpl);
4268
4300
  return {
4269
4301
  target: "cursor",
4270
- changed: true,
4271
- message: "Installed the managed Cursor OrgX rules."
4302
+ changed: syncResult.changed,
4303
+ message: syncResult.changed ? `Synced ${syncResult.fileCount} Cursor plugin files into ${paths.cursorPluginDir}. Reload Cursor to finish loading the plugin.` : "Cursor plugin bundle is already installed and up to date."
4272
4304
  };
4273
4305
  }
4274
4306
  async function installClaudePlugin(paths, fetchImpl, runner) {
@@ -4379,25 +4411,13 @@ async function installOpenclawPlugin(fetchImpl, runner) {
4379
4411
  }
4380
4412
  function uninstallCursorPlugin(paths) {
4381
4413
  const existingRules = readTextIfExists(paths.cursorRulePath);
4382
- if (existingRules === null) {
4383
- return {
4384
- target: "cursor",
4385
- changed: false,
4386
- message: "Cursor OrgX rules were not installed."
4387
- };
4388
- }
4389
- if (existingRules !== CURSOR_RULES_CONTENT) {
4390
- return {
4391
- target: "cursor",
4392
- changed: false,
4393
- message: "Cursor rules file differs from the managed OrgX rules, so it was left in place."
4394
- };
4395
- }
4396
- const changed = deleteFileIfExists(paths.cursorRulePath);
4414
+ const removedPluginDir = removePathIfExists(paths.cursorPluginDir);
4415
+ const removedLegacyRules = existingRules === CURSOR_RULES_CONTENT ? deleteFileIfExists(paths.cursorRulePath) : false;
4416
+ const changed = removedPluginDir || removedLegacyRules;
4397
4417
  return {
4398
4418
  target: "cursor",
4399
4419
  changed,
4400
- message: changed ? "Removed the managed Cursor OrgX rules." : "Cursor OrgX rules were not installed."
4420
+ message: changed ? existingRules !== null && existingRules !== CURSOR_RULES_CONTENT ? "Removed the managed Cursor OrgX plugin bundle. Existing Cursor rules differ from managed OrgX rules, so they were left in place." : "Removed the managed Cursor OrgX plugin bundle and legacy managed Cursor rules." : existingRules !== null && existingRules !== CURSOR_RULES_CONTENT ? "Cursor plugin was not installed. Existing Cursor rules differ from managed OrgX rules, so they were left in place." : "Cursor plugin was not installed."
4401
4421
  };
4402
4422
  }
4403
4423
  async function uninstallClaudePlugin(paths, runner) {
@@ -4513,7 +4533,7 @@ async function installOrgxPlugins(options = {}) {
4513
4533
  for (const target of targets) {
4514
4534
  switch (target) {
4515
4535
  case "cursor":
4516
- results.push(installCursorPlugin(paths));
4536
+ results.push(await installCursorPlugin(paths, fetchImpl));
4517
4537
  break;
4518
4538
  case "claude":
4519
4539
  results.push(await installClaudePlugin(paths, fetchImpl, runner));
@@ -5005,7 +5025,7 @@ function formatAuthSource(source) {
5005
5025
  function formatPluginTargetLabel(target) {
5006
5026
  switch (target) {
5007
5027
  case "cursor":
5008
- return "Cursor rules";
5028
+ return "Cursor plugin";
5009
5029
  case "claude":
5010
5030
  return "Claude Code";
5011
5031
  case "codex":
@@ -5051,10 +5071,10 @@ function printPluginMutationReport(report) {
5051
5071
  }
5052
5072
  }
5053
5073
  async function printPluginStatusSection() {
5054
- const spinner = createOrgxSpinner("Checking OrgX plugin and Cursor rules status");
5074
+ const spinner = createOrgxSpinner("Checking OrgX companion plugin status");
5055
5075
  spinner.start();
5056
5076
  const statuses = await listOrgxPluginStatuses();
5057
- spinner.succeed("OrgX plugin and Cursor rules status checked");
5077
+ spinner.succeed("OrgX companion plugin status checked");
5058
5078
  console.log("");
5059
5079
  console.log(pc3.dim(" plugins"));
5060
5080
  printPluginStatusReport(statuses);
@@ -5413,17 +5433,18 @@ async function promptOptionalCompanionPluginTargets(input) {
5413
5433
  }
5414
5434
  let statuses = input.statuses;
5415
5435
  if (!statuses) {
5416
- const spinner = createOrgxSpinner("Checking optional OrgX plugin and Cursor rules status");
5436
+ const spinner = createOrgxSpinner("Checking optional OrgX companion plugin status");
5417
5437
  spinner.start();
5418
5438
  statuses = await listOrgxPluginStatuses();
5419
- spinner.succeed("Optional OrgX plugin and Cursor rules status checked");
5439
+ spinner.succeed("Optional OrgX companion plugin status checked");
5420
5440
  }
5421
5441
  const installable = statuses.filter((status) => status.available && !status.installed);
5422
5442
  if (installable.length === 0) {
5423
5443
  return [];
5424
5444
  }
5425
5445
  const selection = await multiselectPrompt({
5426
- message: "Install OrgX companion plugins/rules into your detected AI tools?",
5446
+ initialValues: installable.map((status) => status.target),
5447
+ message: "Install OrgX companion plugins into your detected AI tools?",
5427
5448
  options: installable.map((status) => ({
5428
5449
  value: status.target,
5429
5450
  label: `Install ${formatPluginTargetLabel(status.target)}`,
@@ -5438,12 +5459,12 @@ async function promptOptionalCompanionPluginTargets(input) {
5438
5459
  return selection;
5439
5460
  }
5440
5461
  function printPluginSkillOwnershipNote(targets) {
5441
- if (!targets.some((target) => target === "claude" || target === "codex")) {
5462
+ if (!targets.some((target) => target === "cursor" || target === "claude" || target === "codex")) {
5442
5463
  return;
5443
5464
  }
5444
5465
  console.log(
5445
5466
  ` ${ICON.skip} ${pc3.dim(
5446
- "Claude Code and Codex companion plugins carry their own OrgX skills. Use 'wizard skills add' for Cursor rules or standalone Claude setup when those plugins are not in play."
5467
+ "Cursor, Claude Code, and Codex companion plugins carry their own OrgX skills, rules, MCP config, commands, hooks, and agent prompts. Use 'wizard skills add' only for standalone rules or skills when those plugins are not in play."
5447
5468
  )}`
5448
5469
  );
5449
5470
  }
@@ -5451,10 +5472,10 @@ async function installSelectedCompanionPlugins(input) {
5451
5472
  if (input.targets.length === 0) {
5452
5473
  return "skipped";
5453
5474
  }
5454
- const spinner = createOrgxSpinner("Installing OrgX companion plugins/rules");
5475
+ const spinner = createOrgxSpinner("Installing OrgX companion plugins");
5455
5476
  spinner.start();
5456
5477
  const report = await installOrgxPlugins({ targets: input.targets });
5457
- spinner.succeed("OrgX companion plugins/rules processed");
5478
+ spinner.succeed("OrgX companion plugins processed");
5458
5479
  printPluginMutationReport(report);
5459
5480
  printPluginSkillOwnershipNote(input.targets);
5460
5481
  await safeTrackWizardTelemetry("plugins_installed", {
@@ -5557,7 +5578,7 @@ function printDoctorReport(report, assessment) {
5557
5578
  async function main() {
5558
5579
  const program = new Command();
5559
5580
  program.name("orgx-wizard").description("Add OrgX MCP configs, skills/rules, and companion plugins to your local AI tools.").showHelpAfterError();
5560
- const pkgVersion = true ? "0.1.11" : void 0;
5581
+ const pkgVersion = true ? "0.1.12" : void 0;
5561
5582
  program.version(pkgVersion ?? "unknown", "-V, --version");
5562
5583
  program.hook("preAction", () => {
5563
5584
  console.log(renderBanner(pkgVersion));
@@ -5928,7 +5949,7 @@ async function main() {
5928
5949
  );
5929
5950
  }
5930
5951
  });
5931
- program.command("uninstall").description("Remove OrgX-managed MCP tool configs, companion plugins/rules, auth, and wizard state from this machine.").option("--keep-auth", "Keep the wizard-local saved OrgX API key.").option("--keep-state", "Keep wizard-local setup state.").option("--skip-plugins", "Skip companion plugin and Cursor rules removal.").option("--skip-surfaces", "Skip MCP tool config removal.").action(async (options) => {
5952
+ program.command("uninstall").description("Remove OrgX-managed MCP tool configs, companion plugins, auth, and wizard state from this machine.").option("--keep-auth", "Keep the wizard-local saved OrgX API key.").option("--keep-state", "Keep wizard-local setup state.").option("--skip-plugins", "Skip companion plugin and legacy Cursor rules removal.").option("--skip-surfaces", "Skip MCP tool config removal.").action(async (options) => {
5932
5953
  await safeTrackWizardTelemetry("wizard_uninstalled", {
5933
5954
  keep_auth: Boolean(options.keepAuth),
5934
5955
  keep_state: Boolean(options.keepState),
@@ -5949,10 +5970,10 @@ async function main() {
5949
5970
  } else {
5950
5971
  console.log("");
5951
5972
  console.log(pc3.dim(" plugins"));
5952
- const spinner = createOrgxSpinner("Removing OrgX companion plugins and rules");
5973
+ const spinner = createOrgxSpinner("Removing OrgX companion plugins and legacy Cursor rules");
5953
5974
  spinner.start();
5954
5975
  const pluginReport = await uninstallOrgxPlugins({ targets: ["all"] });
5955
- spinner.succeed("OrgX companion plugins and rules processed");
5976
+ spinner.succeed("OrgX companion plugins and legacy Cursor rules processed");
5956
5977
  printPluginMutationReport(pluginReport);
5957
5978
  }
5958
5979
  console.log("");
@@ -5994,19 +6015,19 @@ async function main() {
5994
6015
  const results = removeMcpSurface(names);
5995
6016
  printMutationResults(results);
5996
6017
  });
5997
- const plugins = program.command("plugins").description("Install or remove OrgX companion plugins/rules in Cursor, Claude Code, Codex, and OpenClaw.");
5998
- plugins.command("list").description("Show companion plugin/rules availability and install status in your tools.").action(async () => {
5999
- const spinner = createOrgxSpinner("Checking OrgX plugin and Cursor rules status");
6018
+ const plugins = program.command("plugins").description("Install or remove OrgX companion plugins in Cursor, Claude Code, Codex, and OpenClaw.");
6019
+ plugins.command("list").description("Show companion plugin availability and install status in your tools.").action(async () => {
6020
+ const spinner = createOrgxSpinner("Checking OrgX companion plugin status");
6000
6021
  spinner.start();
6001
6022
  const statuses = await listOrgxPluginStatuses();
6002
- spinner.succeed("OrgX plugin and Cursor rules status checked");
6023
+ spinner.succeed("OrgX companion plugin status checked");
6003
6024
  printPluginStatusReport(statuses);
6004
6025
  });
6005
- plugins.command("add").description("Install OrgX companion plugins/rules into Cursor, Claude Code, Codex, and OpenClaw.").argument("[targets...]", "cursor, claude, codex, openclaw, or all", ["all"]).action(async (targets) => {
6006
- const spinner = createOrgxSpinner("Installing OrgX companion plugins/rules");
6026
+ plugins.command("add").description("Install OrgX companion plugins into Cursor, Claude Code, Codex, and OpenClaw.").argument("[targets...]", "cursor, claude, codex, openclaw, or all", ["all"]).action(async (targets) => {
6027
+ const spinner = createOrgxSpinner("Installing OrgX companion plugins");
6007
6028
  spinner.start();
6008
6029
  const report = await installOrgxPlugins({ targets });
6009
- spinner.succeed("OrgX companion plugins/rules processed");
6030
+ spinner.succeed("OrgX companion plugins processed");
6010
6031
  printPluginMutationReport(report);
6011
6032
  printPluginSkillOwnershipNote(report.results.map((result) => result.target));
6012
6033
  await safeTrackWizardTelemetry("plugins_installed", {
@@ -6016,11 +6037,11 @@ async function main() {
6016
6037
  target_count: report.results.length
6017
6038
  });
6018
6039
  });
6019
- plugins.command("remove").description("Uninstall managed OrgX companion plugins/rules from Cursor, Claude Code, Codex, and OpenClaw.").argument("[targets...]", "cursor, claude, codex, openclaw, or all", ["all"]).action(async (targets) => {
6020
- const spinner = createOrgxSpinner("Removing OrgX companion plugins/rules");
6040
+ plugins.command("remove").description("Uninstall managed OrgX companion plugins and legacy managed Cursor rules from Cursor, Claude Code, Codex, and OpenClaw.").argument("[targets...]", "cursor, claude, codex, openclaw, or all", ["all"]).action(async (targets) => {
6041
+ const spinner = createOrgxSpinner("Removing OrgX companion plugins and legacy Cursor rules");
6021
6042
  spinner.start();
6022
6043
  const report = await uninstallOrgxPlugins({ targets });
6023
- spinner.succeed("OrgX companion plugins/rules removed");
6044
+ spinner.succeed("OrgX companion plugins and legacy Cursor rules processed");
6024
6045
  printPluginMutationReport(report);
6025
6046
  await safeTrackWizardTelemetry("plugins_removed", {
6026
6047
  changed_count: countPluginReportChanges(report),