claude-multi 0.4.4 → 0.5.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.
- package/.agents/skills/three/SKILL.md +106 -0
- package/.agents/skills/threejs-animation/SKILL.md +552 -0
- package/.agents/skills/threejs-fundamentals/SKILL.md +488 -0
- package/.agents/skills/threejs-geometry/SKILL.md +548 -0
- package/.agents/skills/threejs-interaction/SKILL.md +660 -0
- package/.agents/skills/threejs-lighting/SKILL.md +481 -0
- package/.agents/skills/threejs-loaders/SKILL.md +623 -0
- package/.agents/skills/threejs-materials/SKILL.md +520 -0
- package/.agents/skills/threejs-postprocessing/SKILL.md +602 -0
- package/.agents/skills/threejs-shaders/SKILL.md +642 -0
- package/.agents/skills/threejs-textures/SKILL.md +628 -0
- package/.commandcode/taste/taste.md +9 -0
- package/CHANGELOG.md +121 -0
- package/README.md +62 -179
- package/astro.config.mjs +69 -0
- package/bun.lock +1349 -0
- package/dist/cli.js +52530 -4022
- package/package.json +27 -8
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon-animated.svg +140 -0
- package/public/favicon.json +1 -0
- package/public/favicon.svg +14 -0
- package/public/logo.svg +14 -0
- package/public/site.webmanifest +11 -0
- package/screenshots-review/01-main-menu.png +0 -0
- package/screenshots-review/02-list-instances.png +0 -0
- package/screenshots-review/07-mcp-details.png +0 -0
- package/screenshots-review/v2-01-main-menu.png +0 -0
- package/scripts/capture-screens.tsx +440 -0
- package/scripts/gen-lottie.cjs +160 -0
- package/scripts/shoot-changelog.mjs +18 -0
- package/skills-lock.json +71 -0
- package/ROADMAP.md +0 -104
- package/development.md +0 -602
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,123 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.5] - 2026-05-22
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Runtime detection** (`src/util/runtime.ts`): `detectPackageManager()` identifies the active package manager (bun / npm / pnpm / deno) at runtime
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- **Cross-runtime support**: all package-manager operations (`upgradeClaudeMulti`, `getCurrentVersion`, `updateClaudeCode`) now use the detected package manager instead of hard-coding bun commands
|
|
15
|
+
- `getLatestVersion()` replaced `bun pm npm view` with a direct `fetch()` to the npm registry — works in any runtime
|
|
16
|
+
- `getDefaultBinaryPath()` selects the correct global bin directory for the active package manager on Windows (was always `%LOCALAPPDATA%\bun\bin`)
|
|
17
|
+
- Generated wrapper shebang changed from `#!/usr/bin/env bun` to `#!/usr/bin/env node`
|
|
18
|
+
- Default action (no subcommand) always launches the Ink TUI and awaits `waitUntilExit()` — the `CLAUDE_MULTI_INK=false` prompts fallback is removed
|
|
19
|
+
- Update check is now **opt-in**: set `CLAUDE_MULTI_UPDATE_CHECK=true` to enable; it no longer runs on every invocation
|
|
20
|
+
- Removed `interactive` / `i` command alias (default action covers this)
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- `AddInstance` provider selection: choosing "None" now correctly resets `selectedProvider` to `null` and sets `useProvider` to `false`; choosing a provider correctly sets `useProvider` to `true`
|
|
24
|
+
- `getCurrentVersion()` handles pnpm's array-shaped JSON response
|
|
25
|
+
|
|
26
|
+
### CI
|
|
27
|
+
- Publish workflow: skip git tag creation when the tag already exists remotely
|
|
28
|
+
- Publish workflow: make git tagging optional via workflow input
|
|
29
|
+
- Switch publish workflow from bun to npm with OIDC trusted publishing (no token)
|
|
30
|
+
- Update Node.js to 24.x in CI and deployment workflows
|
|
31
|
+
- Add `ci:publish` script to trigger versioned publish from local
|
|
32
|
+
|
|
33
|
+
## [0.5.1] - 2026-05-22
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
- **Interactive-first launch**: Running `claude-multi` with no arguments now opens the Ink TUI directly instead of printing help text
|
|
37
|
+
- CLI subcommands (`add`, `remove`, `list`, etc.) continue to work as before
|
|
38
|
+
- `--help` and `--version` flags are unaffected
|
|
39
|
+
- `CLAUDE_MULTI_INK=false` still falls back to the `prompts`-based interactive mode
|
|
40
|
+
|
|
41
|
+
## [0.5.0] - 2026-05-14
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
- **Ink-based Interactive UI**: Full terminal UI built with Ink + React
|
|
45
|
+
- Home screen with instance list, menu, and health warning banner
|
|
46
|
+
- Animated components: Header, StatusBar, StepIndicator, InstanceCard, IssueCard, WarningBanner
|
|
47
|
+
- Screens: AddInstance, RemoveInstance, ShowInstanceInfo, ToggleAutoSync, FixSymlinks, HealthScreen, ManagePlugins, ManageMcp, ListInstances
|
|
48
|
+
- Keyboard navigation: arrow keys, Enter, ESC, `!` for health, `q` to quit
|
|
49
|
+
- `useConfig`, `useNavigation`, `useHealthCheck`, `useAnimations` hooks
|
|
50
|
+
- **Per-Instance Plugin Management**: Granular plugin control per instance
|
|
51
|
+
- `PluginInfo` interface with id, name, category (internal/external), hasMcp, mcpServerNames, enabled, isSymlink
|
|
52
|
+
- `scanPluginsFromDir()` discovers plugins from both `plugins/` and `external_plugins/` subdirs
|
|
53
|
+
- `listDefaultPlugins()` / `listInstancePlugins()` for querying available and installed plugins
|
|
54
|
+
- `copySinglePlugin()` / `copySelectedPlugins()` for individual or batch install with rollback
|
|
55
|
+
- `removeSinglePlugin()` with rename-to-backup safety pattern
|
|
56
|
+
- `detectMcpCollisions()` to check MCP server name conflicts before install
|
|
57
|
+
- `validatePluginOperation()` pre-flight checks (configDir, symlink, plugin existence, collisions)
|
|
58
|
+
- Handles 12 internal LSP plugins without `plugin.json` (falls back to dir name)
|
|
59
|
+
- Supports both flat `{"serverName": config}` and nested `{"mcpServers": {"serverName": config}}` `.mcp.json` formats
|
|
60
|
+
- Coordinates with `installed_plugins.json` v2 format (scope, installPath, version, timestamps)
|
|
61
|
+
- Symlink detection: refuses per-plugin operations when auto-sync is active
|
|
62
|
+
- **Migration System** (`src/migration.ts`): Safe v1 → v2 config upgrade
|
|
63
|
+
- `runMigration()` with 4-step procedure: backup → validate → transform → save
|
|
64
|
+
- PID-based lock file prevents concurrent migrations
|
|
65
|
+
- Automatic backup of config.json + instance settings.json (keeps last 3)
|
|
66
|
+
- Failure flag: sets `migrationStatus: "failed"` with error details, prevents auto-retry
|
|
67
|
+
- `clearMigrationFailure()` for explicit retry
|
|
68
|
+
- `CLAUDE_MULTI_HOME` env override for testability
|
|
69
|
+
- **Health Check System** (`src/health.ts`): Detects and reports issues
|
|
70
|
+
- Checks: migration failure, missing configDir, missing binary, corrupted settings.json, broken symlinks
|
|
71
|
+
- Persistent health status at `~/.claude-multi/health-status.json`
|
|
72
|
+
- `dismissIssue()` / `dismissAllIssues()` for acknowledging warnings
|
|
73
|
+
- Warning banner on home screen with `!` key to review
|
|
74
|
+
- HealthScreen with list/detail views, retry, dismiss actions
|
|
75
|
+
- **ManagePlugins Screen**: Full plugin management UI
|
|
76
|
+
- Install plugins from default (MultiSelect with MCP badge, [ext] tag)
|
|
77
|
+
- Remove installed plugins
|
|
78
|
+
- Enable/disable plugins
|
|
79
|
+
- List installed plugins with status indicators
|
|
80
|
+
- Symlink detection with warning
|
|
81
|
+
- **ManageMcp Screen**: Enhanced MCP server management
|
|
82
|
+
- List MCP servers with source attribution ([pluginName] or [custom])
|
|
83
|
+
- Add custom MCP server (name + JSON config input)
|
|
84
|
+
- Remove custom MCP server (select from custom servers)
|
|
85
|
+
- Verify MCP configuration
|
|
86
|
+
- Copy between instances
|
|
87
|
+
- **CLI Plugin Commands**: 5 new `plugins` sub-commands
|
|
88
|
+
- `plugins install <instance> <ids...>` — install plugins with collision detection
|
|
89
|
+
- `plugins remove <instance> <ids...>` — remove plugins with symlink guard
|
|
90
|
+
- `plugins list-defaults` — list all 50 default plugins with category/MCP badges
|
|
91
|
+
- `plugins list-installed [instance]` — list installed plugins per instance
|
|
92
|
+
- `plugins check-collisions <instance> <ids...>` — detect MCP name conflicts
|
|
93
|
+
- **Provider Templates**: DeepSeek provider template added
|
|
94
|
+
- **Instance State**: `initializeInstanceState()` creates `.claude.json` with `hasCompletedOnboarding: true`
|
|
95
|
+
- **Provider Env**: `mergeProviderEnv()` integrates provider template env vars into instance settings
|
|
96
|
+
- **Screenshot Capture**: `scripts/capture-screens.tsx` for automated UI screenshots
|
|
97
|
+
|
|
98
|
+
### Changed
|
|
99
|
+
- `copyAllFromDefault()` restored `autoSync` parameter for symlink-based plugin sync
|
|
100
|
+
- `syncPluginsAndSkills()` creates actual symlinks instead of copying files
|
|
101
|
+
- Broken symlink detection uses `lstatSync` (works when `existsSync` returns false)
|
|
102
|
+
- `~/.claude` is strictly read-only — never modified by any operation
|
|
103
|
+
- Atomic file writes for both config.json and settings.json (temp-file-rename pattern)
|
|
104
|
+
- Lazy path resolution in migration.ts and health.ts for testability
|
|
105
|
+
|
|
106
|
+
### Fixed
|
|
107
|
+
- `syncPluginsAndSkills` was doing recursive copy instead of creating symlinks
|
|
108
|
+
- `copyAllFromDefault` `autoSync` parameter was removed, breaking symlink-based sync
|
|
109
|
+
- Broken symlinks not cleaned before creating new ones (used `lstatSync` instead of `existsSync`)
|
|
110
|
+
- `isClaudeCodeRunning()` blocked tests — skips in `NODE_ENV=test`
|
|
111
|
+
- `writeFileSync` not imported in config.ts
|
|
112
|
+
- `McpSourceDetails` prop name mismatch in ManageMcp
|
|
113
|
+
- `renameSync` dynamic import in `saveConfigAtomic` replaced with top-level import
|
|
114
|
+
- TypeScript: `updateInstanceAutoSync` object possibly undefined after bounds check
|
|
115
|
+
|
|
116
|
+
### Tests
|
|
117
|
+
- **155 tests, 0 failures** across 16 test files
|
|
118
|
+
- `test/plugin-management.test.ts` (18 tests): scanning, copy, remove, MCP helpers, atomic writes
|
|
119
|
+
- `test/e2e/plugin-flow.test.ts` (6 tests): CLI plugin operations end-to-end
|
|
120
|
+
- `test/migration.test.ts` (15 tests): migration, backup, lock, failure recovery
|
|
121
|
+
- `test/health.test.ts` (15 tests): health checks, persistence, dismiss
|
|
122
|
+
- `test/ink/` (31 tests): component rendering, screen navigation, animation hooks
|
|
123
|
+
- `test/config.test.ts` (53 tests): sync/unsync, copyAllFromDefault, symlink cycles
|
|
124
|
+
|
|
8
125
|
## [0.4.3] - 2026-01-26
|
|
9
126
|
|
|
10
127
|
### Added
|
|
@@ -139,6 +256,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
139
256
|
- Support for custom config and binary paths
|
|
140
257
|
- Command-line interface built with Commander.js
|
|
141
258
|
|
|
259
|
+
[0.5.5]: https://github.com/hmziqrs/claude-multi/compare/v0.5.1...v0.5.5
|
|
260
|
+
[0.5.1]: https://github.com/hmziqrs/claude-multi/compare/v0.5.0...v0.5.1
|
|
261
|
+
[0.5.0]: https://github.com/hmziqrs/claude-multi/compare/v0.4.4...v0.5.0
|
|
262
|
+
[0.4.4]: https://github.com/hmziqrs/claude-multi/compare/v0.4.3...v0.4.4
|
|
142
263
|
[0.3.0]: https://github.com/hmziqrs/claude-multi/compare/v0.2.0...v0.3.0
|
|
143
264
|
[0.2.0]: https://github.com/hmziqrs/claude-multi/compare/v0.1.0...v0.2.0
|
|
144
265
|
[0.1.0]: https://github.com/hmziqrs/claude-multi/releases/tag/v0.1.0
|
package/README.md
CHANGED
|
@@ -1,231 +1,114 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<img src="public/favicon-animated.svg" width="256" height="256" alt="claude-multi logo">
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
# claude-multi
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
</div>
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Run multiple Claude Code instances side by side — each with its own provider, config, and `claude-<name>` command.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
- 🎯 **Simple CLI**: Easy-to-use commands for managing instances
|
|
13
|
-
- 🔒 **Isolated Configs**: Each instance has its own settings and history
|
|
14
|
-
- 🎨 **Provider Templates**: Built-in templates for GLM, MiniMax, and more
|
|
15
|
-
- ✅ **Legal**: Uses wrapper scripts, no code modification
|
|
16
|
-
- 🚀 **Auto-sync**: Always uses the latest official Claude Code
|
|
11
|
+
Switching providers (Anthropic, GLM, MiniMax, DeepSeek) normally means editing `settings.json` by hand. This tool gives each one its own isolated install instead.
|
|
17
12
|
|
|
18
|
-
##
|
|
13
|
+
## Install
|
|
19
14
|
|
|
20
15
|
```bash
|
|
21
|
-
|
|
16
|
+
bun add -g claude-multi
|
|
22
17
|
```
|
|
23
18
|
|
|
24
|
-
## Quick Start
|
|
25
|
-
|
|
26
|
-
Get started with a provider template in 30 seconds:
|
|
27
|
-
|
|
28
19
|
```bash
|
|
29
|
-
|
|
30
|
-
claude-multi add glm --provider glm --api-key "your-glm-api-key"
|
|
31
|
-
|
|
32
|
-
# Use it!
|
|
33
|
-
claude-glm --help
|
|
20
|
+
npm install -g claude-multi
|
|
34
21
|
```
|
|
35
22
|
|
|
36
|
-
**Or use interactive mode:**
|
|
37
|
-
|
|
38
23
|
```bash
|
|
39
|
-
claude-multi
|
|
40
|
-
# Choose "Yes" when asked about provider templates
|
|
41
|
-
# Select GLM or MiniMax
|
|
42
|
-
# Enter your API key
|
|
43
|
-
# Done!
|
|
24
|
+
pnpm add -g claude-multi
|
|
44
25
|
```
|
|
45
26
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
On Windows, ensure `%APPDATA%\npm` is in your PATH to use the wrapper commands:
|
|
49
|
-
|
|
50
|
-
```cmd
|
|
51
|
-
# Check if npm directory is in PATH
|
|
52
|
-
echo %PATH%
|
|
53
|
-
|
|
54
|
-
# Add to PATH if needed (PowerShell as Administrator)
|
|
55
|
-
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";$env:APPDATA\npm", "User")
|
|
27
|
+
```bash
|
|
28
|
+
deno install -g -A -n claude-multi npm:claude-multi
|
|
56
29
|
```
|
|
57
30
|
|
|
58
|
-
|
|
31
|
+
Requires Node 18+ (or Bun 1+) and `@anthropic-ai/claude-code` installed globally.
|
|
59
32
|
|
|
60
33
|
## Usage
|
|
61
34
|
|
|
62
|
-
|
|
35
|
+
Just run it — the interactive TUI opens by default:
|
|
63
36
|
|
|
64
37
|
```bash
|
|
65
|
-
|
|
66
|
-
claude-multi add glm
|
|
67
|
-
|
|
68
|
-
# Create instance with provider template (CLI mode)
|
|
69
|
-
claude-multi add glm --provider glm --api-key "your-api-key-here"
|
|
70
|
-
claude-multi add minimax --provider minimax --api-key "your-api-key-here"
|
|
71
|
-
|
|
72
|
-
# Create instance with custom config path
|
|
73
|
-
claude-multi add work --config ~/configs/claude-work
|
|
74
|
-
|
|
75
|
-
# Create instance with custom binary path
|
|
76
|
-
claude-multi add minimax --binary ~/.local/bin/claude-minimax
|
|
77
|
-
|
|
78
|
-
# Non-interactive modes
|
|
79
|
-
claude-multi add glm --copy-settings # Copy only settings.json
|
|
80
|
-
claude-multi add glm --copy-all # Copy all files (settings, CLAUDE.md, plugins)
|
|
81
|
-
claude-multi add glm --skip-prompts # Start fresh, no prompts
|
|
38
|
+
claude-multi
|
|
82
39
|
```
|
|
83
40
|
|
|
84
|
-
|
|
85
|
-
- **GLM (智谱AI)**: GLM-4.5-air and GLM-4.6 models via z.ai
|
|
86
|
-
- **MiniMax**: MiniMax-M2 model via minimax.io
|
|
87
|
-
|
|
88
|
-
**Interactive prompt options:**
|
|
89
|
-
- **Provider templates**: Choose GLM, MiniMax, or None/Custom
|
|
90
|
-
- **Nothing - start fresh**: Empty config directory
|
|
91
|
-
- **Only settings.json**: Copy your settings (API keys, preferences)
|
|
92
|
-
- **All files**: Copy settings, CLAUDE.md, plugins, etc. (excludes history, debug logs)
|
|
41
|
+
You get a full terminal UI to add instances, manage plugins, configure MCP servers, and more. No subcommand needed.
|
|
93
42
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
### Use instances
|
|
97
|
-
|
|
98
|
-
Each instance gets its own command:
|
|
43
|
+
**Adding an instance** — pick it from the menu, or run directly:
|
|
99
44
|
|
|
100
45
|
```bash
|
|
101
|
-
claude-
|
|
102
|
-
claude-work # Uses ~/configs/claude-work
|
|
103
|
-
claude-minimax # Uses ~/.claude-minimax config
|
|
104
|
-
claude # Original command, uses ~/.claude
|
|
46
|
+
claude-multi add glm
|
|
105
47
|
```
|
|
106
48
|
|
|
107
|
-
|
|
49
|
+
No flags = the guided wizard walks you through provider, API key, and copy options. Then use your new instance:
|
|
108
50
|
|
|
109
51
|
```bash
|
|
110
|
-
|
|
111
|
-
claude-multi list
|
|
112
|
-
|
|
113
|
-
# Show instance details
|
|
114
|
-
claude-multi info glm
|
|
115
|
-
|
|
116
|
-
# Remove instance
|
|
117
|
-
claude-multi remove glm
|
|
118
|
-
|
|
119
|
-
# Remove without confirmation
|
|
120
|
-
claude-multi remove glm --force
|
|
52
|
+
claude-glm
|
|
121
53
|
```
|
|
122
54
|
|
|
123
|
-
|
|
55
|
+
## CLI (non-interactive)
|
|
56
|
+
|
|
57
|
+
For scripting and automation, all operations are available as flags:
|
|
124
58
|
|
|
125
59
|
```bash
|
|
126
|
-
#
|
|
60
|
+
# Instances
|
|
61
|
+
claude-multi add <name> --provider glm --api-key "sk-..."
|
|
62
|
+
claude-multi add <name> --config ~/path # custom config dir
|
|
63
|
+
claude-multi add <name> --copy-settings # seed from ~/.claude
|
|
64
|
+
claude-multi add <name> --copy-all # copy everything + auto-sync
|
|
65
|
+
claude-multi add <name> --skip-prompts # start fresh, no wizard
|
|
66
|
+
claude-multi add <name> --manual # copy files instead of symlinking
|
|
67
|
+
claude-multi list
|
|
68
|
+
claude-multi info <name>
|
|
69
|
+
claude-multi remove <name> [--force]
|
|
70
|
+
|
|
71
|
+
# Plugins & MCP
|
|
72
|
+
claude-multi plugins list
|
|
73
|
+
claude-multi plugins enable <name> <plugin-id>
|
|
74
|
+
claude-multi plugins disable <name> <plugin-id>
|
|
75
|
+
claude-multi plugins copy <name> # copy from default ~/.claude
|
|
76
|
+
claude-multi mcp list
|
|
77
|
+
claude-multi mcp copy <src> <dst>
|
|
78
|
+
|
|
79
|
+
# Sync
|
|
80
|
+
claude-multi auto-sync <name> on|off # symlink plugins/skills from ~/.claude
|
|
81
|
+
claude-multi fix-symlinks --all
|
|
82
|
+
|
|
83
|
+
# Claude Code itself
|
|
127
84
|
claude-multi version
|
|
128
|
-
|
|
129
|
-
# Update Claude Code to latest
|
|
130
85
|
claude-multi update
|
|
131
86
|
```
|
|
132
87
|
|
|
133
|
-
|
|
88
|
+
Set `CLAUDE_MULTI_INK=false` to force the simpler prompts-based UI instead of the Ink TUI.
|
|
134
89
|
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
claude-multi add personal
|
|
138
|
-
claude-multi add work
|
|
139
|
-
|
|
140
|
-
claude-personal # Personal projects
|
|
141
|
-
claude-work # Work projects
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### Different AI Providers
|
|
145
|
-
```bash
|
|
146
|
-
# Interactive mode with provider template
|
|
147
|
-
claude-multi add anthropic # Use Anthropic (prompted for API key)
|
|
148
|
-
claude-multi add glm # Use GLM template (prompted for API key)
|
|
149
|
-
claude-multi add minimax # Use MiniMax template (prompted for API key)
|
|
150
|
-
|
|
151
|
-
# CLI mode with provider template
|
|
152
|
-
claude-multi add glm --provider glm --api-key "sk-..."
|
|
153
|
-
claude-multi add minimax --provider minimax --api-key "sk-..."
|
|
154
|
-
|
|
155
|
-
claude-anthropic # Uses Anthropic Claude
|
|
156
|
-
claude-glm # Uses GLM-4.6
|
|
157
|
-
claude-minimax # Uses MiniMax-M2
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Multiple Environments
|
|
161
|
-
```bash
|
|
162
|
-
claude-multi add prod
|
|
163
|
-
claude-multi add staging
|
|
164
|
-
claude-multi add dev
|
|
165
|
-
|
|
166
|
-
# Different configs for each
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Provider Templates
|
|
90
|
+
## Providers
|
|
170
91
|
|
|
171
|
-
|
|
92
|
+
| Provider | Endpoint |
|
|
93
|
+
|---|---|
|
|
94
|
+
| GLM (智谱AI) | `api.z.ai` |
|
|
95
|
+
| MiniMax | `api.minimax.io` |
|
|
96
|
+
| DeepSeek | `api.deepseek.com` |
|
|
172
97
|
|
|
173
|
-
|
|
98
|
+
Templates write `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL`, and related env vars to `~/.claude-<name>/settings.json`. Edit that file to customize.
|
|
174
99
|
|
|
175
|
-
|
|
100
|
+
## How it works
|
|
176
101
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
### Usage
|
|
180
|
-
|
|
181
|
-
```bash
|
|
182
|
-
# CLI mode
|
|
183
|
-
claude-multi add glm --provider glm --api-key "your-api-key"
|
|
102
|
+
Each instance gets a config dir at `~/.claude-<name>/` and a wrapper script at `~/.local/bin/claude-<name>`. The wrapper sets `CLAUDE_CONFIG_DIR` before launching the unmodified `claude` binary — no forking, no patching.
|
|
184
103
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
104
|
+
```js
|
|
105
|
+
#!/usr/bin/env bun
|
|
106
|
+
process.env.CLAUDE_CONFIG_DIR = "/Users/you/.claude-glm"
|
|
107
|
+
spawn("claude", process.argv.slice(2), { stdio: "inherit", env: process.env })
|
|
188
108
|
```
|
|
189
109
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
## Requirements
|
|
193
|
-
|
|
194
|
-
- Node.js >= 18
|
|
195
|
-
- `@anthropic-ai/claude-code` installed globally
|
|
196
|
-
|
|
197
|
-
## Platform Support
|
|
198
|
-
|
|
199
|
-
**claude-multi** supports all major operating systems:
|
|
200
|
-
|
|
201
|
-
- ✅ **Linux**: Fully supported
|
|
202
|
-
- ✅ **macOS**: Fully supported
|
|
203
|
-
- ✅ **Windows**: Fully supported
|
|
204
|
-
|
|
205
|
-
### Platform-Specific Notes
|
|
206
|
-
|
|
207
|
-
**Windows:**
|
|
208
|
-
- Wrapper scripts are created as `.cmd` batch files
|
|
209
|
-
- Binary path defaults to `%APPDATA%\npm`
|
|
210
|
-
- Example: `claude-glm.cmd` instead of `claude-glm`
|
|
211
|
-
|
|
212
|
-
**Unix/Linux/macOS:**
|
|
213
|
-
- Wrapper scripts are Node.js scripts with shebangs
|
|
214
|
-
- Binary path defaults to `~/.local/bin`
|
|
215
|
-
- Scripts are automatically marked as executable
|
|
110
|
+
Instance metadata lives in `~/.claude-multi/config.json`. With auto-sync on, `plugins/` and `skills/` are symlinked from `~/.claude/`, so installing a plugin once makes it available everywhere.
|
|
216
111
|
|
|
217
112
|
## License
|
|
218
113
|
|
|
219
114
|
MIT
|
|
220
|
-
|
|
221
|
-
## Credits
|
|
222
|
-
|
|
223
|
-
Built with [Bun](https://bun.sh) and [Commander.js](https://github.com/tj/commander.js)
|
|
224
|
-
|
|
225
|
-
Wrapper for [@anthropic-ai/claude-code](https://www.npmjs.com/package/@anthropic-ai/claude-code)
|
|
226
|
-
|
|
227
|
-
## Support
|
|
228
|
-
|
|
229
|
-
For technical documentation, development setup, and contribution guidelines, see [development.md](development.md).
|
|
230
|
-
|
|
231
|
-
For issues, questions, or feature requests, please visit the project's issue tracker.
|
package/astro.config.mjs
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { defineConfig } from 'astro/config';
|
|
2
|
+
import starlight from '@astrojs/starlight';
|
|
3
|
+
import tailwindcss from '@tailwindcss/vite';
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
site: 'https://claudemutli.hmziq.xyz',
|
|
7
|
+
srcDir: './src/web',
|
|
8
|
+
vite: {
|
|
9
|
+
plugins: [tailwindcss()],
|
|
10
|
+
build: {
|
|
11
|
+
rollupOptions: {
|
|
12
|
+
output: {
|
|
13
|
+
manualChunks(id) {
|
|
14
|
+
if (id.includes('node_modules/three')) return 'three';
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
integrations: [
|
|
21
|
+
starlight({
|
|
22
|
+
title: 'claude-multi',
|
|
23
|
+
description:
|
|
24
|
+
'Manage multiple Claude Code instances with different AI providers and configurations',
|
|
25
|
+
social: [
|
|
26
|
+
{
|
|
27
|
+
icon: 'github',
|
|
28
|
+
label: 'GitHub',
|
|
29
|
+
href: 'https://github.com/hmziqrs/claude-multi',
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
editLink: {
|
|
33
|
+
baseUrl: 'https://github.com/hmziqrs/claude-multi/edit/main/',
|
|
34
|
+
},
|
|
35
|
+
sidebar: [
|
|
36
|
+
{
|
|
37
|
+
label: 'Getting Started',
|
|
38
|
+
items: [{ slug: 'docs/getting-started' }],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: 'Guides',
|
|
42
|
+
items: [
|
|
43
|
+
{ slug: 'docs/usage' },
|
|
44
|
+
{ slug: 'docs/providers' },
|
|
45
|
+
{ slug: 'docs/how-it-works' },
|
|
46
|
+
{ slug: 'docs/plugins-mcp' },
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
label: 'Reference',
|
|
51
|
+
items: [
|
|
52
|
+
{ slug: 'docs/configuration' },
|
|
53
|
+
{ slug: 'docs/changelog' },
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
label: 'Development',
|
|
58
|
+
collapsed: true,
|
|
59
|
+
items: [
|
|
60
|
+
{ slug: 'docs/development/subagent-model-plan' },
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
customCss: ['/src/web/styles/starlight.css'],
|
|
65
|
+
lastUpdated: true,
|
|
66
|
+
favicon: '/favicon.svg',
|
|
67
|
+
}),
|
|
68
|
+
],
|
|
69
|
+
});
|