Skip to main content
ClaudeWave
Skill1.3k repo starsupdated 7d ago

shogun-model-switch

The shogun-model-switch skill enables live switching of Claude agent configurations including model type, API provider, and extended thinking settings without stopping the system. Use it to change running agents between Claude models (Sonnet, Opus, Haiku), switch to alternative providers like Codex or Spark, toggle extended thinking on or off, or batch-update multiple agents simultaneously, with all changes persisted to the settings configuration file.

Install in Claude Code
Copy
git clone --depth 1 https://github.com/yohey-w/multi-agent-shogun /tmp/shogun-model-switch && cp -r /tmp/shogun-model-switch/skills/shogun-model-switch ~/.claude/skills/shogun-model-switch
Then start a new Claude Code session; the skill loads automatically.

SKILL.md

# /model-switch - Agent CLI Live Switcher

## Overview

稼働中のエージェントのCLI種別・モデル・Thinking設定をライブで切り替える。
`settings.yaml` → `build_cli_command()` → `/exit` → 新CLI起動 → pane metadata更新 を一貫実行。

## When to Use

- 「ashigaru3をOpusにして」「足軽全員Sonnetに切替」
- 「モデル切替」「モデル変えて」「CLI変えて」
- 「Thinking切って」「Thinking有効にして」
- 「CodexからClaudeに戻して」「Sparkにして」
- タスクの性質に応じてモデルを切り替えたいとき

## Architecture

```
settings.yaml (source of truth)
    │
    ├─ cli.agents.{id}.type      → claude | codex | copilot | kimi
    ├─ cli.agents.{id}.model     → claude-sonnet-4-6 | claude-opus-4-6 | ...
    └─ cli.agents.{id}.thinking  → true | false
         │
         ├── build_cli_command()
         │   └─ thinking: false → "MAX_THINKING_TOKENS=0 claude --model ..."
         │   └─ thinking: true  → "claude --model ..."
         │
         └── get_model_display_name()
             └─ thinking: true  → "Sonnet+T" / "Opus+T"
             └─ thinking: false → "Sonnet" / "Opus"
```

## Display Name Mapping

| model (settings.yaml) | 表示名 | +Thinking |
|---|---|---|
| claude-sonnet-4-6 | Sonnet | Sonnet+T |
| claude-opus-4-6 | Opus | Opus+T |
| claude-haiku-4-5-20251001 | Haiku | Haiku+T |
| gpt-5.3-codex | Codex | — |
| gpt-5.3-codex-spark | Spark | — |

## Instructions

### 単体切替

```bash
# settings.yaml の現在値で再起動(CLIリセットしたいだけのとき)
bash scripts/switch_cli.sh ashigaru3

# モデル変更(settings.yaml も自動更新)
bash scripts/switch_cli.sh ashigaru3 --model claude-opus-4-6

# CLI種別ごと変更(Codex → Claude)
bash scripts/switch_cli.sh ashigaru3 --type claude --model claude-sonnet-4-6

# Claude → Codex Spark
bash scripts/switch_cli.sh ashigaru5 --type codex --model gpt-5.3-codex-spark
```

### 一括切替

```bash
# 全足軽をSonnetに
for i in $(seq 1 7); do
    bash scripts/switch_cli.sh ashigaru$i --type claude --model claude-sonnet-4-6
done

# 全足軽をSparkに
for i in $(seq 1 7); do
    bash scripts/switch_cli.sh ashigaru$i --type codex --model gpt-5.3-codex-spark
done

# 全エージェント(家老・軍師含む)を再起動
for agent in karo ashigaru1 ashigaru2 ashigaru3 ashigaru4 ashigaru5 ashigaru6 ashigaru7 gunshi; do
    bash scripts/switch_cli.sh "$agent"
done
```

### Thinking 制御

settings.yaml の `thinking` フィールドを編集してから switch_cli.sh を実行:

```yaml
# config/settings.yaml
cli:
  agents:
    ashigaru3:
      type: claude
      model: claude-opus-4-6
      thinking: false  # ← MAX_THINKING_TOKENS=0 で起動
```

```bash
# settings.yaml 編集後に再起動
bash scripts/switch_cli.sh ashigaru3
```

Thinking ON/OFF の切替手順:
1. `config/settings.yaml` の対象エージェントの `thinking:` を `true` / `false` に変更
2. `bash scripts/switch_cli.sh <agent_id>` で再起動
3. pane border に `+T` の有無が反映される

### inbox 経由(家老からの切替)

```bash
# 家老が足軽のCLIを切り替える場合
bash scripts/inbox_write.sh ashigaru3 "--type claude --model claude-opus-4-6" cli_restart karo
```

inbox_watcher が `cli_restart` type を検知し、switch_cli.sh を自動実行する。

## What switch_cli.sh Does (internal)

1. **settings.yaml 更新**(`--type`/`--model` 指定時のみ)
2. **現在のCLI種別を検出**(tmux pane metadata `@agent_cli`)
3. **CLI別の exit コマンドを送信**
   - Claude: `/exit` + Enter
   - Codex: Escape → Ctrl-C → `/exit` + Enter
   - Copilot/Kimi: Ctrl-C → `/exit` + Enter
4. **シェルプロンプト復帰を待機**(最大15秒、1秒ごとにキャプチャ)
5. **`build_cli_command()` で新コマンド構築**
   - thinking: false → `MAX_THINKING_TOKENS=0` prefix 付与
6. **tmux send-keys で新CLI起動**(テキストとEnterを分離送信)
7. **pane metadata 更新**: `@agent_cli`, `@model_name`

## Files

| ファイル | 役割 |
|---|---|
| `scripts/switch_cli.sh` | メインスクリプト |
| `lib/cli_adapter.sh` | `build_cli_command()`, `get_model_display_name()` |
| `config/settings.yaml` | エージェント設定(type, model, thinking) |
| `scripts/inbox_watcher.sh` | `cli_restart` type ハンドリング |
| `logs/switch_cli.log` | 実行ログ |

## Constraints

- **将軍(shogun)ペインには送信しない**: switch_cli.sh は multiagent セッションのペインのみ対象
- **実行中のエージェントに注意**: タスク実行中に切り替えるとデータ消失の可能性あり。idle確認してから実行
- **Codex → Claude 切替時**: Codex の /exit が不安定な場合がある。Escape + Ctrl-C で確実に終了させる
- **inbox_watcher との連携**: cli_restart 後、inbox_watcher の CLI_TYPE 変数も自動更新される