@nemus-cli/nemus 0.2.3 → 0.2.5

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 (101) hide show
  1. package/CHANGELOG.md +44 -1
  2. package/dist/cli/ai-prompt.js +1 -1
  3. package/dist/cli/tui.js +1 -1
  4. package/dist/commands/configure.js +1 -1
  5. package/dist/commands/ghq-status.js +1 -1
  6. package/dist/mcp/install.js +12 -12
  7. package/dist/mcp/server.js +2 -2
  8. package/dist/pi-extensions/permission-sync.ts.template +1 -1
  9. package/dist/pi-extensions/permissions-gate.ts.template +1 -1
  10. package/dist/pi-extensions/pr-fix-trigger.ts.template +2 -2
  11. package/dist/pi-extensions/review-reminder.ts.template +1 -1
  12. package/dist/pi-extensions/workspace-input-status.ts.template +3 -3
  13. package/dist/scripts/workspace-table.py +3 -3
  14. package/dist/utils/agent-state.js +1 -1
  15. package/dist/utils/bug-report.js +3 -3
  16. package/dist/utils/claude-integration.js +8 -8
  17. package/dist/utils/permission-sync.js +10 -10
  18. package/dist/utils/pi-extensions.js +5 -5
  19. package/package.json +6 -6
  20. package/skills/analyze-deps.md +0 -3
  21. package/skills/branch-create.md +0 -3
  22. package/skills/create-workspace.md +0 -11
  23. package/skills/delete-workspace.md +0 -3
  24. package/skills/list-org-repos.md +0 -6
  25. package/skills/list-suites.md +0 -4
  26. package/skills/list-workspaces.md +0 -7
  27. package/skills/nemus/SKILL.md +110 -0
  28. package/skills/{workspace-manager → nemus}/references/ai-prompt.md +0 -6
  29. package/skills/{workspace-manager → nemus}/references/analyze-deps.md +0 -11
  30. package/skills/{workspace-manager → nemus}/references/archive-workspace.md +0 -9
  31. package/skills/{workspace-manager → nemus}/references/branch-create.md +0 -3
  32. package/skills/{workspace-manager → nemus}/references/branch-merge.md +0 -4
  33. package/skills/{workspace-manager → nemus}/references/branch-rebase.md +0 -4
  34. package/skills/{workspace-manager → nemus}/references/cache-clear.md +0 -3
  35. package/skills/{workspace-manager → nemus}/references/cache-info.md +0 -3
  36. package/skills/{workspace-manager → nemus}/references/configure-claude.md +0 -3
  37. package/skills/{workspace-manager → nemus}/references/configure.md +1 -4
  38. package/skills/{workspace-manager → nemus}/references/create-workspace.md +0 -4
  39. package/skills/{workspace-manager → nemus}/references/dashboard.md +0 -4
  40. package/skills/{workspace-manager → nemus}/references/delete-workspace.md +0 -4
  41. package/skills/{workspace-manager → nemus}/references/generate-docs.md +0 -9
  42. package/skills/{workspace-manager → nemus}/references/ghq-status.md +0 -5
  43. package/skills/{workspace-manager → nemus}/references/go.md +0 -4
  44. package/skills/{workspace-manager → nemus}/references/history.md +1 -5
  45. package/skills/{workspace-manager → nemus}/references/list-org-repos.md +0 -4
  46. package/skills/{workspace-manager → nemus}/references/list-suites.md +0 -4
  47. package/skills/{workspace-manager → nemus}/references/list-workspaces.md +1 -5
  48. package/skills/{workspace-manager → nemus}/references/mcp.md +3 -8
  49. package/skills/{workspace-manager → nemus}/references/remove-repo.md +0 -3
  50. package/skills/{workspace-manager → nemus}/references/run-command.md +1 -5
  51. package/skills/{workspace-manager → nemus}/references/search-repos.md +0 -4
  52. package/skills/{workspace-manager → nemus}/references/sessions.md +0 -5
  53. package/skills/{workspace-manager → nemus}/references/suite-create.md +0 -4
  54. package/skills/{workspace-manager → nemus}/references/suite-delete.md +0 -3
  55. package/skills/{workspace-manager → nemus}/references/suite-export.md +0 -4
  56. package/skills/{workspace-manager → nemus}/references/suite-import.md +0 -4
  57. package/skills/{workspace-manager → nemus}/references/suite-use.md +0 -4
  58. package/skills/{workspace-manager → nemus}/references/switch-branch.md +0 -4
  59. package/skills/{workspace-manager → nemus}/references/update-cache.md +0 -3
  60. package/skills/{workspace-manager → nemus}/references/update-workspace.md +0 -4
  61. package/skills/{workspace-manager → nemus}/references/workspace-cleanup.md +0 -4
  62. package/skills/{workspace-manager → nemus}/references/workspace-diff.md +0 -3
  63. package/skills/{workspace-manager → nemus}/references/workspace-doctor.md +0 -4
  64. package/skills/{workspace-manager → nemus}/references/workspace-info.md +0 -3
  65. package/skills/{workspace-manager → nemus}/references/workspace-status.md +1 -13
  66. package/skills/{workspace-manager → nemus}/references/workspace-sync.md +0 -4
  67. package/skills/refresh-workspace-docs.md +6 -78
  68. package/skills/run-command.md +0 -3
  69. package/skills/save-context.md +1 -13
  70. package/skills/search-repos.md +0 -6
  71. package/skills/snapshot-list.md +0 -3
  72. package/skills/snapshot-save.md +1 -1
  73. package/skills/switch-branch.md +0 -3
  74. package/skills/update-workspace.md +0 -11
  75. package/skills/workspace-cleanup.md +0 -3
  76. package/skills/workspace-diff.md +0 -3
  77. package/skills/workspace-doctor.md +0 -3
  78. package/skills/workspace-info.md +0 -17
  79. package/skills/workspace-status.md +0 -6
  80. package/skills/workspace-sync.md +0 -3
  81. package/src/cli/ai-prompt.ts +1 -1
  82. package/src/cli/tui.tsx +1 -1
  83. package/src/commands/configure.ts +1 -1
  84. package/src/commands/ghq-status.ts +1 -1
  85. package/src/mcp/install.ts +12 -12
  86. package/src/mcp/server.ts +2 -2
  87. package/src/pi-extensions/permission-sync.ts.template +1 -1
  88. package/src/pi-extensions/permissions-gate.ts.template +1 -1
  89. package/src/pi-extensions/pr-fix-trigger.ts.template +2 -2
  90. package/src/pi-extensions/review-reminder.ts.template +1 -1
  91. package/src/pi-extensions/workspace-input-status.ts.template +3 -3
  92. package/src/scripts/workspace-table.py +3 -3
  93. package/src/utils/agent-state.ts +1 -1
  94. package/src/utils/bug-report.ts +3 -3
  95. package/src/utils/claude-integration.ts +8 -8
  96. package/src/utils/permission-sync.test.ts +4 -4
  97. package/src/utils/permission-sync.ts +10 -10
  98. package/src/utils/pi-extensions.test.ts +1 -1
  99. package/src/utils/pi-extensions.ts +5 -5
  100. package/src/utils/repo-resolver.test.ts +1 -1
  101. package/skills/workspace-manager/SKILL.md +0 -201
package/CHANGELOG.md CHANGED
@@ -7,6 +7,47 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.5] - 2026-08-25
11
+
12
+ ### Changed
13
+
14
+ - **Simplified the bundled skills.** Removed repetitive ceremony sections
15
+ (`Success Criteria`, `Suggested Follow-ups`, `Presenting Results`, etc.) and
16
+ slimmed the routing `SKILL.md`, cutting the skills corpus ~20% with no loss of
17
+ actual guidance.
18
+ - **Removed the `workspace-manager` name from the code.** The bundled skill
19
+ folder is now `skills/nemus/`, the MCP server registers as **`nemus`** (tools
20
+ are `mcp__nemus__*`, `.mcp.json` key `nemus`), and internal state paths moved
21
+ to `~/.nemus/*` / `~/.nemus-*`. The legacy `WORKSPACE_MANAGER_DIR` /
22
+ `WORKSPACE_MANAGER_CACHE_DIR` env vars and the `~/.workspace-manager-cache`
23
+ migration source are kept for backward compatibility.
24
+
25
+ ### Security
26
+
27
+ - Hardened the CI version-bump reminder to skip fork PRs (whose read-only token
28
+ can't post), confirming the workflows never expose secrets to forks:
29
+ CI runs on `pull_request` (not `pull_request_target`) and `NPM_TOKEN` lives
30
+ only in the push/dispatch-triggered, approval-gated release workflow.
31
+
32
+ ## [0.2.4] - 2026-08-25
33
+
34
+ ### Changed
35
+
36
+ - Dependencies: `commander` 14 → 15 (runtime); dev tooling `@types/node` 22 → 26
37
+ and `vitest` 3 → 4.
38
+ - CI: pinned `actions/checkout` → v7, `actions/setup-node` → v7, and
39
+ `actions/github-script` → v9, which clears the "Node.js 20 is deprecated"
40
+ warnings on every run.
41
+
42
+ ### Deferred
43
+
44
+ - `react` 18 → 19 is held: `ink` 5's bundled `react-reconciler` targets React 18
45
+ internals, so React 19 needs the `ink` 7 major (a TUI-tested change).
46
+ - `inquirer` 8 → 14 and `inquirer-autocomplete-prompt` 2 → 3 are held: inquirer
47
+ v9+ split into `@inquirer/prompts`, so this is a code migration, not a bump.
48
+ - `typescript` 7 is held: it removes `moduleResolution: node10`, requiring a
49
+ `tsconfig` migration.
50
+
10
51
  ## [0.2.3] - 2026-08-25
11
52
 
12
53
  ### Fixed
@@ -106,7 +147,9 @@ Initial open-source release of **Nemus**.
106
147
  - Automatic retries with backoff on flaky network operations.
107
148
  - Optional shell integration (auto-cd on create + quick-navigate helper).
108
149
 
109
- [Unreleased]: https://github.com/me-public/nemus/compare/v0.2.3...HEAD
150
+ [Unreleased]: https://github.com/me-public/nemus/compare/v0.2.5...HEAD
151
+ [0.2.5]: https://github.com/me-public/nemus/compare/v0.2.4...v0.2.5
152
+ [0.2.4]: https://github.com/me-public/nemus/compare/v0.2.3...v0.2.4
110
153
  [0.2.3]: https://github.com/me-public/nemus/compare/v0.2.2...v0.2.3
111
154
  [0.2.2]: https://github.com/me-public/nemus/compare/v0.2.1...v0.2.2
112
155
  [0.2.1]: https://github.com/me-public/nemus/compare/v0.2.0...v0.2.1
@@ -200,7 +200,7 @@ function throwExtractionError(cmd, c) {
200
200
  if (c.timedOut) {
201
201
  const secs = Math.round(EXTRACTION_TIMEOUT_MS / 1000);
202
202
  let msg = `${cmd} did not respond within ${secs}s while parsing your request.\n` +
203
- ` This is usually a transient model/provider stall, not a workspace-manager bug.\n` +
203
+ ` This is usually a transient model/provider stall, not a nemus bug.\n` +
204
204
  ` • Verify the agent itself responds quickly: time ${testCmd}\n` +
205
205
  ` • If it's slow, your default model may be heavy (e.g. Opus) or the provider\n` +
206
206
  ` may be rate-limiting/refreshing credentials. Retry, or switch to a faster model.\n` +
package/dist/cli/tui.js CHANGED
@@ -11,7 +11,7 @@ const main = async () => {
11
11
  try {
12
12
  (0, logger_1.logInfo)('Interactive TUI mode');
13
13
  console.log((0, colors_1.colorize)('\n╔══════════════════════════════════════════╗', 'cyan'));
14
- console.log((0, colors_1.colorize)('║ Workspace Manager - Interactive UI ║', 'cyan'));
14
+ console.log((0, colors_1.colorize)('║ Nemus - Interactive UI ║', 'cyan'));
15
15
  console.log((0, colors_1.colorize)('╚══════════════════════════════════════════╝\n', 'cyan'));
16
16
  const workspaces = await (0, workspace_meta_1.listWorkspaces)();
17
17
  if (workspaces.length === 0) {
@@ -56,7 +56,7 @@ function registerConfigureCommand(parent) {
56
56
  }
57
57
  async function handleConfigure() {
58
58
  console.log('\n' + '='.repeat(60));
59
- console.log((0, colors_1.colorize)('Workspace Manager Configuration', 'bright'));
59
+ console.log((0, colors_1.colorize)('Nemus Configuration', 'bright'));
60
60
  console.log('='.repeat(60) + '\n');
61
61
  const current = (0, config_1.getUserConfig)();
62
62
  console.log('Current settings:');
@@ -55,7 +55,7 @@ async function handleGhqStatus() {
55
55
  (0, ghq_integration_1.displayGhqInfo)();
56
56
  }
57
57
  }
58
- console.log((0, colors_1.colorize)('Workspace Manager Behavior:', 'cyan'));
58
+ console.log((0, colors_1.colorize)('Nemus Behavior:', 'cyan'));
59
59
  console.log(' • Auto-detects ghq installation');
60
60
  console.log(' • Uses ghq when available');
61
61
  console.log(' • Falls back to git clone if needed');
@@ -145,12 +145,12 @@ function installHooksAndSkills() {
145
145
  catch { /* ignore */ }
146
146
  }
147
147
  }
148
- // Install workspace-manager skills (MCP + CLI command skills) — always for all active agents
148
+ // Install nemus skills (MCP + CLI command skills) — always for all active agents
149
149
  try {
150
150
  (0, permission_sync_1.installWorkspaceSkills)();
151
151
  }
152
152
  catch (error) {
153
- (0, logger_1.logError)('Failed to install workspace-manager skills');
153
+ (0, logger_1.logError)('Failed to install nemus skills');
154
154
  if (error instanceof Error) {
155
155
  (0, logger_1.logError)(error.message);
156
156
  }
@@ -177,7 +177,7 @@ function installHooksAndSkills() {
177
177
  }
178
178
  /**
179
179
  * Backfill .mcp.json for all existing workspaces that don't have the
180
- * workspace-manager entry yet.
180
+ * nemus entry yet.
181
181
  */
182
182
  async function backfillMcpJson() {
183
183
  const { installMcp } = (0, config_1.getUserConfig)();
@@ -294,9 +294,9 @@ async function install() {
294
294
  const serverPath = getMcpServerPath();
295
295
  (0, logger_1.logInfo)(`MCP server path: ${(0, colors_1.colorize)(serverPath, 'cyan')}`);
296
296
  try {
297
- (0, child_process_1.execSync)(`claude mcp add workspace-manager -s user -- node "${serverPath}"`, { stdio: 'pipe' });
297
+ (0, child_process_1.execSync)(`claude mcp add nemus -s user -- node "${serverPath}"`, { stdio: 'pipe' });
298
298
  (0, logger_1.logSuccess)('MCP server registered globally with Claude Code');
299
- console.log('\nYou can now use workspace-manager tools in any Claude Code session.');
299
+ console.log('\nYou can now use nemus tools in any Claude Code session.');
300
300
  console.log('Try asking: "list my workspaces" or "what\'s the status of my-workspace"');
301
301
  }
302
302
  catch (error) {
@@ -366,13 +366,13 @@ async function upgrade() {
366
366
  (0, logger_1.logSuccess)('Upgrade complete');
367
367
  }
368
368
  function uninstall() {
369
- // Remove workspace-manager skills (from all agent directories)
369
+ // Remove nemus skills (from all agent directories)
370
370
  try {
371
371
  (0, permission_sync_1.uninstallWorkspaceSkills)();
372
372
  (0, logger_1.logSuccess)('Workspace-manager skills removed from all agents');
373
373
  }
374
374
  catch (error) {
375
- (0, logger_1.logError)('Failed to remove workspace-manager skills');
375
+ (0, logger_1.logError)('Failed to remove nemus skills');
376
376
  if (error instanceof Error) {
377
377
  (0, logger_1.logError)(error.message);
378
378
  }
@@ -410,7 +410,7 @@ function uninstall() {
410
410
  // Unregister MCP from Claude (if available)
411
411
  if ((0, agent_config_1.isAgentCliAvailable)('claude')) {
412
412
  try {
413
- (0, child_process_1.execSync)('claude mcp remove workspace-manager -s user', { stdio: 'inherit' });
413
+ (0, child_process_1.execSync)('claude mcp remove nemus -s user', { stdio: 'inherit' });
414
414
  (0, logger_1.logSuccess)('MCP server unregistered from Claude Code');
415
415
  }
416
416
  catch (error) {
@@ -450,10 +450,10 @@ function status() {
450
450
  if (agent.supportsMcp) {
451
451
  try {
452
452
  const output = (0, child_process_1.execSync)('claude mcp list', { encoding: 'utf-8' });
453
- const isRegistered = output.includes('workspace-manager');
453
+ const isRegistered = output.includes('nemus');
454
454
  if (isRegistered) {
455
455
  (0, logger_1.logSuccess)(' MCP server registered');
456
- const lines = output.split('\n').filter(l => l.includes('workspace-manager'));
456
+ const lines = output.split('\n').filter(l => l.includes('nemus'));
457
457
  if (lines.length > 0) {
458
458
  console.log(` ${lines[0].trim()}`);
459
459
  }
@@ -496,7 +496,7 @@ function syncPermissions() {
496
496
  (0, permission_sync_1.syncAllWorkspacePermissions)(config_1.WORKSPACES_DIR);
497
497
  }
498
498
  function updateSkills() {
499
- (0, logger_1.logInfo)('Updating workspace-manager skills...');
499
+ (0, logger_1.logInfo)('Updating nemus skills...');
500
500
  try {
501
501
  (0, permission_sync_1.installWorkspaceSkills)();
502
502
  }
@@ -534,7 +534,7 @@ async function main(subCommandArg) {
534
534
  MCP Integration
535
535
 
536
536
  Usage:
537
- w mcp install Register workspace-manager MCP server with Claude Code
537
+ w mcp install Register nemus MCP server with Claude Code
538
538
  w mcp uninstall Unregister the MCP server
539
539
  w mcp upgrade Update hooks and skills without re-registering the MCP server
540
540
  w mcp update-skills Update only the Claude Code skills (faster than full upgrade)
@@ -14,7 +14,7 @@ const wsName = zod_1.z.string().min(1).max(64).regex(WS_NAME_RE, 'may contain on
14
14
  const tools_1 = require("./tools");
15
15
  const config_1 = require("../utils/config");
16
16
  const server = new mcp_js_1.McpServer({
17
- name: 'workspace-manager',
17
+ name: 'nemus',
18
18
  version: (0, config_1.getPackageVersion)(),
19
19
  });
20
20
  server.tool('list-workspaces', 'List all workspaces with their repo counts and creation dates', {
@@ -390,7 +390,7 @@ server.tool('save-context', 'Save a progress summary to the workspace. Use this
390
390
  async function main() {
391
391
  const transport = new stdio_js_1.StdioServerTransport();
392
392
  await server.connect(transport);
393
- process.stderr.write('workspace-manager MCP server started\n');
393
+ process.stderr.write('nemus MCP server started\n');
394
394
  }
395
395
  main().catch((error) => {
396
396
  process.stderr.write(`MCP server error: ${error}\n`);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Pi Permission Sync Extension (auto-generated by workspace-manager)
2
+ * Pi Permission Sync Extension (auto-generated by nemus)
3
3
  *
4
4
  * Equivalent of Claude Code's sync-permissions.sh Stop hook.
5
5
  * Syncs project-level permissions to global settings on session shutdown.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Pi Permissions Gate Extension (auto-generated by workspace-manager)
2
+ * Pi Permissions Gate Extension (auto-generated by nemus)
3
3
  *
4
4
  * Equivalent of Claude Code's permission system.
5
5
  * Confirms before running dangerous bash commands.
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Pi PR-Fix Trigger Extension (auto-generated by workspace-manager)
2
+ * Pi PR-Fix Trigger Extension (auto-generated by nemus)
3
3
  *
4
4
  * Equivalent of Claude Code's check-pr-fix-trigger.sh PostToolUse hook.
5
5
  * Detects `gh pr create` in bash tool results, extracts the PR URL,
6
6
  * and injects a directive to monitor CI and address review comments.
7
7
  *
8
- * @managed workspace-manager
8
+ * @managed nemus
9
9
  */
10
10
 
11
11
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Pi Review Reminder Extension (auto-generated by workspace-manager)
2
+ * Pi Review Reminder Extension (auto-generated by nemus)
3
3
  *
4
4
  * Equivalent of Claude Code's check-review-reminder.sh SessionStart hook.
5
5
  * Reminds user to review global permissions periodically.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Workspace input status — Claude-Code-style layout (auto-generated by workspace-manager)
2
+ * Workspace input status — Claude-Code-style layout (auto-generated by nemus)
3
3
  *
4
4
  * Layout (matching the Claude Code reference):
5
5
  *
@@ -9,8 +9,8 @@
9
9
  * ⠋ ✦ sonnet-4-6 ⚡ high 📂 ws:foo (3) 🧠 24k/200k 34% 💰 $0.42 ⏱ 2m 5s
10
10
  *
11
11
  * REPO BRANCH PR DIRTY
12
- * workspace-manager-fix-… feat/oauth #41 open ✓
13
- * ▸ workspace-manager-security security/x #45 draft *2
12
+ * nemus-fix-… feat/oauth #41 open ✓
13
+ * ▸ nemus-security security/x #45 draft *2
14
14
  *
15
15
  * [pi's default footer renders below — untouched]
16
16
  *
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- workspace-table.py — Workspace Manager status-line extension for Claude Code
4
- (auto-generated by workspace-manager)
3
+ workspace-table.py — Nemus status-line extension for Claude Code
4
+ (auto-generated by nemus)
5
5
 
6
6
  Outputs ONLY the workspace repo table (branch · PR · CI · dirty state).
7
7
  Claude Code already renders model / cost / context itself, so this script
@@ -10,7 +10,7 @@ adds only what it doesn't show.
10
10
  Configure in ~/.claude/settings.json:
11
11
  "statusLine": {
12
12
  "type": "command",
13
- "command": "~/.workspace-manager-table.py",
13
+ "command": "~/.nemus-table.py",
14
14
  "padding": 0
15
15
  }
16
16
 
@@ -43,7 +43,7 @@ const fs = __importStar(require("fs"));
43
43
  const path = __importStar(require("path"));
44
44
  const os = __importStar(require("os"));
45
45
  const dashboard_1 = require("../types/dashboard");
46
- exports.AGENTS_STATE_DIR = path.join(os.homedir(), '.workspace-manager', 'agents');
46
+ exports.AGENTS_STATE_DIR = path.join(os.homedir(), '.nemus', 'agents');
47
47
  function ensureStateDir() {
48
48
  fs.mkdirSync(exports.AGENTS_STATE_DIR, { recursive: true });
49
49
  }
@@ -183,7 +183,7 @@ function buildIssueBody(err, env) {
183
183
  const sig = errorSignature(err.message, err.stack);
184
184
  const stack = err.stack ? sanitize(err.stack).slice(0, 4000) : '(no stack captured)';
185
185
  return [
186
- `**Auto-reported by workspace-manager.**`,
186
+ `**Auto-reported by nemus.**`,
187
187
  ``,
188
188
  `**Signature:** \`${sig}\``,
189
189
  `**Command:** \`${sanitize(err.command)}\``,
@@ -202,7 +202,7 @@ function buildIssueBody(err, env) {
202
202
  `### Environment`,
203
203
  `| | |`,
204
204
  `|---|---|`,
205
- `| workspace-manager | ${env.version} |`,
205
+ `| nemus | ${env.version} |`,
206
206
  `| node | ${env.node} |`,
207
207
  `| os | ${env.os} |`,
208
208
  `| arch | ${env.arch} |`,
@@ -273,7 +273,7 @@ function ensureLabel() {
273
273
  'label', 'create', exports.BUG_LABEL,
274
274
  '--repo', exports.BUG_REPORT_REPO,
275
275
  '--color', 'B60205',
276
- '--description', 'Auto-reported by workspace-manager',
276
+ '--description', 'Auto-reported by nemus',
277
277
  ], { encoding: 'utf-8', timeout: 15000, stdio: 'ignore' });
278
278
  }
279
279
  catch {
@@ -143,7 +143,7 @@ async function backfillAgentRules(workspacePath, workspaceName) {
143
143
  return updated;
144
144
  }
145
145
  async function loadClaudeConfig() {
146
- const configFile = path.join(process.env.HOME || '~', '.workspace-manager-claude-config.json');
146
+ const configFile = path.join(process.env.HOME || '~', '.nemus-claude-config.json');
147
147
  try {
148
148
  const content = await fs.readFile(configFile, 'utf-8');
149
149
  return { ...DEFAULT_CONFIG, ...JSON.parse(content) };
@@ -156,7 +156,7 @@ async function loadClaudeConfig() {
156
156
  * Save Claude integration config
157
157
  */
158
158
  async function saveClaudeConfig(config) {
159
- const configFile = path.join(process.env.HOME || '~', '.workspace-manager-claude-config.json');
159
+ const configFile = path.join(process.env.HOME || '~', '.nemus-claude-config.json');
160
160
  try {
161
161
  await fs.writeFile(configFile, JSON.stringify(config, null, 2), 'utf-8');
162
162
  }
@@ -201,7 +201,7 @@ async function generateClaudeContext(workspacePath, workspaceName, repos, metada
201
201
  const { githubOrg } = (0, config_1.getUserConfig)();
202
202
  let content = `# Workspace: ${workspaceName}
203
203
 
204
- This workspace was created with [Workspace Manager](https://github.com/${githubOrg}/workspace-manager).
204
+ This workspace was created with [Nemus](https://github.com/${githubOrg}/nemus).
205
205
 
206
206
  ## Organization
207
207
 
@@ -328,7 +328,7 @@ This workspace contains ${entries.length} repositories for focused development w
328
328
  await fs.writeFile(contextFile, fileContent, 'utf-8');
329
329
  (0, logger_1.logSuccess)(`Generated ${(0, colors_1.colorize)(fileName, 'cyan')} with workspace context`);
330
330
  }
331
- // Generate .mcp.json with workspace-manager MCP server (if enabled)
331
+ // Generate .mcp.json with nemus MCP server (if enabled)
332
332
  const { installMcp } = (0, config_1.getUserConfig)();
333
333
  if (installMcp) {
334
334
  await generateMcpConfig(workspacePath);
@@ -410,9 +410,9 @@ function resolveMcpServerPath() {
410
410
  return null;
411
411
  }
412
412
  /**
413
- * Generate .mcp.json with workspace-manager MCP server config.
413
+ * Generate .mcp.json with nemus MCP server config.
414
414
  * This ensures Claude Code sessions in the workspace have access to
415
- * workspace-manager tools even without global MCP registration.
415
+ * nemus tools even without global MCP registration.
416
416
  */
417
417
  async function generateMcpConfig(workspacePath) {
418
418
  try {
@@ -434,14 +434,14 @@ async function generateMcpConfig(workspacePath) {
434
434
  ...existingConfig,
435
435
  mcpServers: {
436
436
  ...(existingConfig.mcpServers || {}),
437
- 'workspace-manager': {
437
+ 'nemus': {
438
438
  command: 'node',
439
439
  args: [serverPath],
440
440
  },
441
441
  },
442
442
  };
443
443
  await fs.writeFile(mcpFile, JSON.stringify(mcpConfig, null, 2) + '\n', 'utf-8');
444
- (0, logger_1.logSuccess)(`Generated ${(0, colors_1.colorize)('.mcp.json', 'cyan')} with workspace-manager MCP server`);
444
+ (0, logger_1.logSuccess)(`Generated ${(0, colors_1.colorize)('.mcp.json', 'cyan')} with nemus MCP server`);
445
445
  return true;
446
446
  }
447
447
  catch (error) {
@@ -404,7 +404,7 @@ function getSkillsSourceDir() {
404
404
  throw new Error('Could not find skills/ directory. Make sure the package is installed correctly.');
405
405
  }
406
406
  /**
407
- * Install all workspace-manager skills from the skills/ directory.
407
+ * Install all nemus skills from the skills/ directory.
408
408
  * Each .md file becomes a skill under <skillsDir>/<skill-name>/SKILL.md.
409
409
  * Installs to all active agent skills directories.
410
410
  * Idempotent — safe to call multiple times.
@@ -449,7 +449,7 @@ function installWorkspaceSkills(skillsDir) {
449
449
  installed++;
450
450
  }
451
451
  if (installed > 0) {
452
- (0, logger_1.logSuccess)(`Installed ${installed} workspace-manager skills in ${targetBase}`);
452
+ (0, logger_1.logSuccess)(`Installed ${installed} nemus skills in ${targetBase}`);
453
453
  }
454
454
  }
455
455
  }
@@ -470,7 +470,7 @@ function copyDirRecursive(src, dest) {
470
470
  }
471
471
  }
472
472
  /**
473
- * Remove all workspace-manager skills from all possible agent directories.
473
+ * Remove all nemus skills from all possible agent directories.
474
474
  * Reads the skills/ source directory to know which skill names to remove.
475
475
  * Removes from both Claude and Pi dirs regardless of current config to avoid orphans.
476
476
  */
@@ -508,7 +508,7 @@ function uninstallWorkspaceSkills(skillsDir) {
508
508
  }
509
509
  // ─── Workspace status-line ────────────────────────────────────────────────────
510
510
  /** Absolute install path for the workspace-table Python script. */
511
- const WORKSPACE_TABLE_SCRIPT = path.join(os.homedir(), '.workspace-manager-table.py');
511
+ const WORKSPACE_TABLE_SCRIPT = path.join(os.homedir(), '.nemus-table.py');
512
512
  /**
513
513
  * Resolve the bundled workspace-table.py path from the installed package.
514
514
  * When compiled, __dirname is dist/utils/; the scripts/ dir is at dist/scripts/.
@@ -530,7 +530,7 @@ function getWorkspaceTableSourcePath() {
530
530
  * Claude Code shows its default footer — the user's existing styling is
531
531
  * never affected.
532
532
  *
533
- * The script is copied to ~/.workspace-manager-table.py and registered in
533
+ * The script is copied to ~/.nemus-table.py and registered in
534
534
  * ~/.claude/settings.json only when no statusLine is already configured —
535
535
  * we never overwrite a custom status line the user already has.
536
536
  *
@@ -541,7 +541,7 @@ function installWorkspaceStatusLine(settingsPath) {
541
541
  const settings = readClaudeSettings(filePath);
542
542
  if (settings.statusLine) {
543
543
  (0, logger_1.logInfo)('statusLine already configured in ~/.claude/settings.json — skipping workspace-table install');
544
- (0, logger_1.logInfo)(` To use workspace-manager\'s table, replace your statusLine command with: ${WORKSPACE_TABLE_SCRIPT}`);
544
+ (0, logger_1.logInfo)(` To use nemus\'s table, replace your statusLine command with: ${WORKSPACE_TABLE_SCRIPT}`);
545
545
  return;
546
546
  }
547
547
  // Copy the script
@@ -566,7 +566,7 @@ function installWorkspaceStatusLine(settingsPath) {
566
566
  }
567
567
  /**
568
568
  * Remove the workspace status-line from Claude Code\'s settings.json.
569
- * Only removes it if the command points to workspace-manager\'s own script.
569
+ * Only removes it if the command points to nemus\'s own script.
570
570
  *
571
571
  * @param settingsPath Override ~/.claude/settings.json (for testing).
572
572
  */
@@ -579,8 +579,8 @@ function uninstallWorkspaceStatusLine(settingsPath) {
579
579
  return;
580
580
  }
581
581
  const cmd = existing.command ?? '';
582
- if (!cmd.includes('workspace-manager-table')) {
583
- (0, logger_1.logInfo)('statusLine is not managed by workspace-manager — leaving it unchanged');
582
+ if (!cmd.includes('nemus-table')) {
583
+ (0, logger_1.logInfo)('statusLine is not managed by nemus — leaving it unchanged');
584
584
  return;
585
585
  }
586
586
  delete settings.statusLine;
@@ -605,7 +605,7 @@ function extractScriptPath(command) {
605
605
  return bare ? bare[1] : null;
606
606
  }
607
607
  /**
608
- * Detect and repair workspace-manager hook commands in ~/.claude/settings.json
608
+ * Detect and repair nemus hook commands in ~/.claude/settings.json
609
609
  * that point to script paths which no longer exist on disk.
610
610
  *
611
611
  * This happens when the package is installed via a manager (e.g. Volta) whose
@@ -51,8 +51,8 @@ const path = __importStar(require("path"));
51
51
  const os = __importStar(require("os"));
52
52
  const logger_1 = require("./logger");
53
53
  const PI_EXTENSIONS_DIR = path.join(os.homedir(), '.pi', 'agent', 'extensions');
54
- /** Marker comment that identifies workspace-manager managed extensions */
55
- const MANAGED_MARKER = '(auto-generated by workspace-manager)';
54
+ /** Marker comment that identifies nemus managed extensions */
55
+ const MANAGED_MARKER = '(auto-generated by nemus)';
56
56
  function getTemplatesDir() {
57
57
  // When compiled: dist/utils/ -> dist/pi-extensions/
58
58
  const distPath = path.resolve(__dirname, '..', 'pi-extensions');
@@ -108,7 +108,7 @@ function getExtensionTemplates(options = {}) {
108
108
  return templates;
109
109
  }
110
110
  /**
111
- * Install all workspace-manager Pi extensions.
111
+ * Install all nemus Pi extensions.
112
112
  * Idempotent — overwrites existing managed extensions with latest templates.
113
113
  *
114
114
  * @param extensionsDir Override the extensions directory (for testing).
@@ -150,14 +150,14 @@ function installPiExtensions(extensionsDir, options = {}) {
150
150
  }
151
151
  }
152
152
  /**
153
- * Uninstall workspace-manager managed Pi extensions.
153
+ * Uninstall nemus managed Pi extensions.
154
154
  * Only removes extensions that contain the managed marker or match
155
155
  * known installed names.
156
156
  *
157
157
  * @param extensionsDir Override the extensions directory (for testing).
158
158
  */
159
159
  /**
160
- * Uninstall workspace-manager managed Pi extensions.
160
+ * Uninstall nemus managed Pi extensions.
161
161
  * Pass `onlyNames` to remove only specific extension files (for opt-out).
162
162
  *
163
163
  * @param extensionsDir Override the extensions directory (for testing).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nemus-cli/nemus",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Nemus — a CLI for managing multi-repository workspaces. Create, sync, and operate across dozens of repos with a single command, and wire them up to your favorite coding agent.",
5
5
  "keywords": [
6
6
  "workspace",
@@ -66,7 +66,7 @@
66
66
  "dependencies": {
67
67
  "@modelcontextprotocol/sdk": "^1.26.0",
68
68
  "cli-progress": "^3.12.0",
69
- "commander": "^14.0.3",
69
+ "commander": "^15.0.0",
70
70
  "fuzzy": "^0.1.3",
71
71
  "ink": "^5.0.0",
72
72
  "ink-select-input": "^6.0.0",
@@ -74,17 +74,17 @@
74
74
  "inquirer": "^8.0.0",
75
75
  "inquirer-autocomplete-prompt": "^2.0.0",
76
76
  "markdown-table": "^3.0.3",
77
- "react": "^18.2.0",
77
+ "react": "^18.3.1",
78
78
  "zod": "^4.3.6"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@types/cli-progress": "^3.11.0",
82
82
  "@types/inquirer": "^9.0.3",
83
83
  "@types/inquirer-autocomplete-prompt": "^2.0.0",
84
- "@types/node": "^22.14.0",
85
- "@types/react": "^18.2.0",
84
+ "@types/node": "^26.3.0",
85
+ "@types/react": "^18.3.31",
86
86
  "ts-node": "^10.9.1",
87
87
  "typescript": "^5.9.3",
88
- "vitest": "^3.0.0"
88
+ "vitest": "^4.1.11"
89
89
  }
90
90
  }
@@ -18,6 +18,3 @@ Or for the current workspace:
18
18
  nemus analyze-deps
19
19
  ```
20
20
 
21
- ## Presenting Results
22
-
23
- Report dependency relationships between repos (which repos depend on which via package.json).
@@ -13,6 +13,3 @@ Create a new branch across all repos in a workspace.
13
13
  nemus branch create <workspace-name> <branch-name>
14
14
  ```
15
15
 
16
- ## Presenting Results
17
-
18
- Report which repos had the branch created successfully and any that failed.
@@ -26,14 +26,3 @@ Or interactively (prompts for workspace name and repos):
26
26
  nemus create
27
27
  ```
28
28
 
29
- ## Presenting Results
30
-
31
- Report:
32
- - Workspace created at path
33
- - Successfully cloned repos
34
- - Any failures with their error reason
35
-
36
- ## Suggested Follow-ups
37
-
38
- - `nemus status <name>` to verify
39
- - `nemus update --workspace <name> --repos <more-repos>` to add more repos later
@@ -32,6 +32,3 @@ nemus delete
32
32
  - There is no undo — repos will need to be re-cloned
33
33
  - Always confirm with the user before deleting
34
34
 
35
- ## Suggested Follow-ups
36
-
37
- - `nemus list` to verify the workspace is gone
@@ -18,9 +18,3 @@ If the cache is empty or stale:
18
18
  nemus cache refresh
19
19
  ```
20
20
 
21
- ## Presenting Results
22
-
23
- Show repo names. Can be filtered by searching:
24
- ```bash
25
- nemus cache search <keyword>
26
- ```
@@ -13,10 +13,6 @@ List all saved suites (reusable collections of repos).
13
13
  nemus suite list
14
14
  ```
15
15
 
16
- ## Presenting Results
17
-
18
- Show each suite's name and the repos it contains.
19
-
20
16
  ## Related
21
17
 
22
18
  - `nemus suite create` to create a new suite
@@ -18,10 +18,3 @@ Note: This command opens an interactive picker. To just see the output without s
18
18
  nemus list 2>&1 | cat
19
19
  ```
20
20
 
21
- ## Presenting Results
22
-
23
- Show each workspace with:
24
- - Name
25
- - Number of repositories
26
- - Creation date
27
- - Last active session (if any)