Claude Code 多账号体系实战:终端别名、脚本与 IDEA CC GUI 切换指南

适用环境 :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 邮箱 (如 p1p2);
  • 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 --- 自动发现 .keypN

三、目录与文件布局

首次搭建请直接看 [第四节](#首次搭建请直接看 第四节。)。 安装完成后,建议具备以下结构:

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 智谱:.keyclaude-profiles-sync
4 4.4 Pro 分身:claude-p1-initclaude-p1-loginp1
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 $SHELLzsh
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.keyzheng.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.keysync-all-settings.sh 会自动跳过缺失的 .key

切勿.key 提交 Git。


第四步:安装全部脚本(推荐一键复制)

~/.config/claude-profiles/ 下放齐 本仓库 scripts/ 目录下的全部文件 (含 .shclaude-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 定义 claudequp1 等命令(必装
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.shclaude-pick.shclaude-accounts-list.shoauth-run.shoauth-hide-global-zhipu.shoauth-restore-global-zhipu.shensure-default-claude-settings.shclaude-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
  • 每改 ~/.zshrcclaude-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 ququ
直接启动 Pro p1 claude p1p1(需已 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:

输入 3qu 即进入智谱 qu,不会修改 ~/.claude-p1 等其它目录。

自动发现新账号
类型 你怎么加 菜单何时更新
智谱 新建 ~/.config/claude-profiles/新名.keyclaude-profiles-sync 新开终端claude list 出现 新名
Pro 分身 mkdirclaude-p4-init 得到 ~/.claude-p4p+数字) 新开终端后出现 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 为例(guzheng 完全同样,只改文件名)。

第一步:写入密钥文件

若已在 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_KEYANTHROPIC_BASE_URL,说明混入了智谱配置,请执行:

bash 复制代码
sanitize-oauth-profile.sh p1   # 或 claude-p1-init
第二步:Safari 登录该邮箱
bash 复制代码
claude-p1-login
  1. 终端提示后,Safari 应自动打开登录页。
  2. 第二个 Claude Pro 邮箱登录(与默认 claude 用的邮箱不同)。
  3. 若未自动打开:在登录提示处按 c 复制 URL → Safari 地址栏 Cmd+V
第三步:确认登录成功
bash 复制代码
claude-p1-status

成功标志: 输出里 Logged in 为 yes,且 subscriptionTypepro(或你的订阅类型)。

第四步:日常使用
bash 复制代码
p1
# 或
claude p1

未登录时会提示先 claude-p1-loginp2 / 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 p1ccgui-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 里选择供应商
  1. 打开 IntelliJ IDEACC GUI设置供应商管理
  2. 找到 「智谱 · qu」 (或 gu / zheng)→ 授权并启用
  3. 不要选「使用 CLI 登录信息」(那是 Pro OAuth 用的)。
第三步:验证

在 CC GUI 发一条简单请求;若仍像旧账号:完全退出 IDEA 再打开(不是只关项目窗口)。

改 Key 后: claude-profiles-syncccgui-profiles-syncclaude qu

从 Pro 切回智谱: claude quccgui-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 登录
  1. 完全退出 IntelliJ IDEA(Cmd+Q),再重新打开。
  2. 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.shCLAUDE_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),因此:

  1. oauth-hide-global-zhipu.sh / oauth-restore-global-zhipu.sh :Pro / 智谱终端启动前后,临时隐藏或恢复主目录里的智谱 settings,避免 glm-4.7 与 Auth conflict。
  2. ensure-default-claude-settings.sh :保证 ~/.claude 主号模板 智谱 API Key;智谱只留在 ~/.claude-qu 等目录。
  3. sanitize-oauth-profile.sh :清理 ~/.claude-pN 中的智谱字段,并固定 model: opus、官方 ANTHROPIC_BASE_URL
  4. claude-use.sh :启动前调用 ccgui-use,使 IDEA 与终端当前账号一致(可用 CLAUDE_SKIP_CCGUI_SYNC=1 关闭)。
  5. 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 --- 列出 *.keypN
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.jsonenvANTHROPIC_API_KEYANTHROPIC_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-syncccgui-profiles-syncclaude qu 智谱 · qu
Pro p2 claude-p2-loginclaude 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

解决

  1. 在 Claude Code 登录提示处按 c 复制整段 URL;
  2. Safari 地址栏 Cmd+V 粘贴;
  3. 或依赖 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
  • 勿把 .keysettings.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 目录曾污染。

解决

  1. 不要用裸 claude 当主号,用 claude defaultclaude p1
  2. sanitize-oauth-profiles p1
  3. 退出 Claude Code,exit 后新开终端再进
  4. 仍不对:会话内 /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 ququ → 智谱 API(代码生成、文档)

配置策略

bash 复制代码
claude default    # 复杂推理、架构设计
claude qu         # 生成代码、写文档

成本分析

  • 全用 Pro:$20/月
  • 混合使用:约 5/月(Pro)+ 智谱 API 费用(通常 2-5/月)
  • 节省:40-60%

9.2 自由职业者/咨询顾问:客户隔离配置

推荐方案

  • 个人用途claude → 个人 Pro 账号
  • 客户 Aclaude-client-a → 独立智谱账号
  • 客户 Bclaude-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-settingssanitize-oauth-profiles
新增智谱账号 新建 xxx.key → sync → 新开终端
新增 Pro ~/.claude-p4 + claude-p4-init

本方案:终端CLAUDE_CONFIG_DIR + oauth-hide 防合并污染;IDEAccgui-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。插件版本更新后请以实际界面为准。

相关推荐
徐先生 @_@|||9 小时前
pycharm/IDEA + markdown + 图床(PicList)
ide·python·pycharm·intellij-idea
caibixyy9 小时前
springboot+quartz 单机和集群使用示例-【备份任务】
java·quartz
invicinble9 小时前
对于spring的bean应该有哪些领域的认识
java·后端·spring
梦想的旅途29 小时前
实现企微外部群主动发送接口:从 0 到 1 实现主动给客户发送的业务实战
java·开发语言·企业微信
是宇写的啊9 小时前
博客系统-小项目
java·数据库·spring boot·mybatis
he___H9 小时前
leetcode100-合并区间
java·数据结构·算法
janeysj9 小时前
Jupyter和LangSmith——AI Agent开发调试监控工具
ide·人工智能·jupyter
nbsaas-boot9 小时前
Drools 规则引擎实战:原理、规则语法、数据库动态规则与企业级玩法
java·数据库·python
Hwang2529 小时前
Spring 框架 -01 -单例池的一些理解
java
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题 第74题】【Mysql篇】第4题:InnoDB 和 MyISAM 的数据文件存储区别?
java·开发语言·mysql·面试