ccem 1.8.1 → 2.0.0-beta.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/README.md DELETED
@@ -1,536 +0,0 @@
1
- # Claude Code Env Manager
2
-
3
- 优雅的使用 Claude Code 🍷
4
-
5
- 切换 API 服务商、配置权限模式、查看用量统计、安装 Skills。
6
-
7
- [![npm version](https://img.shields.io/npm/v/ccem.svg)](https://www.npmjs.com/package/ccem)
8
- [![license](https://img.shields.io/npm/l/ccem.svg)](https://github.com/genuifx/claude-code-env-manager/blob/main/LICENSE)
9
-
10
- ![Demo](./index.png)
11
-
12
- ## 这工具干嘛的
13
-
14
- 用 Claude Code 的人可能会遇到几个烦心事:
15
-
16
- - 想用国产模型(GLM、KIMI、DeepSeek、MiniMax)但每次都要手动设置环境变量
17
- - 每次执行命令都要点"允许",烦死了,但又不想用 `--dangerously-skip-permissions`
18
- - 想知道这个月花了多少钱,但 Claude 没有用量统计界面
19
- - 团队想共享 API 配置,但不想把密钥明文传来传去
20
- - 想快速安装官方和社区的 Skills,但手动 clone 太麻烦
21
-
22
- ccem 就是解决这些问题的。
23
-
24
- ## 功能特性
25
-
26
- - 🔄 **环境切换** - 一键切换 API 服务商(官方/GLM/KIMI/DeepSeek/MiniMax)
27
- - 🔐 **权限管理** - 6 种预设权限模式,在安全和便捷之间找平衡
28
- - 📊 **用量统计** - 日历热力图 + 按模型统计 + 费用计算
29
- - 🛠️ **Skill 管理** - 从官方/GitHub/Plugin Marketplace 安装 Skills
30
- - 🌐 **远程配置** - 团队共享 API 配置,加密传输
31
- - ⚡ **性能优化** - 增量缓存、流式解析、后台更新
32
-
33
- ## 安装
34
-
35
- ```bash
36
- npm install -g ccem
37
- # 或
38
- pnpm add -g ccem
39
- # 或直接跑
40
- npx ccem
41
- ```
42
-
43
- ## 快速上手
44
-
45
- ```bash
46
- ccem # 进入交互菜单
47
- ccem add kimi # 添加 KIMI 环境,自动填好 URL 和模型
48
- ccem use kimi # 切换到 KIMI
49
- ccem dev # 用开发模式启动 Claude Code(临时)
50
- ccem --mode # 查看当前权限模式
51
- ```
52
-
53
- ![Demo](./demo.png)
54
-
55
- ---
56
-
57
- ## 环境管理
58
-
59
- ### 交互菜单
60
-
61
- 运行 `ccem` 会看到一个菜单:
62
-
63
- | 选项 | 干嘛用 |
64
- |------|--------|
65
- | Start Claude Code | 启动,如果设了默认权限模式会自动带上 |
66
- | Switch Environment | 切换 API 环境 |
67
- | Permission Mode | 选个权限模式再启动 |
68
- | View Usage | 看用量和花费(带日历热力图) |
69
- | Set Default Mode | 设置默认权限模式 |
70
-
71
- ### 命令
72
-
73
- ```bash
74
- ccem ls # 列出所有环境
75
- ccem use <name> # 切换环境
76
- ccem add <name> # 添加环境
77
- ccem del <name> # 删除环境(official 删不掉)
78
- ccem current # 当前用的哪个环境
79
- ccem env # 输出 export 命令,配合 eval 用
80
- ccem env --json # 输出 JSON
81
- ccem run <command> # 带着环境变量跑命令
82
- ```
83
-
84
- ### 内置预设
85
-
86
- 添加环境时可以选预设,省得自己填 URL:
87
-
88
- | 预设 | Base URL | 主模型 | 快速模型 |
89
- |------|----------|--------|----------|
90
- | GLM(智谱) | `https://open.bigmodel.cn/api/anthropic` | glm-4.6 | glm-4.5-air |
91
- | KIMI(月之暗面) | `https://api.moonshot.cn/anthropic` | kimi-k2-thinking-turbo | kimi-k2-turbo-preview |
92
- | MiniMax | `https://api.minimaxi.com/anthropic` | MiniMax-M2 | MiniMax-M2 |
93
- | DeepSeek | `https://api.deepseek.com/anthropic` | deepseek-chat | deepseek-chat |
94
-
95
- > 💡 **官方环境**:默认使用 `claude-sonnet-4-5-20250929` 和 `claude-haiku-4-5-20251001`
96
-
97
- ### Shell 集成
98
-
99
- `ccem use` 切换环境后,当前终端的环境变量不会自动更新。加这段到 `~/.zshrc` 或 `~/.bashrc`:
100
-
101
- ```bash
102
- ccem() {
103
- command ccem "$@"
104
- local exit_code=$?
105
- if [[ $exit_code -eq 0 ]]; then
106
- if [[ "$1" == "use" || -z "$1" ]]; then
107
- eval "$(command ccem env)"
108
- fi
109
- fi
110
- return $exit_code
111
- }
112
- ```
113
-
114
- 加完跑一下 `source ~/.zshrc`。
115
-
116
- ---
117
-
118
- ## 权限模式
119
-
120
- Claude Code 默认每个操作都要确认。用 `--dangerously-skip-permissions` 又太放飞。ccem 提供 6 种预设,在"什么都要确认"和"什么都不管"之间找个平衡。
121
-
122
- ### 6 种模式
123
-
124
- | 模式 | 图标 | 说明 | 什么时候用 |
125
- |------|------|------|------------|
126
- | yolo | 🔓 | 全部放开 | 自己的项目,完全信任 |
127
- | dev | 💻 | 开发常用权限,屏蔽敏感文件 | 日常开发 |
128
- | readonly | 👀 | 只能读不能改 | 看代码、学习 |
129
- | safe | 🛡️ | 限制网络和修改 | 不熟悉的代码库 |
130
- | ci | 🔧 | CI/CD 用 | 自动化流程 |
131
- | audit | 🔍 | 只读 + 搜索 | 安全审计 |
132
-
133
- ### 临时模式
134
-
135
- 退出就还原,不改配置文件:
136
-
137
- ```bash
138
- ccem yolo # 放飞
139
- ccem dev # 开发
140
- ccem readonly # 只读
141
- ccem safe # 安全
142
- ccem ci # CI
143
- ccem audit # 审计
144
- ```
145
-
146
- 实现方式是通过 `--permission-mode`、`--allowedTools` 和 `--disallowedTools` 参数传给 Claude Code。
147
-
148
- ### 永久模式
149
-
150
- 写到 `.claude/settings.json`,下次启动还生效:
151
-
152
- ```bash
153
- ccem setup perms --yolo
154
- ccem setup perms --dev
155
- ccem setup perms --readonly
156
- ccem setup perms --safe
157
- ccem setup perms --ci
158
- ccem setup perms --audit
159
- ccem setup perms --reset # 恢复默认
160
- ```
161
-
162
- ### 默认模式
163
-
164
- 设了默认模式后,交互菜单里点 "Start Claude Code" 会自动用这个模式:
165
-
166
- ```bash
167
- ccem setup default-mode --dev # 默认用开发模式
168
- ccem setup default-mode --reset # 清掉默认设置
169
- ccem setup default-mode # 看当前默认是啥
170
- ```
171
-
172
- ### 查看当前权限
173
-
174
- ```bash
175
- ccem --mode # 当前用的什么模式
176
- ccem --list-modes # 列出所有模式
177
- ```
178
-
179
- ### 权限细节
180
-
181
- <details>
182
- <summary><b>dev 模式具体允许/禁止什么</b></summary>
183
-
184
- **允许:**
185
- - 文件:Read、Edit、Write、Glob、Grep、LSP、NotebookEdit
186
- - 开发工具:npm、pnpm、yarn、bun、node、npx、git、tsc、tsx
187
- - 质量工具:eslint、prettier、jest、vitest
188
- - 其他:cargo、python、pip、go、make、cmake
189
- - 常用命令:ls、cat、head、tail、find、wc、mkdir、cp、mv、touch
190
- - WebSearch
191
-
192
- **禁止:**
193
- - 敏感文件:.env、.env.*、secrets/、*.pem、*.key、*credential*
194
- - 危险命令:rm -rf、sudo、chmod、chown
195
-
196
- </details>
197
-
198
- <details>
199
- <summary><b>safe 模式具体允许/禁止什么</b></summary>
200
-
201
- **允许:**
202
- - 只读:Read、Glob、Grep、LSP
203
- - Git 查看:git status、git log、git diff
204
- - 文件查看:ls、cat、head、tail、find、wc
205
-
206
- **禁止:**
207
- - 敏感文件:.env、secrets/、*.pem、*.key、*credential*、*password*
208
- - 修改:Edit、Write、NotebookEdit
209
- - 网络:curl、wget、ssh、scp、WebFetch
210
- - 文件操作:rm、mv
211
-
212
- </details>
213
-
214
- ---
215
-
216
- ## 用量统计
217
-
218
- ccem 会读 Claude Code 的日志(在 `~/.claude/projects/` 下面的 JSONL 文件),统计 token 用量和费用。
219
-
220
- 价格数据从 LiteLLM 的 GitHub 仓库拉取,会缓存到本地。如果网络不可用,会依次尝试:
221
- 1. 本地缓存(`~/.ccem/model-prices.json`)
222
- 2. 内置价格文件(随 ccem 安装)
223
- 3. 默认价格(Claude Opus/Sonnet/Haiku)
224
-
225
- 交互菜单里选 "View Usage" 可以看详细统计,包括**日历热力图**:
226
-
227
- ```
228
- Token Usage Statistics
229
- ────────────────────────────────────────────────────────
230
- Oct Nov Dec Jan
231
- Mon · ░ ▒ ▓ █ ░ · ▒ ...
232
- Tue ░ ▒ · █ ▓ ░ ▒ · ...
233
- Wed ▒ ▓ █ ░ · ▒ ▓ █ ...
234
- ...
235
-
236
- Less · ░ ▒ ▓ █ More
237
-
238
- ────────────────────────────────────────────────────────
239
- Period Input Output Cache Read Cost
240
- Today 12.5K 8.2K 45.3K $0.15
241
- This Week 89.2K 52.1K 312.4K $1.23
242
- All Time 1.2M 823.5K 4.5M $15.67
243
-
244
- ────────────────────────────────────────────────────────
245
- By Model
246
- claude-sonnet-4-5 823.5K $12.34
247
- claude-haiku-4-5 412.3K $3.33
248
- ```
249
-
250
- ### 性能优化
251
-
252
- - **增量缓存**:日志解析结果缓存到 `~/.ccem/usage-cache.json`,只解析新增/修改的文件
253
- - **后台更新**:打开菜单时先显示缓存数据,后台异步更新
254
- - **流式解析**:大文件使用流式读取(readline),避免内存占用过高
255
- - **并发控制**:限制并发解析数量(5 个),避免阻塞事件循环
256
- - **缓存版本**:缓存结构变更时自动失效重建
257
-
258
- ---
259
-
260
- ## Skill 管理
261
-
262
- 可以从 GitHub 或 Plugin Marketplace 安装 Claude Code 的 Skills。装完会放到当前目录的 `.claude/skills/` 下面。
263
-
264
- ```bash
265
- ccem skill add # 交互选择(Tab 切换分组)
266
- ccem skill add <name> # 装预设的
267
- ccem skill add <github-url> # 从 GitHub 装
268
- ccem skill ls # 列出已装的
269
- ccem skill rm <name> # 删掉
270
- ```
271
-
272
- ### 交互式选择器
273
-
274
- 运行 `ccem skill add` 会打开分组选择界面(使用 Ink 渲染):
275
-
276
- ```
277
- 🏢 官方 ⭐ 精选 📦 其他
278
-
279
- ──────────────────────────────────────────────────
280
- ❯ frontend-design - 创建高质量前端界面设计
281
- skill-creator - 创建新的 Claude Code skills
282
- web-artifacts-builder - 构建可交互的 Web 组件
283
- ...
284
- 输入自定义 GitHub URL
285
-
286
- Tab 切换分组 | ↑↓ 选择 | Enter 确认 | Esc 取消
287
- ```
288
-
289
- ### 安装方式
290
-
291
- ccem 支持三种安装方式:
292
-
293
- | 类型 | 说明 | 示例 |
294
- |------|------|------|
295
- | preset | 官方预设,从 anthropics/skills 仓库安装 | `ccem skill add frontend-design` |
296
- | github | 从任意 GitHub 仓库/子目录安装 | `ccem skill add owner/repo` |
297
- | plugin | 从 Plugin Marketplace 安装(实验性) | 通过交互菜单选择 |
298
-
299
- ### 预设列表
300
-
301
- #### 🏢 官方 Skills
302
-
303
- | Skill | 干嘛用 |
304
- |-------|--------|
305
- | frontend-design | 前端界面设计 |
306
- | skill-creator | 创建新 skill |
307
- | web-artifacts-builder | 做可交互的 Web 组件 |
308
- | canvas-design | Canvas 绘图 |
309
- | algorithmic-art | 算法艺术 |
310
- | theme-factory | 做 UI 主题 |
311
- | mcp-builder | 做 MCP 服务器 |
312
- | webapp-testing | Web 应用测试 |
313
- | pdf | 处理 PDF |
314
- | docx | 处理 Word |
315
- | pptx | 处理 PPT |
316
- | xlsx | 处理 Excel |
317
- | brand-guidelines | 品牌指南 |
318
- | doc-coauthoring | 文档协作 |
319
- | internal-comms | 内部通信文档 |
320
- | slack-gif-creator | 做 Slack GIF |
321
-
322
- #### ⭐ 精选 Skills
323
-
324
- | Skill | 干嘛用 |
325
- |-------|--------|
326
- | superpowers | Claude Code Plan 模式升级版,连续追问讨论确定开发方案 |
327
- | ui-ux-pro-max | 专业 UI/UX 设计 |
328
- | Humanizer-zh | 去除文本中 AI 生成痕迹,改写得更自然 |
329
-
330
- #### 📦 其他 Skills
331
-
332
- | Skill | 干嘛用 |
333
- |-------|--------|
334
- | skill-writer | 指导用户为 Claude Code 创建代理技能 |
335
-
336
- ### 从 GitHub 装
337
-
338
- 支持多种 URL 格式:
339
-
340
- ```bash
341
- # 完整 URL
342
- ccem skill add https://github.com/owner/repo
343
- ccem skill add https://github.com/owner/repo/tree/main/path/to/skill
344
-
345
- # 简写格式
346
- ccem skill add owner/repo
347
- ```
348
-
349
- > 💡 使用 git sparse-checkout 只下载指定目录,不会 clone 整个仓库
350
-
351
- ---
352
-
353
- ## 远程配置加载
354
-
355
- 团队可以部署一个配置服务器,成员用 `ccem load` 命令拉取共享的环境配置。
356
-
357
- ### 客户端使用
358
-
359
- ```bash
360
- ccem load https://your-server.com/api/env?key=YOUR_KEY --secret YOUR_SECRET
361
- ```
362
-
363
- - `key`:服务器分配的访问密钥
364
- - `secret`:服务器启动时生成的解密密钥
365
-
366
- 加载成功后,环境会自动添加到本地配置。如果名称冲突,会自动重命名(如 `kimi` → `kimi-remote`)。
367
-
368
- ### 服务端部署
369
-
370
- 服务端代码在 `server/` 目录下。
371
-
372
- #### 1. 配置文件
373
-
374
- **keys.json** - 访问密钥配置:
375
- ```json
376
- {
377
- "team-key-abc123": {
378
- "environments": ["kimi", "glm"]
379
- },
380
- "personal-key-xyz": {
381
- "environments": ["deepseek"]
382
- }
383
- }
384
- ```
385
-
386
- **environments.json** - 环境配置:
387
- ```json
388
- {
389
- "kimi": {
390
- "ANTHROPIC_BASE_URL": "https://api.moonshot.cn/anthropic",
391
- "ANTHROPIC_API_KEY": "sk-xxx",
392
- "ANTHROPIC_MODEL": "kimi-k2-thinking-turbo"
393
- },
394
- "glm": {
395
- "ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
396
- "ANTHROPIC_API_KEY": "xxx.xxx",
397
- "ANTHROPIC_MODEL": "glm-4.6"
398
- }
399
- }
400
- ```
401
-
402
- #### 2. 启动服务
403
-
404
- ```bash
405
- cd server
406
- npm install
407
- node index.js
408
- ```
409
-
410
- 启动后会显示 `secret`,分发给团队成员用于 `--secret` 参数。
411
-
412
- #### 3. 安全特性
413
-
414
- - **AES-256-CBC 加密**:API Key 在传输中加密
415
- - **Rate Limiting**:每分钟最多 10 次请求
416
- - **指数退避**:连续失败后冷却时间递增(最长 30 分钟)
417
- - **Helmet**:安全响应头
418
- - **热加载**:修改配置文件无需重启服务
419
-
420
- #### 4. 生产部署
421
-
422
- 推荐使用 PM2:
423
-
424
- ```bash
425
- pm2 start ecosystem.config.cjs
426
- ```
427
-
428
- 配合 nginx 反代,记得设置 `trust proxy`。
429
-
430
- ---
431
-
432
- ## 初始化
433
-
434
- 新装 Claude Code 后可以跑一下:
435
-
436
- ```bash
437
- ccem setup init
438
- ```
439
-
440
- 会做三件事:
441
-
442
- 1. 设置 `hasCompletedOnboarding: true`,跳过新手引导
443
- 2. 禁用遥测(设置 `DISABLE_TELEMETRY=1`、`DISABLE_ERROR_REPORTING=1`、`DISABLE_BUG_COMMAND=1`)
444
- 3. 装 `chrome-devtools` MCP 工具(用于浏览器调试)
445
-
446
- 配置写到:
447
- - `~/.claude.json`
448
- - `~/.claude/settings.json`
449
-
450
- ---
451
-
452
- ## 命令速查
453
-
454
- ### 环境
455
-
456
- | 命令 | 说明 |
457
- |------|------|
458
- | `ccem` | 交互菜单 |
459
- | `ccem ls` | 列出环境 |
460
- | `ccem use <name>` | 切换 |
461
- | `ccem add <name>` | 添加 |
462
- | `ccem del <name>` | 删除 |
463
- | `ccem current` | 当前环境 |
464
- | `ccem env` | 输出环境变量 |
465
- | `ccem env --json` | JSON 格式 |
466
- | `ccem run <cmd>` | 带环境变量跑命令 |
467
- | `ccem load <url> --secret <s>` | 从远程加载配置 |
468
-
469
- ### 权限(临时)
470
-
471
- | 命令 | 说明 |
472
- |------|------|
473
- | `ccem yolo` | 🔓 YOLO 模式(全部放开) |
474
- | `ccem dev` | 💻 开发模式 |
475
- | `ccem readonly` | 👀 只读模式 |
476
- | `ccem safe` | 🛡️ 安全模式 |
477
- | `ccem ci` | 🔧 CI 模式 |
478
- | `ccem audit` | 🔍 审计模式 |
479
- | `ccem --mode` | 看当前模式 |
480
- | `ccem --list-modes` | 列出所有模式 |
481
-
482
- ### 权限(永久)
483
-
484
- | 命令 | 说明 |
485
- |------|------|
486
- | `ccem setup perms --<mode>` | 永久应用 |
487
- | `ccem setup perms --reset` | 重置 |
488
- | `ccem setup default-mode --<mode>` | 设默认模式 |
489
- | `ccem setup default-mode --reset` | 清默认模式 |
490
- | `ccem setup default-mode` | 看默认模式 |
491
-
492
- ### Skill
493
-
494
- | 命令 | 说明 |
495
- |------|------|
496
- | `ccem skill add` | 交互添加(分组选择) |
497
- | `ccem skill add <name>` | 添加预设 |
498
- | `ccem skill add <url>` | 从 GitHub 添加 |
499
- | `ccem skill ls` | 列出已装 |
500
- | `ccem skill rm <name>` | 删除 |
501
-
502
- ### 初始化
503
-
504
- | 命令 | 说明 |
505
- |------|------|
506
- | `ccem setup init` | 初始化配置 |
507
-
508
- ---
509
-
510
- ## 数据存哪了
511
-
512
- | 路径 | 内容 |
513
- |------|------|
514
- | `~/.config/claude-code-env-manager/` | 环境配置(加密存储 API Key) |
515
- | `~/.ccem/usage-cache.json` | 用量缓存(增量解析结果) |
516
- | `~/.ccem/model-prices.json` | 价格缓存(从 LiteLLM 拉取) |
517
- | `.claude/settings.json` | 项目权限配置 |
518
- | `.claude/skills/` | 已装的 skills |
519
-
520
- ---
521
-
522
- ## 技术栈
523
-
524
- - **CLI 框架**: Commander.js
525
- - **配置存储**: Conf(加密存储敏感信息)
526
- - **交互界面**: Inquirer.js + Ink (React for CLI)
527
- - **表格渲染**: cli-table3
528
- - **样式**: Chalk
529
-
530
- ## Contributing
531
-
532
- 欢迎提 Issue 和 PR!
533
-
534
- ## License
535
-
536
- MIT