claude-multi 0.13.1 → 0.13.2

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/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ 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.13.2] - 2026-11-03
9
+
10
+ ### Changed
11
+ - **Provider templates now map the Fable alias.** Claude Code resolves `fable` to `claude-fable-5-1` unless `ANTHROPIC_DEFAULT_FABLE_MODEL` is set, and third-party Anthropic-compatible endpoints reject that ID. Every template maps the alias to its primary model.
12
+ - **Effort now reaches custom model IDs.** GLM, MiniMax, DeepSeek, and Kimi set `CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1` alongside `CLAUDE_CODE_EFFORT_LEVEL` so Claude Code sends the effort parameter for model names it does not recognize.
13
+ - **Provider documentation and examples now include the Fable slot.** The provider pages, docs tables, website examples, `llms.txt`, and the monthly review checklist match the shipped templates.
14
+
15
+ ### Fixed
16
+ - The monthly model-review workflow now links to the live Xiaomi MiMo Claude Code page and includes the Fable and effort checks.
17
+ - Environment-variable documentation now matches current Claude Code behavior for `API_TIMEOUT_MS`, `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`, `CLAUDE_CODE_MAX_CONTEXT_TOKENS`, `CLAUDE_CODE_SUBAGENT_MODEL`, and `ANTHROPIC_AUTH_TOKEN`. DeepSeek and Kimi notes no longer claim their fixed thinking budgets are provider-side limits.
18
+ - README now separates `doctor check` from `doctor fix` and shows the POSIX shell wrapper that claude-multi actually generates.
19
+ - The Xiaomi MiMo provider page links to the live `platform.xiaomimimo.com` signup page, and the MiniMax, GLM, Kimi, and DeepSeek source links use their canonical URLs.
20
+
8
21
  ## [0.13.1] - 2026-10-31
9
22
 
10
23
  ### Changed
package/README.md CHANGED
@@ -67,7 +67,7 @@ That's the only command to remember. Everything else happens in the terminal UI:
67
67
  Two things worth knowing:
68
68
 
69
69
  - If the menu shows a `!` health hint, press `!` to see what's wrong and fix it.
70
- - After upgrading claude-multi, run `claude-multi doctor check` to apply provider template updates. It backs up `settings.json` first and keeps any values you changed yourself.
70
+ - After upgrading claude-multi, run `claude-multi doctor check` to see pending provider template updates, then `claude-multi doctor fix` to apply them. `doctor fix` backs up `settings.json` first and keeps any values you changed yourself.
71
71
 
72
72
  Full documentation: **https://claude-multi.hmziq.xyz**
73
73
 
@@ -86,7 +86,7 @@ Full documentation: **https://claude-multi.hmziq.xyz**
86
86
  | Alibaba Qwen | `dashscope-intl.aliyuncs.com` | `qwen` |
87
87
  | Alibaba Qwen Coding Plan | `coding-intl.dashscope.aliyuncs.com` | `qwen-coding` |
88
88
 
89
- Templates write `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL`, and related env vars into `~/.claude-<name>/settings.json`. Provider sync keeps values you changed yourself and restores model slots to the current template.
89
+ Templates write `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL`, and related env vars into `~/.claude-<name>/settings.json`. Every template maps `ANTHROPIC_DEFAULT_FABLE_MODEL` to its primary model, and the templates that set an effort level also set `CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1`. Provider sync keeps values you changed yourself and restores model slots to the current template.
90
90
 
91
91
  ---
92
92
 
@@ -94,10 +94,10 @@ Templates write `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL`, and related env vars in
94
94
 
95
95
  Each instance is a config dir at `~/.claude-<name>/` plus a wrapper script at `~/.local/bin/claude-<name>` that sets `CLAUDE_CONFIG_DIR` and runs the unmodified `claude` binary. No fork, no patch. The instance registry lives in `~/.claude-multi/config.json`.
96
96
 
97
- ```js
98
- #!/usr/bin/env bun
99
- process.env.CLAUDE_CONFIG_DIR = "/Users/you/.claude-glm"
100
- spawn("claude", process.argv.slice(2), { stdio: "inherit", env: process.env })
97
+ ```sh
98
+ #!/bin/sh
99
+ export CLAUDE_CONFIG_DIR="/Users/you/.claude-glm"
100
+ exec "/Users/you/.local/bin/claude" "$@"
101
101
  ```
102
102
 
103
103
  Auto-sync symlinks `plugins/` and `skills/` back to `~/.claude/`, so a plugin you install once shows up in every instance that opted in. Skip it (or toggle it later in the menu) if you want an instance fully independent.
package/build/cli.js CHANGED
@@ -7465,11 +7465,12 @@ function syncProviderEnvToSettings(configDir, options = {}) {
7465
7465
  }
7466
7466
  function needsProviderTemplateSync(configDir, options = {}) {
7467
7467
  try {
7468
- return syncProviderEnvToSettings(configDir, {
7468
+ const result = syncProviderEnvToSettings(configDir, {
7469
7469
  ...options,
7470
7470
  tunablePolicy: options.tunablePolicy ?? "overwrite-legacy-defaults",
7471
7471
  dryRun: true
7472
- }).status === "synced";
7472
+ });
7473
+ return result.status === "synced" || result.region !== null && result.providerName !== null && result.region !== options.providerRegion;
7473
7474
  } catch {
7474
7475
  return false;
7475
7476
  }
@@ -7491,10 +7492,12 @@ var init_templates = __esm(() => {
7491
7492
  ANTHROPIC_MODEL: "glm-5.3[1m]",
7492
7493
  ANTHROPIC_DEFAULT_OPUS_MODEL: "glm-5.3[1m]",
7493
7494
  ANTHROPIC_DEFAULT_SONNET_MODEL: "glm-5.3[1m]",
7495
+ ANTHROPIC_DEFAULT_FABLE_MODEL: "glm-5.3[1m]",
7494
7496
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "glm-5.3-flash[1m]",
7495
7497
  CLAUDE_CODE_AUTO_COMPACT_WINDOW: "1000000",
7496
7498
  CLAUDE_CODE_MAX_OUTPUT_TOKENS: "128000",
7497
7499
  CLAUDE_CODE_EFFORT_LEVEL: "high",
7500
+ CLAUDE_CODE_ALWAYS_ENABLE_EFFORT: "1",
7498
7501
  MAX_THINKING_TOKENS: "8000",
7499
7502
  CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1"
7500
7503
  },
@@ -7515,10 +7518,12 @@ var init_templates = __esm(() => {
7515
7518
  ANTHROPIC_MODEL: "MiniMax-M3.1-Flash[1m]",
7516
7519
  ANTHROPIC_DEFAULT_OPUS_MODEL: "MiniMax-M3.1-Flash[1m]",
7517
7520
  ANTHROPIC_DEFAULT_SONNET_MODEL: "MiniMax-M3.1-Flash[1m]",
7521
+ ANTHROPIC_DEFAULT_FABLE_MODEL: "MiniMax-M3.1-Flash[1m]",
7518
7522
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "MiniMax-M3.1-Flash[1m]",
7519
7523
  CLAUDE_CODE_SUBAGENT_MODEL: "MiniMax-M3.1-Flash[1m]",
7520
7524
  CLAUDE_CODE_AUTO_COMPACT_WINDOW: "524288",
7521
7525
  CLAUDE_CODE_EFFORT_LEVEL: "max",
7526
+ CLAUDE_CODE_ALWAYS_ENABLE_EFFORT: "1",
7522
7527
  CLAUDE_CODE_MAX_OUTPUT_TOKENS: "128000"
7523
7528
  },
7524
7529
  includeCoAuthoredBy: false,
@@ -7537,11 +7542,13 @@ var init_templates = __esm(() => {
7537
7542
  ANTHROPIC_MODEL: "deepseek-flash[1m]",
7538
7543
  ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek-flash[1m]",
7539
7544
  ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek-flash[1m]",
7545
+ ANTHROPIC_DEFAULT_FABLE_MODEL: "deepseek-flash[1m]",
7540
7546
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek-flash",
7541
7547
  CLAUDE_CODE_SUBAGENT_MODEL: "deepseek-flash",
7542
7548
  CLAUDE_CODE_AUTO_COMPACT_WINDOW: "786432",
7543
7549
  CLAUDE_CODE_MAX_OUTPUT_TOKENS: "128000",
7544
7550
  CLAUDE_CODE_EFFORT_LEVEL: "max",
7551
+ CLAUDE_CODE_ALWAYS_ENABLE_EFFORT: "1",
7545
7552
  MAX_THINKING_TOKENS: "32000"
7546
7553
  },
7547
7554
  includeCoAuthoredBy: false,
@@ -7551,7 +7558,7 @@ var init_templates = __esm(() => {
7551
7558
  mimo: {
7552
7559
  name: "mimo",
7553
7560
  displayName: "Xiaomi MiMo",
7554
- description: "MiMo-V2.6-Pro and MiMo-V2.6-Flash via xiaomimimo.com, pay-per-token API",
7561
+ description: "MiMo-V2.6-Pro and MiMo-V2.6-Flash via platform.xiaomimimo.com, pay-per-token API",
7555
7562
  settings: {
7556
7563
  env: {
7557
7564
  ANTHROPIC_AUTH_TOKEN: "",
@@ -7560,6 +7567,7 @@ var init_templates = __esm(() => {
7560
7567
  ANTHROPIC_MODEL: "mimo-v2.6-pro[1m]",
7561
7568
  ANTHROPIC_DEFAULT_OPUS_MODEL: "mimo-v2.6-pro[1m]",
7562
7569
  ANTHROPIC_DEFAULT_SONNET_MODEL: "mimo-v2.6-pro[1m]",
7570
+ ANTHROPIC_DEFAULT_FABLE_MODEL: "mimo-v2.6-pro[1m]",
7563
7571
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "mimo-v2.6-flash[1m]",
7564
7572
  CLAUDE_CODE_SUBAGENT_MODEL: "mimo-v2.6-flash[1m]",
7565
7573
  CLAUDE_CODE_MAX_OUTPUT_TOKENS: "128000"
@@ -7580,6 +7588,7 @@ var init_templates = __esm(() => {
7580
7588
  ANTHROPIC_MODEL: "mimo-v2.6-pro[1m]",
7581
7589
  ANTHROPIC_DEFAULT_OPUS_MODEL: "mimo-v2.6-pro[1m]",
7582
7590
  ANTHROPIC_DEFAULT_SONNET_MODEL: "mimo-v2.6-pro[1m]",
7591
+ ANTHROPIC_DEFAULT_FABLE_MODEL: "mimo-v2.6-pro[1m]",
7583
7592
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "mimo-v2.6-flash[1m]",
7584
7593
  CLAUDE_CODE_SUBAGENT_MODEL: "mimo-v2.6-flash[1m]",
7585
7594
  CLAUDE_CODE_MAX_OUTPUT_TOKENS: "128000"
@@ -7600,11 +7609,13 @@ var init_templates = __esm(() => {
7600
7609
  ANTHROPIC_MODEL: "kimi-k3.1-pro[1m]",
7601
7610
  ANTHROPIC_DEFAULT_OPUS_MODEL: "kimi-k3.1-pro[1m]",
7602
7611
  ANTHROPIC_DEFAULT_SONNET_MODEL: "kimi-k3.1-pro[1m]",
7612
+ ANTHROPIC_DEFAULT_FABLE_MODEL: "kimi-k3.1-pro[1m]",
7603
7613
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "kimi-k3.1-pro[1m]",
7604
7614
  CLAUDE_CODE_SUBAGENT_MODEL: "kimi-k3.1-pro[1m]",
7605
7615
  CLAUDE_CODE_AUTO_COMPACT_WINDOW: "1000000",
7606
7616
  CLAUDE_CODE_MAX_OUTPUT_TOKENS: "128000",
7607
7617
  CLAUDE_CODE_EFFORT_LEVEL: "max",
7618
+ CLAUDE_CODE_ALWAYS_ENABLE_EFFORT: "1",
7608
7619
  MAX_THINKING_TOKENS: "16000"
7609
7620
  },
7610
7621
  includeCoAuthoredBy: false,
@@ -7623,6 +7634,7 @@ var init_templates = __esm(() => {
7623
7634
  ANTHROPIC_MODEL: "qwen3.8-max",
7624
7635
  ANTHROPIC_DEFAULT_OPUS_MODEL: "qwen3.8-max",
7625
7636
  ANTHROPIC_DEFAULT_SONNET_MODEL: "qwen3.7-plus",
7637
+ ANTHROPIC_DEFAULT_FABLE_MODEL: "qwen3.8-max",
7626
7638
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "qwen3.8-flash",
7627
7639
  CLAUDE_CODE_SUBAGENT_MODEL: "qwen3.8-flash",
7628
7640
  CLAUDE_CODE_MAX_CONTEXT_TOKENS: "983616",
@@ -7646,6 +7658,7 @@ var init_templates = __esm(() => {
7646
7658
  ANTHROPIC_MODEL: "qwen3.7-plus",
7647
7659
  ANTHROPIC_DEFAULT_OPUS_MODEL: "qwen3.7-plus",
7648
7660
  ANTHROPIC_DEFAULT_SONNET_MODEL: "qwen3.7-plus",
7661
+ ANTHROPIC_DEFAULT_FABLE_MODEL: "qwen3.7-plus",
7649
7662
  ANTHROPIC_DEFAULT_HAIKU_MODEL: "qwen3.7-plus",
7650
7663
  CLAUDE_CODE_SUBAGENT_MODEL: "qwen3.7-plus",
7651
7664
  CLAUDE_CODE_MAX_CONTEXT_TOKENS: "983616",
@@ -10825,7 +10838,7 @@ async function syncProviderTemplateForInstance(instance) {
10825
10838
  inst.providerTemplate = result.providerName;
10826
10839
  needsSave = true;
10827
10840
  }
10828
- if (result.region && !inst.providerRegion) {
10841
+ if (result.region && inst.providerRegion !== result.region) {
10829
10842
  inst.providerRegion = result.region;
10830
10843
  needsSave = true;
10831
10844
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "claude-multi",
3
- "version": "0.13.1",
4
- "description": "Manage multiple Claude Code instances with different aliases and configurations",
3
+ "version": "0.13.2",
4
+ "description": "Run isolated Claude Code instances with separate providers, configs, plugins, MCP servers, and aliases",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "claude-multi": "bin/claude-multi.js"
@@ -23,6 +23,7 @@
23
23
  "docs:build": "astro build",
24
24
  "docs:preview": "astro preview",
25
25
  "docs:typecheck": "astro check",
26
+ "indexnow": "bun run scripts/indexnow.ts",
26
27
  "ci:docs:deploy": "gh workflow run deploy-docs.yml",
27
28
  "ci:publish": "gh workflow run publish.yml -f version=$(node -p \"require('./package.json').version\")",
28
29
  "ci:test-install": "gh workflow run test-install.yml",
@@ -37,9 +38,17 @@
37
38
  "keywords": [
38
39
  "claude",
39
40
  "claude-code",
41
+ "claude-ai",
40
42
  "cli",
41
43
  "multi-instance",
42
- "wrapper"
44
+ "wrapper",
45
+ "provider-templates",
46
+ "deepseek",
47
+ "glm",
48
+ "kimi",
49
+ "minimax",
50
+ "qwen",
51
+ "xiaomi-mimo"
43
52
  ],
44
53
  "author": "hmziqrs",
45
54
  "license": "MIT",
@@ -56,7 +65,7 @@
56
65
  "@astrojs/starlight": "^0.41.9",
57
66
  "@inkjs/ui": "^2.0.0",
58
67
  "@tailwindcss/vite": "^4.3.0",
59
- "@types/node": "^20.0.0",
68
+ "@types/node": "^22.0.0",
60
69
  "@types/prompts": "^2.4.9",
61
70
  "@types/react": "^19.2.14",
62
71
  "@types/semver": "^7.7.1",