<div align="center">

<img src="assets/icon.png" alt="cc-cast" width="120" />

# cc-cast

**Claude Code Model Switcher**

在终端几秒内完成 Claude Code 自定义模型配置的管理和切换。

[![npm version](https://img.shields.io/npm/v/cc-cast.svg?style=flat-square)](https://www.npmjs.com/package/cc-cast)
[![license](https://img.shields.io/github/license/daylenjeez/cc-cast?style=flat-square)](https://github.com/daylenjeez/cc-cast/blob/main/LICENSE)
[![node](https://img.shields.io/badge/node-%3E%3D18-brightgreen?style=flat-square)](https://nodejs.org)

[English](https://github.com/daylenjeez/cc-cast/blob/main/README.md) | 中文文档

[安装](#-安装) · [快速开始](#-快速开始) · [命令一览](#-命令一览) · [工作原理](#%EF%B8%8F-工作原理)

</div>

---

## ✨ 亮点

- 🔌 **cc-switch Integration** — 直接读取 `cc-switch` 数据库，无需迁移
- 🧙 **Interactive Wizard** — `ccc add` 逐步引导，输入 `<` 可返回上一步
- ⚡ **One-command Switch** — `ccc use OpenRouter` 或 `ccc ls` 方向键选择
- 🛡️ **Safe Switching** — 自动保留 `language`、`permissions` 等个人设置
- 🪶 **轻量** — 没有多余功能，只做模型切换。体积小巧，启动迅速，无后台进程
- 🚀 **Zero Config** — 直接 `ccc init`，跟着提示走，无需阅读文档
- 🌍 **i18n** — `ccc locale set zh/en` 切换界面语言

## 📦 安装

```bash
npm install -g cc-cast
```

## 🚀 快速开始

```bash
ccc init   # 自动检测 cc-switch 或初始化独立模式
ccc add    # 交互式向导添加供应商
```

## 🔌 cc-switch 集成

已经在用 [cc-switch](https://github.com/farion1231/cc-switch)？检测到 cc-switch 数据库时，cc-cast 会直接使用它的配置库，无需迁移：

```bash
$ ccc init
✓ 初始化完成
✓ 检测到 cc-switch，cc-cast 将直接使用 cc-switch 配置库
```

你也可以随时运行 `ccc sync` 将最新的 cc-switch 配置同步到独立模式。

## ➕ 添加配置

### 交互式向导（推荐）

```bash
$ ccc add
供应商名称 (如 OpenRouter): OpenRouter

选择添加方式:
  1) 逐步填写           # 按步骤输入，输入 < 返回上一步
  2) 直接编写 JSON      # 打开 $EDITOR 编辑

ANTHROPIC_BASE_URL: https://openrouter.ai/api/v1
ANTHROPIC_AUTH_TOKEN: sk-or-xxx
ANTHROPIC_MODEL: anthropic/claude-opus-4.6
ANTHROPIC_DEFAULT_OPUS_MODEL (可选):
ANTHROPIC_DEFAULT_SONNET_MODEL (可选):
ANTHROPIC_DEFAULT_HAIKU_MODEL (可选):

✓ 已保存配置 "OpenRouter"
是否立即切换到此配置？(Y/n)
```

### 直接编辑 JSON

<details>
<summary>独立模式：<code>~/.cc-cast/config.json</code></summary>

```json
{
  "profiles": {
    "OpenRouter": {
      "env": {
        "ANTHROPIC_BASE_URL": "https://openrouter.ai/api/v1",
        "ANTHROPIC_AUTH_TOKEN": "sk-or-...",
        "ANTHROPIC_MODEL": "anthropic/claude-opus-4.6"
      }
    }
  }
}
```
</details>

别名存储在 `~/.cc-cast/rc.json` 中：

```json
{
  "aliases": {
    "or": "OpenRouter"
  }
}
```

## 📖 命令一览

### 核心命令

| 命令 | 缩写 | 说明 |
|---|---|---|
| `ccc init` | | 初始化，自动检测 cc-switch |
| `ccc list` | `ls` | 交互式列表 & 切换 |
| `ccc use <name>` | | 按名称切换 |
| `ccc add` | `new` | 交互式添加向导 |
| `ccc save <name>` | | 将当前设置保存为方案 |
| `ccc show [name]` | | 查看配置详情（无名称时输出全部 JSON） |
| `ccc modify [name]` | `edit` | 修改已有配置 |
| `ccc remove [name]` | `rm` | 交互式或指定名称删除 |
| `ccc current` | | 显示当前激活配置 |
| `ccc sync` | | 从 cc-switch 同步配置到本地 |
| `ccc import [file]` | | 从 JSON 导入配置（无文件时从 stdin 读取） |
| `ccc clear` | | 清理数据文件 |

### 别名管理

| 命令 | 说明 |
|---|---|
| `ccc alias set <short> <name>` | 创建别名，如 `ccc alias set or OpenRouter` |
| `ccc alias rm <short>` | 删除别名 |
| `ccc alias list` / `ls` | 列出所有别名 |

```bash
ccc alias set or OpenRouter
ccc use or  # 等同于: cc-cast use OpenRouter
```

### 语言设置

| 命令 | 说明 |
|---|---|
| `ccc locale` / `ls` | 列出并切换语言 |
| `ccc locale set <lang>` | 设置语言（`zh` / `en`） |

### 使用示例

```bash
# 切换供应商
$ ccc use OpenRouter
✓ 已切换到 OpenRouter
  模型: anthropic/claude-opus-4.6
  重启 Claude Code 生效

# 查看当前配置
$ ccc current
当前配置: OpenRouter
  ANTHROPIC_BASE_URL: https://openrouter.ai/api/v1
  ANTHROPIC_MODEL: anthropic/claude-opus-4.6
  ANTHROPIC_AUTH_TOKEN: sk-or-v1...a3f2

# 将当前 settings.json 保存为新方案
$ ccc save my-backup
✓ 已保存当前配置为 "my-backup"
```

## ⚙️ 工作原理

Claude Code 启动时读取 `~/.claude/settings.json`，`env` 字段控制 API 供应商和模型：

| 变量 | 说明 |
|---|---|
| `ANTHROPIC_BASE_URL` | API 端点地址 |
| `ANTHROPIC_AUTH_TOKEN` | 认证令牌 |
| `ANTHROPIC_MODEL` | 默认模型（可选） |
| `ANTHROPIC_DEFAULT_OPUS_MODEL` | 在 Claude Code 中通过 `/model` 选择 Opus 时使用的模型 |
| `ANTHROPIC_DEFAULT_SONNET_MODEL` | 选择 Sonnet 时使用的模型 |
| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | 选择 Haiku 时使用的模型 |

`ccc use` 将选中配置写入 `settings.json`，同时保留 `language`、`permissions` 等个人设置。重启 Claude Code 后生效。

## 🗑️ 卸载

卸载 `cc-cast` 只会删除 CLI 程序本身，相关的数据文件仍然保留。

你可以先运行 `ccc clear` 自动清理数据文件，也可以手动删除：

- `~/.cc-cast/rc.json` — 别名和语言设置
- `~/.cc-cast/config.json` — 配置方案
- `~/.claude/settings.json` — 可能仍包含 cc-cast 写入的 `env` 配置

然后移除 CLI：

```bash
npm uninstall -g cc-cast
```

## 📄 License

[MIT](./LICENSE)
