Merge previously unreleased v3.12.4 content into v3.12.3: - CHANGELOG: combine [Unreleased] into [3.12.3], clear [Unreleased] - Release notes (zh/en/ja): add Copilot proxy, macOS signing, Reasoning Effort, OpenCode SQLite, Codex 1M toggle, Disable Auto-Upgrade toggle, and contributor thanks - Fix test mocks for skill backup/restore hooks - Fix schema migration test missing providers table - Fix TempHome to save/restore CC_SWITCH_TEST_HOME env var
14 KiB
CC Switch v3.12.3
GitHub Copilot Reverse Proxy, macOS Code Signing & Notarization, Reasoning Effort Mapping, OpenCode SQLite Backend
Overview
CC Switch v3.12.3 is a major feature release that adds GitHub Copilot reverse proxy support with a dedicated Auth Center, introduces macOS code signing and Apple notarization for a seamless install experience, maps reasoning effort levels across providers, migrates OpenCode to a SQLite backend, enables Tool Search via the native ENABLE_TOOL_SEARCH environment variable toggle, and delivers a full skill backup/restore lifecycle. Additional improvements include proxy gzip compression, o-series model compatibility, Skills import rework, Ghostty terminal fix, Skills cache strategy optimization, Claude 4.6 context window update, and multiple bug fixes.
Release Date: 2026-03-24
Update Scale: 36 commits | 107 files changed | +9,124 / -802 lines
Highlights
- GitHub Copilot reverse proxy: Full Copilot proxy support with OAuth device flow authentication, token refresh, and request fingerprint emulation
- Copilot Auth Center: Dedicated authentication management UI for GitHub Copilot OAuth flow with token status display and one-click refresh
- macOS code signing & notarization: macOS builds are now code-signed and notarized by Apple, eliminating the "unidentified developer" warning entirely
- Reasoning Effort mapping: Proxy-layer auto-mapping — explicit
output_config.efforttakes priority, falling back tobudget_tokensthresholds (<4 000→low, 4 000–16 000→medium, ≥16 000→high) for o-series and GPT-5+ models - OpenCode SQLite backend: Added SQLite session storage for OpenCode alongside existing JSON backend; dual-backend scan with SQLite priority on ID conflicts
- Codex 1M context window toggle: One-click checkbox to set
model_context_window = 1000000with auto-populatedmodel_auto_compact_token_limit - Disable Auto-Upgrade toggle: Added
DISABLE_AUTOUPDATERenv var checkbox in the Claude Common Config editor to prevent Claude Code from auto-upgrading - Tool Search env var toggle: Tool Search enabled via Claude 2.1.76+ native
ENABLE_TOOL_SEARCHenvironment variable in the Common Config editor — no binary patching required - Skill backup/restore lifecycle: Skills are automatically backed up before uninstall; backup list with restore and delete management added
- Proxy gzip compression: Non-streaming proxy requests now auto-negotiate gzip compression, reducing bandwidth usage
- o-series model compatibility: Chat Completions proxy correctly uses
max_completion_tokensfor o1/o3/o4-mini models; Responses API kept on the correctmax_output_tokensfield - Skills import rework: Replaced implicit filesystem-based app inference with explicit
ImportSkillSelectionto prevent incorrect multi-app activation - Ghostty terminal support: Fixed Claude session restore in Ghostty terminal
New Features
GitHub Copilot Reverse Proxy
Added full reverse proxy support for GitHub Copilot, enabling Copilot-authenticated requests to be forwarded through CC Switch.
- Implements OAuth device flow authentication for GitHub Copilot
- Automatic token refresh and session management
- Request fingerprint emulation for seamless compatibility
- Integrated into the existing proxy infrastructure alongside Claude, Codex, and Gemini handlers
Copilot Auth Center
A dedicated authentication management UI for GitHub Copilot.
- OAuth device flow with code display and browser-based authorization
- Token status display showing expiration and validity
- One-click token refresh without re-authentication
- Integrated into the settings panel for easy access
Reasoning Effort Mapping
Proxy-layer auto-mapping of reasoning effort for OpenAI o-series and GPT-5+ models.
- Two-tier resolution: explicit
output_config.efforttakes priority, falling back to thinkingbudget_tokensthresholds (<4 000→low, 4 000–16 000→medium, ≥16 000→high) - Covers both Chat Completions and Responses API paths with 17 unit tests
OpenCode SQLite Backend
Added SQLite session storage support for OpenCode alongside the existing JSON backend.
- Dual-backend scan with SQLite priority on ID conflicts
- Atomic session deletion and path validation
- JSON backend remains functional for backwards compatibility
Codex 1M Context Window Toggle
Added a one-click toggle for Codex 1M context window in the config editor.
- Checkbox sets
model_context_window = 1000000inconfig.toml - Auto-populates
model_auto_compact_token_limit = 900000when enabled - Unchecking removes both fields cleanly
Disable Auto-Upgrade Toggle
Added a checkbox in the Claude Common Config editor to disable Claude Code auto-upgrades.
- Sets
DISABLE_AUTOUPDATER=1in the environment configuration when enabled - Displayed alongside Teammates mode, Tool Search, and High Effort toggles
Tool Search Environment Variable Toggle
Tool Search is now enabled via the native ENABLE_TOOL_SEARCH environment variable introduced in Claude 2.1.76+.
- Toggle available in the Common Config editor under environment variables
- Sets
ENABLE_TOOL_SEARCH=1in the Claude environment configuration - No binary patching required — uses Claude's built-in support
macOS Code Signing & Notarization
macOS builds are now code-signed and notarized by Apple.
- Application signed with a valid Apple Developer certificate
- Notarized through Apple's notarization service for Gatekeeper approval
- DMG installer also signed and notarized
- Eliminates the "unidentified developer" warning on first launch
Skill Auto-Backup on Uninstall
Skill files are now automatically backed up before uninstall to prevent accidental data loss.
- Backups stored in
~/.cc-switch/skill-backups/with all skill files and ameta.jsoncontaining original metadata - Old backups are automatically pruned to keep at most 20
- Backup path is returned to the frontend and shown in the success toast
Skill Backup Restore & Delete
Added management commands for skill backups created during uninstall.
- List all available skill backups with metadata
- Restore copies files back to SSOT, saves the DB record, and syncs to the current app with rollback on failure
- Delete removes the backup directory after a confirmation dialog
- ConfirmDialog gains a configurable zIndex prop to support nested dialog stacking
Changes
Skills Cache Strategy Optimization
Optimized the Skills cache invalidation strategy for better performance.
- Reduced unnecessary cache refreshes during skill operations
- Improved cache coherence between skill install/uninstall and list queries
Claude 4.6 Context Window Update
Updated Claude 4.6 model preset with the latest context window size.
- Reflects the expanded context window for Claude 4.6 models
- Updated in provider presets for accurate model information display
MiniMax M2.7 Upgrade
- Updated MiniMax provider preset to M2.7 model variant
Xiaomi MiMo Upgrade
- Updated Xiaomi MiMo provider preset to the latest model version
AddProviderDialog Simplification
- Removed redundant OAuth tab, reducing dialog from 3 tabs to 2 (app-specific + universal)
Provider Form Advanced Options Collapse
- Model mapping, API format, and other advanced fields in the Claude provider form now auto-collapse when empty
- Auto-expands when any value is set or when a preset fills them in; does not auto-collapse when manually cleared
Proxy Gzip Compression
Non-streaming proxy requests now support gzip compression for reduced bandwidth usage.
- Non-streaming requests let reqwest auto-negotiate gzip and transparently decompress responses
- Streaming requests conservatively keep
Accept-Encoding: identityto avoid decompression errors on interrupted SSE streams
o1/o3 Model Compatibility
Proxy forwarding now handles OpenAI o-series model token parameters correctly.
- Chat Completions path uses
max_completion_tokensinstead ofmax_tokensfor o1/o3/o4-mini models (#1451, thanks @Hemilt0n) - Responses API path kept on the correct
max_output_tokensfield instead of incorrectly injectingmax_completion_tokens
OpenCode Model Variants
- Placed OpenCode model variants at top level instead of inside options for better discoverability (#1317)
Skills Import Flow
The Skills import flow has been reworked for correctness and cleanup.
- Replaced implicit filesystem-based app inference with explicit
ImportSkillSelectionto prevent incorrect multi-app activation when the same skill directory exists under multiple app paths - Added reconciliation to
sync_to_appto remove disabled/orphaned symlinks - MCP
sync_all_enablednow removes disabled servers from live config - Schema migration preserves a snapshot of legacy app mappings to avoid lossy reconstruction
Bug Fixes
WebDAV Password Clearing
- Fixed an issue where the WebDAV password was silently cleared when saving unrelated settings
Tool Message Parsing
- Fixed incorrect parsing of tool-use messages in certain proxy response formats
Dark Mode Styling
- Fixed dark mode rendering inconsistencies in UI components
Copilot Request Fingerprint
- Fixed request fingerprint generation for Copilot proxy to match expected format
Provider Form Double Submit
- Prevented duplicate submissions on rapid button clicks in provider add/edit forms (#1352, thanks @Hexi1997)
Ghostty Session Restore
- Fixed Claude session restore in Ghostty terminal (#1506, thanks @canyonsehun)
Skill ZIP Import Extension
- Added
.skillfile extension support in ZIP import dialog (#1240, #1455, thanks @yovinchen)
Skill ZIP Install Target App
- ZIP skill installs now use the currently active app instead of always defaulting to Claude
OpenClaw Active Card Highlight
- Fixed active OpenClaw provider card not being highlighted (#1419, thanks @funnytime75)
Responsive Layout with TOC
- Improved responsive design when TOC title exists (#1491, thanks @West-Pavilion)
Import Skills Dialog White Screen
- Added missing TooltipProvider in ImportSkillsDialog to prevent runtime crash when opening the dialog
Panel Bottom Blank Area
- Replaced hardcoded
h-[calc(100vh-8rem)]withflex-1 min-h-0across all content panels to eliminate bottom gap caused by mismatched offset values on different platforms
Documentation
Pricing Model ID Normalization
- Added documentation section explaining model ID normalization rules (prefix stripping, suffix trimming,
@→-replacement) in EN/ZH/JA user manuals (#1591, thanks @makoMakoGo)
macOS Signed Build Messaging
- Removed all
xattrworkaround instructions and "unidentified developer" warnings from README, README_ZH, installation guides (EN/ZH/JA), and FAQ pages (EN/ZH/JA); replaced with "signed and notarized by Apple" messaging
Download & Installation
Visit Releases to download the appropriate version.
System Requirements
| System | 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.12.3-Windows.msi |
Recommended - MSI installer with auto-update |
CC-Switch-v3.12.3-Windows-Portable.zip |
Portable version, extract and run, no registry write |
macOS
| File | Description |
|---|---|
CC-Switch-v3.12.3-macOS.dmg |
Recommended - DMG installer, drag to Applications, Universal Binary |
CC-Switch-v3.12.3-macOS.zip |
ZIP archive, extract and drag to Applications, Universal Binary |
CC-Switch-v3.12.3-macOS.tar.gz |
For Homebrew installation and auto-update |
macOS builds are code-signed and notarized by Apple for a seamless install experience.
Homebrew (macOS)
brew tap farion1231/ccswitch
brew install --cask cc-switch
Update:
brew upgrade --cask cc-switch
Linux
| Distribution | Recommended Format | Installation Method |
|---|---|---|
| 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 directly, or use AUR |
| Other distributions / Unsure | .AppImage |
chmod +x CC-Switch-*.AppImage && ./CC-Switch-*.AppImage |