Model or dataset
SuperJJ007/CSSwitch avatar
SuperJJ007/CSSwitch

CSSwitch: routing Claude Science through your own model endpoints

帮你的 Claude Science 一键接入你自己的 API:DeepSeek / 通义千问 / 智谱 GLM / Kimi / MiniMax / 小米 MiMo / 硅基流动 / OpenRouter / 任意 OpenAI·Anthropic 兼容端点

464 stars45 forksRustMIT

At a glance

What is it?
CSSwitch is a macOS Apple Silicon menubar app that points Claude Science at third party model APIs through a local loopback gateway, using an isolated HOME so your real Claude login is untouched. The idea is sound and the isolation model is documented; the packaging, the Codex path and the missing MCP support are the parts to weigh before adopting.
Who is it for?
Adopt CSSwitch if you are on an Apple Silicon Mac, already run Claude Science, and want to route it at DeepSeek, Qwen, GLM, Kimi, MiniMax, MiMo, SiliconFlow, OpenRouter or your own OpenAI and Anthropic compatible endpoint without disturbing your real Claude login. Do not adopt it if you need Linux as a first class target, if you need to manage your own MCP servers from the app, or if you expect Codex to work as a stable feature rather than a default-off experiment.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 24 days ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap CSSwitch fills between Claude Science and a third party API key

Claude Science ships as a desktop application tied to an Anthropic account. If you want to run the same research surface against DeepSeek, Qwen, GLM, Kimi, MiniMax, Xiaomi MiMo, SiliconFlow, OpenRouter or a self hosted OpenAI compatible service, there is no supported switch in the app itself. CSSwitch exists to be that switch. It is a macOS Apple Silicon menubar application written in Rust and packaged with Tauri 2, and its stated job is to let Claude Science use your own model API and to move between mainstream providers, Codex and custom compatible endpoints.

The audience is narrow and specific. You need an Apple Silicon Mac, an installed copy of Claude Science, and a third party model API key or a Codex account. If any of those three is missing, the tool has nothing to do. The README does not present a Linux build as part of the v0.8.4 release; it points Linux x64 users at a separate v0.8.1 prerelease that ships an amd64 .deb package, which tells you the primary target is macOS and Linux is a side channel rather than a supported platform.

It is worth being clear about what CSSwitch is not. It is not a model router you point arbitrary applications at, and it is not a Skill marketplace or a general MCP manager. The README says this outright: the project focuses on safely connecting external Skills into an isolated Science instance rather than rebuilding a Skill market or a universal MCP manager.

Isolated HOME, a loopback gateway, and how the third party mode actually runs

The mechanism described in the README is process and filesystem isolation rather than patching the Science binary. In third party mode, CSSwitch launches Science with a separate HOME, a separate data-dir and a local loopback Gateway. The Gateway is a Rust component that ships inside the application bundle, so there is no separate Python runtime to install. Because the isolated instance never touches the real Claude login or the real Science data directory, switching back to official Claude is a matter of stopping the proxy chain first and then opening the normal Science.

Configuration lives in a single file. The README states that API keys are stored on the local machine at ~/.csswitch/config.json with file permissions of 0600, and that credentials are not written to logs. That is a plain design choice with a plain consequence: anyone with read access to your user account on that machine can read the keys, and there is no mention of Keychain integration or an encrypted store. For a single user laptop this is a reasonable trade, but it is not the same protection model as a system keychain.

Model mapping is strict by design. A configuration has a default model, which must be filled in, plus optional quality, balanced, fast and Fable slots that can be left empty or given an exact upstream model ID. Science displays the real model name rather than a placeholder like default. The README states that CSSwitch maps models strictly according to the current configuration and will not silently switch to a different model when it encounters an unknown one. That is the right call for research work, where a silent substitution would quietly change what produced a result, but it also means a typo in a model ID surfaces as a failure rather than a fallback.

Installing v0.8.4 and wiring up a provider

Installation is a dmg drag to Applications. The release asset is CSSwitch_0.8.4_aarch64.dmg, and the README directs you to the v0.8.4 release evidence page to check the SHA-256 of the public attachment. The README also states plainly that the current public package is ad-hoc signed and that this is not a Developer ID, notarization or Gatekeeper conclusion. In practice that means macOS may block the first launch, and the documented workaround is to right click CSSwitch in Finder and choose Open.

Connecting a model is a short sequence. Open 模型连接 (model connections), click 新增配置 (add configuration), pick a built in provider, or pick the matching compatible endpoint and fill in base_url for a relay or self hosted service. Enter the API key and the model name. The default model is required; the quality, fast and Fable slots are optional. Save, then click 设为当前 (set as current), return to the home screen, keep third party model mode selected, and click 一键开始 (one click start). Once Science opens, choose the model from its top selector. To go back, switch the home screen to official Claude and open Science; CSSwitch stops the third party chain it manages before doing so.

Built in providers listed in the README are DeepSeek, Qwen (通义千问), Zhipu GLM, Xiaomi MiMo, SiliconFlow, Kimi, MiniMax, OpenRouter, OpenCode Go in both OpenAI Chat and Anthropic Messages forms, Grok from xAI, and Gemini via its OpenAI compatible surface. Custom endpoints can speak Anthropic Messages, OpenAI Chat Completions or OpenAI Responses, and model names are typed in directly rather than discovered.

For development, the README gives two commands. From the desktop directory, npm install followed by npm run tauri dev. The full check runs bash test/run_all.sh --output-root "$GATE_ROOT" with GATE_ROOT created under /private/tmp and chmod 700 applied first.

Skill import is the mature half, and its safety checks are explicit

The Skill surface is where the project has the most defined behaviour. The app reads Skills that actually exist in the current Science organization and shows their source, whether they are a single Skill or a bundle, and one of three OPERON binding states: attached, detached or unknown. If Science is not running or the identity cannot be confirmed, the README says the app does not guess a result. That refusal to fabricate state is a good sign in a tool that sits between you and a model.

Local packages are imported through the system file picker as .zip or .skill, with single Skill and multi Skill bundles detected automatically. The front end neither receives nor submits local file paths. Installing from GitHub works differently: you give the Science agent an exact public repository, collection or Skill directory URL, and the CSSwitch host performs the anonymous download, pins the commit, validates, commits and binds. The README states that Science credentials and your own GitHub credentials are not used for this. Before committing, the installer checks archive size, file count, path traversal, symlinks, special files and name conflicts, and the commit is atomic so same named or already modified content is not silently overwritten.

The distinction the README stresses is between discovery, binding and loading. A row showing 已绑定 (bound) only means the OPERON read back succeeded in real time; it does not mean the current agent session has loaded the Skill. The documented verification step is to call skill() in the current agent session after installation. Bundle lifecycle follows the same caution: bundles keep _shared and supporting resources, and uninstalling from any member must first show the full impact list for user confirmation before the whole bundle is detached and quarantined, with no member level silent deletion.

Where CSSwitch stops: MCP, Codex, and provider capability differences

The clearest limitation is stated by the project itself. Version v0.8.4 does not let users add, edit or manage their own MCP servers, and the README warns against mistaking the narrow internal connector used for Skill installation for full MCP support. That connector only handles install, uninstall and long task status queries. If your workflow depends on managed MCP, directory connectors or cloud capabilities, the README also notes that third party mode does not carry Anthropic account entitlements and those features may be unavailable.

Codex is present but experimental and off by default. You enable it in 设置 (settings) with 启用 Codex 实验入口 (enable Codex experimental entry), then complete a browser login that is separate from native Codex. The README states that CSSwitch does not read or modify the native ~/.codex login, only supports a single account browser login at present, and builds its model list from the account's dynamic directory without inventing models the account does not have. Treating this as a stable feature would be a mistake.

The subtler failure mode is upstream capability drift. Different providers do not support tool calling, thinking, image input, long context and streaming output to the same degree. CSSwitch maps strictly, so a provider that lacks a capability your Science session uses will fail rather than degrade gracefully. Nothing in the README claims otherwise, and there is no compatibility matrix. That is a real gap if you plan to swap providers mid project.

One more boundary is worth repeating because the README repeats it: source and unit test gates, final release attachments, install identity, signing, and live provider or account behaviour are different evidence layers. Passing a download page or a source gate does not mean every real provider, SSH path or Science domain capability has been verified. The project is telling you not to over read its own checks.

How it compares with a plain OpenAI compatible proxy

The obvious alternative is a general purpose local proxy such as LiteLLM or a hand written shim that rewrites the base URL Science talks to. The difference is where the isolation lives. A generic proxy sits between the application and the network; it does not give Science a separate HOME or data-dir, so the application still runs against your real profile and your real Claude login. CSSwitch's stated design is to launch an isolated Science instance with its own HOME, data-dir and loopback Gateway, and to stop that chain before returning you to official Claude. If your reason for switching providers is to keep experimental or third party model work away from your primary account state, that separation is the feature, not the model list.

The second difference is the Skill installation path. A proxy has no opinion about Skills at all. CSSwitch validates archives, pins commits, performs atomic commits and tracks OPERON binding state, and it refuses to report a binding it cannot confirm. If you only need to redirect completions and you already manage your own Skill files, a proxy is less machinery for the same result.

The third difference runs the other way. A generic proxy is not limited to one operating system or one client application, and it does not depend on a GUI to configure a base_url. CSSwitch is a macOS Apple Silicon app with a menubar UI, a dmg distribution and an ad-hoc signature. If you need this on Linux as a supported target, or you need it driven from configuration management rather than a window, the README's own pointer to a v0.8.1 Linux prerelease is the honest answer about where that stands.

Maintenance, upgrades and what the MIT licence does and does not cover

Upgrade cost is mostly the cost of keeping a moving target aligned. The release history supplied shows v0.8.2, v0.8.3 and v0.8.4 within about a month, which suggests active iteration on a young surface. The README points to a changelog and a project documentation index for upgrade, rollback and known limitations, so the rollback path is documented rather than implied. Because the app manages a separate Science launch rather than modifying the installed application, the README states that CSSwitch does not download or auto upgrade Claude Science; on a new launch it prefers a runtime snapshot that the machine's official updater has already downloaded and that has passed local identity verification, and otherwise uses the currently installed official app. That is a deliberate refusal to become an update channel for someone else's software.

On licensing, the repository is MIT. That permits use, modification and redistribution with the licence and copyright notice preserved, and it comes with no warranty. This is a general description of the MIT terms and not legal advice; if you plan to redistribute a modified build, read the LICENSE file in the repository rather than this summary. Note also that the MIT licence covers the CSSwitch code, not the third party model services you connect it to, and not Claude Science itself. Your obligations to DeepSeek, Qwen, OpenRouter or any other provider come from your agreement with them, and nothing in CSSwitch changes that.

Editorial conclusion

Adopt CSSwitch if you are on an Apple Silicon Mac, already run Claude Science, and want to route it at DeepSeek, Qwen, GLM, Kimi, MiniMax, MiMo, SiliconFlow, OpenRouter or your own OpenAI and Anthropic compatible endpoint without disturbing your real Claude login. Do not adopt it if you need Linux as a first class target, if you need to manage your own MCP servers from the app, or if you expect Codex to work as a stable feature rather than a default-off experiment. Before you install, verify three things against the v0.8.4 release evidence page: the SHA-256 of the downloaded aarch64 dmg, the ad-hoc signing status (the README states the public package is ad-hoc signed and is not a Developer ID, notarization or Gatekeeper conclusion), and whether the specific provider you intend to use actually supports the tool calling, thinking, image and streaming behaviour your Science workflows depend on, since CSSwitch maps models strictly and will not silently fall back.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. SuperJJ007/CSSwitch on GitHub
Community notes

Community notes