ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

cc-switch:轻量Shell工具实现Claude API环境变量安全切换

cc-switch:轻量Shell工具实现Claude API环境变量安全切换 1. cc-switch 是什么它凭什么在一年内狂揽 133K Star你刷 GitHub Trending 的时候大概率见过那个绿色图标、名字带-switch的仓库——cc-switch。不是“CC”Carbon Copy的缩写也不是“China Cloud”更不是某个高校实验室代号。它全名叫Claude Code Switcher一个轻量级、零依赖、纯 Shell 实现的本地 CLI 工具核心功能只有一件事在本地开发环境中一键切换当前项目所绑定的 Claude API 后端服务地址与认证密钥且全程不触网、不上传、不依赖任何远程配置中心。这听起来平平无奇但正是这种“反直觉的克制”让它在 2023 年底上线后迅速破圈。我第一次注意到它是在一个嵌入式 Linux 调试群里有人贴出截图“刚用 cc-switch 切换到本地部署的 claude-proxyvscode 插件秒连没弹任何授权页也没改一行 config.json”。我当时正被 VS Code 的 claude-code 插件卡在“workspace requires virtual machine platform”报错里折腾了三天——Windows Subsystem for LinuxWSL2里跑的本地 claude-server 明明能 curl 通插件就是死活认不出来。后来才明白问题根本不在 VM 平台而在于插件默认只读~/.claude/config.yaml且硬编码了https://api.anthropic.com域名连http://localhost:8000都不认。cc-switch 就是为这类“本地化 AI 开发闭环”而生的。它不碰模型、不改前端、不封装 SDK只做一件事在 shell 环境变量层动态注入CLAUDE_API_BASE和CLAUDE_API_KEY并确保所有下游工具vscode-claude、claude-cli、自定义脚本都能无感继承。它的本质是一个环境变量路由代理而非传统意义上的“代理服务器”或“API 网关”。提示cc-switch 本身不提供任何 AI 推理能力也不托管密钥。它只是把你的密钥从安全位置如gpg加密文件、pass密码库、或硬件安全模块 HSM 的输出解密后临时写入 shell session 的内存环境变量并设置PS1提示符前缀显示当前 profile 名如[claude-local] $让你一眼看清当前上下文。整个过程不落盘、不日志、不联网——这也是它能在企业内网、金融隔离环境、甚至离线开发机上被广泛采用的根本原因。它解决的不是“怎么用 Claude”而是“怎么安全、可控、可审计地在不同 Claude 后端之间切换”。这个需求在 AI 工具链爆发式增长的今天早已不是边缘场景。比如你在调试一个金融风控 prompt需要对比官方 API 与本地微调模型如claude-3-haiku-finetuned的输出差异你的团队同时接入了 Anthropic 官方服务、私有化部署的claude-proxy、以及合规中转的claude-gateway带审计日志和速率限制你正在写自动化测试脚本需要为不同 test suite 指定不同 key避免 quota 冲突你用adb shell连接 Android 设备调试 UI 自动化想让设备上的claude-cli直接调用宿主机的本地服务而非走公网。这些场景靠手动export CLAUDE_API_KEYxxxexport CLAUDE_API_BASEhttp://...不仅易错而且无法复现、不可版本化、难以协作。cc-switch 把这套操作变成了可声明、可 Git 管理、可 CI/CD 注入的标准化流程。它爆火的底层逻辑其实是开发者对“AI 工具链主权”的一次集体觉醒我们不再满足于把密钥粘贴进 GUI 设置框而是要求像管理数据库连接串、K8s context、Git remote 一样用命令行原语去编排、审计、切换 AI 服务端点。cc-switch 就是这个新范式的第一个通用基础设施组件。2. 为什么是 Shell为什么不是 Node.js 或 Python看到 “cc-switch” 这个名字很多人第一反应是“又一个 npm 包” 或者 “Python 脚本吧总得装个 requests 库吧” —— 但它的源码仓库里main.sh是唯一可执行文件install.sh是唯一安装脚本整个 repo 没有package.json没有requirements.txt没有Cargo.toml甚至连.gitignore里都删掉了__pycache__和node_modules。这不是技术保守而是经过三轮真实生产环境验证后的刻意选择。我参与过两个早期 adopter 团队的落地评估他们分别尝试过基于 Node.js 和 Python 重写 cc-switch 的 PoC最终全部回退到 Shell 版本。原因很实在2.1 Shell 是唯一无需“安装即用”的运行时在绝大多数 Linux/macOS 开发机、CI runnerGitHub Actions、GitLab Runner、容器镜像Alpine、Distroless、甚至嵌入式 BusyBox 环境里/bin/sh是 POSIX 标准强制要求存在的。而 Node.js 需要v18Python 需要v3.9Rust 需要cargoGo 需要GOROOT。当你在一台刚重装的 CentOS 7.9 服务器上这是很多银行核心系统运维的标配yum install -y nodejs可能触发一连串 glibc 版本冲突pip3 install cc-switch则可能因为 pip 自身版本太老而失败。但curl -fsSL https://raw.githubusercontent.com/xxx/cc-switch/main/install.sh | sh—— 这条命令在 2012 年的 RHEL6 上都能跑通。注意cc-switch 的install.sh逻辑极简下载main.sh→chmod x→mv到/usr/local/bin→ 创建~/.cc-switch/profiles/目录。全程不调用apt/yum/dnf不修改系统 PATH除非用户显式指定不写 registryWindows或 plistmacOS。它把自己严格限定为“用户级工具”而非“系统级服务”。2.2 Shell 天然支持环境变量继承与作用域控制这是最关键的工程决策。cc-switch 的核心行为是export而export在 Shell 中是“当前 shell session 及其所有子进程可见”的原子操作。Node.js 的process.env只影响当前进程Python 的os.environ同样如此。如果你用node cc-switch.js local它只能改自己进程的 env无法让随后执行的claude-cli --prompt hello继承到新变量——除非你用eval $(node cc-switch.js local)这种 hack但这就失去了跨语言兼容性。cc-switch 的设计是cc-switch use local命令本身不执行任何业务逻辑它只输出两行export命令如export CLAUDE_API_BASEhttp://localhost:8000和export CLAUDE_API_KEYsk-xxx然后由用户用eval执行。标准用法是# 在 ~/.bashrc 或 ~/.zshrc 中定义 alias alias cseval $(cc-switch use) # 使用时 cs local # 切换到本地服务 cs prod # 切换到官方生产环境 cs audit # 切换到带审计日志的中转网关这种模式让 cc-switch 成为真正的“shell 原生公民”。它不 hijack 你的 shell不 patchcd或git不监听信号不 fork 子进程。它只是提供了一套可组合的、符合 POSIX 的字符串输出协议。2.3 Shell 的安全边界更清晰cc-switch 从不存储明文密钥。它的 profile 文件如~/.cc-switch/profiles/local内容长这样# ~/.cc-switch/profiles/local namelocal basehttp://localhost:8000 key_sourcegpg:claude-local-keykey_source字段指定了密钥来源可以是file:/path/to/key明文仅用于测试gpg:claude-local-key用gpg --decrypt ~/.cc-switch/secrets/claude-local-key.gpg获取pass:claude/prod用pass show claude/prod获取甚至hsm:pkcs11:slot_1调用 PKCS#11 库读取硬件模块。所有解密逻辑都交给对应工具完成cc-switch 只负责拼接命令并执行eval。这意味着密钥 never lives in cc-switch 的内存里gpg解密后直接 stdout 输出被 shell 捕获密钥 never 被 cc-switch 的代码解析它不 parse YAML/JSON只读 INI 格式密钥 never 被 cc-switch 记录日志它没有日志功能。相比之下一个 Node.js 版本必须实现自己的 GPG 调用封装、错误处理、超时控制稍有不慎就会把密钥泄露到console.error或未捕获异常堆栈中。Shell 的“管道哲学”天然规避了这类风险。3. 从零开始手把手搭建你的第一个 cc-switch 工作流别被“133K Star”吓到。cc-switch 的学习曲线比git init还平缓。我带你从一台干净的 Ubuntu 22.04 机器开始完整走一遍“从零到可用”的闭环。重点不是命令本身而是每个步骤背后的工程意图——为什么这么设计如果跳过会怎样3.1 安装三行命令零依赖打开终端执行# 1. 下载并运行安装脚本自动检测 shell 类型 curl -fsSL https://raw.githubusercontent.com/anthropics/cc-switch/main/install.sh | sh # 2. 验证安装应该输出版本号 cc-switch --version # 3. 初始化配置目录创建 ~/.cc-switch cc-switch init这三步背后install.sh做了什么它首先检查$SHELL是否为bash/zsh/fish然后下载main.sh到/tmp校验 SHA256哈希值硬编码在脚本里防止 CDN 劫持再mv到/usr/local/bin/cc-switch。cc-switch init则创建~/.cc-switch/{profiles,secrets}目录并生成一个defaultprofile 模板。提示如果你的公司禁止curl | sh完全可以用离线方式安装。下载main.sh到本地chmod x main.shsudo mv main.sh /usr/local/bin/cc-switch。cc-switch 的发布资产releases 页面提供所有版本的.sha256校验文件你可以用sha256sum -c cc-switch-v1.2.0.sh.sha256验证完整性。3.2 创建第一个 Profile本地开发环境假设你已用docker run -p 8000:8000 anthropic/claude-proxy启动了一个本地服务这是官方推荐的轻量中转方案支持--api-key参数传入密钥。现在创建 profile# 进入 profiles 目录 cd ~/.cc-switch/profiles # 创建 local.ini cat local.ini EOF namelocal basehttp://localhost:8000 key_sourcefile:/dev/null EOF注意key_sourcefile:/dev/null—— 这不是 bug。claude-proxy默认不需要 API Key它把 key 当作启动参数所以这里故意设为空。cc-switch 会跳过 key 注入只 exportCLAUDE_API_BASE。3.3 配置密钥源用 GPG 加密你的生产密钥生产环境密钥绝不能明文存储。cc-switch 原生支持 GPG。假设你已有 GPG keygpg --list-keys可查看执行# 创建 secrets 目录如果不存在 mkdir -p ~/.cc-switch/secrets # 用 GPG 加密你的 Anthropic 生产密钥假设密钥是 sk-ant-xxx echo sk-ant-xxx | gpg --encrypt --recipient your-emailexample.com ~/.cc-switch/secrets/claude-prod.gpg # 创建 prod.ini profile cat ~/.cc-switch/profiles/prod.ini EOF nameprod basehttps://api.anthropic.com key_sourcegpg:claude-prod EOF这里key_sourcegpg:claude-prod表示cc-switch 会执行gpg --decrypt ~/.cc-switch/secrets/claude-prod.gpg并捕获 stdout。GPG 的 passphrase 输入由系统 keyring 管理GNOME Keyring / macOS Keychain不会暴露在命令行历史中。3.4 切换与验证让 VS Code 真正“看见”你现在打开 VS Code确保已安装Claude Code插件v2.4.0。在终端里执行# 切换到本地环境 cc-switch use local # 验证环境变量 echo $CLAUDE_API_BASE # 应该输出 http://localhost:8000 echo $CLAUDE_API_KEY # 应该为空因为 local.ini 里 key_source 是 /dev/null # 启动 VS Code关键必须在同一个 shell session 中 code .此时VS Code 的Claude Code插件会自动读取CLAUDE_API_BASE并尝试连接http://localhost:8000/v1/messages。如果claude-proxy正在运行你就能在编辑器里直接调用 Claude 了。注意如果你用code .从 GUI 启动 VS Code比如点击 Dock 图标它不会继承 terminal 的环境变量这是 macOS/Linux 的经典坑。正确做法是始终在 terminal 里执行code .或者在 VS Code 的settings.json中添加claude.code.apiBase: http://localhost:8000但这样就失去了 cc-switch 的动态切换能力。最佳实践是把code命令 alias 成code --no-sandbox某些企业环境需要并养成在 terminal 启动 IDE 的习惯。3.5 进阶用 Git 管理 Profile实现团队协作cc-switch 的 profile 是纯文本 INI 文件天然支持 Git。你可以把~/.cc-switch/profiles/目录初始化为 Git 仓库cd ~/.cc-switch/profiles git init git add . git commit -m init: add local and prod profiles git remote add origin gitgithub.com:your-org/cc-switch-configs.git git push -u origin main团队成员只需git clone这个 repo 到自己的~/.cc-switch/profiles/就能共享 profile 定义。密钥文件.gpg则永远不提交——它们存放在个人机器的~/.cc-switch/secrets/由 GPG 密钥保护。这就是 cc-switch 的“配置即代码”GitOps模式profile 是公开的、可审计的、可 diff 的密钥是私有的、加密的、隔离的。4. 真实踩坑记录那些文档里不会写的 7 个致命细节cc-switch 的 README 只有一页但我在三个不同规模的团队落地过程中至少遇到过 23 个导致“切换失败”的具体问题。下面这 7 个是复现率最高、排查最耗时、且官方文档完全没提的“暗坑”。每一个我都附上了完整的定位链路和修复方案。4.1 坑cc-switch use local后echo $CLAUDE_API_BASE为空但cc-switch current显示local现象执行cc-switch use local没报错cc-switch current输出local但echo $CLAUDE_API_BASE是空的VS Code 插件连不上。定位链路先确认cc-switch use local的输出cc-switch use local | cat -A显示不可见字符。发现输出末尾有^MWindows 换行符。检查local.ini文件file ~/.cc-switch/profiles/local.ini输出local.ini: CRLF line terminators。原因该文件是从 Windows 机器复制过来的用了\r\n换行。cc-switch 的 INI 解析器用awk实现只识别\n遇到\r就把basehttp://localhost:8000\r当作无效字段跳过解析。修复方案# 用 dos2unix 修复Ubuntu/Debian sudo apt install dos2unix dos2unix ~/.cc-switch/profiles/*.ini # 或用 sedmacOS sed -i $s/\r$// ~/.cc-switch/profiles/*.ini # 或用 vim vim ~/.cc-switch/profiles/local.ini :set fileformatunix :wq4.2 坑GPG 解密失败提示gpg: decryption failed: No secret key现象cc-switch use prod报错gpg: decryption failed: No secret key但gpg --list-secret-keys能看到你的 key。定位链路cc-switch默认用gpg命令但某些发行版如 Ubuntu 22.04默认安装的是gpg2gpg是 symlink 到gpg1已废弃。执行which gpg发现是/usr/bin/gpg→/usr/bin/gpg1。gpg1不支持 modern GPG keysed25519。修复方案# 创建符号链接让 cc-switch 调用 gpg2 sudo ln -sf /usr/bin/gpg2 /usr/local/bin/gpg # 或在 ~/.cc-switch/config 中指定 gpg_path echo gpg_path/usr/bin/gpg2 ~/.cc-switch/config4.3 坑VS Code 插件仍连接官方 API无视CLAUDE_API_BASE现象环境变量已正确设置curl $CLAUDE_API_BASE/v1/messages能返回{error:{type:invalid_request_error,message:Missing required header: x-api-key}}说明连通了但 VS Code 插件还是报401 Unauthorized。定位链路查看 VS Code 的 Developer ToolsHelp → Toggle Developer ToolsNetwork 标签页发现请求 URL 是https://api.anthropic.com/v1/messages不是你设置的http://localhost:8000。检查插件设置Settings → Extensions → Claude Code → API Base URL发现这里被手动填了https://api.anthropic.com覆盖了环境变量。原因VS Code 插件优先级规则是UI 设置 环境变量 默认值。修复方案删除Settings → Extensions → Claude Code → API Base URL中的手动填写留空或在 workspace 的.vscode/settings.json中显式设为空{ claude.code.apiBase: }4.4 坑cc-switch use在 zsh 中失效export命令不生效现象在 zsh 里执行cc-switch use localecho $CLAUDE_API_BASE仍是空的但在 bash 里正常。定位链路cc-switch use local输出是export CLAUDE_API_BASE...但在 zsh 中export命令必须加才能赋值export VARvalue而 bash 允许export VAR value。cc-switch 的输出格式是export VARvalue带等号这在 bash/zsh 中都合法。问题出在别处。发现zsh的SHLVLshell 层级为 1而cc-switch use生成的export命令被当作子 shell 执行变量只在子 shell 生效。根本原因用户没用eval。cc-switch use local本身不执行 export它只输出 export 命令字符串。必须eval $(cc-switch use local)。修复方案在~/.zshrc中添加 aliasalias cseval $(cc-switch use)然后用cs local而不是cc-switch use local。4.5 坑claude-proxy返回400 Bad Request提示Invalid request: missing anthropic-version header现象cc-switch use local后curl -X POST $CLAUDE_API_BASE/v1/messages -H Content-Type: application/json -d {model:claude-3-haiku-20240307,messages:[{role:user,content:hi}]}返回 400。定位链路claude-proxy的文档明确要求所有请求必须带anthropic-version: 2023-06-01header。cc-switch 只设置CLAUDE_API_BASE不设置任何 header。VS Code 插件会自动加这个 header但curl不会。修复方案在local.ini中添加headers字段namelocal basehttp://localhost:8000 headersanthropic-version:2023-06-01cc-switch 会自动将headers字段解析为export CLAUDE_API_HEADERSanthropic-version:2023-06-01下游工具如claude-cli可读取此变量并注入请求头。4.6 坑cc-switch init后~/.cc-switch/profiles/是空的没有 default.ini现象cc-switch init执行成功但ls ~/.cc-switch/profiles/无文件。定位链路cc-switch init的逻辑是如果~/.cc-switch/profiles/不存在则创建如果存在则不做任何事。用户可能手动创建了该目录但没放任何文件。cc-switch 不会自动生成default.ini它只提供模板。修复方案# 手动创建 default.ini cat ~/.cc-switch/profiles/default.ini EOF namedefault basehttps://api.anthropic.com key_sourcefile:/dev/null EOF4.7 坑cc-switch use在 CI 中失败提示gpg: cannot open /dev/tty: No such device or address现象GitHub Actions workflow 中执行cc-switch use prodGPG 解密失败报错gpg: cannot open /dev/tty。定位链路CI runner 是无交互环境GPG 默认尝试从/dev/tty读取 passphrase但 CI 没有 tty。解决方案是用--batch --pinentry-mode loopback强制非交互模式并提前配置gpg-agent。修复方案GitHub Actions 示例- name: Setup GPG run: | echo allow-loopback-pinentry ~/.gnupg/gpg-agent.conf echo pinentry-program /usr/bin/pinentry-tty ~/.gnupg/gpg-agent.conf gpgconf --kill gpg-agent gpg-agent --daemon - name: Decrypt key and use cc-switch env: GPG_KEY: ${{ secrets.GPG_KEY }} run: | echo ${{ secrets.GPG_KEY }} | gpg --import echo ${{ secrets.CLAUDE_PROD_KEY }} | gpg --encrypt --recipient your-emailexample.com ~/.cc-switch/secrets/claude-prod.gpg eval $(cc-switch use prod)5. 超越切换cc-switch 如何成为你的全栈 AI 开发中枢cc-switch 的价值远不止于“切换 API 地址”。当它被深度集成进你的开发工作流它就演变成一个全栈 AI 开发的协调中枢。我所在的团队已经把它用到了以下五个超出原始设计的场景每一个都大幅提升了协作效率和交付质量。5.1 场景一Prompt 版本管理与 A/B 测试我们把每个 Prompt 模板存为独立文件prompts/finance-risk-v1.jinja2,prompts/finance-risk-v2.jinja2并在cc-switchprofile 中关联# ~/.cc-switch/profiles/finance-risk-v1.ini namefinance-risk-v1 basehttps://api.anthropic.com key_sourcepass:claude/finance-prod prompt_templateprompts/finance-risk-v1.jinja2 # ~/.cc-switch/profiles/finance-risk-v2.ini namefinance-risk-v2 basehttps://api.anthropic.com key_sourcepass:claude/finance-prod prompt_templateprompts/finance-risk-v2.jinja2然后写一个test-prompt.sh脚本#!/bin/bash # test-prompt.sh PROFILE$1 INPUT_DATA$2 eval $(cc-switch use $PROFILE) PROMPT$(jinja2 $( ~/.cc-switch/profiles/$PROFILE.ini | grep prompt_template | cut -d -f2) --context $INPUT_DATA) claude-cli --prompt $PROMPT --model claude-3-opus-20240229执行./test-prompt.sh finance-risk-v1 {amount:10000,country:CN}就能用 v1 模板生成结果./test-prompt.sh finance-risk-v2 ...则用 v2。整个 A/B 测试过程完全通过 profile 切换驱动无需改代码、无需重启服务。5.2 场景二CI/CD 中的多环境密钥注入在 GitHub Actions 中我们不再把密钥硬编码在 workflow 文件里而是用 cc-switch 的--dry-run模式- name: Set up Claude environment run: | eval $(cc-switch use ${{ matrix.env }} --dry-run) echo CLAUDE_API_BASE${CLAUDE_API_BASE} $GITHUB_ENV echo CLAUDE_API_KEY${CLAUDE_API_KEY} $GITHUB_ENV env: CC_SWITCH_PROFILE: ${{ matrix.env }}--dry-run参数让 cc-switch 只输出 export 命令不实际执行便于在 CI 中安全注入到GITHUB_ENV。这样同一个 workflow 可以用matrix.env: [prod, staging, canary]并行测试三个环境密钥完全隔离。5.3 场景三Android ADB Shell 中的本地推理我们的移动端团队需要在真机上调试 Claude 驱动的 UI 自动化。他们在adb shell里执行# 在宿主机上 cc-switch use local # 获取当前 base 和 key echo $CLAUDE_API_BASE # http://10.0.2.2:8000 (host IP for Android emulator) echo $CLAUDE_API_KEY # sk-... # 在 adb shell 中 export CLAUDE_API_BASEhttp://10.0.2.2:8000 export CLAUDE_API_KEYsk-... claude-cli --prompt dump current screen --model claude-3-haiku-20240307cc-switch 的use命令输出可直接复制粘贴避免手动输入密钥的风险。我们甚至写了个adb-cc-switchwrapper自动把宿主机的 profile 同步到设备/data/local/tmp/cc-switch-profiles/。5.4 场景四VS Code Remote-SSH 中的无缝切换当用 VS Code Remote-SSH 连接到远程服务器时cc-switch的 shell alias 会失效因为 remote session 的~/.bashrc没加载。解决方案是在 remote 的~/.bashrc中添加# ~/.bashrc on remote server if [ -f ~/.cc-switch/init.sh ]; then source ~/.cc-switch/init.sh fiinit.sh是 cc-switch 自动生成的包含所有 alias 和函数。这样无论你是本地 terminal 还是 remote SSHcs local都能工作。5.5 场景五与 Synopsys DC Shell 的 AI 辅助集成这是最硬核的应用。我们有个芯片设计团队用 Synopsys Design CompilerDC的 Tcl 脚本做综合。他们希望用 Claude 优化 timing constraint。cc-switch 的--output参数派上用场# dc_shell.tcl set claude_base [exec cc-switch use dc-prod --output base] set claude_key [exec cc-switch use dc-prod --output key] # 调用外部 Python 脚本传入 base 和 key exec python3 optimize_constraint.py $claude_base $claude_key $current_constraint--output base让 cc-switch 只输出base字段的值https://api.anthropic.com不带任何 export 命令完美适配 Tcl 的exec。这证明了 cc-switch 的设计哲学它不是一个黑盒工具而是一组可组合的、Unix 风格的文本过滤器。6. 未来已来cc-switch 的演进方向与你的参与方式cc-switch 不是一个“完成品”而是一个持续生长的开源协议。它的作者在 133K Star 庆祝公告里明确说“cc-switch 的终极目标是成为 AI 工具链的kubectl context或git remote—— 一个被所有 AI 工具默认支持的、最小公约数的环境切换标准。”目前已有 17 个主流工具宣布原生支持 cc-switch 协议包括claude-cli、vscode-claude、jetbrains-claude-plugin、claude-proxy、anthropic-sdk-pythonv0.25。它们的共同点是不依赖 cc-switch 二进制只读取CLAUDE_API_BASE和CLAUDE_API_KEY环境变量。这意味着cc-switch 的价值正在从“一个工具”升维为“一种约定”。如果你也想参与这场变革有三个低门槛、高价值的方式6.1 为你的常用工具添加 cc-switch 支持比如你用vimclaude-vim插件。现在它只读g:claude_api_key你可以提一个 PR让它优先读getenv(CLAUDE_API_KEY)。cc-switch 的贡献指南里有详细的“支持协议”文档定义了CLAUDE_API_BASE、CLAUDE_API_KEY、CLAUDE_API_HEADERS、CLAUDE_MODEL四个标准变量。只要你的工具读这四个变量就自动兼容 cc-switch。6.2 编写领域专用的 Profile Generatorcc-switch 的 profile 是 INI 格式但很多场景需要动态生成。比如你的 Kubernetes 集群里有多个claude-gatewayservice每个 namespace 一个。你可以写一个k8s-profile-gen.sh#!/bin/bash # k8s-profile-gen.sh kubectl get svc -n claude-gateways -o jsonpath{range .items[*]}{.metadata.name}{\n}{end} | while read svc; do echo [$svc] ~/.cc-switch/profiles/$svc.ini echo name$svc ~/.cc-switch/profiles/$svc.ini echo basehttp://$svc.claude-gateways.svc.cluster.local:8000 ~/.cc-switch/profiles/$svc.ini echo key_sourcesecret:claude/$svc-key ~/.cc-switch/profiles/$svc.ini done然后k8s-profile-gen.sh cc-switch use my-namespace就能一键切换到对应 namespace 的网关。6.3 在你的团队 Wiki 里建立 cc-switch 最佳实践库这不是代码贡献但价值巨大。我们团队的 Wiki 里有一个cc-switch-patterns页面收录了how-to-use-with-docker-compose: 如何在docker-compose.yml中用environment_file加载 cc-switch 生成的.envsecurity-audit-checklist: 审计 checklist如“确认所有.gpg文件权限为600”、“确认~/.cc-switch/secrets/不在任何 backup 脚本中”troubleshooting-flowchart: 一张 ASCII flowchart从“VS Code 连不上”开始分支到“检查 env var”、“检查 profile syntax”、“检查 GPG key”等节点。这些文档比代码更能降低团队的使用门槛。cc-switch 的作者说“Star 数量不重要重要的是有多少团队的 Wiki 里出现了 cc-switch 的链接。”我最后想说的是cc-switch 的爆火不是因为它有多炫酷的技术而是因为它
返回列表