---
name: yohey-w/shogun-model-switch
source: https://app.decimal.ai/s/yohey-w-shogun-model-switch@1/SKILL.md
source_sha256: 1cdc87b1a8f6
---

# /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 変数も自動更新される