npm package: @hcg1023/claude-env-manager
Description: Claude Environment Manager - Manage and switch Claude Code configurations
Latest version: 1.0.14

# CEM (Claude Version Manager)

CEM 是一个命令行工具，用于管理和快速切换 Claude Code 的多个配置（baseURL 和 TOKEN）。

## 特性

- 🚀 快速切换多个 Claude Code 配置
- 🎯 直接修改 Claude Code 的 settings.json，无需手动 source
- 📦 支持从 JSON 批量导入配置，方便迁移和备份
- 🔐 安全的配置存储（文件权限 600）
- ⚡ 立即生效，对新会话有效
- 🎨 友好的交互式界面和彩色输出

## 安装

```bash
# 克隆仓库
git clone <your-repo-url>
cd cem

# 安装依赖
npm install

# 构建
npm run build

# 全局链接
npm link
```

## 使用方法

### 添加配置

#### 方式一：交互式添加

```bash
cem add <alias>
```

交互式添加新配置，需要输入：
- Base URL：Claude API 的基础 URL
- Token：认证令牌

示例：
```bash
$ cem add work
? Enter baseURL: https://api.claude.ai
? Enter TOKEN: ********
✓ Configuration 'work' added successfully
? Switch to this configuration now? Yes
```

#### 方式二：从 JSON 导入

```bash
cem import <json> --alias <alias>
```

从 JSON 格式的配置导入。支持灵活的字段名：
- `baseURL` 或 `ANTHROPIC_BASE_URL`
- `token` 或 `ANTHROPIC_AUTH_TOKEN`

示例：
```bash
# 使用 ANTHROPIC 字段名
cem import '{"ANTHROPIC_BASE_URL":"https://api.anthropic.com","ANTHROPIC_AUTH_TOKEN":"sk-ant-xxx"}' --alias prod

# 包含自定义变量
cem import '{
  "ANTHROPIC_BASE_URL": "https://api.anthropic.com",
  "ANTHROPIC_AUTH_TOKEN": "sk-ant-xxx",
  "ANTHROPIC_VERSION": "2023-06-01",
  "DEBUG": "true"
}' --alias dev

# 交互式模式（不提供 JSON 参数）
cem import
```

### 列出所有配置

```bash
cem ls
# 或
cem list
```

以表格形式显示所有配置：
```
┌──────────┬───────────────────────────┬─────────┐
│ Alias    │ Base URL                  │ Current │
├──────────┼───────────────────────────┼─────────┤
│ default  │ https://api.claude.ai     │ ✓       │
│ work     │ https://work.claude.ai    │         │
└──────────┴───────────────────────────┴─────────┘
```

### 查看配置详情

```bash
cem show <alias>
```

示例：
```bash
$ cem show work
Configuration: work
──────────────────────────────────────────────────
  Base URL: https://work.claude.ai
  Token: sk-xxx...******
  Status: Active
```

### 查看当前配置

```bash
cem current
```

显示当前激活的配置信息。

### 切换配置

```bash
cem use <alias>
```

切换到指定的配置。CEM 会直接修改 Claude Code 的 settings.json 文件。

示例：
```bash
$ cem use work
✓ Switched to configuration 'work'
✓ Claude settings: /Users/username/.claude/settings.json

  Configuration will take effect immediately for new Claude Code sessions
```

### 删除配置

```bash
cem rm <alias>
# 或
cem remove <alias>
cem delete <alias>
cem del <alias>
```

删除指定配置（需确认）。注意：不能删除当前正在使用的配置。

### 重命名配置

```bash
cem rename <oldAlias> <newAlias>
```

重命名已存在的配置别名。

示例：
```bash
# 重命名配置
$ cem rename old-name new-name
? 确定要将配置 'old-name' 重命名为 'new-name' 吗？ Yes
✓ 配置 'old-name' 已成功重命名为 'new-name'

# 重命名当前配置会自动更新当前配置引用
$ cem rename current-config renamed-config
✓ 配置 'current-config' 已成功重命名为 'renamed-config'

当前配置已更新为 'renamed-config'
```

## 工作原理

CEM 使用直接修改 Claude Code settings.json 的方案，具有以下特点：

1. **直接修改配置**：CEM 直接读取和修改 Claude Code 的 settings.json 文件
2. **即时生效**：切换配置后立即对新打开的 Claude Code 会话生效
3. **持久化存储**：所有配置信息存储在 `~/.cem/config.json` 中

### 文件结构

```
~/.cem/
└── config.json       # CEM 配置管理文件

~/.claude/
└── settings.json     # Claude Code 配置文件（由 CEM 自动管理）
```

### 配置文件格式

`~/.cem/config.json`:
```json
{
  "version": "1.0.0",
  "current": "work",
  "configs": {
    "default": {
      "baseURL": "https://api.claude.ai",
      "token": "sk-xxx..."
    },
    "work": {
      "baseURL": "https://work.claude.ai",
      "token": "sk-yyy..."
    }
  }
}
```

当切换配置时，CEM 会将对应的 `baseURL` 和 `token` 写入到 `~/.claude/settings.json` 文件中，格式如下：

`~/.claude/settings.json`:
```json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://work.claude.ai",
    "ANTHROPIC_AUTH_TOKEN": "sk-yyy..."
  }
}
```

## 命令参考

| 命令 | 别名 | 说明 |
|------|------|------|
| `cem add <alias>` | - | 添加新配置（交互式） |
| `cem import <json>` | - | 从 JSON 导入配置 |
| `cem ls` | `list` | 列出所有配置 |
| `cem show <alias>` | - | 显示配置详情 |
| `cem current` | - | 显示当前配置 |
| `cem use <alias>` | - | 切换配置 |
| `cem rename <old> <new>` | - | 重命名配置别名 |
| `cem rm <alias>` | `remove`, `delete`, `del` | 删除配置 |
| `cem edit <alias>` | - | 编辑配置 |
| `cem local` | - | 设置或显示语言 |
| `cem --help` | `-h` | 显示帮助 |
| `cem --version` | `-V` | 显示版本 |

## 常见问题

### Q: 如何批量导入多个配置？

A: 使用 `cem import` 命令从 JSON 格式导入配置。适合从其他工具迁移或备份恢复。

示例：
```bash
cem import '{"ANTHROPIC_BASE_URL":"https://api.anthropic.com","ANTHROPIC_AUTH_TOKEN":"sk-ant-xxx"}' --alias prod
```

### Q: import 命令支持哪些 JSON 字段？

A: 支持灵活的字段名：
- URL 字段：`baseURL` 或 `ANTHROPIC_BASE_URL`
- Token 字段：`token` 或 `ANTHROPIC_AUTH_TOKEN`
- 还可以添加任意自定义变量（如 `ANTHROPIC_VERSION` 等）

### Q: 切换配置后什么时候生效？

A: 切换配置后立即对新打开的 Claude Code 会话生效。当前正在运行的会话不受影响。

### Q: 配置文件存储在哪里？

A: CEM 配置存储在 `~/.cem/config.json`，Claude Code 配置在 `~/.claude/settings.json`。

### Q: 如何手动编辑配置？

A: 可以直接编辑 `~/.cem/config.json` 文件，但建议使用 `cem` 命令进行管理。

### Q: 如何重命名配置别名？

A: 使用 `cem rename` 命令：
```bash
cem rename old-alias new-alias
```
如果重命名的是当前活跃的配置，别名更改后会自动更新当前配置引用。

### Q: 不同终端窗口可以使用不同配置吗？

A: 可以！每个 Claude Code 实例会读取当前的 settings.json 文件，因此在不同终端窗口打开的 Claude Code 可以使用不同配置。

## 开发

```bash
# 安装依赖
npm install

# 开发模式（监听文件变化）
npm run dev

# 构建
npm run build

# 代码格式化
npm run format

# 代码检查
npm run lint
```

## 许可证

MIT