Native Shell
Native Shell: AI-generated UI, native in your app, on every platform. Apps on iOS, Android, macOS, Windows and Linux, GPUI apps and web pages load signed, sandboxed TSX modules at run time and draw th
VarSwitch 下载页。面向 Claude Code / Codex / Grok / Gemini 用户的桌面环境变量与配置同步工具。
Translation pending
Developer toolsRust · JavaScriptGitHub @ConcertoNotesOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Varswitch
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗VarSwitch 是一个面向 Claude Code、Claude Desktop、Codex CLI、Grok CLI、Gemini CLI 和 API 用户的桌面配置管理工具。它通过可视化界面集中管理 API Key / Token、Base URL、模型、编辑器设置、多套应用配置、Skills、Prompts 预设、MCP Server、本机历史会话、Codex 插件市场与移动端控制能力,并提供托盘快速切换、本地代理故障转移、varswitch:// 深链导入与多设备数据同步。
当前应用版本:3.2.11。
ANTHROPIC_DEFAULT_SONNET_MODEL / ANTHROPIC_DEFAULT_OPUS_MODEL / ANTHROPIC_DEFAULT_HAIKU_MODEL,留空则不设置并清理旧值。ANTHROPIC_BASE_URL 指向本地协议转换代理(127.0.0.1:25789),由代理在 Anthropic 与 OpenAI 协议之间双向翻译(含流式响应与工具调用),可直接接入仅提供 OpenAI 接口的上游;该模式需保持 VarSwitch 运行。ANTHROPIC_AUTH_TOKEN / ANTHROPIC_AUTH_KEY、ANTHROPIC_BASE_URL,以及角色模型映射变量ANTHROPIC_API_KEY~/.claude/settings.json 的 envsettings.json 中的 claudeCode.environmentVariablesSync Now 重新写入当前配置。UnlimitedQuota 即固定返回 100000000),直接相减会得出「余额 $99,999,971」的假数字,因此这种情况只展示真实的已用金额。sk- 开头的 API Key)。令牌按站点域名保存,同一中转站的多套配置共用一份;new-api 站点还需填写数字用户 ID(写入 New-Api-User 请求头),one-api 站点留空即可。配置后余额改为读取 /api/user/self 的账户额度,并按站点 /api/status 返回的 quota_per_unit 换算金额。site_balance_tokens.json,界面只回显打码值,日志不记录。令牌查询失败时会退回计费接口,数值标黄并在悬停提示中给出站点返回的原始错误。Claude Desktop 页面维护专用供应商,也可以从 Claude Code 配置复制导入;导入后两边独立管理,后续编辑互不影响。PROXY_MANAGED,也不会把本地路由凭据转发给第三方上游。针对经本地协议转换代理的 OpenAI 兼容配置,提供高可用能力:
VarSwitch 会自动检测并同步下列编辑器的 Claude Code 设置:
在「Settings / 设置」中可以为每个编辑器手动指定 settings.json 路径;也可以填写用户配置目录,应用会自动补全为 settings.json。
Codex CLI 页面维护 Codex 专用配置。~/.codex/auth.json 和 ~/.codex/config.toml~/.codex/config.toml,不改动 auth.json~/.codex/config.toml、~/.codex/auth.json 是否存在,是否包含模型、Provider、Base URL、API Key,并给出修复建议。config.toml 和 auth.json。Sync Now 重新写入。~/.grok/config.toml(把默认模型指向 VarSwitch 托管的模型段,保留文件中的其他内容),并同步 XAI_API_KEY / XAI_BASE_URL、GROK_API_KEY / GROK_BASE_URL 等系统环境变量。~/.gemini/settings.json(认证方式与模型),并同步 GEMINI_API_KEY、GOOGLE_GEMINI_BASE_URL、GEMINI_MODEL 系统环境变量。Codex 页面提供 Codex Toolbox,包含三个主要模块。
~/.codex/config.toml。「会话(Sessions)」页面用于管理本机 CLI 历史会话:
~/.claude/projects)与 Codex(~/.codex/sessions、~/.codex/archived_sessions)的会话记录。claude -r <会话ID>(原工作目录仍存在时先切换过去);Codex 会话通过 codex://threads/<ID> 深链在桌面应用中打开。顶部工具栏的 Skills 入口用于管理 Claude Code 扩展能力:
~/.claude/commands 与 ~/.claude/skills。SKILL.md frontmatter 中解析 description。SKILL.md(支持位于根目录、唯一顶层目录或子目录),内置 zip-slip 路径穿越防护;可同时安装到 Claude(~/.claude/skills/)与 Codex(~/.codex/skills/),同名技能已存在时确认后覆盖。顶部工具栏的 Prompts 入口用于维护多套提示词并跨应用同步:
~/.claude/CLAUDE.md、~/.codex/AGENTS.md、~/.gemini/GEMINI.md。~/.claude/CLAUDE.md。顶部工具栏的 MCP 入口统一管理三个应用的 MCP Server:
~/.claude.json 的 mcpServers)、Codex(~/.codex/config.toml 的 [mcp_servers.<name>] 段)、Gemini(~/.gemini/settings.json 的 mcpServers)中的全部 Server。~/.codex/config.toml 时保留其他配置内容,兼容 env 内联表与子表两种写法。在 Settings 中可以管理应用行为与路径:
~/.claude/settings.json 路径。settings.json 路径。可用:接口正常响应,并显示延迟。不可达:域名解析失败或请求超时,通常意味着中转站已下线。有问题:站点明确返回了鉴权错误,并原样透出站点给的原因(如「余额不足,请充值后重试」「API Key 已被禁用」「Invalid token」)——余额不足只需充值,不必删配置。可疑:站点返回的是网页而非接口(多为 Cloudflare 等 WAF 拦截),此时 API Key 未必失效,不应据此删除配置。已跳过:未填写 API Key 或 Base URL。x-api-key 鉴权头以免误判;并发上限 6,整体在后台线程执行,不阻塞界面。自动备份包含:
~/.codex/config.toml、~/.codex/auth.json~/.grok/config.tomlenc:v1:...。主密钥(32 字节随机)保存在系统凭据库(Windows 凭据管理器 / macOS 钥匙串),从不写入数据目录。
~/.claude/settings.json、~/.codex/config.toml 等)都先写同目录临时文件、再重命名替换,进程崩溃或断电也不会留下写坏的半成品配置。*.json 配置与 backups 目录复制到目标位置,目标已存在同名文件时跳过、绝不覆盖,避免冲掉其他设备同步来的更新数据。data_dir_override.txt;目标目录不可用(如网盘未挂载)时自动回落默认目录,不影响启动。应用注册 varswitch:// 协议,支持从网页、文档或聊天中一键导入:
varswitch://import/profile?app=<claude|codex|gemini|grok>&payload=<base64url(JSON)>:导入单条配置,payload 含 name、apiKey,可选 baseUrl、model 等字段。varswitch://import/mcp?payload=<base64url(JSON)>:导入 MCP Server,payload 含 name、config,可选 apps 指定启用的应用。varswitch://v1/import?resource=provider&app=<claude|codex|gemini>&name=...&endpoint=...&apiKey=...&model=...&homepage=...&enabled=true:兼容 CC Switch v1 Provider Import 查询参数;Claude 还可传 haikuModel、sonnetModel、opusModel。enabled 为 true,导入都不会自动激活或切换。首页快捷入口包括:
应用内更新使用 Tauri updater,更新源为:
https://download.varswitch.strova.top/latest.json
下载页入口为:
https://download.varswitch.strova.top/
Claude · 主力配置),菜单项列出该应用全部配置并在激活项上打勾,点击即可在后台完成切换。Claude Code 页面点击 + 添加配置。Test Speed 测试地址。Switch。如果本机已经有可用配置,可以点击顶部 导入当前配置,从现有系统/Claude/编辑器配置中导入。
Claude Desktop 页面。+ 添加配置,或点击 从 Claude Code 导入 后再独立编辑配置。Gateway:支持 Anthropic Messages 和 OpenAI Chat Completions;本地地址固定为 http://127.0.0.1:25789/claude-desktop,使用期间必须保持 VarSwitch 运行。Direct:仅支持 Anthropic Messages;切换成功后不需要保持 VarSwitch 运行。Official:恢复 Claude 官方连接。启用。启用或同步不会直接展示本地 Gateway 凭据。不要把第三方 API Key 填成 PROXY_MANAGED;Gateway 会使用配置中真实的第三方 Key 请求上游。
Codex CLI 页面。+ 添加配置。Switch。刷新诊断 查看问题和建议。Installed 中查看本地 commands/skills。+ Add Skill 创建新项,或选择已有项编辑。从 ZIP 安装 选择本地 ZIP,勾选安装到 Claude / Codex 后确认。Discover 中浏览仓库技能目录。~/.claude/CLAUDE.md。+ Add Server 添加服务。Codex CLI 页面。打开 Codex Toolbox。Session Sync 中点击 Sync Now,导入本机 Codex 会话。Mobile Control 中选择要控制的会话。Start Platform Link 启动监听。| 位置 | 写入内容 |
|---|---|
| 系统环境变量 | ANTHROPIC_AUTH_TOKEN / ANTHROPIC_AUTH_KEY、ANTHROPIC_BASE_URL,选填角色模型映射 ANTHROPIC_DEFAULT_SONNET_MODEL / ANTHROPIC_DEFAULT_OPUS_MODEL / ANTHROPIC_DEFAULT_HAIKU_MODEL |
| Claude 设置 | ~/.claude/settings.json 的 env(含角色模型映射) |
| 编辑器设置 | claudeCode.environmentVariables(含角色模型映射) |
| VarSwitch 配置 | 数据目录中的 profiles 数据 |
| 平台/位置 | 写入内容 |
|---|---|
Windows %LOCALAPPDATA%/Claude/claude_desktop_config.json | Claude Desktop 部署模式与当前 Profile 引用 |
Windows %LOCALAPPDATA%/Claude-3p/claude_desktop_config.json | Claude Desktop 3P 部署配置 |
Windows %LOCALAPPDATA%/Claude-3p/configLibrary/_meta.json | 3P Profile 元数据与当前 Profile 引用 |
Windows %LOCALAPPDATA%/Claude-3p/configLibrary/<VarSwitch Profile ID>.json | VarSwitch 管理的 Gateway 或 Direct Profile |
macOS ~/Library/Application Support/Claude/ | Claude Desktop 配置根目录 |
macOS ~/Library/Application Support/Claude-3p/ | Claude Desktop 3P 配置与 Profile 库根目录 |
| Linux | 仅保存 VarSwitch 供应商;不支持启用 Claude Desktop 3P Profile |
| VarSwitch 数据目录 | 独立加密保存 Claude Desktop suppliers 与本地 Gateway 状态 |
| 位置 | 写入内容 |
|---|---|
~/.codex/auth.json | OPENAI_API_KEY,仅默认写入模式 |
~/.codex/config.toml | model_provider、model、chatgpt_base_url、model_providers、base_url 等 |
| VarSwitch 配置 | 数据目录中的 Codex profiles 数据 |
| 位置 | 写入内容 |
|---|---|
~/.grok/config.toml | VarSwitch 托管的 [model.*] 段(模型、Base URL、API Key 等)并设为默认模型,保留其他内容 |
| 系统环境变量 | XAI_API_KEY / XAI_BASE_URL、GROK_API_KEY / GROK_BASE_URL,选填 XAI_MODEL |
| VarSwitch 配置 | 数据目录中的 Grok profiles 数据 |
| 位置 | 写入内容 |
|---|---|
~/.gemini/settings.json | 认证方式(security.auth.selectedType)与模型(model.name) |
| 系统环境变量 | GEMINI_API_KEY、GOOGLE_GEMINI_BASE_URL、GEMINI_MODEL |
| VarSwitch 配置 | 数据目录中的 Gemini profiles 数据 |
| 位置 | 写入内容 |
|---|---|
~/.claude/CLAUDE.md | 激活预设且勾选 Claude 时写入;Editor 直接编辑 |
~/.codex/AGENTS.md | 激活预设且勾选 Codex 时写入 |
~/.gemini/GEMINI.md | 激活预设且勾选 Gemini 时写入 |
| VarSwitch 配置 | 数据目录中的 prompt_presets.json |
| 位置 | 写入内容 |
|---|---|
~/.claude.json | mcpServers 对象 |
~/.codex/config.toml | [mcp_servers.<name>] 段,保留文件其他内容 |
~/.gemini/settings.json | mcpServers 对象 |
| 位置 | 写入内容 |
|---|---|
~/.claude/skills/<name>/ | 新建或从 ZIP / URL 安装的 Skill |
~/.codex/skills/<name>/ | ZIP 安装勾选 Codex 时写入 |
| 位置 | 写入内容 |
|---|---|
| 默认数据目录 | 应用数据(profiles、prompt_presets 等 *.json 与 backups/),未自定义时使用 |
site_balance_tokens.json | 余额查询用的站点访问令牌,按站点域名存放,私有权限写入 |
data_dir_override.txt | 默认数据目录下的指针文件,内容为自定义数据目录的绝对路径 |
| 自定义数据目录 | 指针文件生效后,上述应用数据改存于该目录 |
npm ci
npm run dev
dev.bat 仅是 Windows 兼容入口;macOS 终端不能运行 .bat,请使用 npm run dev。
Mac mini 不需要打开 Xcode IDE;安装 Xcode Command Line Tools、Node.js 和 Rust 后即可开发。
npm run build
npm run build 按当前电脑生成原生安装包:Mac 生成 .app 与 .dmg,Windows 生成 NSIS
.exe 安装包。macOS 必须在 Mac 上构建,Windows 必须使用 Windows 编译环境;Xcode IDE
不负责 VarSwitch 的打包,Tauri 会调用 Rust 工具链、macOS 系统工具和 hdiutil。
Mac 本地 ad-hoc 包不包含自动更新签名,只适合本机检查和安装测试。
dev.bat 是 Windows 的开发入口;build.bat 是 Windows 的正式发布入口,会询问版本号和
更新说明。Windows 只想生成本地测试包时使用 npm run build。
Mac 上正式发布使用 build.command,不要运行 .bat 文件。
构建产物位于:
src-tauri/target/release/bundle/
本地构建只生成当前平台的安装包。正式发布时,GitHub Actions 会自动在云端构建 Windows、 Apple 芯片 Mac 和 Intel Mac,不需要在 Windows 电脑上拉代码。
推送 v* 标签后,会并行构建三个目标:
| 作业 | 安装包 |
|---|---|
| Windows x64 | VarSwitch_<版本>_x64-setup.exe |
| macOS Apple Silicon | VarSwitch_<版本>_aarch64.dmg |
| macOS Intel | VarSwitch_<版本>_x64.dmg |
每个作业同时产出更新包与 .sig 签名供自动更新使用。macOS 的更新包被显式重命名为
VarSwitch_<版本>_<架构>.app.tar.gz,因为 Tauri 默认命名不含架构,两个 macOS
作业会上传同名文件并互相覆盖。
需要在仓库 Settings > Secrets and variables > Actions 中配置:
TAURI_SIGNING_PRIVATE_KEY:src-tauri/updater.key 的完整内容,必填TAURI_SIGNING_PRIVATE_KEY_PASSWORD:私钥设置了密码时填写;无密码时留空缺少私钥时工作流会直接失败。否则构建仍会成功,但产物没有签名,对应平台会被静默
排除在 latest.json 之外,表现为「CI 全绿,用户却收不到更新」。
平时本地试运行用 npm run dev;只想在 Mac 上打一个本地测试包用 npm run build。
正式发布则双击仓库根目录的 build.command,或在终端执行 ./build.command。
Windows 双击 build.bat,使用相同流程:
./build.command
先输入版本号,再输入本次「修改和变化」(支持多行,单独输入 . 后回车结束),然后确认待提交改动。
例如输入 修复 Mac 配置切换、回车、改善打包流程、回车、.、回车。
更新说明保存到 release-notes/v版本号.md,随代码一起提交,并显示在 GitHub Release 与应用更新提示中。
同时自动写入安装包内的 public/changelog.json;新版本首次启动会离线弹出本次更新日志,关闭后
同一版本不再重复展示。日志先于使用指南显示。终端输入支持中文退格、方向键修改,以及 Ctrl+U 清空当前行。
macOS 应用内更新成功后会自动重启进入新版本并展示日志。
非交互发布可用 npm run release -- --version 3.2.8 --notes-file changes.md;有未提交改动时
增加 --include-worktree 并确认。
首次使用时确认 Mac mini 的 GitHub SSH 权限可推送 origin。脚本会列出当前未提交改动并请你
确认;确认后运行前端与 Rust 测试,通过后将这些改动与版本号、更新说明一起提交并推送标签;GitHub
Actions 随后构建 Windows x64、Apple 芯片 Mac 和 Intel Mac。不需要切换到 Windows 电脑,也
不需要在那里 git pull。
只有看到「发布成功:代码和标签 v版本号 已推送到 GitHub」才表示推送完成;「进程已完成」 只表示终端脚本退出,报错退出同样会显示它。推送完成后仍需等待 Actions 构建成功,安装包才可用。
等 GitHub Actions 的三平台构建完成后,双击 deploy.command 或运行 ./deploy.command,输入
同一个版本号;脚本会自动下载 Windows 与两种 Mac 安装包、更新下载页和 updater 清单,再部署
到 Vercel:
./deploy.command
两台服务只需首次登录和关联一次:
gh auth login
npx --yes vercel login
npx --yes vercel link --cwd varswitch-download-site
build.command 和 deploy.command 是简单交互入口;也可以继续直接使用 npm run release、
npm run release:sync 与 npm run site:deploy。
私有仓库的 macOS runner 按 10 倍分钟计费,GitHub Free 的 2000 分钟/月相当于约 200 分钟 macOS 构建时间。工作流已启用 Rust 编译缓存,首次构建较慢,之后会显著缩短。
sync-mac-release.mjs 由 npm run release:sync 调用,同步完整的三平台发布产物并生成
供自有下载域名使用的 latest.json。工作流等待三平台完成后统一生成更新清单,避免并行
构建互相覆盖平台信息。
没有 Apple Developer 证书时,发布入口会显式使用临时签名(ad-hoc),检查 App、 DMG 和自动更新包的签名完整性。该版本仍会被 Gatekeeper 拦截,首次使用需按下方说明 手动放行。临时签名不能替代 Apple 公证,也不能保证浏览器下载后直接打开。
若要免去这一步,需要 Apple Developer 账号的 Developer ID Application 证书。
Tauri 的 TAURI_SIGNING_PRIVATE_KEY 仅用于自动更新包签名,不能代替 Apple 签名或公证。
在 GitHub 仓库 Settings → Secrets and variables → Actions 中配置(Apple 凭据全不配置 时使用临时签名;只配置了一部分则报错,不静默降级):
| Secret | 内容 |
|---|---|
APPLE_CERTIFICATE | 包含私钥的 Developer ID Application .p12 文件,转成 base64 |
APPLE_CERTIFICATE_PASSWORD | 导出 .p12 时设置的密码 |
APPLE_SIGNING_IDENTITY | 完整证书名称,如 Developer ID Application: Your Name (TEAMID) |
APPLE_ID | 公证使用的 Apple ID |
APPLE_PASSWORD | 该 Apple ID 的 app-specific password,不是登录密码 |
APPLE_TEAM_ID | Apple Developer Team ID,与证书一致 |
TAURI_SIGNING_PRIVATE_KEY | Tauri 自动更新私钥 |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD | 更新私钥密码;没有密码时留空 |
获取证书 base64 的示例:
openssl base64 -A -in certificate.p12 -out certificate-base64.txt
提供完整 Apple 凭据后,Tauri CLI 会把证书导入临时钥匙串,启用 Hardened Runtime,
签名 App 并提交 Apple 公证、装订公证票据。无需单独配置 KEYCHAIN_PASSWORD。
无证书时会移除空的公证环境变量,避免被 Tauri 误认为已配置凭据。
scripts/release-build.mjs 在上传前校验构建出的 App、解压后的自动更新 App,以及
实际挂载 DMG 中的 App:都必须通过严格签名校验。有 Apple 凭据时还必须通过证书
Team ID、公证票据和 Gatekeeper 检查。任一适用检查失败均中止上传,所有平台通过后
才公开草稿 Release。发布说明会明确标注是否经过 Apple 公证。
本地仅验证安装包时,可禁用自动更新产物,无需更新私钥:
npm run tauri -- build --bundles app,dmg --config '{"bundle":{"createUpdaterArtifacts":false}}'
默认使用临时签名;没有 Developer ID 签名及 Apple 公证的本地产物仍需手动放行。
正式构建入口为
npm run release:build -- build --target aarch64-apple-darwin --bundles app,dmg
(Intel 使用 x86_64-apple-darwin),至少需要 Tauri 更新签名密钥;Apple 凭据可选。
无证书版本(包括历史未公证版本)下载后可能被 Gatekeeper 拦截。“已损坏”也可能由 签名失效或下载不完整导致,不能一概认定文件完好。确认从本项目下载后,将 App 拖入 「应用程序」,在终端先校验签名完整性,通过后只清除这个 App 的隔离标记:
codesign --verify --deep --strict /Applications/VarSwitch.app && xattr -rd com.apple.quarantine /Applications/VarSwitch.app
该命令不会修复无效签名或真实的文件损坏,也不代替正式发布所需的签名、公证。
SHELL 选择持久化位置:zsh 使用 ${ZDOTDIR:-$HOME}/.zshrc;bash 同时写入
.bashrc 与实际使用的 login 文件(.bash_profile / .bash_login / .profile);
fish 使用 ${XDG_CONFIG_HOME:-$HOME/.config}/fish/config.fish。$、反引号、引号等字符被展开。清理旧变量时写入
unset,避免旧的继承值再次覆盖配置。用户自己维护的其他配置行和符号链接会保留。launchctl setenv/unsetenv 更新用户环境,供之后启动的 GUI 应用继承;
写入失败时不会把进程内状态提前改成成功。├── public/ # 前端资源
│ ├── index.html # 主页面
│ ├── app.js # 应用逻辑
│ ├── app-helpers.js # 前端辅助函数
│ ├── app.test.js # 前端测试
│ ├── style.css # 样式
│ └── app-icon.png # 应用图标
├── src-tauri/ # Tauri / Rust 后端
│ ├── src/lib.rs # 核心逻辑:配置读写、环境变量同步、托盘、会话、Codex Toolbox、Skills、Prompts、MCP、Deep Link
│ ├── src/claude_proxy.rs # 本地协议转换代理:Anthropic/OpenAI 双向翻译、故障转移与熔断
│ ├── src/claude_desktop_provider.rs # Claude Desktop 供应商、加密存储与 3P Profile 事务投影
│ ├── src/claude_desktop_gateway.rs # Claude Desktop 本地鉴权、模型映射、转发与独立健康状态
│ ├── src/main.rs # Tauri 入口
│ ├── Cargo.toml # Rust 依赖
│ ├── tauri.conf.json # Tauri 配置
│ └── capabilities/ # Tauri 权限配置
├── .github/workflows/ # CI 构建配置(Windows + macOS 双架构)
├── varswitch-download-site/ # 下载站,含 releases 与 latest.json
├── scripts/ # 跨平台开发、本地构建、版本发布与签名校验入口
├── dev-server.js # 前端开发静态服务器
├── dev.bat # Windows 开发脚本
├── build.bat # Windows 构建脚本
├── sync-mac-release.mjs # 把 CI 构建的三平台产物同步进下载站
└── README.md # 使用说明
MIT