Desktop configuration and routing manager for AI coding tools
简体中文 | English
StackFerry is a Tauri desktop application for managing providers, credentials, models, and active routes across AI coding tools. It combines configuration management with local request routing, failover, reusable prompts and skills, MCP configuration, session inspection, usage statistics, and remote backup.
- Provider management: Keep multiple API providers and model configurations for each supported tool, then switch the active configuration without manually editing tool files.
- Local routing: Route compatible requests through a local proxy with request and response conversion, streaming support, global outbound proxy settings, and per-provider options.
- Failover: Arrange providers in a priority queue and use health checks and circuit breakers to move traffic away from unavailable routes.
- Prompts and Skills: Manage prompts by target application; discover skills from repositories or skills.sh, import ZIP archives, install skills, and restore skill backups.
- MCP servers: Add, import, and project MCP server definitions into each tool's native configuration format.
- Sessions and usage: Search and inspect local sessions, remove sessions in batches, and review request, token, and cost data when the underlying tool or provider exposes it.
- Synchronization: Back up application data and skills to user-configured WebDAV or S3-compatible storage, with optional automatic synchronization.
- Tool maintenance: Detect installed CLI versions, install or update supported tools, and diagnose conflicting installations, including Windows and WSL environments.
| Tool | Provider routing | Prompts | Skills | MCP | Sessions |
|---|---|---|---|---|---|
| Claude Code | Yes | Yes | Yes | Yes | Yes |
| Claude Desktop | Yes | - | - | Yes | - |
| Codex | Yes | Yes | Yes | Yes | Yes |
| Pi | Yes | Yes | Yes | Yes | Yes |
| Gemini CLI | Yes | Yes | Yes | Yes | Yes |
| Grok Build | Yes | - | Yes | Yes | Yes |
| OpenCode | Yes | - | Yes | Yes | Yes |
| OpenClaw | Yes | - | - | - | Yes |
| Hermes | Yes | - | Yes | Yes | Yes |
Availability varies because each tool has a different native configuration format. OpenClaw also has workspace, environment, tool-access, and agent-default views. Hermes includes memory management and a shortcut to its dashboard.
Download the appropriate package from the latest GitHub Release. Release assets cover Windows, macOS, and Linux; the exact installers and architectures are listed on each release page. Windows releases also provide portable archives when available.
StackFerry publishes signed updater artifacts for in-app updates. macOS packages currently use ad-hoc signing rather than Apple notarization, so the first launch may require approval in System Settings. Check the release notes for platform-specific instructions.
- Install the AI coding tools you intend to manage.
- Start StackFerry and choose a target tool from the application switcher.
- Add a provider or review the configuration imported as the default provider.
- Activate the provider to write its configuration to the target tool.
- Enable local routing only when the provider or protocol requires it. Configure the failover queue before enabling automatic failover.
- Configure Prompts, Skills, MCP, synchronization, and other optional features independently for their intended target applications.
StackFerry uses its own application identifier, data directory, database, deep-link scheme, synchronization namespace, and update artifacts. It does not overwrite CC Switch's application data.
Skills can be discovered from configured Git repositories or searched through skills.sh. StackFerry validates and scans repositories before saving them, supports ZIP imports and backup restoration, and installs a selected skill into a selected target application. Master copies can live in StackFerry's data directory or in the open ~/.agents/skills location and are projected to compatible tools.
The session manager covers Claude Code, Codex, Pi, Gemini CLI, Grok Build, OpenCode, OpenClaw, and Hermes. It supports search, provider and directory grouping, detail inspection, and batch deletion. Usage statistics combine available local session logs and local-routing records; token, cost, subscription, and provider-query data depend on the selected tool and upstream service.
The stackferry:// deep-link scheme can import supported provider, prompt, MCP, and skill data after an in-app confirmation. WebDAV and S3 synchronization require storage configured and trusted by the user. Review imported content and remote-storage settings before accepting them.
- Node.js 20 or later
- pnpm 10 (CI currently uses 10.12.3)
- Rust 1.85 or later
- Native Tauri 2 prerequisites for your operating system
The repository includes Tauri CLI 2 as a development dependency; a separate global Tauri installation is not required.
pnpm install
pnpm devpnpm dev starts the complete Tauri application and redirects supported tool homes into .stackferry-dev/, keeping development changes away from real user configurations. Use pnpm dev:renderer only when working on the browser renderer without the native backend.
pnpm typecheck
pnpm format:check
pnpm test:unit
cargo fmt --manifest-path src-tauri/Cargo.toml --all -- --check
cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings
cargo test --manifest-path src-tauri/Cargo.tomlRun pnpm format to format frontend source files and pnpm build:renderer to build only the renderer.
| Command | Output |
|---|---|
pnpm build:fast |
Faster optimized executable using the fast-release Rust profile, without an installer |
pnpm bundle:fast |
One platform-native installer: MSI, DMG, or AppImage |
pnpm build |
Full production bundle used as the basis for release artifacts |
Workspace settings place rust-analyzer output in src-tauri/target/analyzer so editor checks and CLI builds do not invalidate each other's caches.
src/ React and TypeScript renderer
src-tauri/src/ Rust commands, services, database, routing, and adapters
scripts/ Development, fast-build, and release-manifest scripts
tests/ Frontend component and integration tests
.github/workflows/ CI and multi-platform release workflows
The renderer communicates with the Rust backend through Tauri commands and events. Rust owns native configuration access, SQLite persistence, proxy services, synchronization, session parsing, and system integration.
-
Set the same SemVer in
package.json,src-tauri/tauri.conf.json, andsrc-tauri/Cargo.toml. Update the root package entry insrc-tauri/Cargo.lock. -
Update
RELEASE.mdand validate the matching tag:pnpm release:validate v0.1.6
-
Commit the version changes, create a
vX.Y.Ztag, and push it. -
GitHub Actions validates the version, builds the platform matrix, gathers signed updater assets, generates
latest.json, and publishes the GitHub Release.
The release workflow requires TAURI_SIGNING_PRIVATE_KEY as a repository secret. Never commit the signing key.
- Provider credentials and application settings are stored locally in StackFerry-managed configuration and database files. Never commit real API keys or synchronized backups to source control.
- Local routing and failover change where tool requests are sent. Review provider endpoints and routing settings before enabling them, especially for official accounts.
- Third-party providers, imported deep links, skill repositories, MCP servers, scripts, and synchronization endpoints are outside StackFerry's trust boundary. Evaluate them before use.
- Back up important native tool configurations before making large changes. Synchronization is not a substitute for an independently verified backup.
StackFerry began from the CC Switch 3.19.0 codebase and retains its MIT license, copyright notice, attribution, and Git history. StackFerry is maintained as an independent project and does not automatically track CC Switch.
StackFerry is distributed under the MIT License. The original copyright notice remains:
Copyright (c) 2025 Jason Young
StackFerry is not affiliated with or endorsed by the CC Switch maintainers or by the vendors of the supported AI tools. Product names and trademarks belong to their respective owners.