# CC Switch v3.14.0 > Hermes Agent becomes the 6th managed app, Claude Opus 4.7 rolls out across the preset matrix, Gemini Native API proxy, "Local Routing" rename, and application-level window controls **[中文版 →](v3.14.0-zh.md) | [日本語版 →](v3.14.0-ja.md)** --- ## Overview CC Switch v3.14.0 is a major release centered on onboarding **Hermes Agent as the 6th first-class managed app** and rolling out **Claude Opus 4.7** across the full aggregator and Bedrock preset matrix. Hermes support covers a database v9 → v10 migration, a complete Rust command surface, YAML-backed `~/.hermes/config.yaml` read/write with atomic backups, MCP sync, Skills sync, SQLite + JSONL session management, and dedicated frontend panels including a Memory editor. All four API protocols aligned with Hermes Agent 0.10.0 (`chat_completions`, `anthropic_messages`, `codex_responses`, `bedrock_converse`) are selectable. Providers owned by the user-authored `providers:` dict are rendered as read-only cards, and deep YAML configuration is delegated directly to the Hermes Web UI. Beyond Hermes, this release adds a **Gemini Native API proxy** (`api_format = "gemini_native"`) so the proxy can forward directly to Google's `generateContent` endpoint with full streaming, schema conversion, and shadow request support; renames the legacy "Local Proxy Takeover" to **Local Routing** across UI copy, README, and docs in all three locales; introduces **application-level window controls**, an opt-in setting that materially improves the experience on Linux Wayland where compositor-drawn buttons can become inert; and bundles late additions for launching `hermes dashboard` from the toolbar, a LemonData preset across all six apps, a DDSHub Codex endpoint, plus several Hermes health-check and Usage modal fixes. On the session side, the message list is **virtualized** via `@tanstack/react-virtual` so conversations with thousands of records scroll smoothly and long messages collapse by default; the Usage dashboard adds a **date range picker** (Today / 1d / 7d / 14d / 30d + custom date-time calendar) and a page-jump input; **Stream Check error classification** now surfaces color-coded toasts with refreshed default probe models and an explicit "model not found" branch; and switching to official providers is **blocked while Local Routing is active** to avoid account-suspension risk. The pricing database is reseeded from v8 → v9 with ~50 new model entries (Claude 4.7, Opus 4.7 Adaptive Thinking, Grok 4, Qwen 3.5/3.6, MiniMax M2.5/M2.7, Doubao Seed 2.0 series, GLM-5/5.1 and others) and corrected stale prices. **Release Date**: 2026-04-21 **Update Scale**: 100 commits | 219 files changed | +20,548 / -3,569 lines --- ## Highlights - **Hermes Agent Support (6th Managed App)**: Database v9 → v10 migration, full Rust command surface, YAML read/write with atomic backups, MCP sync, Skills sync, SQLite + JSONL session management, dedicated frontend panels, and four API protocols (`chat_completions` / `anthropic_messages` / `codex_responses` / `bedrock_converse`) - **Claude Opus 4.7 Rollout**: Adaptive thinking whitelisting, per-million pricing seed, Bedrock SKU (`anthropic.claude-opus-4-7` / `global.anthropic.claude-opus-4-7`, dropping the legacy `-v1` suffix); all aggregator and Bedrock presets migrated to Opus 4.7 as the default Opus model - **Claude `max` Effort Tier**: Effort dropdown upgraded from `high` to `max` - **Gemini Native API Proxy**: New `api_format = "gemini_native"` forwards directly to Google's `generateContent` with full streaming / schema conversion / shadow request support - **GitHub Copilot Enterprise Server**: GHES authentication and endpoint configuration for Copilot-backed Claude providers - **Copilot Premium Consumption Deep Optimization**: Proactive thinking-block stripping before forwarding, `tool_result` classification fix, subagent detection, `x-interaction-id` billing merge, orphan `tool_result` sanitization, and default warmup downgrade — a systematic reduction in premium interaction consumption - **Session List Virtualization**: Long conversations scroll smoothly and long messages collapse by default to reduce text layout cost - **Codex / OpenClaw Session Title Extraction**: Meaningful title extraction with 2-line display; strips OpenClaw `message_id` suffix noise - **Usage Date Range Picker**: Today / 1d / 7d / 14d / 30d preset tabs + custom date-time calendar; page-jump input on paginated lists - **Stream Check Error Classification**: Color-coded error toasts; refreshed default probe models; explicit "model not found" detection - **Block Official Provider Switching During Local Routing**: Routing official API traffic through the local proxy carries account-suspension risk — switches are blocked with a warning toast - **Pricing Database Refresh (v8 → v9)**: ~50 new model entries and corrected stale prices - **Application-Level Window Controls**: Opt-in setting to render CC Switch's own min/max/close buttons, materially improving Linux Wayland experience - **Hermes in Unified Skills Management**: Skill install, enable, and filter now cover Hermes - **Hermes / OpenClaw Config Directory Override**: Point CC Switch at a custom `~/.hermes/config.yaml` or `openclaw.json` location - **Launch Hermes Dashboard from Toolbar**: When the Hermes Web UI probe fails, the toolbar entry offers to run `hermes dashboard` in the user's preferred terminal - **New Partner Presets**: LemonData across all six apps; DDSHub Codex endpoint; StepFun Step Plan --- ## Added ### Hermes Agent Support (6th Managed App) CC Switch now treats Hermes Agent as a first-class managed app alongside Claude / Codex / Gemini / OpenCode / OpenClaw. - **Database Migration v9 → v10**: Adds `enabled_hermes` columns to `mcp_servers` and `skills` tables (`DEFAULT 0`, auto-migrated, no data loss) - **YAML Configuration Read/Write**: `~/.hermes/config.yaml` read/write with atomic backups; `tests/hermes_roundtrip.rs` guards against dropped OAuth MCP `auth` blocks or pollution of unrelated YAML keys - **Four API Protocols**: Aligned with Hermes Agent 0.10.0 — `chat_completions` / `anthropic_messages` / `codex_responses` / `bedrock_converse`; new deeplinks default to `chat_completions` - **User `providers:` Dict Read-Only Rendering**: User-authored providers in the YAML appear as read-only cards in CC Switch; deep configuration delegates to the Hermes Web UI - **Additive Switching**: Unlike Claude / Codex's "override" style, all Hermes providers coexist in the same YAML ### Hermes Memory Panel - New Memory panel for editing `MEMORY.md` / `USER.md` directly, with an enable switch, character-count limits, and a live save flow - Replaces the Prompts entry for Hermes ### Hermes Provider Presets (~50) - Covers Nous Research, Shengsuanyun, OpenRouter, DeepSeek, Together AI, StepFun, Zhipu GLM, Bailian, Kimi, MiniMax, DouBao, BaiLing, ModelScope, KAT-Coder, PackyCode, Cubence, AIGoCode, RightCode, AICodeMirror, AICoding, CrazyRouter, SSSAiCode, Micu, CTok.ai, DDSHub, E-FlowCode, LionCCAPI, PIPELLM, Compshare, SiliconFlow, AiHubMix, DMXAPI, TheRouter, Novita, Nvidia, and Xiaomi MiMo ### Launch Hermes Dashboard from Toolbar - When the Hermes Web UI probe fails, the toolbar entry opens a confirm dialog offering to run `hermes dashboard` in the user's preferred terminal - Spawned via a temp bash / batch script; `hermes dashboard` opens the browser itself once ready, so no polling is required - The Memory panel and Health banner keep the existing toast behavior - Also corrects the stale `hermes web` hint in the offline toast (the real command is `hermes dashboard`) - Linux terminal detection reordered to try `which` before stat'ing `/usr/bin`, `/bin`, `/usr/local/bin` ### Claude Opus 4.7 Support - New Claude Opus 4.7 with adaptive thinking whitelisting, per-million pricing seed, and Bedrock SKU (`anthropic.claude-opus-4-7` / `global.anthropic.claude-opus-4-7`, dropping the legacy `-v1` suffix) - All aggregator and Bedrock presets migrated to Opus 4.7 as the default Opus model ### Claude `max` Effort Tier - Claude effort dropdown upgraded from `high` to `max` for extended reasoning capacity ### Gemini Native API Proxy - New `api_format = "gemini_native"` so the proxy can forward directly to Google's `generateContent` API (#1918, thanks @yovinchen) - Full streaming, schema conversion, and shadow request support - Adds `gemini_url.rs`, `gemini_schema.rs`, `gemini_shadow.rs`, `streaming_gemini.rs`, and `transform_gemini.rs` under the proxy providers module ### GitHub Copilot Enterprise Server (GHES) - GHES authentication and endpoint configuration for Copilot-backed Claude providers (#2175, thanks @hotelbe) ### Session List Virtualization - Virtualized the session list via `@tanstack/react-virtual` so long conversations (thousands of records) scroll smoothly - Long session messages are collapsed by default to reduce text layout cost ### Codex / OpenClaw Session Title Extraction - Meaningful title auto-extraction for Codex and OpenClaw sessions with 2-line display - Strips OpenClaw `message_id` suffix noise ### Usage Date Range Picker - New date range selector on the usage dashboard with preset tabs (Today / 1d / 7d / 14d / 30d) + custom date + time calendar (#2002, thanks @yovinchen) - Page-jump input added on paginated lists ### Model Mapping Quick-Set - New quick-set button next to model mapping fields in provider forms for faster edits (#2179, thanks @lispking) ### Stream Check Error Classification - Stream Check errors are classified and surfaced as color-coded toasts - Refreshed default probe models to match each vendor's current lineup - Explicit detection for "model not found" responses ### Block Official Provider Switching During Local Routing - Switching to official providers is blocked while Local Routing is active, with a warning toast - Reason: routing official API traffic through the local proxy carries account-suspension risk ### Pricing Database Refresh (v8 → v9) - Reseed-on-migration pricing table - ~50 new model pricing entries including Claude 4.7, Opus 4.7 Adaptive Thinking, Grok 4, Qwen 3.5/3.6, MiniMax M2.5/M2.7, Doubao Seed 2.0 series, GLM-5/5.1 - Corrected stale prices for DeepSeek, Kimi K2.5, and others ### Application-Level Window Controls - Opt-in setting to render CC Switch's own minimize / toggle-maximize / close buttons instead of system decorations (#1119, thanks @git1677967754) - Materially improves the experience on Linux Wayland where compositor-drawn buttons can become inert ### Hermes in Unified Skills Management - Hermes is added to the unified Skills surface - Skill install, enable, and filter now cover the Hermes app alongside Claude / Codex / Gemini / OpenCode / OpenClaw ### OpenClaw Config Directory Override - New settings option to point CC Switch at a custom `openclaw.json` location (#1518, thanks @mrFranklin) ### Hermes Config Directory Override - New settings option to point CC Switch at a custom `~/.hermes/config.yaml` location, backed by data-driven dispatch ### StepFun Step Plan Preset - StepFun Step Plan (EN / ZH) provider presets (#2155, thanks @hengm3467) ### New API Usage Script Template - Added a User-Agent header to the New API usage script template for better upstream compatibility ### LemonData Provider Preset (All Six Apps) - LemonData registered as a third-party partner preset across Claude, Codex, Gemini, OpenCode, OpenClaw, and Hermes - Icon assets and zh / en / ja partner-promotion copy - Claude preset uses `ANTHROPIC_API_KEY` auth; OpenAI-compatible apps target `gpt-5.4` ### DDSHub Codex Preset - Added a Codex-compatible endpoint for DDSHub at the same host as its Claude service - Base URL omits the `/v1` suffix because the gateway auto-routes OpenAI SDK paths --- ## Changed ### "Local Proxy Takeover" → "Local Routing" - Unified the terminology across UI copy, README, and docs in all three locales - Functional behavior is unchanged ### Hermes `Auto` api_mode Removed - Users must pick an explicit protocol; new deeplinks default to `chat_completions` - Eliminates URL-based heuristic surprises ### Hermes Provider Form - Added an API mode dropdown and per-provider model editor - Binds per-provider models to the top-level `model:` when switching active providers ### Hermes Deep Config Delegation - Deep YAML knobs are no longer duplicated in the CC Switch form — they are delegated to the Hermes Web UI via a direct launch action ### Hermes Toolbar Layout - Swapped the Hermes Web UI button from `ExternalLink` to `LayoutDashboard` (clicking may spawn `hermes dashboard` rather than just opening a URL) - Moved MCP to the final toolbar slot so Hermes matches the Claude / Codex / Gemini / OpenCode layout ### `ANTHROPIC_REASONING_MODEL` Removed from Claude Quick-Set - Decoupled the reasoning capability from model selection; the legacy field is no longer surfaced in the quick-set form ### Per-Provider Proxy Config Removed - Consolidated into global Local Routing - Provider-level proxy toggle and associated storage are gone ### Unified Toolbar Icon Button Width - Normalized icon-button widths across Claude / Codex / Gemini / OpenCode / OpenClaw / Hermes panels for a consistent header look ### Rust Toolchain Pinned to 1.95 - Adopted clippy 1.95 suggestions across the workspace and pinned the toolchain to prevent nightly drift ### Tray Menu ID Constant - The tray identifier moved from the hardcoded string `"main"` to a `TRAY_ID` constant (`"cc-switch"`) across all call sites (#1978, thanks @lidaxian121) ### Copilot Premium Consumption Deep Optimization A systematic overhaul to reduce Copilot reverse-proxy premium interaction consumption across multiple dimensions: - **Proactive Thinking Block Stripping Before Forwarding**: Anthropic's `thinking` / `redacted_thinking` blocks are rejected by OpenAI-compatible endpoints. Previously, the request failed upstream, burning one premium interaction before the `thinking_rectifier` could retry. A new proactive strip step (Copilot optimization pipeline step 3.5, after `tool_result` merging) eliminates that wasted interaction - **Request Classification Fix**: Messages containing `tool_result` are now classified as agent continuation instead of user-initiated, preventing every tool call from being falsely counted as a premium interaction - **Subagent Detection**: Identifies subagents via `__SUBAGENT_MARKER__` with `metadata._agent_` fallback, setting `x-interaction-type=conversation-subagent` - **Deterministic `x-interaction-id` Billing Merge**: Derives `x-interaction-id` from the session ID so multiple requests within the same session collapse into a single billing interaction - **Orphan `tool_result` Sanitization**: Cleans up orphan `tool_result` entries to prevent upstream errors that would trigger retries and duplicate billing - **Warmup Downgrade Enabled by Default**: Uses `gpt-5-mini` as the default downgrade model - **Optimization Pipeline Reorder**: classify → sanitize → merge → warmup, so classification sees raw `tool_result` semantics - Fixed a `CopilotOptimizerConfig` default-value inconsistency (unified to `gpt-5-mini`) ### Usage Script Intranet Support - Removed private-IP / suspicious-hostname blocking from usage scripts, unblocking enterprise intranet, Docker, and self-hosted API endpoints - Built-in templates still enforce HTTPS (except localhost) and same-origin checks; custom templates remain user-controlled with those request-URL checks skipped ### Failover Queue Notes - Provider notes now appear in failover queue selectors and queue rows for easier identification across multi-provider queues (#2138, thanks @Coconut-Fish) --- ## Fixed ### Header Auto-Compact Latching After Maximize - The toolbar no longer stays compacted after maximize/restore; compaction now reevaluates on size changes ### Hermes YAML Pollution & OAuth MCP `auth` Drop - Round-tripping through CC Switch no longer drops OAuth MCP `auth` blocks or pollutes unrelated YAML keys - Guard tests added via `tests/hermes_roundtrip.rs` ### Hermes Active Provider Display - Hermes UI now correctly surfaces the active provider and wires add / enable / remove actions ### Hermes Provider Persistence - Providers persist under `custom_providers:` so `api_mode` and `model` survive restarts and config reloads ### Hermes Health Check Borrowing OpenClaw Schema - Hermes providers were routed through `check_additive_app_stream` (the OpenClaw dispatcher), which reads camelCase `baseUrl` / `apiKey` / `api` and surfaced "OpenClaw provider is missing baseUrl" even when every Hermes field was filled - Introduced `check_hermes_stream` with Hermes-specific extractors that map `api_mode` (`chat_completions` / `anthropic_messages` / `codex_responses`) to the matching `check_claude_stream` `api_format`; `bedrock_converse` returns as unsupported - `api_mode` is now resolved before URL / API key extraction, so `bedrock_converse` users see the real cause rather than a misleading "missing base_url" ### Usage Query Modal for Hermes & OpenClaw - `getProviderCredentials` now reads flat `settingsConfig` fields for Hermes (snake_case `base_url` / `api_key`) and OpenClaw (camelCase `baseUrl` / `apiKey`), so the "official balance" template auto-selects for matching providers like SiliconFlow - Refactored the BALANCE and TOKEN_PLAN test paths to reuse the precomputed `providerCredentials` instead of re-reading `env.ANTHROPIC_*` directly, fixing the "empty key" error for non-Claude apps even when the key was configured ### Codex `cache_control` Preservation - Preserve `cache_control` when merging system prompts during Codex format conversion (#1946, thanks @yovinchen) ### Claude Prompt Cache Key Leak - Stopped sending prompt cache keys during Claude chat conversions (#2003, thanks @yovinchen) ### Proxy Hop-by-Hop Header Stripping - Strip hop-by-hop response headers (Connection, Keep-Alive, Transfer-Encoding, etc.) per RFC 7230 (#2060, thanks @yovinchen) ### Permissive Proxy CORS Removed - Removed the permissive CORS layer from the proxy (#1915, thanks @zerone0x) ### Backend Error Details in Proxy Toast - Surface backend error payload details in proxy-related toast messages instead of a generic failure string ### Usage Log Deduplication - Deduplicated proxy and session-log usage records so the same request is no longer double-counted - Synced the request log time range with the dashboard's 1d / 7d / 30d selector ### Common Config Checkbox Persistence - Checkbox state for Claude / Codex / Gemini common-config toggles now persists correctly across reopens (#2191, thanks @zxZeng) ### Claude Plugin `settings.json` Sync - Editing the current provider now syncs back to `settings.json` for the Claude plugin path (#1905, thanks @chengww5217) ### Google Official Gemini Env Preservation - Saving the Google Official Gemini provider no longer clobbers the `env` block ### OpenCode JSON5 Parser for Trailing Commas - OpenCode config reads now tolerate trailing commas via a JSON5 parser (#2023, thanks @wwminger) ### Preset Refreshes - Refreshed stale context windows for DeepSeek and Claude 1M - Refreshed stale model IDs; backfilled Hermes model lists - Fixed the Nous endpoint and replaced the Hermes placeholder icon with Nous brand artwork - Pruned unused official Hermes presets ### Auto-Expand Collapsed Messages on Search Hit - Collapsed messages now auto-expand when a search match lands inside hidden content ### Unknown Subscription Quota Tiers Hidden - Provider cards no longer render unknown subscription quota tiers ### Weekly Limit Label Unified - Aligned the `weekly_limit` tier label with the official 7-day naming across locales ### Root-Level Skill Repo Install - Fixed skill installation when the repository root itself is a skill ### Session ID Parsing Clippy - Removed a redundant closure in session ID parsing (clippy warning) ### Stream Check Default Models Refresh - Updated stream-check default probe models to match each vendor's current lineup ### Skills Import Sync - Imported Skills are now immediately synced into enabled app directories instead of only being recorded in the database (#2101, thanks @yaoguohh) - The UI no longer shows "installed" while the target app directory is missing the skill ### Ghostty Session Restore - Fixed Ghostty session restore launch by using shell execution with `--working-directory` (#1976, thanks @Suda202) - Avoids `cwd` escaping issues when the path contains spaces or special characters --- ## Docs ### README Sponsor Updates - Updated SiliconFlow signup bonus to ¥16 - Trimmed the SSSAiCode sponsor blurb - Updated partner logos - Added LemonData as a new sponsor ### Global Proxy Hint Clarified - Clarified the global proxy hint about local routing across all three locales ### Takeover → Routing Rename - Renamed takeover docs to routing and updated anchors across all languages ### PIPELLM Website URL - Updated the PIPELLM sponsor website URL to `code.pipellm.ai` --- ## ⚠️ Breaking Changes ### Hermes requires explicit `api_mode` - The `Auto` mode is gone; imported or deeplinked providers default to `chat_completions` - Users with prior `Auto` configs will be prompted to pick a protocol ### `ANTHROPIC_REASONING_MODEL` removed from Claude quick-set - The legacy field is no longer exposed; existing settings are cleaned up automatically ### Per-provider proxy configuration removed - Migrate to the global Local Routing setting - Existing per-provider proxy values are ignored ### Database schema v9 → v10 - Adds `enabled_hermes` columns to `mcp_servers` and `skills` - Auto-migrated with `DEFAULT 0`; no data loss ### Pricing table reseeded (v8 → v9) - The `model_pricing` table is cleared and reseeded on first launch to pick up new models and corrected prices ### XCodeAPI preset removed - Users of the XCodeAPI preset should switch to another provider --- ## ⚠️ Risk Notice This release inherits the risk notices originally introduced in v3.12.3 / v3.13.0 for reverse-proxy-style features. **GitHub Copilot Reverse Proxy**: Using Copilot's reverse-proxy path may violate GitHub / Microsoft's terms of service. See [v3.12.3 release notes](v3.12.3-en.md#️-risk-notice). **Codex OAuth Reverse Proxy**: Using the Codex OAuth reverse proxy with a ChatGPT subscription may violate OpenAI's terms of service. See [v3.13.0 release notes](v3.13.0-en.md#️-risk-notice). By enabling these features, users **accept all associated risks**. CC Switch is not responsible for any account restrictions, warnings, or service suspensions that result from using these features. --- ## Download & Installation Visit [Releases](https://github.com/farion1231/cc-switch/releases/latest) to download the appropriate version. ### System Requirements | OS | Minimum Version | Architecture | | ------- | ----------------------- | ----------------------------------- | | Windows | Windows 10 or later | x64 | | macOS | macOS 12 (Monterey) or later | Intel (x64) / Apple Silicon (arm64) | | Linux | See table below | x64 | ### Windows | File | Description | | ---------------------------------------- | ----------------------------------------------- | | `CC-Switch-v3.14.0-Windows.msi` | **Recommended** - MSI installer, supports auto-update | | `CC-Switch-v3.14.0-Windows-Portable.zip` | Portable, extract and run, no registry writes | ### macOS | File | Description | | -------------------------------- | -------------------------------------------------------- | | `CC-Switch-v3.14.0-macOS.dmg` | **Recommended** - DMG installer, drag into Applications | | `CC-Switch-v3.14.0-macOS.zip` | Extract and drag into Applications, Universal Binary | | `CC-Switch-v3.14.0-macOS.tar.gz` | For Homebrew installation and auto-update | > macOS builds are Apple code-signed and notarized — install directly. ### Homebrew (macOS) ```bash brew tap farion1231/ccswitch brew install --cask cc-switch ``` Update: ```bash brew upgrade --cask cc-switch ``` ### Linux | Distribution | Recommended | Installation | | --------------------------------------- | ----------- | ---------------------------------------------------------------------- | | Ubuntu / Debian / Linux Mint / Pop!\_OS | `.deb` | `sudo dpkg -i CC-Switch-*.deb` or `sudo apt install ./CC-Switch-*.deb` | | Fedora / RHEL / CentOS / Rocky Linux | `.rpm` | `sudo rpm -i CC-Switch-*.rpm` or `sudo dnf install ./CC-Switch-*.rpm` | | openSUSE | `.rpm` | `sudo zypper install ./CC-Switch-*.rpm` | | Arch Linux / Manjaro | `.AppImage` | Add execute permission and run, or use AUR | | Other distros / not sure | `.AppImage` | `chmod +x CC-Switch-*.AppImage && ./CC-Switch-*.AppImage` |