适用环境 :macOS + zsh + Claude Code CLI + IntelliJ IDEA「CC GUI」插件
目标 :在同一台机器上同时使用 官方 Pro(OAuth) 、多个智谱 API 账号 ,并在终端与 IDEA 之间可控切换。
阅读时间 :原理 15 分钟;跟做搭建约 30 分钟 | 难度:中级
你想... 直接跳到 从零照着做一遍 [第四节 零基础实操手册](#你想… 直接跳到 从零照着做一遍 第四节 零基础实操手册 日常选账号(推荐) 第四节 4.2 理解原理与脚本 第五节 原理补充 IDEA 里换账号 第四节 4.5 / 4.6、第七节速查 账号隔离 / 混用 glm 第五节 5.2、第八节 Q6–Q10 排错 第八节 常见问题) 日常选账号(推荐) [第四节 4.2](#你想… 直接跳到 从零照着做一遍 第四节 零基础实操手册 日常选账号(推荐) 第四节 4.2 理解原理与脚本 第五节 原理补充 IDEA 里换账号 第四节 4.5 / 4.6、第七节速查 账号隔离 / 混用 glm 第五节 5.2、第八节 Q6–Q10 排错 第八节 常见问题) 理解原理与脚本 [第五节 原理补充](#你想… 直接跳到 从零照着做一遍 第四节 零基础实操手册 日常选账号(推荐) 第四节 4.2 理解原理与脚本 第五节 原理补充 IDEA 里换账号 第四节 4.5 / 4.6、第七节速查 账号隔离 / 混用 glm 第五节 5.2、第八节 Q6–Q10 排错 第八节 常见问题) IDEA 里换账号 [第四节 4.5 / 4.6](#你想… 直接跳到 从零照着做一遍 第四节 零基础实操手册 日常选账号(推荐) 第四节 4.2 理解原理与脚本 第五节 原理补充 IDEA 里换账号 第四节 4.5 / 4.6、第七节速查 账号隔离 / 混用 glm 第五节 5.2、第八节 Q6–Q10 排错 第八节 常见问题)、[第七节速查](#你想… 直接跳到 从零照着做一遍 第四节 零基础实操手册 日常选账号(推荐) 第四节 4.2 理解原理与脚本 第五节 原理补充 IDEA 里换账号 第四节 4.5 / 4.6、第七节速查 账号隔离 / 混用 glm 第五节 5.2、第八节 Q6–Q10 排错 第八节 常见问题) 账号隔离 / 混用 glm [第五节 5.2](#你想… 直接跳到 从零照着做一遍 第四节 零基础实操手册 日常选账号(推荐) 第四节 4.2 理解原理与脚本 第五节 原理补充 IDEA 里换账号 第四节 4.5 / 4.6、第七节速查 账号隔离 / 混用 glm 第五节 5.2、第八节 Q6–Q10 排错 第八节 常见问题)、[第八节 Q6--Q10](#你想… 直接跳到 从零照着做一遍 第四节 零基础实操手册 日常选账号(推荐) 第四节 4.2 理解原理与脚本 第五节 原理补充 IDEA 里换账号 第四节 4.5 / 4.6、第七节速查 账号隔离 / 混用 glm 第五节 5.2、第八节 Q6–Q10 排错 第八节 常见问题) 排错 [第八节 常见问题](#你想… 直接跳到 从零照着做一遍 第四节 零基础实操手册 日常选账号(推荐) 第四节 4.2 理解原理与脚本 第五节 原理补充 IDEA 里换账号 第四节 4.5 / 4.6、第七节速查 账号隔离 / 混用 glm 第五节 5.2、第八节 Q6–Q10 排错 第八节 常见问题)
📊 先看收益:这套方案能带来什么?
💡 如果你赶时间 ,直接看这里:用这套方案,每月可节省 60-80% AI 成本 ,切换账号从 5 分钟降到 5 秒,且多个账号完全隔离互不影响。
💰 成本优化:智谱 vs 官方 Pro 的经济账
| 对比项 | Claude 官方 Pro | 智谱 GLM-4 | 节省比例 |
|---|---|---|---|
| 月费 | $20(约 ¥145) | 按 API 调用计费 | --- |
| Opus 价格 | 包含在内 | ¥0.12/千 tokens | 70%+ |
| Sonnet 价格 | 包含在内 | ¥0.015/千 tokens | 85%+ |
| Haiku 价格 | 包含在内 | ¥0.005/千 tokens | 90%+ |
| 适用场景 | 频繁用 Opus | 代码生成、文档处理 | --- |
成本策略建议:
- 重度 Opus 用户:官方 Pro(每月 $20 无限用)
- 代码生成为主:智谱(80% 场景用 Sonnet,成本降低 85%+)
- 混合使用:本方案允许你智能切换 ------ Opus 难题走 Pro,日常生成走智谱
⚡ 效率提升:从 5 分钟到 5 秒
传统方式痛点:
- 切换账号需要修改配置文件 → 2 分钟
- 重启 IDE/终端 → 1 分钟
- 重新登录 OAuth → 2 分钟
- 总计:5 分钟/次,每天切换 3 次浪费 15 分钟
本方案效果:
bash
claude # 交互选 qu / gu / p1 / default ...
qu # 短命令,等同 claude qu
- 终端 :
claude选账号 → 自动CLAUDE_CONFIG_DIR隔离,不写其它账号目录 - IDEA :选账号时自动执行
ccgui-use对齐 CC GUI(一般不必再手敲) - 新增账号 :新建
xxx.key或~/.claude-p4→ 新开终端后菜单自动出现 - ROI :设置一次,每天节省 15 分钟 × 22 工作日 = 5.5 小时/月
🔒 风险隔离:为什么"分开"比"合并"更安全
| 风险类型 | 单账号风险 | 多账号隔离 |
|---|---|---|
| API Key 泄露 | 所有服务瘫痪 | 仅单个账号受影响 |
| 账号被封/欠费 | 工作全面停摆 | 其他账号继续工作 |
| 合规要求 | 客户数据混在一起 | 按项目/客户隔离 |
| 团队协作 | 共享凭证,审计难 | 独立凭证,权限清晰 |
| 配额耗尽 | 所有服务不可用 | 切换备用账号 |
真实场景案例:
- 场景 1 :你正在给客户 A 做项目(用智谱账号),突然想用 Opus 解决难题(用 Pro 账号) → 一键切换,不用手动改配置
- 场景 2 :团队成员的智谱 API Key 额度用完了 → 切换到备用账号,不影响其他人
- 场景 3 :公司要求客户数据不能混用 → 每个客户用独立账号,审计合规
🎯 适用人群:你需要这套方案吗?
| 你是 | 面临的问题 | 本方案带来的价值 |
|---|---|---|
| 个人开发者 | 想省钱但不想牺牲体验 | 智谱处理日常,Pro 处理难题,成本降 70%+ |
| 自由职业者 | 多个客户项目需要隔离 | 按客户隔离账号,审计清晰,风险可控 |
| 小团队 | 共用 Claude 账号互相干扰 | 每人独立账号,配额独立管理 |
| 企业用户 | 需要满足合规要求 | 数据隔离、权限分离、审计友好 |
| 技术写作者 | 需要测试不同模型的输出 | 快速对比效果,提高内容质量 |
一句话总结 :如果你需要在 同一台机器上使用多个 Claude 账号 ,或者想 在成本和体验之间找到平衡,这套方案就是为你准备的。
一、为什么要做多账号隔离?
Claude Code 默认把所有东西放在 ~/.claude:配置、会话、OAuth 凭证(macOS 在钥匙串)。当你需要:
- 终端里用 Claude Pro 订阅(浏览器登录);
- 同时保留 智谱 GLM 等第三方 API Key;
- 再拆出 第二个 Pro 邮箱 (如
p1、p2); - IDEA 里的 CC GUI 也想换账号;
如果共用一个目录,会出现:API Key 覆盖 OAuth、登录态串号、IDE 和终端用的不是同一套凭证等问题。
官方支持用环境变量 CLAUDE_CONFIG_DIR 指定配置根目录。本方案在此基础上用 shell 别名 + 脚本 固定用法,并单独处理 CC GUI 只认 ~/.claude 的限制。
二、整体架构一览
┌─────────────────────────────────────────────────────────────────┐
│ 你的 Mac │
├─────────────────────────────────────────────────────────────────┤
│ 终端(推荐入口) │
│ claude / qu / p1 ... → claude-use.sh 选账号 │
│ · 智谱 → ~/.claude-qu 等(CLAUDE_CONFIG_DIR) │
│ · Pro → ~/.claude-p1 等(OAuth + 启动前 sanitize) │
│ · default → ~/.claude(官方主号,无智谱 Key) │
│ · 启动时自动 ccgui-use,对齐 IDEA(可 CLAUDE_SKIP_CCGUI_SYNC=1 关闭)│
├─────────────────────────────────────────────────────────────────┤
│ IDEA · CC GUI(固定读 ~/.claude + ~/.codemoss) │
│ · 终端选 qu/p1 后,脚本已写入 ~/.claude / codemoss │
│ · 智谱:IDEA 供应商里选「智谱 · qu」 │
│ · Pro 分身:选「CLI 登录信息」+ 换 pN 后**重启 IDEA** │
└─────────────────────────────────────────────────────────────────┘
**隔离原则(务必遵守)**
| 目录 | 只放什么 | 禁止 |
|------|----------|------|
| `~/.claude-p1/p2/p3` | Pro OAuth、`model: opus` | 智谱 API Key、`ANTHROPIC_BASE_URL`、`glm-*` |
| `~/.claude-qu/gu/zheng` | 智谱 Key + `BASE_URL` | Pro OAuth 混写 |
| `~/.claude`(真实目录) | IDEA 当前用的 settings;智谱时由 `ccgui-use qu` 写入 | 在 `ccgui-use p1` 符号链接期间被 `ccgui-use qu` 覆盖(**已用脚本自动规避**) |
脚本与配置目录:
(跟做)本仓库 scripts/ 目录 # 5 个 .sh,可复制到 ~/.config/claude-profiles/
~/.config/claude-profiles/ # 安装后的脚本与 .key 密钥文件
~/.local/bin/claude-open-safari
~/.codemoss/config.json # CC GUI 供应商注册表
账号类型对照
| 类型 | 终端命令(任选其一) | 配置目录 | 认证方式 |
|---|---|---|---|
| 交互选择 | claude |
菜单列出全部账号 | 按所选类型 |
| 默认官方 | claude default |
~/.claude |
Pro OAuth(无智谱 Key) |
| Pro 分身 | claude p1 / p1 / claude-p1 |
~/.claude-p1 等 |
Safari OAuth |
| 智谱 | claude qu / qu / claude-qu |
~/.claude-qu 等 |
智谱 API Key |
| 列出账号 | claude list |
--- | 自动发现 .key 与 pN |
三、目录与文件布局
首次搭建请直接看 [第四节](#首次搭建请直接看 第四节。)。 安装完成后,建议具备以下结构:
text
~/.zshrc # source claude-accounts.zsh(见 4.1 第五步)
~/.local/bin/claude-open-safari # OAuth 用 Safari 打开链接
~/.config/claude-profiles/
*.key # 智谱密钥(一行纯文本,chmod 600)
claude-accounts.zsh # claude / qu / p1 等入口(核心)
claude-use.sh # 按账号启动 + 自动对齐 IDEA
claude-pick.sh # claude 无参数时的交互菜单
claude-accounts-list.sh # 自动发现账号列表
oauth-run.sh # Pro 启动(隐藏智谱合并)
oauth-hide-global-zhipu.sh # 临时隐藏 ~/.claude 智谱 settings
oauth-restore-global-zhipu.sh # 恢复上述隐藏
ensure-default-claude-settings.sh # 主号 ~/.claude 去智谱 Key
sync-all-settings.sh # 所有 *.key → ~/.claude-<名>
init-oauth-profile.sh # 初始化 ~/.claude-pN
sanitize-oauth-profile.sh # 清理 Pro 目录智谱污染
ccgui-profiles-sync.sh # 智谱注册到 ~/.codemoss
ccgui-use.sh # 手动切换 IDEA(终端已可自动调用)
last-terminal-account # 上次终端选的账号 id(记录用)
~/.claude/ # 官方主号(IDEA default 也用)
~/.claude-p1/ p2/ p3/ ... # Pro 分身
~/.claude-qu/ gu/ zheng/ ... # 智谱(与 .key 同名)
~/.codemoss/config.json # CC GUI 供应商
~/.claude-ccgui-stash/ # ccgui-use pN 时备份的原 ~/.claude
仓库脚本目录 (跟做时复制到 ~/.config/claude-profiles/):本博客同级的 scripts/。
四、零基础实操手册(第一步 → 第二步 → ...)
阅读建议 :原理可看第五节;照着做 请从本节开始。每一步都写明:操作哪个文件 、写什么内容 、终端跑什么命令 、怎样算成功。
实操路线图(按顺序做)
| 顺序 | 章节 | 你要完成的事 |
|---|---|---|
| 1 | 4.1 第一步~第六步 | 建目录 → Safari → .key → 全部脚本 → source zsh 模块 → 自检 |
| 2 | 4.2 | 日常 :claude 选账号 / qu / p1(自动对齐 IDEA) |
| 3 | 4.3 | 智谱:.key → claude-profiles-sync |
| 4 | 4.4 | Pro 分身:claude-p1-init → claude-p1-login → p1 |
| 5 | 4.5 | IDEA 智谱:终端 claude qu 后 IDEA 选供应商 |
| 6 | 4.6 | IDEA Pro:claude p2 后重启 IDEA + CLI 登录 |
| 7 | 4.7 | 验收清单 |
4.0 前置条件(开始前先确认)
| 项目 | 要求 | 如何检查 |
|---|---|---|
| 系统 | macOS | --- |
| Shell | zsh(终端默认 zsh) | echo $SHELL 含 zsh |
| Claude Code CLI | 已安装 | which claude 有路径 |
| 官方账号 | 至少登录过一次默认 ~/.claude |
claude auth status 能显示状态 |
| 代理(可选) | 若需翻墙,Clash 等已开 | 与下文 7890 端口一致时再写入 proxy |
| Node / claude 在 PATH | 能直接运行 claude |
which claude 有输出 |
跟做说明 :下文第四节每个「文件完整内容」块均可整段复制为对应路径下的文件;按 4.1 第一步→第六步顺序执行即可,无需再查其它文档。
4.1 第一次搭建:创建目录与脚本(约 15 分钟)
第一步:创建目录
在终端执行(只创建文件夹,还不改配置):
bash
mkdir -p ~/.config/claude-profiles
mkdir -p ~/.local/bin
完成后应有:
text
~/.config/claude-profiles/ # 放脚本和 .key
~/.local/bin/ # 放 claude-open-safari
第二步:写入 Safari 打开器(OAuth 必用)
| 项目 | 说明 |
|---|---|
| 操作文件 | ~/.local/bin/claude-open-safari(新建) |
| 作用 | Claude 登录时自动用 Safari 打开链接,避免手抄 URL 折行报错 |
文件完整内容(整文件复制,不要漏行):
bash
#!/bin/bash
# Claude Code OAuth:在 Safari 中打开登录链接(去掉复制/折行带来的换行与空格)
if [[ -n "${1:-}" ]]; then
url="${1//[$'\r\n\t ']}"
exec /usr/bin/open -a Safari "$url"
fi
终端执行:
bash
chmod +x ~/.local/bin/claude-open-safari
验证: test -x ~/.local/bin/claude-open-safari && echo OK 输出 OK。
注意:
- 必须用
chmod +x,否则 OAuth 阶段浏览器打不开。 - 登录时不要 从终端折行文字里拖选 URL;应依赖 Safari 自动打开,或按终端提示
c整段复制。
第三步:写入智谱 API Key 文件(要用智谱才做)
| 项目 | 说明 |
|---|---|
| 操作文件 | ~/.config/claude-profiles/qu.key(以及可选的 gu.key、zheng.key) |
| 文件格式 | 纯文本一行 ,只有 Key,无引号、无 export、无空行 |
| 示例内容 | YOUR_ZHIPU_API_KEY.xxxxxxxxxxxxxxxx |
终端写入示例:
bash
echo 'YOUR_ZHIPU_API_KEY.xxxxxxxxxxxxxxxx' > ~/.config/claude-profiles/qu.key
echo 'YOUR_ZHIPU_API_KEY.yyyyyyyyyyyyyyyy' > ~/.config/claude-profiles/gu.key
echo 'YOUR_ZHIPU_API_KEY.zzzzzzzzzzzzzzzz' > ~/.config/claude-profiles/zheng.key
chmod 600 ~/.config/claude-profiles/*.key
只有一个智谱账号时: 只创建 qu.key 即可,不必 创建 gu.key / zheng.key。sync-all-settings.sh 会自动跳过缺失的 .key。
切勿 把 .key 提交 Git。
第四步:安装全部脚本(推荐一键复制)
在 ~/.config/claude-profiles/ 下放齐 本仓库 scripts/ 目录下的全部文件 (含 .sh 与 claude-accounts.zsh)。
一键安装(把路径改成你的「多账号」目录):
bash
mkdir -p ~/.config/claude-profiles
cp -f "/path/to/多账号/scripts/"*.sh \
"/path/to/多账号/scripts/claude-accounts.zsh" \
~/.config/claude-profiles/
chmod +x ~/.config/claude-profiles/*.sh
ls -la ~/.config/claude-profiles/*.sh # 应看到多个 -rwxr-xr-x
然后跳到 第五步 编辑 ~/.zshrc。
| 文件名 | 作用 |
|---|---|
claude-accounts.zsh |
定义 claude、qu、p1 等命令(必装) |
claude-use.sh |
按账号启动;自动 ccgui-use 对齐 IDEA |
claude-pick.sh |
claude 无参数时的数字菜单 |
claude-accounts-list.sh |
自动发现 *.key 与 ~/.claude-p[0-9]* |
oauth-run.sh |
Pro / default 启动包装 |
oauth-hide-global-zhipu.sh |
启动 Pro 前隐藏 ~/.claude 智谱 settings |
oauth-restore-global-zhipu.sh |
退出 Pro 启动后恢复 |
ensure-default-claude-settings.sh |
主号 ~/.claude 去掉智谱 Key |
sync-all-settings.sh |
所有 *.key → ~/.claude-<名> |
init-oauth-profile.sh |
初始化 ~/.claude-pN |
sanitize-oauth-profile.sh |
清理 Pro 目录智谱污染 + model: opus |
ccgui-profiles-sync.sh |
智谱写入 ~/.codemoss/config.json |
ccgui-use.sh |
手动切换 IDEA(终端一般已自动调用) |
完整源码 :与仓库
scripts/目录逐文件一致;下文仅展开易变的 3 个脚本,其余请直接打开对应文件复制。
文件 1:sync-all-settings.sh --- 读取 .key → 生成 ~/.claude-{gu,qu,zheng}/settings.json
点击展开 sync-all-settings.sh 完整内容
bash
#!/usr/bin/env bash
# 将公共配置 + 各账号密钥写入 ~/.claude-{gu,zheng,qu}/settings.json(不改 ~/.claude)
# 修改 .key 文件后执行:claude-profiles-sync
# 仅处理已存在的 *.key(可只建 qu.key,不必三个都建)
set -euo pipefail
python3 <<'PY'
import json
from pathlib import Path
home = Path.home()
keys_dir = home / ".config/claude-profiles"
base_path = home / ".claude" / "settings.json"
base = {}
if base_path.exists():
base = json.loads(base_path.read_text(encoding="utf-8"))
shared = {
"theme": base.get("theme", "dark-daltonized"),
"extraKnownMarketplaces": base.get("extraKnownMarketplaces", {}),
"enabledPlugins": base.get("enabledPlugins", {}),
"permissions": {
"allow": [
"Bash(*)",
"Read(*)",
"Edit(*)",
"Glob(*)",
"Grep(*)",
"WebFetch(*)",
"WebSearch(*)",
]
},
}
zhipu_env_extra = {
"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-4.7",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-4.7",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-4.5-air",
"API_TIMEOUT_MS": "3000000",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
}
def write_settings(profile: str, data: dict) -> None:
cfg_dir = home / f".claude-{profile}"
cfg_dir.mkdir(parents=True, exist_ok=True)
path = cfg_dir / "settings.json"
path.write_text(
json.dumps(data, indent=2, ensure_ascii=False) + "\n",
encoding="utf-8",
)
print(f" ✓ {path}")
print("同步 Claude Code 多账号配置...")
synced = 0
key_files = sorted(keys_dir.glob("*.key"))
if not key_files:
raise SystemExit("未找到任何 .key 文件,请至少创建 ~/.config/claude-profiles/qu.key")
for key_file in key_files:
name = key_file.stem
if name.startswith("."):
continue
api_key = key_file.read_text(encoding="utf-8").strip()
if not api_key:
raise SystemExit(f"密钥文件为空: {key_file}")
env = {**zhipu_env_extra, "ANTHROPIC_API_KEY": api_key}
write_settings(name, {**shared, "env": env})
synced += 1
print(f"完成(已同步 {synced} 个智谱账号)。启动: claude 或 claude <账号名>")
PY
文件 2:init-oauth-profile.sh --- 初始化 ~/.claude-p1 等 Pro 目录(不含 API Key)
点击展开 init-oauth-profile.sh 完整内容
bash
#!/usr/bin/env bash
# 初始化 Pro / OAuth 独立配置目录(无智谱 API Key)
# 用法:init-oauth-profile.sh [profile名] 默认 p1 → ~/.claude-p1
set -euo pipefail
PROFILE="${1:-p1}"
HOME_DIR="${HOME}"
CFG_DIR="${HOME_DIR}/.claude-${PROFILE}"
CLAUDE_DIR="${HOME_DIR}/.claude"
STASH="${HOME_DIR}/.claude-ccgui-stash"
mkdir -p "${CFG_DIR}"
python3 <<PY
import json
from pathlib import Path
profile = "${PROFILE}"
home = Path.home()
cfg_dir = home / f".claude-{profile}"
claude_dir = home / ".claude"
stash = home / ".claude-ccgui-stash"
target = cfg_dir / "settings.json"
# 若 ~/.claude 是符号链接,从 stash 读模板,避免把智谱配置写进 Pro 目录
base_path = home / ".claude" / "settings.json"
if claude_dir.is_symlink() and (stash / "settings.json").exists():
base_path = stash / "settings.json"
base = {}
if base_path.exists():
base = json.loads(base_path.read_text(encoding="utf-8"))
# 官方 Pro:只保留代理/超时等,不写 API Key / 智谱 BASE_URL
env = {}
for key in ("API_TIMEOUT_MS", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC", "http_proxy", "https_proxy"):
if key in base.get("env", {}):
env[key] = base["env"][key]
data = {
"theme": base.get("theme", "light"),
"model": "opus",
"extraKnownMarketplaces": base.get("extraKnownMarketplaces", {}),
"enabledPlugins": base.get("enabledPlugins", {}),
"permissions": base.get(
"permissions",
{
"allow": [
"Bash(*)",
"Read(*)",
"Edit(*)",
"Glob(*)",
"Grep(*)",
"WebFetch(*)",
"WebSearch(*)",
]
},
),
"env": env,
}
target.write_text(json.dumps(data, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
print(f"✓ {target}")
PY
"${HOME_DIR}/.config/claude-profiles/sanitize-oauth-profile.sh" "$PROFILE" 2>/dev/null || true
echo ""
echo "下一步(首次使用 ${PROFILE} 配置):"
echo " claude-${PROFILE}-login"
echo "在 Safari 完成 Pro 登录后:"
echo " claude-${PROFILE}"
文件 3:sanitize-oauth-profile.sh --- 清理 Pro 目录里的智谱污染
点击展开 sanitize-oauth-profile.sh 完整内容
bash
#!/usr/bin/env bash
# 从 Pro OAuth 配置目录移除智谱/API Key 污染(settings.json)
# 用法:sanitize-oauth-profile.sh [p1|p2|p3|all]
set -euo pipefail
PROFILE="${1:-all}"
_sanitize_one() {
local name=$1
local settings="${HOME}/.claude-${name}/settings.json"
[[ -f "$settings" ]] || return 0
python3 - "$name" "$settings" <<'PY'
import json
import sys
from pathlib import Path
profile, settings = sys.argv[1], Path(sys.argv[2])
data = json.loads(settings.read_text(encoding="utf-8"))
env = data.get("env", {})
zhipu_keys = (
"ANTHROPIC_API_KEY",
"ANTHROPIC_AUTH_TOKEN",
"ANTHROPIC_BASE_URL",
"ANTHROPIC_DEFAULT_OPUS_MODEL",
"ANTHROPIC_DEFAULT_SONNET_MODEL",
"ANTHROPIC_DEFAULT_HAIKU_MODEL",
)
removed = [k for k in zhipu_keys if k in env]
for k in removed:
del env[k]
# 覆盖 CLI 合并自 ~/.claude 的智谱 BASE_URL / glm 模型名
env["ANTHROPIC_BASE_URL"] = "https://api.anthropic.com"
data["env"] = env
if "codemossProviderId" in data:
del data["codemossProviderId"]
removed.append("codemossProviderId")
if data.get("model") != "opus":
data["model"] = "opus"
removed.append("model→opus")
settings.write_text(json.dumps(data, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
if removed:
print(f"✓ ~/.claude-{profile}: 已移除 {', '.join(removed)}")
else:
print(f"✓ ~/.claude-{profile}: 已是纯 Pro 配置")
PY
}
case "$PROFILE" in
all) for p in p1 p2 p3; do _sanitize_one "$p"; done ;;
p1|p2|p3) _sanitize_one "$PROFILE" ;;
*)
echo "用法: sanitize-oauth-profile.sh [p1|p2|p3|all]"
exit 1
;;
esac
文件 4:ccgui-profiles-sync.sh --- 智谱注册到 ~/.codemoss/config.json
点击展开 ccgui-profiles-sync.sh 完整内容
bash
#!/usr/bin/env bash
# 将 claude-qu / gu / zheng 的智谱配置注册到 CC GUI(~/.codemoss/config.json)
# 在 IDEA 供应商管理里切换即可;改 .key 后先 claude-profiles-sync 再执行本脚本
#
# 用法:ccgui-profiles-sync
set -euo pipefail
python3 <<'PY'
import json
from pathlib import Path
home = Path.home()
codemoss_path = home / ".codemoss" / "config.json"
DISPLAY = {"qu": "智谱 · qu", "gu": "智谱 · gu", "zheng": "智谱 · zheng"}
def load_env(profile: str) -> dict:
settings_path = home / f".claude-{profile}" / "settings.json"
if not settings_path.exists():
raise SystemExit(f"缺少配置: {settings_path},请先运行 claude-profiles-sync")
data = json.loads(settings_path.read_text(encoding="utf-8"))
return data.get("env") or {}
providers = {}
for profile, display in DISPLAY.items():
settings_path = home / f".claude-{profile}" / "settings.json"
if not settings_path.exists():
print(f" 跳过 zhipu-{profile}(无 {settings_path})")
continue
providers[f"zhipu-{profile}"] = {
"name": display,
"source": "claude-profiles",
"settingsConfig": {"env": load_env(profile)},
}
if not providers:
raise SystemExit("没有可注册的智谱供应商,请先 claude-profiles-sync")
config = {
"version": 2,
"claude": {"current": None, "providers": {}},
"codex": {"current": "", "providers": {}, "localConfigAuthorized": False},
}
if codemoss_path.exists():
config = json.loads(codemoss_path.read_text(encoding="utf-8"))
claude = config.setdefault("claude", {})
existing_current = claude.get("current")
claude.setdefault("providers", {})
claude["providers"].update(providers)
if not existing_current or str(existing_current).startswith("zhipu-"):
claude["current"] = "zhipu-qu" if "zhipu-qu" in providers else next(iter(providers))
codemoss_path.parent.mkdir(parents=True, exist_ok=True)
codemoss_path.write_text(json.dumps(config, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
print(f"✓ 已写入 {codemoss_path}")
print(" 供应商:" + " / ".join(sorted(providers)))
print(" 请在 IDEA → CC GUI → 设置 → 供应商管理 中选择并启用")
PY
文件 5:ccgui-use.sh --- IDEA 切换账号(智谱自动 restore / Pro 符号链接)
点击展开 ccgui-use.sh 完整内容(157 行) 与 ~/.config/claude-profiles/ccgui-use.sh 保持一致。核心:ccgui-use qu|gu|zheng 会先 _ccgui_restore_symlink,再写入真实 ~/.claude,不会污染 ~/.claude-pN。
bash
#!/usr/bin/env bash
# 在终端切换 CC GUI 当前使用的 Claude 配置(写入 ~/.codemoss/config.json)
#
# 用法:
# ccgui-use qu|gu|zheng # 智谱 API(自动 restore ~/.claude,再同步 settings)
# ccgui-use default # 官方 ~/.claude/settings.json
# ccgui-use cli # CLI OAuth(仅 ~/.claude 钥匙串,见说明)
# ccgui-use p1|p2|p3 # 将 ~/.claude 切换为 p1/p2/p3 目录(Pro OAuth,需重启 CC GUI)
# ccgui-use restore # 恢复 ccgui-use p1/p2/p3 之前的 ~/.claude
set -euo pipefail
TARGET="${1:-}"
HOME_DIR="${HOME}"
CODEMOSS="${HOME_DIR}/.codemoss/config.json"
CLAUDE_DIR="${HOME_DIR}/.claude"
STASH="${HOME_DIR}/.claude-ccgui-stash"
SANITIZE="${HOME_DIR}/.config/claude-profiles/sanitize-oauth-profile.sh"
usage() {
cat <<'EOF'
用法: ccgui-use <目标>
qu | gu | zheng 智谱账号(自动 restore ~/.claude,再同步 settings,不污染 p1/p2/p3)
default 使用 ~/.claude/settings.json(本地 settings 模式)
cli CLI 登录模式(OAuth,仅 ~/.claude)
p1 | p2 | p3 Pro OAuth:用 ~/.claude-p1 / p2 / p3 替换 ~/.claude(需重启 IDEA)
restore 恢复 ccgui-use p1/p2/p3 之前的 ~/.claude
说明:CC GUI 插件固定读 ~/.claude,不认 CLAUDE_CONFIG_DIR。
EOF
}
# 若 ~/.claude 是指向 p1/p2/p3 的符号链接,先恢复为真实目录(智谱切换时自动调用)
_ccgui_restore_symlink() {
if [[ ! -L "$CLAUDE_DIR" ]]; then
return 0
fi
local link_target
link_target="$(readlink "$CLAUDE_DIR" 2>/dev/null || true)"
echo "检测到 ~/.claude → ${link_target},自动恢复默认目录..."
rm "$CLAUDE_DIR"
if [[ -d "$STASH" ]]; then
mv "$STASH" "$CLAUDE_DIR"
echo "✓ 已恢复 ~/.claude(来自 stash)"
else
mkdir -p "$CLAUDE_DIR"
echo "✓ 已创建新的 ~/.claude(无 stash 备份)"
fi
}
[[ -n "$TARGET" ]] || { usage; exit 1; }
python3 -c "import json,pathlib; p=pathlib.Path('$CODEMOSS'); d=json.loads(p.read_text()) if p.exists() else {'version':2,'claude':{},'codex':{}}; d.setdefault('claude',{}); print('ok')" >/dev/null 2>&1 || mkdir -p "$(dirname "$CODEMOSS")"
case "$TARGET" in
qu|gu|zheng)
_ccgui_restore_symlink
PROVIDER="zhipu-${TARGET}"
SRC="${HOME_DIR}/.claude-${TARGET}/settings.json"
[[ -f "$SRC" ]] || { echo "缺少 $SRC,请先 claude-profiles-sync"; exit 1; }
python3 <<PY
import json, shutil
from pathlib import Path
home = Path.home()
codemoss = home / ".codemoss" / "config.json"
config = json.loads(codemoss.read_text()) if codemoss.exists() else {"version": 2}
config.setdefault("claude", {})["current"] = "${PROVIDER}"
codemoss.write_text(json.dumps(config, indent=2, ensure_ascii=False) + "\n")
# 只写入真实 ~/.claude,绝不写入 .claude-pN
dest = home / ".claude" / "settings.json"
dest.parent.mkdir(parents=True, exist_ok=True)
shutil.copy2(home / ".claude-${TARGET}" / "settings.json", dest)
print("✓ CC GUI 当前供应商: ${PROVIDER}")
print(" 已同步 settings → ~/.claude/settings.json(与 Pro 分身目录隔离)")
print(" 请在 IDEA 供应商管理中选择「智谱 · ${TARGET}」或刷新后使用")
PY
;;
default)
_ccgui_restore_symlink
python3 <<PY
import json
from pathlib import Path
p = Path.home() / ".codemoss" / "config.json"
config = json.loads(p.read_text()) if p.exists() else {"version": 2}
config.setdefault("claude", {})["current"] = "__local_settings_json__"
p.write_text(json.dumps(config, indent=2, ensure_ascii=False) + "\n")
print("✓ CC GUI: 本地 ~/.claude/settings.json 模式")
PY
;;
cli)
_ccgui_restore_symlink
python3 <<PY
import json
from pathlib import Path
p = Path.home() / ".codemoss" / "config.json"
config = json.loads(p.read_text()) if p.exists() else {"version": 2}
config.setdefault("claude", {})["current"] = "__cli_login__"
p.write_text(json.dumps(config, indent=2, ensure_ascii=False) + "\n")
print("✓ CC GUI: CLI 登录模式(使用 ~/.claude 的 OAuth)")
PY
;;
p1|p2|p3)
[[ -x "$SANITIZE" ]] && "$SANITIZE" "$TARGET"
PROFILE_DIR="${HOME_DIR}/.claude-${TARGET}"
if [[ -L "$CLAUDE_DIR" ]]; then
LINK_TARGET="$(readlink "$CLAUDE_DIR" 2>/dev/null || true)"
if [[ "$LINK_TARGET" == "$PROFILE_DIR" ]]; then
echo "~/.claude 已指向 ~/.claude-${TARGET}"
exit 0
fi
echo "当前 ~/.claude 指向: ${LINK_TARGET}"
echo "请先执行: ccgui-use restore"
exit 1
fi
[[ -d "$PROFILE_DIR" ]] || {
echo "缺少 ${PROFILE_DIR},请先 claude-${TARGET}-init && claude-${TARGET}-login"
exit 1
}
if [[ ! -d "$STASH" ]]; then
echo "备份 ~/.claude → ~/.claude-ccgui-stash"
mv "$CLAUDE_DIR" "$STASH"
else
echo "警告: 已有 stash,跳过备份(若异常请先 ccgui-use restore)"
rm -rf "$CLAUDE_DIR"
fi
ln -s "$PROFILE_DIR" "$CLAUDE_DIR"
python3 <<PY
import json
from pathlib import Path
p = Path.home() / ".codemoss" / "config.json"
config = json.loads(p.read_text()) if p.exists() else {"version": 2}
config.setdefault("claude", {})["current"] = "__cli_login__"
p.write_text(json.dumps(config, indent=2, ensure_ascii=False) + "\n")
print("✓ ~/.claude → ~/.claude-${TARGET}")
print("✓ CC GUI: CLI 登录模式")
print(" 请完全退出并重启 IDEA / CC GUI,然后使用「CLI 登录信息」")
print(" 提示:终端请用 claude-${TARGET},智谱请 ccgui-use qu(会自动 restore)")
PY
;;
restore)
if [[ -L "$CLAUDE_DIR" ]]; then
rm "$CLAUDE_DIR"
fi
if [[ -d "$STASH" ]]; then
mv "$STASH" "$CLAUDE_DIR"
echo "✓ 已恢复 ~/.claude"
else
echo "无 stash 可恢复"
exit 1
fi
;;
*)
usage
exit 1
;;
esac
文件 6~13(2026-05 新增) :claude-use.sh、claude-pick.sh、claude-accounts-list.sh、oauth-run.sh、oauth-hide-global-zhipu.sh、oauth-restore-global-zhipu.sh、ensure-default-claude-settings.sh、claude-accounts.zsh --- 完整内容见仓库 scripts/,与 cp 到 ~/.config/claude-profiles/ 的文件一致。
点击展开 claude-accounts.zsh 完整内容(~/.zshrc 只需 source 本文件)
bash
# Claude Code 多账号:claude 选择器 + 短命令(qu / p1 / ...)
# 安装:复制到 ~/.config/claude-profiles/ 后在 ~/.zshrc 中 source 本文件
: "${CLAUDE_PROFILES_DIR:=$HOME/.config/claude-profiles}"
claude() {
local profiles="$CLAUDE_PROFILES_DIR"
case "${1:-}" in
""|pick)
[[ "${1:-}" == pick ]] && shift
"$profiles/claude-pick.sh" "$@"
;;
list|ls)
"$profiles/claude-accounts-list.sh"
;;
help|-h)
"$profiles/claude-accounts-list.sh"
echo "命令:"
echo " claude 交互选择账号"
echo " claude <id> 启动账号(qu / gu / p1 / default ...)"
echo " claude list 列出账号"
echo " <id> 短命令(与 claude <id> 相同,自动注册)"
;;
*)
"$profiles/claude-use.sh" "$@"
;;
esac
}
_claude_register_account_shortcuts() {
local profiles="$CLAUDE_PROFILES_DIR"
local id
[[ -x "${profiles}/claude-accounts-list.sh" ]] || return 0
while IFS= read -r id; do
[[ -n "$id" && "$id" != "default" ]] || continue
eval "claude-${id}() { claude ${id} \"\$@\"; }"
if ! whence -w "$id" >/dev/null 2>&1; then
eval "${id}() { claude ${id} \"\$@\"; }"
fi
done < <("${profiles}/claude-accounts-list.sh" --ids)
}
_claude_oauth_run() {
"${CLAUDE_PROFILES_DIR}/oauth-run.sh" "$@"
}
_claude_px_login() {
local name=$1
echo "将在 Safari 中打开 Claude Pro 登录页(~/.claude-${name})"
_claude_oauth_run "${HOME}/.claude-${name}" claude auth login --claudeai
}
_claude_px_status() {
_claude_oauth_run "${HOME}/.claude-${1}" claude auth status
}
_claude_px_logout() {
local name=$1
_claude_oauth_run "${HOME}/.claude-${name}" claude auth logout
echo "已退出 claude-${name} 登录(~/.claude-${name})"
}
claude-p1-login() { _claude_px_login p1; }
claude-p1-status() { _claude_px_status p1; }
claude-p1-logout() { _claude_px_logout p1; }
claude-p1-init() { "${CLAUDE_PROFILES_DIR}/init-oauth-profile.sh" p1; }
claude-p2-login() { _claude_px_login p2; }
claude-p2-status() { _claude_px_status p2; }
claude-p2-logout() { _claude_px_logout p2; }
claude-p2-init() { "${CLAUDE_PROFILES_DIR}/init-oauth-profile.sh" p2; }
claude-p3-login() { _claude_px_login p3; }
claude-p3-status() { _claude_px_status p3; }
claude-p3-logout() { _claude_px_logout p3; }
claude-p3-init() { "${CLAUDE_PROFILES_DIR}/init-oauth-profile.sh" p3; }
ccgui-profiles-sync() { "${CLAUDE_PROFILES_DIR}/ccgui-profiles-sync.sh"; }
ccgui-use() { "${CLAUDE_PROFILES_DIR}/ccgui-use.sh" "$@"; }
claude-profiles-sync() { "${CLAUDE_PROFILES_DIR}/sync-all-settings.sh"; }
sanitize-oauth-profiles() { "${CLAUDE_PROFILES_DIR}/sanitize-oauth-profile.sh" "${1:-all}"; }
_claude_register_account_shortcuts
第五步:编辑 ~/.zshrc(加载账号选择器)
| 项目 | 说明 |
|---|---|
| 操作文件 | ~/.zshrc |
| 插入位置 | 文件末尾 |
只需追加下面几行 (逻辑都在 claude-accounts.zsh 里,便于升级脚本):
bash
# ========== Claude Code 多账号 START ==========
export PATH="${HOME}/.local/bin:${PATH}"
(( $+functions[claude] )) && unfunction claude 2>/dev/null
[[ -f "${HOME}/.config/claude-profiles/claude-accounts.zsh" ]] \
&& source "${HOME}/.config/claude-profiles/claude-accounts.zsh"
# ========== Claude Code 多账号 END ==========
注意:
- 安装后
claude是函数 ,用于选账号;不再等于「裸」官方命令。主号请用claude default。 - 每改
~/.zshrc或claude-accounts.zsh后执行source ~/.zshrc;新开终端 后短命令qu/p1才会按最新.key注册。 - 完整
claude-accounts.zsh内容见仓库scripts/claude-accounts.zsh(与~/.config/claude-profiles/中文件一致)。
第六步:让配置生效并自检
bash
source ~/.zshrc
# 1) 账号选择器是否加载
type claude qu p1 claude-p1-login claude-profiles-sync ccgui-use
# 2) 脚本是否可执行(应 ≥ 12 个 .sh)
ls -la ~/.config/claude-profiles/*.sh
test -f ~/.config/claude-profiles/claude-accounts.zsh && echo "zsh OK"
# 3) 列出自动发现的账号
claude list
# 3) 仅 qu.key 时也可同步(会跳过 gu/zheng)
claude-profiles-sync
# 4) Safari 打开器
test -x ~/.local/bin/claude-open-safari && echo "Safari OK"
成功标志:
| 检查 | 期望 |
|---|---|
type claude |
shell function from .../claude-accounts.zsh |
type qu |
短命令已注册(若与系统命令冲突则仅有 claude qu) |
ls .../*.sh |
多个 -rwxr-xr-x |
claude list |
列出 gu/qu/zheng/p1.../default |
claude-profiles-sync |
每个 .key 一行 ✓ .../settings.json |
注意:
- 每开一个新终端 都会读
~/.zshrc;改脚本后当前窗口需source ~/.zshrc,新增.key建议新开终端 以注册xxx短命令。
4.2 日常使用:claude 账号选择器(推荐)
搭好后,每天只需本节 ,不必记
ccgui-use(终端选账号时会自动调用,见 4.5)。
命令一览
| 你想... | 命令 |
|---|---|
| 弹出菜单选账号 | claude |
| 直接启动智谱 qu | claude qu 或 qu |
| 直接启动 Pro p1 | claude p1 或 p1(需已 claude-p1-login) |
| 官方主号 | claude default |
| 列出所有账号 | claude list |
| 帮助 | claude help |
| 不同步 IDEA | CLAUDE_SKIP_CCGUI_SYNC=1 claude qu |
交互示例
bash
source ~/.zshrc
claude
终端会显示类似:
text
1) gu 智谱 · gu
2) qu 智谱 · qu
3) zheng 智谱 · zheng
4) p1 Pro OAuth · p1(Safari)
5) p2 Pro OAuth · p2(Safari)
6) p3 Pro OAuth · p3(Safari)
7) default 官方 Pro(~/.claude · 主账号)
输入编号或账号 id:
输入 3 或 qu 即进入智谱 qu,不会修改 ~/.claude-p1 等其它目录。
自动发现新账号
| 类型 | 你怎么加 | 菜单何时更新 |
|---|---|---|
| 智谱 | 新建 ~/.config/claude-profiles/新名.key → claude-profiles-sync |
新开终端 后 claude list 出现 新名 |
| Pro 分身 | mkdir 或 claude-p4-init 得到 ~/.claude-p4(p+数字) |
新开终端后出现 p4 |
与 IDEA 的关系
- 执行
claude qu/claude p1时,claude-use.sh会自动 运行对应的ccgui-use(写入~/.claude/~/.codemoss)。 - 智谱 :IDEA 里仍要在 CC GUI 供应商 中选「智谱 · qu」(一般不用手敲
ccgui-use qu)。 - Pro pN :换账号后请 重启 IDEA,并选「CLI 登录信息」。
- 上次终端选的 id 记在
~/.config/claude-profiles/last-terminal-account(仅供查看)。
隔离说明(你最关心的)
- 智谱只读写
~/.claude-qu(等),Pro 只读写~/.claude-p1(等),脚本不会把 qu 的 Key 写进 p1 目录。 - 终端智谱启动时会临时隐藏
~/.claude/settings.json里的智谱项,避免 CLI 合并配置导致glm-4.7;退出终端会话后恢复,供 IDEA 使用。
4.3 配置智谱账号(首次或改 Key)
以账号名 qu 为例(gu、zheng 完全同样,只改文件名)。
第一步:写入密钥文件
若已在 4.1 第三步 创建过
qu.key,可跳过;更换 Key 时在此修改文件后执行第二步。
| 项目 | 说明 |
|---|---|
| 操作文件 | ~/.config/claude-profiles/qu.key(新建,一行,无引号) |
| 文件内容 | 你的智谱 API Key,例如:xxxxxxxx.yyyyyyyy |
| 权限 | chmod 600 ~/.config/claude-profiles/qu.key |
注意: .key 不要提交 Git;博客截图请打码。
第二步:同步生成 settings.json
bash
claude-profiles-sync
| 项目 | 说明 |
|---|---|
| 生成文件 | ~/.claude-qu/settings.json |
| 成功标志 | 终端打印 ✓ /Users/你的用户名/.claude-qu/settings.json |
生成后的 env 应类似下面(Key 换成你自己的):
json
"env": {
"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-4.7",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-4.7",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-4.5-air",
"API_TIMEOUT_MS": "3000000",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"ANTHROPIC_API_KEY": "你的智谱密钥"
}
注意: 此脚本不会修改 ~/.claude,官方默认目录保持独立。
第三步:终端使用智谱
bash
claude qu
# 或
qu
进入 Claude Code 后,应用的是 ~/.claude-qu 下的配置。改 .key 后重复 第二步 再启动。
4.4 配置 Pro 分身(以 p1 为例;p2、p3 替换名字即可)
每个 Pro 分身 = 一个独立邮箱 + 目录 ~/.claude-pN。
第一步:初始化目录
bash
claude-p1-init
| 项目 | 说明 |
|---|---|
| 操作结果 | 创建 ~/.claude-p1/settings.json |
| 成功标志 | 终端 ✓ .../.claude-p1/settings.json |
Pro 分身的 settings.json 不应含智谱字段 ,env 通常只有代理(若你在默认 ~/.claude 里配过):
json
{
"theme": "light",
"model": "opus",
"env": {
"http_proxy": "http://127.0.0.1:7890",
"https_proxy": "http://127.0.0.1:7890"
},
"permissions": { "allow": ["Bash(*)", "Read(*)", "..."] }
}
注意: 若 env 里出现 ANTHROPIC_API_KEY 或 ANTHROPIC_BASE_URL,说明混入了智谱配置,请执行:
bash
sanitize-oauth-profile.sh p1 # 或 claude-p1-init
第二步:Safari 登录该邮箱
bash
claude-p1-login
- 终端提示后,Safari 应自动打开登录页。
- 用第二个 Claude Pro 邮箱登录(与默认
claude用的邮箱不同)。 - 若未自动打开:在登录提示处按
c复制 URL → Safari 地址栏 Cmd+V。
第三步:确认登录成功
bash
claude-p1-status
成功标志: 输出里 Logged in 为 yes,且 subscriptionType 为 pro(或你的订阅类型)。
第四步:日常使用
bash
p1
# 或
claude p1
未登录时会提示先 claude-p1-login。p2 / p3 替换名字即可。
4.5 在 IDEA CC GUI 使用智谱(分步)
第一步:终端选账号(推荐,代替手敲 ccgui-use)
bash
claude-profiles-sync # 若刚改过 .key
ccgui-profiles-sync # 首次或新增智谱账号时
claude qu # 自动 ccgui-use qu + 启动终端
若你习惯手动,仍可:
bash
ccgui-use qu # 会自动 restore,无需先 restore
| 项目 | 说明 |
|---|---|
| 修改文件 | ~/.codemoss/config.json |
| 同时复制 | ~/.claude-qu/settings.json → 真实 ~/.claude/settings.json |
| 自动 restore | 若此前执行过 ccgui-use p1,ccgui-use qu 会先恢复 ~/.claude,不会 把智谱 Key 写进 ~/.claude-p1 |
~/.codemoss/config.json 中应出现(结构示意):
json
{
"version": 2,
"claude": {
"current": "zhipu-qu",
"providers": {
"zhipu-qu": {
"name": "智谱 · qu",
"source": "claude-profiles",
"settingsConfig": { "env": { "...": "..." } }
}
}
}
}
第二步:IDEA 里选择供应商
- 打开 IntelliJ IDEA → CC GUI → 设置 → 供应商管理。
- 找到 「智谱 · qu」 (或 gu / zheng)→ 授权并启用。
- 不要选「使用 CLI 登录信息」(那是 Pro OAuth 用的)。
第三步:验证
在 CC GUI 发一条简单请求;若仍像旧账号:完全退出 IDEA 再打开(不是只关项目窗口)。
改 Key 后: claude-profiles-sync → ccgui-profiles-sync → claude qu。
从 Pro 切回智谱: claude qu 或 ccgui-use qu,不必 先 restore。
4.6 在 IDEA CC GUI 使用 Pro 分身(p1 / p2 / p3)
CC GUI 只认
~/.claude,不认CLAUDE_CONFIG_DIR。所以要用ccgui-use把~/.claude临时指到~/.claude-pN。
第一步:终端先完成该分身登录
bash
claude-p2-init # 仅首次
claude-p2-login
claude-p2-status # 确认已登录
第二步:切换 ~/.claude 为符号链接
bash
claude p2 # 推荐:自动 ccgui-use p2
# 或
ccgui-use p2 # 手动
| 项目 | 说明 |
|---|---|
| 备份 | 原 ~/.claude 目录 → ~/.claude-ccgui-stash(仅第一次) |
| 链接 | ~/.claude → ~/.claude-p2 |
| 验证 | ls -la ~/.claude 应显示 -> /Users/你/.claude-p2 |
第三步:重启 IDEA 并选 CLI 登录
- 完全退出 IntelliJ IDEA(Cmd+Q),再重新打开。
- CC GUI → 供应商管理 → 选 「使用 CLI 登录信息」 → 授权。
第四步:用完后恢复(可选)
bash
ccgui-use restore
再重启 IDEA。终端仍可直接 claude-p2,不依赖 symlink。
注意:
p1/p2/p3不能同时在 IDEA 生效 ;换 Pro 分身前若~/.claude已链到其它pN,需先ccgui-use restore。ccgui-use p2之后,裸命令claude也会走 p2 目录------这是预期行为;终端 Pro 请始终用claude-p2,不要依赖裸claude。- 从 Pro 切 IDEA 智谱 :
claude qu,脚本会自动 restore。
4.7 实操检查清单(给别人验收用)
| 检查项 | 命令 / 操作 | 期望结果 |
|---|---|---|
| Safari 脚本可执行 | test -x ~/.local/bin/claude-open-safari |
无输出即通过 |
| 终端命令已加载 | type claude-p1 |
shell function |
| 智谱 settings | ls ~/.claude-qu/settings.json |
文件存在 |
| Pro 目录 | `grep -E 'ANTHROPIC_API_KEY | bigmodel' ~/.claude-p1/settings.json` |
| Pro 清理 | sanitize-oauth-profiles |
各 pN「已是纯 Pro 配置」 |
| Pro 已登录 | claude-p1-status |
subscriptionType: pro,无 apiKeySource 来自 settings |
| 账号菜单 | claude list |
含 qu/p1/default 等 |
| IDEA 智谱 | claude qu + IDEA 选供应商 |
~/.claude-p1 仍无 API Key |
| IDEA Pro | claude p1 + 重启 IDEA |
CLI 登录信息可用 |
| 主号无冲突 | claude default |
无 glm + Auth conflict |
五、原理补充(可选阅读)
实操步骤与完整文件内容见第四节。本节只解释「为什么这样设计」。
5.1 核心机制:CLAUDE_CONFIG_DIR
Claude Code 支持环境变量 CLAUDE_CONFIG_DIR :设置后,配置、凭证、会话、插件都落在指定目录(如 ~/.claude-qu)。
本方案在启动前用 env -u ANTHROPIC_API_KEY ... 清掉 shell 里其它账号的环境变量 ,再设置 CLAUDE_CONFIG_DIR,避免 API Key 污染 OAuth 流程。
5.2 终端与 IDEA 如何对齐?
CC GUI 只读 ~/.claude + ~/.codemoss,不认 CLAUDE_CONFIG_DIR。终端用 claude-use.sh 设 CLAUDE_CONFIG_DIR 隔离各账号目录。
| 场景 | 终端(推荐) | IDEA(终端已自动 ccgui-use 时) |
|---|---|---|
| 智谱 qu | claude qu → ~/.claude-qu |
供应商选「智谱 · qu」 |
| Pro p1 | claude p1 → ~/.claude-p1 |
重启 IDEA →「CLI 登录信息」 |
| 主号 | claude default → ~/.claude |
ccgui-use default 或 CLI 登录 |
CLI 会合并 ~/.claude/settings.json (即使用 CLAUDE_CONFIG_DIR),因此:
oauth-hide-global-zhipu.sh/oauth-restore-global-zhipu.sh:Pro / 智谱终端启动前后,临时隐藏或恢复主目录里的智谱 settings,避免glm-4.7与 Auth conflict。ensure-default-claude-settings.sh:保证~/.claude主号模板无 智谱 API Key;智谱只留在~/.claude-qu等目录。sanitize-oauth-profile.sh:清理~/.claude-pN中的智谱字段,并固定model: opus、官方ANTHROPIC_BASE_URL。claude-use.sh:启动前调用ccgui-use,使 IDEA 与终端当前账号一致(可用CLAUDE_SKIP_CCGUI_SYNC=1关闭)。ccgui-use qu:若~/.claude链到pN,先 restore 再写智谱 settings,避免污染 Pro 目录。
5.3 脚本与命令对照(速查)
| 脚本 / 命令 | 输入 | 输出 / 效果 |
|---|---|---|
claude / claude-pick.sh |
无参数 | 交互选账号 |
claude-use.sh / claude qu |
账号 id | 启动对应目录 + 自动 ccgui-use |
claude-accounts-list.sh |
--- | 列出 *.key 与 pN |
sync-all-settings.sh |
全部 *.key |
~/.claude-<名>/settings.json |
oauth-run.sh |
配置目录 | Pro 启动(含 hide/restore) |
ensure-default-claude-settings.sh |
--- | 主号 ~/.claude 去智谱 Key |
init-oauth-profile.sh / claude-pN-init |
pN | 初始化 Pro 目录 |
sanitize-oauth-profile.sh |
pN / all | 清理 Pro 智谱污染 |
ccgui-profiles-sync |
--- | 注册 IDEA 智谱供应商 |
ccgui-use |
qu / pN / default | 手动切换 IDEA(可选) |
5.4 终端常用命令速查
bash
source ~/.zshrc
# 日常:选账号
claude # 菜单
claude qu # 智谱
claude p1 # Pro 分身(需已 login)
claude default # 官方主号
# 智谱:改 .key 后
claude-profiles-sync && claude qu
# Pro p1:首次
claude-p1-init && claude-p1-login && claude p1
# 仅终端、不同步 IDEA
CLAUDE_SKIP_CCGUI_SYNC=1 claude qu
# 手动恢复 IDEA 默认 ~/.claude 目录
ccgui-use restore
六、IDEA CC GUI:两种登录方式的区别
在 设置 → 供应商管理 → Claude Code 底部常见两项:
6.1 使用本地 settings.json
- 读取
~/.claude/settings.json里env的ANTHROPIC_API_KEY、ANTHROPIC_BASE_URL等。 - 适合:智谱、自建 API、代理配置。
- 不适合 单独放在
~/.claude-p1的 Pro OAuth(插件不会自动读 p1 目录)。
6.2 使用 CLI 登录信息
- 复用终端
claude auth login的订阅 OAuth(macOS 钥匙串 +~/.claude相关数据)。 - 适合:Claude Pro / Max 官方订阅。
- 插件实现上硬编码
getClaudeDir() → ~/.claude,不读取CLAUDE_CONFIG_DIR。
因此:终端的 claude p1 与 IDEA 默认并不自动读 ~/.claude-p1 目录 ;本方案在 claude p1 时自动 ccgui-use p1 把 ~/.claude 指过去,IDEA 仍需重启并选「CLI 登录信息」。
七、CC GUI 操作流程速查(详细步骤见第四节)
逐步操作、文件路径、示例内容:第四节 4.4 / 4.5。此处只保留最短路径。
| 目标 | 终端(推荐) | IDEA 里选什么 |
|---|---|---|
| 智谱 qu | claude-profiles-sync → ccgui-profiles-sync → claude qu |
智谱 · qu |
| Pro p2 | claude-p2-login → claude p2 → 重启 IDEA |
CLI 登录信息 |
| 主号 | claude default |
CLI 或本地 settings |
| 恢复目录 | ccgui-use restore → 重启 IDEA |
--- |
7.1 流程图(IDEA 侧)
智谱
Pro pN
主号
要用哪个账号?
账号类型
claude qu
自动 ccgui-use qu
IDEA 选 智谱·qu
claude-pN-login
claude pN
自动 ccgui-use pN
重启 IDEA
CLI 登录信息
claude default
输入claude-p3

回车

这些精彩瞬间见证中俄元首友谊

浏览器中,会提示授权

点击授权,复制授权码


回车

可以通过ccgui-use p1 ,p2 等,就可以去使用不同的模型了。 同时也可以在ccgui 界面中去设置 。


八、常见问题
Q1:Safari 打开登录页报 Invalid response_type: missing
原因 :从终端折行显示 里手选复制 URL,response_type=code 被拆成 response_ + type=code。
解决:
- 在 Claude Code 登录提示处按
c复制整段 URL; - Safari 地址栏 Cmd+V 粘贴;
- 或依赖
claude-open-safari自动打开(勿手抄)。
Q2:IDEA 里换了供应商仍像旧账号
- 完全退出 IDEA 再开;
- 智谱确认选的是 供应商 而非 CLI 登录;
- 执行
ccgui-use qu后检查~/.claude/settings.json是否已更新(且~/.claude不是 指向pN的符号链接:ls -la ~/.claude)。
Q3:裸命令 claude 和以前的官方 claude 一样吗?
不一样。 安装本方案后,claude 是账号选择器(函数)。官方主号请用:
bash
claude default
若 ccgui-use p1 后 ~/.claude 变成符号链接,可 ccgui-use restore;终端 Pro 始终用 claude p1 / p1,不依赖 symlink。
Q4:如何使用 p3?
与 p1 完全相同,仅把命令里的 p1 换成 p3。完整分步见 第四节 4.3(Pro 分身) 与 4.5(IDEA Pro)。
bash
source ~/.zshrc
claude-p3-init && claude-p3-login && claude-p3-status && claude-p3
ccgui-use p3 # 重启 IDEA →「CLI 登录信息」
Q5:密钥安全
.key文件权限建议chmod 600;- 勿把
.key、settings.json里的 Key 提交到 Git; - 博客/截图打码 API Key。
Q6:Auth conflict: Both a token and an API key are set
原因 :~/.claude/settings.json 里同时有 OAuth 与 智谱 API Key (常见于 ccgui-use qu 写入智谱后,又用裸 claude 走主号),或 Pro 目录被智谱污染。
解决:
bash
ensure-default-claude-settings.sh # 或 claude default 时自动执行
sanitize-oauth-profiles
# Pro 分身再:
claude-p1-logout && claude-p1-login && claude p1
Q7:欢迎页显示 glm-4.7 · API Usage Billing 或 Pro 显示 glm
原因 :CLI 合并 了 ~/.claude/settings.json 里的智谱 env;或 Pro 目录曾污染。
解决:
- 不要用裸
claude当主号,用claude default或claude p1 sanitize-oauth-profiles p1- 退出 Claude Code,
exit后新开终端再进 - 仍不对:会话内
/model opus
Q8:ccgui-use 还要不要手敲?
日常不必。 claude qu / claude p1 会自动 ccgui-use。仅当要只改 IDEA、不启终端 时手敲 ccgui-use。智谱切换时脚本会 自动 restore ,不必先 restore。
Q9:logout 后直接 claude p1 提示未登录?
正常。 应先 claude-p1-login,再 claude p1。
Q10:新增智谱账号后菜单没有?
执行 claude-profiles-sync 后 新开一个终端 ,再 claude list。短命令 新名 在注册时若与系统命令冲突,请只用 claude 新名。
九、不同用户场景的配置建议
9.1 个人开发者:成本优化配置
推荐方案:
- 主账号 :
claude default→ 官方 Pro(复杂推理、Opus) - 副账号 :
claude qu或qu→ 智谱 API(代码生成、文档)
配置策略:
bash
claude default # 复杂推理、架构设计
claude qu # 生成代码、写文档
成本分析:
- 全用 Pro:$20/月
- 混合使用:约 5/月(Pro)+ 智谱 API 费用(通常 2-5/月)
- 节省:40-60%
9.2 自由职业者/咨询顾问:客户隔离配置
推荐方案:
- 个人用途 :
claude→ 个人 Pro 账号 - 客户 A :
claude-client-a→ 独立智谱账号 - 客户 B :
claude-client-b→ 独立智谱账号 - 备用账号 :
claude-p1→ 第二个 Pro(用于高价值任务)
配置策略:
bash
# 客户隔离配置
claude-client-a-init() { _init_client_profile "client-a"; }
claude-client-b-init() { _init_client_profile "client-b"; }
# 审计友好:每个客户有独立的配置目录和会话历史
# ~/.claude-client-a/history/ → 只包含客户 A 的对话
# ~/.claude-client-b/history/ → 只包含客户 B 的对话
价值:
- ✅ 客户数据完全隔离,满足保密要求
- ✅ 每个客户的成本独立核算
- ✅ 审计时可提供完整的、分离的对话记录
- ✅ 一个账号出问题不影响其他客户
9.3 小团队/创业公司:资源共享配置
推荐方案:
- 团队共享 :
claude-team→ 团队 Pro 账号(共享配额) - 个人专用 :
claude-$USER→ 每个成员的独立智谱账号 - 测试/实验 :
claude-dev→ 开发测试专用
配置策略:
bash
# 团队配置(在共享服务器上)
# ~/.config/claude-profiles/team.key → 团队共享的 Pro 凭证
# ~/.config/claude-profiles/alice.key → Alice 的智谱账号
# ~/.config/claude-profiles/bob.key → Bob 的智谱账号
# 使用约定
# 工作日上午 9-18 点:用 claude-team(共享 Pro)
# 其他时间/私人项目:用 claude-$USER(个人配额)
管理建议:
- 定期审查各账号使用量(
claude-team-status) - 设置配额预警(智谱 API 用量监控)
- 建立账号使用规范(文档化团队约定)
9.4 企业用户:合规与安全配置
推荐方案:
- 生产环境 :
claude-prod→ 企业 Pro 账号(审计开启) - 开发环境 :
claude-dev→ 开发专用智谱账号 - 测试环境 :
claude-test→ 测试专用账号 - 紧急备用 :
claude-emergency→ 故障切换账号
安全增强:
bash
# 1. 密钥文件权限加固
chmod 600 ~/.config/claude-profiles/*.key
# 2. 敏感操作审计(在 zshrc 中增加)
claude-prod() {
echo "$(date): $USER switched to prod account" >> ~/.claude-audit.log
_claude_profile prod "$@"
}
# 3. 定期轮换 API Key
# 30 天自动提醒:ccgui-rotate-keys prod
合规要求满足:
- ✅ 环境隔离(生产/开发/测试)
- ✅ 操作审计(账号切换日志)
- ✅ 权限最小化(测试账号无生产访问权限)
- ✅ 应急预案(备用账号快速切换)
9.5 技术写作者/内容创作者:多模型对比配置
推荐方案:
- 官方基准 :
claude-official→ 用于获取"官方答案" - 智谱对比 :
claude-zhipu→ 用于成本敏感的生成 - 其他模型 :
claude-experimental→ 测试新模型/供应商
工作流示例:
bash
# 写作场景:对比不同模型的输出
# 1. 用官方 Opus 生成高质量版本
claude-official "写一篇关于 X 的技术文章,用 Opus"
# 2. 用智谱生成经济版
claude-zhipu "写一篇关于 X 的技术文章,用 Sonnet"
# 3. 对比并选择
# 或者在需要时切换回官方账号精修
价值:
- ✅ 快速对比不同模型的输出质量
- ✅ 在质量和成本之间灵活选择
- ✅ 积累模型选择的实战经验
9.6 场景选择决策树
是
否
客户隔离
环境隔离
小团队
企业
你的主要需求是什么?
成本敏感
需要隔离
团队协作
配置:Pro 主 + 智谱副
配置:纯 Pro 或多 Pro
配置:每个客户独立账号
配置:prod/dev/test 分离
配置:共享 + 个人混合
配置:企业级审计方案
目标:成本降 60-80%
目标:合规 + 审计友好
目标:资源共享 + 独立配额
十、一键命令备忘录
bash
source ~/.zshrc
# 日常:选账号(自动对齐 IDEA)
claude
claude qu
claude p1
claude default
claude list
# 智谱:改 key
claude-profiles-sync && ccgui-profiles-sync && claude qu
# Pro 清理 / 首次
sanitize-oauth-profiles
claude-p1-init && claude-p1-login && claude p1
# 仅终端、不同步 IDEA
CLAUDE_SKIP_CCGUI_SYNC=1 claude qu
# 恢复 IDEA 默认 ~/.claude 目录
ccgui-use restore
十一、总结
| 场景 | 推荐做法 |
|---|---|
| 日常入口 | claude 菜单,或 qu / p1 / claude default |
| 终端智谱 | claude qu + claude-profiles-sync |
| 终端 Pro | claude pN + claude-pN-login |
| IDEA 对齐 | 终端选账号时自动 ccgui-use;智谱选供应商,Pro 重启 IDEA |
| Auth conflict / glm | claude default、主号 ensure-default-claude-settings、sanitize-oauth-profiles |
| 新增智谱账号 | 新建 xxx.key → sync → 新开终端 |
| 新增 Pro | ~/.claude-p4 + claude-p4-init |
本方案:终端 用 CLAUDE_CONFIG_DIR + oauth-hide 防合并污染;IDEA 用 ccgui-use(可由 claude-use.sh 自动触发)写 ~/.claude / ~/.codemoss;各账号目录互不写 。脚本以仓库 scripts/ 为准,安装到 ~/.config/claude-profiles/,~/.zshrc source claude-accounts.zsh。
文档与脚本:仓库 多账号/scripts/ → ~/.config/claude-profiles/;shell:~/.zshrc source claude-accounts.zsh。插件版本更新后请以实际界面为准。