{"id":47066893,"url":"https://github.com/linuxdazhao/cc_auto_switch","last_synced_at":"2026-05-23T19:00:37.155Z","repository":{"id":308130017,"uuid":"1031643963","full_name":"Linuxdazhao/cc_auto_switch","owner":"Linuxdazhao","description":"一个强大的命令行工具，用于管理多个 Claude API 配置并通过环境变量在它们之间轻松切换。支持安全存储多个 API 配置、一键切换、交互式选择模式和 Shell 补全功能。","archived":false,"fork":false,"pushed_at":"2026-05-16T14:36:47.000Z","size":9813,"stargazers_count":15,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-16T15:56:30.959Z","etag":null,"topics":["api","claude","cli","configuration","environment-variables","rust","terminal"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Linuxdazhao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-08-04T05:53:17.000Z","updated_at":"2026-05-16T14:36:47.000Z","dependencies_parsed_at":"2025-09-06T17:28:03.361Z","dependency_job_id":"58312786-76f2-4a4a-9fe7-0ccdc659c5f6","html_url":"https://github.com/Linuxdazhao/cc_auto_switch","commit_stats":null,"previous_names":["linuxdazhao/cc_auto_switch"],"tags_count":36,"template":false,"template_full_name":null,"purl":"pkg:github/Linuxdazhao/cc_auto_switch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Linuxdazhao%2Fcc_auto_switch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Linuxdazhao%2Fcc_auto_switch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Linuxdazhao%2Fcc_auto_switch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Linuxdazhao%2Fcc_auto_switch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Linuxdazhao","download_url":"https://codeload.github.com/Linuxdazhao/cc_auto_switch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Linuxdazhao%2Fcc_auto_switch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33408490,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T18:09:33.147Z","status":"ssl_error","status_checked_at":"2026-05-23T18:09:31.380Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","claude","cli","configuration","environment-variables","rust","terminal"],"created_at":"2026-03-12T05:05:53.875Z","updated_at":"2026-05-23T19:00:37.136Z","avatar_url":"https://github.com/Linuxdazhao.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cc-switch\n\n**[English](README_EN.md) | 中文**\n\n[![Crates.io](https://img.shields.io/crates/v/cc-switch.svg)](https://crates.io/crates/cc-switch)\n[![Downloads](https://img.shields.io/crates/d/cc-switch.svg)](https://crates.io/crates/cc-switch)\n[![CI](https://github.com/Linuxdazhao/cc_auto_switch/actions/workflows/ci.yml/badge.svg)](https://github.com/Linuxdazhao/cc_auto_switch/actions/workflows/ci.yml)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE_zh)\n[![Platforms](https://img.shields.io/badge/platforms-Linux%20%7C%20macOS%20%7C%20Windows-blue)](#安装)\n\n**一个 CLI 工具，用于管理多个 Claude / Codex 配置并在它们之间自动切换。全平台支持：Linux、macOS、Windows（x86_64 + ARM64）。**\n\n\u003e ⚡ **零后台进程**：cc-switch 切换配置、启动 Claude / Codex 后**立即退出**——不留守护进程、不监听端口、不占用资源。\n\u003e\n\u003e 📘 **Codex 用户**：完整配置管理文档请直接查看 [docs/codex.md](docs/codex.md)。\n\n---\n\n## 核心特性\n\n- 🚀 **零后台** — 启动 Claude / Codex 后立即退出，绝不驻留\n- 🛡️ **默认 Bypass Permissions On** — cc-switch 启动 Claude 时自动加 `--dangerously-skip-permissions`，工具调用不再每次确认（详见下方说明）\n- 🧩 **多配置切换** — 交互式 TUI + `use` 快捷命令\n- ⌨️ **天然支持 Vim 键位** — 交互模式下 `j` / `k` 上下移动、`n` / `p` 翻页，专为 Vim 极客而生\n- 🎯 **StatusLine 集成** — 在 Claude Code 状态栏实时显示当前别名（详见 [StatusLine 集成](#statusline-集成)）\n- ⚡ **全 Shell 补全 + Fish 动态别名补全** — Fish / Zsh / Bash / PowerShell / Elvish 全部支持，Fish 额外提供 `\u003cTab\u003e` 实时列出配置名\n- 📂 **Codex 支持** — 同一工具管理 Claude 和 OpenAI Codex 两套认证\n- 🌍 **全平台** — macOS / Linux / Windows（x86_64 + ARM64），自动处理 Windows 上的 npm `claude.cmd` / `codex.cmd` shim\n\n\u003e 🛡️ **关于默认 Bypass Permissions**\n\u003e\n\u003e 无论是 `cc-switch use \u003cname\u003e` 还是交互模式选择配置，cc-switch 都会**自动以 `--dangerously-skip-permissions` 启动 Claude**——文件读写、Bash 执行等操作不再逐条弹出确认。这是为极客 / 重度用户优化的默认行为。\n\n## 快速开始\n\n```bash\n# 安装\ncargo install cc-switch\n\n# ===== Claude 配置 =====\ncc-switch add work sk-ant-work-xxx https://api.anthropic.com\ncc-switch                       # 进入交互菜单，选择 'work'\ncc-switch use work              # 或直接切换并启动 Claude（cc-switch 随后退出）\n\n# ===== Codex 配置 =====（完整文档：docs/codex.md）\ncc-switch codex add work --from-file              # 默认从 ~/.codex/auth.json 导入\ncc-switch codex use work        # 切换并启动 Codex\n\n# 列出所有配置\ncc-switch list                  # Claude\ncc-switch codex list            # Codex\n```\n\n## 安装\n\n### macOS / Linux\n\n**方式 1 — Homebrew（推荐）：**\n\n```bash\nbrew install Linuxdazhao/cc-switch/cc-switch\n# 等价的显式写法：\n# brew tap Linuxdazhao/cc-switch \u0026\u0026 brew install cc-switch\n```\n\n**方式 2 — Cargo：**\n\n```bash\ncargo install cc-switch\n```\n\n**方式 3 — 预编译二进制：** 从 [Releases](https://github.com/Linuxdazhao/cc_auto_switch/releases) 下载对应架构的 `.tar.gz`，将 `cc-switch` 放到 `PATH` 中。\n\n### Windows\n\n**方式 1 — Scoop（推荐，v0.1.18+）：**\n\n```powershell\nscoop bucket add cc-switch https://github.com/Linuxdazhao/scoop-cc-switch\nscoop install cc-switch\n```\n\n**方式 2 — Cargo：**\n\n```powershell\ncargo install cc-switch\n```\n\n**方式 3 — 预编译二进制：** 从 [Releases](https://github.com/Linuxdazhao/cc_auto_switch/releases) 下载对应架构的 `.zip`，将 `cc-switch.exe` 放到 `PATH` 中。\n\n## 主要命令\n\n### Claude 配置管理\n\n| 命令 | 作用 |\n|------|------|\n| `cc-switch add \u003c名称\u003e` | 添加新配置 |\n| `cc-switch list` | 显示所有配置（JSON 或纯文本） |\n| `cc-switch remove \u003c名称...\u003e` | 删除一个或多个配置 |\n| `cc-switch use \u003c名称\u003e` | 快速切换配置并启动 Claude（启动后 cc-switch 退出） |\n| `cc-switch` | 进入交互模式 |\n\n### Codex 配置管理\n\n| 命令 | 作用 |\n|------|------|\n| `cc-switch codex add \u003c名称\u003e` | 添加新配置 |\n| `cc-switch codex list` | 显示所有配置 |\n| `cc-switch codex remove \u003c名称...\u003e` | 删除配置 |\n| `cc-switch codex use \u003c名称\u003e` | 切换配置并启动 Codex |\n| `cc-switch codex` | 进入交互模式 |\n\n完整文档：[docs/codex.md](docs/codex.md)。\n\n### 通用命令\n\n| 命令 | 作用 |\n|------|------|\n| `cc-switch statusline install` | 安装 Claude Code statusLine 包装器（显示当前别名） |\n| `cc-switch statusline uninstall` | 卸载 statusLine 包装器 |\n| `cc-switch completion \u003cshell\u003e` | 生成 Shell 补全脚本 |\n\n## 工作模式：为什么是\"零后台\"\n\ncc-switch 是一个**一次性命令**：\n\n1. 你执行 `cc-switch use work`\n2. cc-switch 修改 `~/.claude/settings.json`（或写入 `~/.codex/auth.json`）\n3. cc-switch 用新环境变量 `exec` 启动 `claude --dangerously-skip-permissions`（或 `codex`）\n4. cc-switch 进程**立即退出**——后续完全是 Claude / Codex 自己在跑\n\n这意味着：\n\n- ✅ 没有常驻进程、没有端口监听、没有 PID 锁\n- ✅ 不需要 `cc-switch start` / `cc-switch stop`\n- ✅ 关掉 Claude，环境也跟着结束，无残留\n- ✅ 退出后系统看不到任何 cc-switch 痕迹（除了配置文件）\n- 🛡️ 启动的 Claude 默认开启 bypass permissions（见上文核心特性中的说明）\n\n## 高级用法\n\n### 交互模式\n\n```bash\n# Claude 交互模式\ncc-switch\n\n# Codex 交互模式\ncc-switch codex\n\n# 导航操作（同时支持箭头键和 Vim 键位）：\n# - ↑↓ 或 k/j：上下移动\n# - 1-9：直接跳转到对应配置\n# - N/PageDown：下一页（\u003e9 个配置时）\n# - P/PageUp：上一页\n# - R：重置为默认 Claude（仅 Claude 模式）\n# - E：编辑配置\n# - Q：退出\n```\n\n### 快速切换（use 命令）\n\n```bash\n# 切换到指定配置并启动 Claude\ncc-switch use work\n\n# 切换并发送提示词\ncc-switch use work \"帮我写一个 Python 脚本\"\n\n# 切换并恢复之前的会话\ncc-switch use work --resume c8439f36-44a9-4d85-9e88-de35e004fdd4\ncc-switch use work -r c8439f36-44a9-4d85-9e88-de35e004fdd4\n\n# 切换并继续最近的会话\ncc-switch use work --continue\ncc-switch use work -c\n```\n\n### 完整配置添加\n\n```bash\n# 添加包含所有选项的配置\ncc-switch add work -t sk-ant-xxx -u https://api.anthropic.com \\\n  -m claude-3-5-sonnet-20241022 \\\n  --small-fast-model claude-3-haiku-20240307 \\\n  --max-thinking-tokens 8192 \\\n  --api-timeout-ms 300000 \\\n  --disable-nonessential-traffic 1 \\\n  --default-sonnet-model claude-3-5-sonnet-20241022 \\\n  --default-opus-model claude-3-opus-20240229 \\\n  --default-haiku-model claude-3-haiku-20240307\n\n# 使用 DeepSeek API\ncc-switch add deepseek \\\n  -t $DEEPSEEK_API_KEY \\\n  -u https://api.deepseek.com/anthropic \\\n  -m deepseek-v4-pro[1m] \\\n  --default-opus-model deepseek-v4-pro \\\n  --default-sonnet-model deepseek-v4-pro \\\n  --default-haiku-model deepseek-v4-flash \\\n  --subagent-model deepseek-v4-pro \\\n  --disable-nonessential-traffic 1 \\\n  --disable-nonstreaming-fallback 1 \\\n  --effort-level max\n\n# 强制覆盖添加\ncc-switch add work -t sk-ant-xxx -u https://api.anthropic.com -f\n\n# 交互模式添加\ncc-switch add work -i\n\n# 从 JSON 文件导入（需要显式提供别名）\ncc-switch add work --from-file                   # 从 ~/.claude/settings.json 导入\ncc-switch add work --from-file config.json       # 从指定文件导入\n```\n\n### 存储模式\n\n\u003e ⚠️ **多开 Claude 实例时务必使用 `env` 模式（默认值）。**\n\u003e\n\u003e - **`env` 模式（默认，推荐）**：写入 `settings.json` 的 `env` 字段。Claude 在启动时把这些值读入进程环境变量，之后**不再监听文件变化**。多开多窗口、多会话各自独立，互不影响。\n\u003e - **`config` 模式**：写入 `settings.json` 的根级配置字段（camelCase）。Claude 在运行时会**热读取**最新值——这意味着你切换一次配置，**所有正在运行的 Claude 实例都会被改成新配置**。除非你确实只开一个窗口并希望切换立即生效，否则不要用。\n\n```bash\ncc-switch --store env    # 写入到 env 字段（默认，多开安全）\ncc-switch --store config # 写入到根级别 camelCase（会影响正在运行的实例）\n```\n\n### 列出配置\n\n```bash\ncc-switch list           # JSON 格式（默认）\ncc-switch list -p        # 纯文本格式\n```\n\n### 移除多个配置\n\n```bash\ncc-switch remove work\ncc-switch remove work personal test-config\n```\n\n### 配置迁移\n\n```bash\n# 从旧路径迁移（~/.cc_auto_switch/）到新路径\ncc-switch --migrate\n```\n\n## StatusLine 集成\n\ncc-switch 可以在 Claude Code 的状态栏左侧**实时显示当前配置别名**，方便你随时确认正在使用哪套 API。\n\n```bash\n# 安装（首次或升级后运行）\ncc-switch statusline install\n\n# 卸载\ncc-switch statusline uninstall\n```\n\n工作方式：\n\n- cc-switch 生成一个 shell 包装脚本（`~/.claude/cc_auto_switch_statusline.sh`）\n- 自动检测 [`ccstatusline`](https://www.npmjs.com/package/ccstatusline)（优先 `bunx`，回退到 `npx`），并把它作为底层 statusLine 命令\n- 状态栏前缀会显示 `[别名]`，例如 `[work] /Users/you/project | claude-sonnet-4-6 | $0.12`\n- 如果你的 `settings.json` 里已有 statusLine 命令，会被**包装**而非覆盖\n- 卸载时自动还原为原始命令\n\n依赖：系统需安装 `bun` 或 `npm`（用来运行 ccstatusline）。\n\n## Shell 集成\n\n### 生成补全脚本\n\n\u003e **升级后请重新生成补全脚本**，以获取新子命令（如 `codex`、`statusline`）的补全支持。\n\n#### Fish / Zsh / Bash\n\n```bash\n# Fish（推荐，唯一支持动态别名补全）\ncc-switch completion fish \u003e ~/.config/fish/completions/cc-switch.fish\n\n# Zsh\ncc-switch completion zsh \u003e ~/.zsh/completions/_cc-switch\necho 'fpath=(~/.zsh/completions $fpath)' \u003e\u003e ~/.zshrc\n\n# Bash（含 Windows 上的 Git Bash）\ncc-switch completion bash \u003e ~/.bash_completion.d/cc-switch\necho 'source ~/.bash_completion.d/cc-switch' \u003e\u003e ~/.bashrc\n\n# Elvish 也受支持\ncc-switch completion elvish\n```\n\n#### PowerShell（Windows）\n\n**不要**直接将补全脚本重定向到 `$PROFILE`——这会覆盖已有的别名、模块或主题配置。请写入独立文件后再从 `$PROFILE` 中 dot-source：\n\n```powershell\n$completionDir = Split-Path -Parent $PROFILE\nif (-not (Test-Path $completionDir)) { New-Item -ItemType Directory -Path $completionDir | Out-Null }\n$completionPath = Join-Path $completionDir 'cc-switch.completion.ps1'\ncc-switch completion powershell | Out-File -Encoding utf8 $completionPath\n\n$line = \". '$completionPath'\"\nif (-not ((Test-Path $PROFILE) -and (Select-String -Path $PROFILE -Pattern ([regex]::Escape($line)) -Quiet))) {\n    Add-Content -Path $PROFILE -Value $line\n}\n```\n\n该脚本是幂等的，可以反复执行。\n\n#### CMD（Windows）\n\nCMD 没有补全机制，直接使用命令即可。\n\n### 补全支持矩阵\n\n**Fish / Zsh / Bash / PowerShell / Elvish 全部支持完整的子命令、参数、标志补全。** 此外，所有 shell 都可启用\"动态别名补全\"——按 `\u003cTab\u003e` 实时列出当前所有配置名（Fish 开箱即用；其他 shell 复制下文片段即可）。\n\n| Shell | 静态补全（命令 / 参数 / 标志） | 动态别名补全（`use \u003cTab\u003e` 列出配置） |\n|-------|------------------------------|--------------------------------------|\n| **Fish** | ✅ 自动 | ✅ **自动**（Claude + Codex 双模式） |\n| **Zsh** | ✅ 自动 | ⚙️ 需手动添加片段（[见下](#zsh-动态别名补全)） |\n| **Bash** | ✅ 自动 | ⚙️ 需手动添加片段（[见下](#bash-动态别名补全)） |\n| **PowerShell** | ✅ 自动 | ⚙️ 需手动添加片段（[见下](#powershell-动态别名补全)） |\n| **Elvish** | ✅ 自动 | ⚙️ 可用 `edit:completion:arg-completer` 自行实现 |\n\n\u003e 工作原理：`cc-switch --list-aliases` 和 `cc-switch --list-codex-aliases` 这两个标志会输出当前所有配置名，**任何 shell 都可以调用**。Fish 生成的脚本已经把它们接入补全；其他 shell 只需追加几行片段即可。\n\n### 在其他 shell 中启用动态别名补全\n\n\u003e 以下片段都是**追加**在 `cc-switch completion \u003cshell\u003e` 生成的脚本之后，**不会破坏**静态补全。\n\n#### Zsh 动态别名补全\n\n把下面内容加到 `~/.zshrc`（**必须在补全脚本被 source、`compinit` 完成之后**）：\n\n```zsh\n_cc_switch_dynamic_aliases() {\n  local -a aliases\n  local words_count=$#words\n  local cmd1=$words[2]\n  local cmd2=$words[3]\n\n  # cc-switch codex use|remove \u003cTAB\u003e\n  if [[ \"$cmd1\" == \"codex\" \u0026\u0026 (\"$cmd2\" == \"use\" || \"$cmd2\" == \"remove\") \u0026\u0026 $words_count -ge 4 ]]; then\n    aliases=(\"${(@f)$(cc-switch --list-codex-aliases 2\u003e/dev/null)}\")\n    compadd -a aliases\n    return 0\n  fi\n\n  # cc-switch use|switch|remove \u003cTAB\u003e\n  if [[ (\"$cmd1\" == \"use\" || \"$cmd1\" == \"switch\" || \"$cmd1\" == \"remove\") \u0026\u0026 $words_count -ge 3 ]]; then\n    aliases=(\"${(@f)$(cc-switch --list-aliases 2\u003e/dev/null)}\")\n    compadd -a aliases\n    return 0\n  fi\n}\n# 在 clap 生成的 _cc-switch 之前优先匹配\ncompdef _cc_switch_dynamic_aliases cc-switch\n```\n\n#### Bash 动态别名补全\n\n把下面内容加到 `~/.bashrc`（**必须在 `source ~/.bash_completion.d/cc-switch` 之后**）：\n\n```bash\n_cc_switch_with_aliases() {\n  # 先让 clap 生成的补全跑一遍（处理子命令、flag 等）\n  _cc-switch \"$@\"\n\n  # 然后在别名位置覆盖 COMPREPLY\n  local cur=\"${COMP_WORDS[COMP_CWORD]}\"\n  local prev=\"${COMP_WORDS[COMP_CWORD-1]}\"\n  local cmd1=\"${COMP_WORDS[1]:-}\"\n\n  case \"$prev\" in\n    use|switch|remove)\n      if [[ \"$cmd1\" == \"codex\" ]]; then\n        COMPREPLY=($(compgen -W \"$(cc-switch --list-codex-aliases 2\u003e/dev/null)\" -- \"$cur\"))\n      else\n        COMPREPLY=($(compgen -W \"$(cc-switch --list-aliases 2\u003e/dev/null)\" -- \"$cur\"))\n      fi\n      ;;\n  esac\n}\ncomplete -F _cc_switch_with_aliases -o nosort cc-switch\n```\n\n#### PowerShell 动态别名补全\n\nPowerShell 的 `Register-ArgumentCompleter` 可以**和现有补全共存**，无需替换。加到你的 PowerShell `$PROFILE`（或前述 `cc-switch.completion.ps1` 末尾）：\n\n```powershell\nRegister-ArgumentCompleter -CommandName cc-switch -Native -ScriptBlock {\n    param($wordToComplete, $commandAst, $cursorPosition)\n\n    $tokens = $commandAst.CommandElements | ForEach-Object { $_.ToString() }\n    $count = $tokens.Count\n    if ($count -lt 2) { return }\n\n    $cmd1 = $tokens[1]\n    $cmd2 = if ($count -ge 3) { $tokens[2] } else { '' }\n\n    # cc-switch codex use|remove \u003cTAB\u003e\n    if ($cmd1 -eq 'codex' -and ($cmd2 -eq 'use' -or $cmd2 -eq 'remove')) {\n        cc-switch --list-codex-aliases 2\u003e$null | Where-Object { $_ -like \"$wordToComplete*\" } | ForEach-Object {\n            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)\n        }\n        return\n    }\n\n    # cc-switch use|switch|remove \u003cTAB\u003e\n    if ($cmd1 -in 'use', 'switch', 'remove') {\n        cc-switch --list-aliases 2\u003e$null | Where-Object { $_ -like \"$wordToComplete*\" } | ForEach-Object {\n            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)\n        }\n    }\n}\n```\n\n### 内置别名（推荐添加）\n\n`cc-switch completion \u003cshell\u003e` 在生成补全的同时会输出推荐的 shell 别名定义。也可以手动添加：\n\n| 别名 | 等价命令 | 用途 |\n|------|----------|------|\n| `cs` | `cc-switch` | 主命令的短别名（输入 `cs` 即进入交互模式） |\n| `ccd` | `claude --dangerously-skip-permissions` | 跳过权限确认直接启动 Claude |\n| `cx` | `cc-switch codex` | Codex 子命令的短别名 |\n\n```bash\n# Fish\necho \"alias cs='cc-switch'\" \u003e\u003e ~/.config/fish/config.fish\necho \"alias ccd='claude --dangerously-skip-permissions'\" \u003e\u003e ~/.config/fish/config.fish\necho \"alias cx='cc-switch codex'\" \u003e\u003e ~/.config/fish/config.fish\n\n# Zsh\necho \"alias cs='cc-switch'\" \u003e\u003e ~/.zshrc\necho \"alias ccd='claude --dangerously-skip-permissions'\" \u003e\u003e ~/.zshrc\necho \"alias cx='cc-switch codex'\" \u003e\u003e ~/.zshrc\n\n# Bash\necho \"alias cs='cc-switch'\" \u003e\u003e ~/.bashrc\necho \"alias ccd='claude --dangerously-skip-permissions'\" \u003e\u003e ~/.bashrc\necho \"alias cx='cc-switch codex'\" \u003e\u003e ~/.bashrc\n\n# PowerShell\nSet-Alias -Name cs -Value cc-switch\nfunction ccd { claude --dangerously-skip-permissions @args }\n```\n\n添加后即可：\n\n```bash\ncs              # = cc-switch（进入交互模式）\ncs use work     # = cc-switch use work\nccd             # 快速启动 Claude（跳过权限确认）\ncx              # = cc-switch codex（进入 Codex 交互模式）\ncx use work     # = cc-switch codex use work\n```\n\n\u003e 💡 **Fish 用户提示**：使用 `cs` 别名时，按 `Tab` 同样能享受动态补全——Fish 会把别名解开到原命令进行补全。\n\n## 导入 / 导出\n\n### Claude 配置从 JSON 导入\n\n```bash\n# 显式提供别名后从指定文件导入\ncc-switch add my-work --from-file my-work-config.json\n\n# 期望的 JSON 格式：\n# {\n#   \"env\": {\n#     \"ANTHROPIC_AUTH_TOKEN\": \"sk-ant-xxx\",\n#     \"ANTHROPIC_BASE_URL\": \"https://api.anthropic.com\",\n#     \"ANTHROPIC_MODEL\": \"claude-3-5-sonnet-20241022\"\n#   }\n# }\n```\n\n### Codex 配置从 auth.json 导入\n\n```bash\ncc-switch codex add work --from-file              # 默认 ~/.codex/auth.json\n```\n\n完整文档：[docs/codex.md](docs/codex.md)。\n\n## 工作原理\n\ncc-switch 将配置存储在 `~/.claude/cc_auto_switch_setting.json` 中：\n\n- **Claude 配置**：更新 Claude 的 `settings.json` 文件，设置适当的环境变量\n- **Codex 配置**：写入 `~/.codex/auth.json` 文件，Codex CLI 从该文件读取认证信息\n\n这意味着：\n\n- ✅ 不修改全局配置\n- ✅ 配置之间完全隔离\n- ✅ 安全的 API 密钥管理\n- ✅ 适用于任何 Claude / Codex 安装\n- ✅ 保留其他设置\n- ✅ 支持自定义设置目录\n\n## 环境变量\n\n### Claude 配置\n\n工具在切换配置时设置以下环境变量：\n\n- `ANTHROPIC_AUTH_TOKEN` - 你的 API 令牌\n- `ANTHROPIC_BASE_URL` - API 端点 URL\n- `ANTHROPIC_MODEL` - 自定义模型（可选）\n- `ANTHROPIC_SMALL_FAST_MODEL` - 后台任务快速模型（可选）\n- `ANTHROPIC_MAX_THINKING_TOKENS` - 最大思考令牌限制（可选）\n- `API_TIMEOUT_MS` - API 超时时间（毫秒）（可选）\n- `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` - 禁用非必要流量标志（可选）\n- `ANTHROPIC_DEFAULT_SONNET_MODEL` - 默认 Sonnet 模型（可选）\n- `ANTHROPIC_DEFAULT_OPUS_MODEL` - 默认 Opus 模型（可选）\n- `ANTHROPIC_DEFAULT_HAIKU_MODEL` - 默认 Haiku 模型（可选）\n- `CLAUDE_CODE_SUBAGENT_MODEL` - 子代理模型（可选）\n- `CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK` - 禁用非流式回退标志（可选）\n- `CLAUDE_CODE_EFFORT_LEVEL` - 努力级别（可选，如 'max'）\n- `CC_SWITCH_CURRENT_ALIAS` - 当前别名（由 cc-switch 自动注入，供 statusLine 读取）\n\n### Codex 配置\n\nCodex 配置存储在 `~/.codex/auth.json`，支持两种认证模式：\n\n**chatgpt 模式（OAuth）**：\n- `id_token`、`access_token`、`refresh_token`、`account_id`\n\n**apikey 模式**：\n- `OPENAI_API_KEY`\n\n完整文档：[docs/codex.md](docs/codex.md)。\n\n## 开发\n\n```bash\n# 克隆\ngit clone https://github.com/Linuxdazhao/cc_auto_switch.git\ncd cc-switch\n\n# 构建\ncargo build --release\n\n# 测试\ncargo test\n```\n\n## 许可证\n\nMIT 许可证 - 详见 [LICENSE_zh](LICENSE_zh) 文件。\n\n---\n\n**由 [Linuxdazhao](https://github.com/Linuxdazhao) 用 ❤️ 制作**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxdazhao%2Fcc_auto_switch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flinuxdazhao%2Fcc_auto_switch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flinuxdazhao%2Fcc_auto_switch/lists"}