66 KiB
CC Switch v3.19.0
本リリースの主軸はより安心して使えることです。集中的なセキュリティ強化——Skill のインストール、
ccswitch://インポート確認、SQL バックアップのインポート、共通設定のマージ、ターミナル起動をすべて引き締めました。うち 2 点は 1 分ほど確認をお願いします——Gemini 共通設定の API キー漏えいを修正し、アップグレード後に自動でクリーンアップします(キーのローテーションが必要です)。そしてccswitch://の MCP インポート確認ダイアログは、これまで書き込まれるコマンドを表示できないことがありました(出所の不明なインポートリンクを開いたことがある場合は、一度確認することをおすすめします)。どちらも「アップグレード時の注意」を参照してください。プロキシの正確性についても大きな修正があります——プロキシ経由の画像読み取りでコンテキストが溢れなくなりました(スクリーンショット 1 枚が 10 万 token 超を消費し、2〜3 枚で Codex のセッションが 400 で固まっていました)。手間を減らす部分も実質的です——モデル価格を models.dev に自動メンテナンスさせられるようになり、Grok CLI 公式ログインモードの使用量と SuperGrok サブスクリプション残量がついにダッシュボードに入り、アプリ内更新はdl.ccswitch.ioミラー経由になりました——GitHub につながりにくい環境でも問題なくアップグレードできます。
ハイライト:本リリースでできること
- プロキシ下でも画像を普通に読める、コンテキストは溢れない:Codex の
view_imageや画像を返す MCP ツールでは、これまで画像がツールテキストへシリアライズされ、プレーンテキストとして token 計算されていました(約 9,000 倍の膨張)。現在はすべての変換ブリッジが画像をネイティブ形式へ復元してから送信します(ファイルと音声は 2 本の Chat ブリッジで併せて対応)。実測では同一のリプレイターンが 85k+ token から約 12k へ下がり、キャッシュヒット率は 99% でした。 - モデル価格を models.dev に自動メンテナンスさせる:使用量パネルに「models.dev 自動価格同期」を追加しました(既定は無効)。有効にすると、起動時に選択したモデルの価格を自動更新します(6 時間に最大 1 回)。完全なカタログから追跡するモデルを選ぶことも、各社の最新のよく使うモデルを自動的に含めることもできます。手動での価格変更と削除は、本リリースから
~/.cc-switch/model-pricing.jsonに記録され、データベースを再構築しても失われません。 - Grok 公式モードの使用量とサブスクリプション残量が見える:Grok CLI が公式 OAuth でログインしている場合はローカルプロキシを経由できないため、この分の消費はこれまでまったく見えませんでした。現在はセッションログからターンごとの使用量をインポートし、ダッシュボードに「Grok Build (Session)」として表示します。公式カテゴリの Grok Build プロバイダーのカードには、SuperGrok サブスクリプションのクォータ使用量とリセット時刻も直接表示されます。
ccswitch://インポートリンクをより安心して開ける:確認ダイアログはコマンド、各引数、URL、環境変数を余さず表示し(認証情報らしき値はマスク表示)、よく見るべき値をハイライトします——シェルのインライン実行、ロード挙動を変える環境変数、内部ネットワーク / メタデータのアドレスです。使用量照会スクリプトはコード全文を表示し、既定では無効の状態でインポートされます。- Gemini プロバイダーに他人のキーが混入していないことを確認:共通設定の共有スニペットは、これまで
GOOGLE_API_KEYなどの認証情報を、それを使うすべての Gemini プロバイダーにコピーしていました。本リリースでこの経路を閉じ、アップグレード後の初回起動で一回限りのクリーンアップを自動実行します。共有 Gemini スニペットを通過したキーはすべて漏えい済みとみなし、ローテーションしてから入力し直してください(「アップグレード時の注意」参照)。 - GitHub につながりにくくてもアプリを更新できる:アプリ内アップデーターは
https://dl.ccswitch.io/latest.json(Cloudflare R2 ミラー)を優先して照会し、GitHub をフォールバックにします。minisign の署名検証は変わらず、ミラー自体は信頼されません。 - 新規プロバイダーで最新モデルをすぐ使える:プリセットの既定モデルを Claude Opus 5、GPT-5.6 Sol、Gemini 3.6 Flash にアップグレードし、対応する価格も登録しました。作成済みのプロバイダーはそのままです。
- fork の多い Codex 使用量履歴をより速くインポート:親 rollout ファイルは一度だけ解析してすべての fork 地点で共有するようになり、fork の多い履歴の再構築が明らかに高速化します。インポート結果はバイト単位で変わりません。
利用ガイド
本リリースの新機能は主に使用量パネルと ccswitch:// ディープリンクインポートにあります。以下のドキュメントもあわせてご覧ください:
- 使用量統計:使用量ダッシュボードのデータソースと集計方法を確認できます。本リリースでは models.dev 自動価格同期と Grok 公式モードの使用量インポートを追加しました。
- ディープリンクインポート(ccswitch://):インポート確認ダイアログの各フィールドと、
usageEnabledなどのパラメーターの既定値を説明します(本リリースから使用量スクリプトは既定で無効の状態でインポートされます。ドキュメントも修正済みです)。 - セキュリティポリシー(SECURITY.md):本リリースで脅威モデルと報告範囲を整備しました——どの入力を信頼しないか、どのような問題の報告を歓迎するかが一目で分かります。
Warning
唯一の公式チャネル(必ずお読みください)
CC Switch は完全に無料・オープンソースのデスクトップアプリで、ユーザーから料金を徴収することはありません。本ソフトウェアは下記の公式チャネルからのみ入手してください:
チャネル 唯一の公式 公式サイト ccswitch.io ソースコード github.com/farion1231/cc-switch ダウンロード GitHub Releases 作者 @farion1231 偽サイト通報 GitHub Issues 料金請求・チャージ・認証情報の提供を求める「CC Switch」サイトやクライアントはすべて偽物です。 支払いを誘導された場合は直ちに操作を中止し、GitHub Issues からご報告ください。
概要
CC Switch v3.19.0 は、集中的なセキュリティ強化と、プロキシの正確性に関する大きな修正が主役です。セキュリティ側(#5811 および後続の個別修正):GitHub リポジトリからの Skill インストールは zip-slip とパストラバーサルを塞ぎ、アーカイブに上限を設けました。Gemini 共通設定のキー漏えい経路を閉じ、アップグレード後の初回起動で一回限りのクリーンアップを自動実行して、既に他プロバイダーの設定へ漏れ出したキーを取り除きます。SQL バックアップのインポートは SQLite authorizer の下で実行するようになり、ATTACH などインポート対象データベースの外に触れられる文はすべて拒否します。共通設定スニペットのマージは __proto__ をたどってグローバルなプロトタイプを汚染しなくなりました。外部ターミナルの起動は POSIX のシングルクォートエスケープに変え、ディレクトリ名からコマンドを注入することはもうできません。ccswitch:// のインポート確認ダイアログはペイロードを余さず表示し(認証情報らしき値はマスク表示)、リスクのある値をマークします。使用量スクリプトは既定で無効の状態でインポートされます。プロキシ側では、ツール結果に含まれる画像がツールテキストへシリアライズされなくなり、各変換ブリッジでネイティブなメディアとして復元して送信されるようになりました(ファイルと音声は 2 本の Chat ブリッジで併せて対応)——「113 KB のスクリーンショット 1 枚が 10 万 token 超を食い、2〜3 枚で Codex のセッションが 400 で固まる」問題に終止符を打っています(#4465、#5663)。
使用量統計には 2 つの新機能が入りました。models.dev 自動価格同期(オプトイン、#5734)と、それに伴う手動の価格変更 / 削除の、人間が編集可能な ~/.cc-switch/model-pricing.json への永続化。そして Grok CLI 公式 OAuth モードの使用量インポート——このトラフィックはローカルプロキシを通せず、これまでまったく見えませんでした——加えてプロバイダーカードでの SuperGrok サブスクリプションクォータの表示です。配信と使い勝手まわりでは、アプリ内更新が dl.ccswitch.io の Cloudflare R2 ミラーを優先するようになり(GitHub にフォールバック、署名検証は不変)、Codex 使用量インポートは fork セッションで解析済みの親 rollout タイムラインを再利用し(#5626)、プリセットの既定モデルは Claude Opus 5、GPT-5.6 Sol、Gemini 3.6 Flash にアップグレード、OpenClaw の Kimi For Coding プリセットは base URL を修正、ツールバーのアプリ切り替えはアイコンのみになりました。本リリースにデータベースの schema 移行はありません。アップグレードは軽量です。
リリース日: 2026-07-30
Stats: 38 commits | 132 files changed | +14,926 / -1,415 lines
追加機能
models.dev 自動価格同期
使用量パネルの価格セクションに「models.dev 自動価格同期」カードが加わりました。既定は無効で、手動での有効化が必要です。有効にする際には確認の説明が表示されます——CC Switch は起動時に(6 時間に最大 1 回)models.dev から選択したモデルの価格を更新し、同名モデルの内蔵価格も手動で設定した価格も上書きされます。「モデルを選択」ダイアログでは models.dev の完全なカタログを検索・絞り込みでき、さらに「よく使うモデルを自動的に含める」オプションもあります。これは Claude、GPT、Gemini、Grok、DeepSeek、Qwen、MiMo、LongCat、Kimi、MiniMax、GLM 各社の最近リリースされたモデル(ファミリーごとに最大 6 個、個別に除外可能)をカバーします。カードには前回の同期時刻とエラーが表示され、「今すぐ同期」を実行でき、ローカルの価格ファイルを開いたり再読み込みしたりもできます。
本リリースから、手動での価格変更と価格削除は、データベースの隣に置かれる人間が編集可能なファイル ~/.cc-switch/model-pricing.json にも記録され、起動のたびに再適用されます——データベースを再構築しても手動価格が失われなくなり、削除した内蔵価格もようやく削除したままにできます(tombstone として記録され、再シードされません)。なおこのファイルは作成時点では空で、既存の価格テーブルから遡って書き出すことは意図的にしていません(そうすると内蔵価格までオーバーライド項目として書き込まれ、将来の内蔵価格の修正を塞いでしまうためです)。アップグレード前に行った価格変更は引き続きデータベースにのみ存在するので、一度保存し直せばファイルに入ります。同期によって実際に価格が変わった場合は、これまでコストが算出されたことのない(ゼロまたは欠落の)過去の使用量行を新しい価格で計算し直します——既にコストがある行は元の値のままです。取得に失敗した場合やオフラインの場合でも、起動をブロックすることは決してありません。models.dev のリストからはテキスト以外のモデルと非推奨のモデル(音声 / 画像 / 動画 / embedding など)も除外し、手動で価格を選ぶダイアログもすっきりしました。(#5734)
Grok 公式モードの使用量が、ついにダッシュボードへ
Grok CLI が公式 OAuth でログインしているときはローカルプロキシへルーティングできません——Grok は空の設定をモードスイッチとして使うため、CC Switch を指し示す場所がないのです——そのためこの分の消費は、これまで使用量ダッシュボードでまったく見えませんでした。現在は通常のセッションログ同期に合わせて、~/.grok/sessions(アーカイブ済みセッションを含む)の updates.jsonl から turn_completed イベント単位でターンごとの使用量をインポートします。コストは CLI 自身が報告する正確な数値を優先し、欠落時はローカル価格にフォールバックします(内蔵価格テーブルに grok-4.5-build を追加。100 万 token あたり入力 $2 / 出力 $6 / キャッシュ読み取り $0.30)。インポート行は上流のターンごとの ID をキーにするため、巻き戻したセッションで重複計上されることはありません。確定待ちウィンドウには直近のプロキシ活動チェックを加え、「ルーティング + 公式」を併用しても同じトラフィックが二重に計上されないようにしています。ダッシュボードでは新しい行がプロバイダー名「Grok Build (Session)」として表示され、アプリフィルターに Grok Build の選択肢が加わり、データソース内訳に専用アイコン付きの「Grok Build Session」項目が追加されました。4 言語対応です。
プロバイダーカード上の SuperGrok サブスクリプションクォータ
カテゴリが「公式」の Grok Build プロバイダーでは、カード上に SuperGrok サブスクリプションの使用量が直接表示されるようになりました——Claude Code / Codex / Gemini の公式サブスクリプションのフッターと並ぶ形です。CC Switch は Grok CLI 自身の OAuth 認証情報(~/.grok/auth.json)を読み取り、grok.com の課金 endpoint に問い合わせて、クォータウィンドウの使用率とリセット時刻を取得します。リセット間隔が判別できる場合は「週」または「月」と表示し、そうでない場合は新設の「Credits」区分に入ります(トレイの使用量サマリーでは c グループとして表示)。ネットワークの一時的な切断時は前回の値を保持して再試行し、フッターを空にしません。トークンが期限切れの場合は grok login のやり直しを促します。Claude Code、Claude Desktop、Codex の管理下 xAI OAuth(SuperGrok)プロバイダーにも同じクォータ表示が自動的に付きます——データはそのプロバイダーに紐づくアカウントから取得され、使用量スクリプトの入口はそれに伴って非表示になります。なお Grok Build プロバイダーの「公式」判定は、現在は category フィールドのみで行い、設定内容の推定は行いません。
Claude Opus 5 の内蔵価格
claude-opus-5 を内蔵価格テーブルに追加しました。100 万 token あたり入力 $5 / 出力 $25、キャッシュ読み取り $0.50 / キャッシュ書き込み $6.25 で、使用量が $0 と表示されなくなります。「存在しなければ挿入」でシードするため、編集済みの価格は影響を受けません(Opus 5 の fast モードは別建ての課金のため、意図的にテーブルへ入れていません)。
プリセットカタログの更新
A6API(同一モデルに複数の上流を持ち自動で最適な経路を選ぶアグリゲーションプラットフォーム)を 8 つのアプリのスポンサープリセットに追加しました。PackyCode のプリセットは、バックアップ endpoint に対応する 5 種類のプリセット(Claude Code / Claude Desktop / Codex / Gemini CLI / Grok Build)で 3 つのバックアップアドレスを追加し、アドレスマネージャーと速度計測から選択できます。AICoding パートナープリセットが 7 アプリで復帰し、スポンサーの並び順を README と再度揃えました。
変更
プリセット既定モデルのアップグレード:Claude Opus 5、GPT-5.6 Sol、Gemini 3.6 Flash
内蔵プリセットの既定モデルが全面的に現行世代になりました。claude-opus-5 が claude-opus-4-8 を置き換え(3 種類の命名形態すべてをカバー)、gpt-5.6-sol が gpt-5.5 と裸の gpt-5.6 を置き換え、gemini-3.6-flash が gemini-3.5-flash を置き換えます。ミラーされているすべての箇所も同期更新しました——汎用 / NewAPI の既定値、Codex カスタム config.toml テンプレート、推奨リスト、フォームのプレースホルダー、4 言語の文言です。gemini-3.6-flash の価格も登録しました(100 万 token あたり $1.50 / $7.50、キャッシュ読み取り $0.15)。gemini-3.1-pro-preview に固定されたままだった Code0 と Qiniu の Gemini プリセットも 3.6 Flash に揃えています——これは意図的な tier の調整です。3.6 に Pro 版はなく、3.5 Pro は引き続きパートナーテストに限定されています。既定値は新規作成するプロバイダーにのみ影響します。保存済みのプロバイダーは作成時のモデルを維持します。Claude Desktop の opus ルートの現在値は claude-opus-5 に前進し、claude-opus-4-8 は互換エイリアスのスロットへ移りました。既存の設定は従来どおり解決されます。
アプリ内更新は ccswitch.io ミラー経由へ
アップデーターは https://dl.ccswitch.io/latest.json——リリースマニフェストの Cloudflare R2 ミラー——を優先して照会し、GitHub Releases をフォールバックにするようになりました。更新の確認とダウンロードが GitHub への到達性に依存しなくなります。ミラーのマニフェストは各プラットフォームのダウンロードを同一のバケットへ向けますが、minisign の署名はそのままです。署名が保証するのは URL ではなくファイルの内容であり、ダウンロードした成果物はいずれも内蔵の公開鍵に対して検証されます——ミラー自体は常に信頼されません。配信は release でゲートされた同期ワークフローが担当し、tag が確かに GitHub の releases/latest である場合にのみルートのマニフェストを書き換えるため、ミラーがユーザーを古いバージョンへ引き戻すことはありません。
Codex 使用量インポート:fork セッションの高速化
Codex 使用量統計のインポートと再構築で、同じ親 rollout ファイルを fork 地点ごとに読み直すことはなくなりました。親の ~/.codex/sessions/*.jsonl は 1 回だけ解析してメモリ上の token タイムラインを生成し、そこから fork したすべての子セッションで共有します。各子セッションの切り詰め位置はメモリ上のフィルタリングで処理されます。キャッシュはファイル同一性のスタンプ(更新時刻、サイズ、加えて Unix では device/inode、Windows ではボリュームシリアル番号 + ファイル ID)で検証されるため、追記・ローテーション・置換された親ファイルは古いデータを返さず読み直されます。高速化の度合いは fork の密度に応じて変わります——fork の多い履歴では冗長な解析が大幅に減り、fork の少ない履歴はほぼ変わりません。いずれの場合もインポート結果はバイト単位で同一です。(#5626)
ツールバーのアプリ切り替えをアイコンのみに
切り替えボタンはアイコンの横にテキストラベルを描画しなくなりました——管理対象アプリが 8 つに増えてからは、ラベルはほぼ常にオーバーフロー検出で畳まれていたためです。そこで ResizeObserver ベースの自動コンパクト機構を取り除き、常にアイコンのみを表示します。アプリ名はホバー時のツールチップに残り、スクリーンリーダーからは aria-label 経由で従来どおりアクセスできます。
スポンサーのドメインと紹介リンクの更新
複数のスポンサーがドメインを移転したため、プリセットのアドレス、バックアップ endpoint、紹介リンク、README の行を同期しました(PackyCode → www.packyapi.ai、RightCode → www.rightapi.ai、ClaudeAPI → www.apito.ai、APINebula → apinebula.ai、AICodeMirror → .ai、AICoding → .inc、AIGoCode → .app)。あわせて、既に無効になっていたバックアップ endpoint を 2 つ削除しています。作成済みのプロバイダーはデータベースに保存された旧アドレスを保持します——新しいドメインへ移したい場合は、アドレスを手動で変更するか、更新後のプリセットから作り直してください。
修正
プロキシ経由の画像読み取りでコンテキストが溢れない
クライアントがツール呼び出しで画像を読み取るとき——Codex の view_image や、画像を返す任意の MCP ツール——プロキシのプロトコル変換は画像ブロック全体をツールメッセージのテキストへシリアライズしており、上流は base64 をプレーンテキストとして token 計算していました。約 9,000 倍の膨張で、113 KB の PNG 1 枚が 10 万 prompt token 超に換算されていました。Codex は毎ターン履歴全体をリプレイするため、スクリーンショットが 2〜3 枚あればセッションをコンテキストウィンドウの外へ押し出し、400 の繰り返しで固まらせるのに十分でした(#4465、#5663)。
プロキシはメディアのペイロードをツール結果から取り出し、各ブリッジのネイティブ形式で送り直すようになりました——画像は全ブリッジでカバーされ、ファイルと音声は対象プロトコルが対応している箇所で有効になります。2 本の Chat ブリッジ(Claude→Chat、Codex Responses→Chat)は画像 / ファイル / 音声を運び、ツールメッセージには短いマーカーを残して、メディアは合成したユーザーメッセージとしてツールバッチの直後に続きます。Claude→Responses はネイティブな input_image に復元し、Codex / GrokBuild→Anthropic は標準の Anthropic 画像ブロックを再構築し、Claude→Gemini は Gemini 3 ではマルチモーダルな functionResponse.parts を使い(旧モデルでは inlineData)、インライン base64 画像のみを受け付けます。検出は型付きの Responses ブロック、Anthropic の source ブロック、MCP の data+mimeType 結果、画像 data URL 全体をカバーし、配列やネストされた content ラッパー(JSON エンコードされたツール出力を含む)も貫通します。出力がメディアを含むと判定された場合に限り、そこに残る data URL と裸の base64 はプレースホルダーへ畳まれます——裸の base64 それ自体がメディア判定を引き起こすことは決してありません。通常のツール出力はそのままです。メディアを含まないツール結果はすべてのブリッジで従来どおりバイト単位に同一で、prompt キャッシュのプレフィックスには影響しません。送信するメディアブロックには意図的に cache_control マーカーを付けないため、GLM や Qwen のような厳格な上流に拒否されることもありません。Kimi K3 でのエンドツーエンド実測では、同一のリプレイターンが安定して入力約 12k token・キャッシュヒット率 99% となりました。以前は毎回のリプレイで 85k+ の base64 テキストを背負っていました。
「非対応画像フォールバック」がツール結果の中の画像も見えるように
「非対応画像フォールバック」設定は、プロバイダーがテキストのみの場合や上流が画像を拒否した場合に、画像ブロックをプレースホルダーマーカーへ置き換えます。しかしこれまでは、構造化ブロックのままの画像しか見えていませんでした——base64 テキストへ平坦化されたツール結果の画像は見えず、テキストのみの上流ではそのまま失敗して復旧しようがありませんでした。メディアクリーナーは、各経路で対称的にツール出力内のメディアを検出して剥がすようになり、送信前の剥がしと拒否後の再試行のどちらの経路でもこの種のターンを救えます。この検出がツール結果の内部まで及ぶようになったため、リアクティブな再試行が引き続き本物のモダリティ拒否に対してのみ発火することを回帰テストで固定しました——コンテキスト長超過の 400 が画像拒否と誤認されて再試行されることはありません。
Grok Build のコスト補填が過大にならない
欠落したコストを埋めるルーチンは、これまで Codex と Gemini だけを「報告される入力 token にキャッシュ読み取りが含まれる」プロバイダーとして扱っていましたが、Grok Build も同じ扱いに属します——補填された Grok Build の行は入力を全量として計算し、キャッシュ読み取りをもう一度計上していたため、コストが過大でした。キャッシュ込みのプロバイダー集合は現在 1 箇所でのみ定義され、ルーティングのレコーダー、コスト計算機、補填ルーチンが共有します。三者の言うことが食い違う可能性はなくなりました。なお旧来の補填で既に修正済みの行は元の値のままです——補填はコストがゼロの行のみを処理し、既にある正のコストを書き換えることは決してありません。
手動編集した設定ファイルでアプリがクラッシュしたり編集が飲み込まれたりしない
~/.codex/config.toml の mcp_servers が存在するもののテーブルではない場合(たとえば mcp_servers = "x")、MCP 同期が切り替えの途中で panic していました——しかもデータベースと live 設定の両方が書き込まれた後に起きるため、中途半端に適用された切り替えが残ります。テーブル以外の値は警告を出したうえで空のテーブルへ正規化するようになり、Codex と GrokBuild の書き込み側も同様に修正しました。インラインテーブル形式(合法な TOML)には、これと鏡写しの問題がありました——MCP の削除が黙って無効なのに UI は成功と表示する、base_url の編集が Codex がまったく読まない階層へ書き込まれる——いずれも対処済みです。ルートノード、provider セクション、mcp セクションが配列 / スカラーになっている opencode.json でも panic しなくなり、この種のファイルは再構築ではなくエラーとして拒否されるため、ユーザーの model や theme の設定が消されることはありません。(#5811)
プロキシ変換が不正な上流レスポンスに耐える
上流ゲートウェイからの不正なデータが、これまではエラーを生む代わりにローカルプロキシを落としかねませんでした。Anthropic SSE ストリーム内のオブジェクトでない message や content_block、バッファされたレスポンスボディがトップレベルの JSON 配列やスカラーである場合(stream: true を無視するゲートウェイはこれを返します)は、panic するインデックス代入に当たっていました。現在はストリームが正常な失敗イベントで終わります。不正な content_block ヘッダーはテキストブロックとして復元されるようにもなりました——単に空のオブジェクトへ浄化するだけでは panic は止まっても、後続の内容がすべて黙って捨てられ、モデルが何も言っていないように見えてしまいます——壊れたヘッダーの後に来る差分は通常は無傷なので、よくあるケースでは中身が通るようになり、置き換えが起きた際には警告を 1 件記録します。(#5811)
OpenClaw の Kimi For Coding アドレス修正
OpenClaw のプリセットは、これまで汎用プラットフォームの endpoint https://api.kimi.com/v1 を指していましたが、Kimi For Coding サブスクリプションが使うのはそこではないため、coding プランの key が使えませんでした。アドレスを https://api.kimi.com/coding/v1 に修正し、フォームのプレースホルダーと既定値も同期更新しました。旧プリセットから作成したプロバイダーは、手動で新しいアドレスに変更する必要があります。
セキュリティ強化
本節の 9 項目のうち、2 つはあなたの操作が必要です。Gemini 共通設定を通過したキーのローテーションと、過去に ccswitch:// でインポートした MCP 項目の確認です——やり方は「アップグレード時の注意」に書いてあります。残りはアップグレードするだけで有効になり、操作は不要です。
他人から送られてきた ccswitch:// リンクを開いたことがなく、共有された Gemini 共通設定も使っていないなら、この 9 項目の意味は主に「今後トラブルが起きにくくなる」ことです。2 つのうちどちらかに心当たりがあるなら、このバージョンは優先してアップグレードする価値があります。
Gemini 共通設定がキーを漏らさなくなり、アップグレード後に自動クリーンアップ
Gemini の共通設定エクストラクターは、これまで共有スニペットから GEMINI_API_KEY と GOOGLE_GEMINI_BASE_URL だけを剥がし、他の env 項目はそのままコピーしていました——しかし GOOGLE_API_KEY はまさに Gemini の一級の認証情報であり、あるアカウントの key が(他の認証情報らしき項目とともに)共通設定を使うすべての Gemini プロバイダーへディープマージされ、相手の base URL——それはサードパーティの中継かもしれません——へ送られていました。エクストラクターは、認証情報パターンに合致するキーをすべてスキップするようになり(Claude のエクストラクターと同じマッチャー群を使用)、フロントエンドのスニペット検証も同様に揃えたため、手動編集で押し戻すこともできません。Gemini のスニペットは一度存在すると再抽出されないため、アップグレード後の初回起動で一回限りのクリーンアップも実行します。既に漏れた認証情報を、スニペットから、マージされた各プロバイダーから、そして ~/.gemini/.env から取り除きます——キー名と値の完全一致で照合するため、プロバイダー自身の同名で値の異なる key は巻き込まれません——env ファイルの書式とコメントは保持されます。クリーンアップの詳細と注意点は「アップグレード時の注意」を参照してください。(#5811)
Skill リポジトリインストールの強化:パストラバーサルとアーカイブ上限
GitHub リポジトリから Skill をインストール / 閲覧すると、これまで対象ディレクトリの外へ書き込まれる可能性がありました。アーカイブのエントリを正規化せずに対象パスへ連結していたため、.. を含む ZIP は展開ディレクトリから脱出できました(zip-slip)。リポジトリ座標は一度も検証されておらず、../../../releases/download/v1/evil のようなブランチ名でダウンロードを任意の release アセットへリダイレクトできました——しかも Skill リポジトリは信頼できない ccswitch:// ディープリンクから追加でき既定で有効なため、Skills パネルを開くだけでダウンロードが走ります。バックアップからの復元、同期スナップショット、「アプリからインポート」由来の Skill directory 値も検証されずにパスへ連結されており、アンインストールが管理対象ディレクトリの外へ remove_dir_all を行う可能性がありました。現在はすべての書き込み先でディレクトリ名を検証し、リポジトリの owner / 名前 / ブランチは唯一のダウンロード集約点でホワイトリスト化し、展開にはハード上限を設けました(10,000 エントリ、書き込み 512 MB、ダウンロード 128 MB、シンボリックリンクのターゲット 4 KB、自己参照リンクは拒否)。新しいエラーメッセージは 4 言語対応です。(#5811)
ディープリンクインポート確認ダイアログ:内容を余さず表示し、リスクをマーク
ccswitch:// の MCP インポート確認ダイアログは、これまで切り詰められる 1 行の Command: しか描画せず、args、url、env は一切表示していませんでした——リンクに command: "sh" と args: ["-c", "curl …|sh"]、そして LD_PRELOAD 環境変数を付けても、表示上は無害な sh に見えるだけで、確認すると各アプリの live MCP ファイルへ書き込まれます。確認ダイアログは現在、コマンド、各引数、URL、環境変数を 1 行ずつ描画し、切り詰めではなく折り返して表示するため、見えないまま切り落とされる内容はありません(キー名に TOKEN / KEY / SECRET / PASSWORD を含む env の値は、接頭辞 + アスタリスクでマスク表示されます)。よく見るべき値はハイライトされ、警告ブロックにまとめられます——インライン実行フラグ付きのシェルインタープリター(bash -lc、cmd /C、PowerShell の -Command の短縮形などの組み合わせを含む)、プロセスのロード挙動を変える環境変数(LD_*、DYLD_*、NODE_OPTIONS、PYTHONPATH、PATH、プロキシ変数など)、ループバック / 内部ネットワーク / クラウドメタデータのアドレスを指す endpoint です。マークはあくまで注意喚起であり、インポートを遮断することはありません——ローカルの Ollama endpoint はごく普通の使い方です。プロバイダーの確認ダイアログにも同じ処理を入れました。「指定されたすべてのアプリへ直ちに書き込まれます」の警告は無条件表示に変更し、リンク側で制御できるフィールドによるゲートをやめました。
ディープリンクの使用量スクリプト:既定で無効、コードを見てから使う
ディープリンク経由でインポートされる使用量照会スクリプトは、使用量を照会するたびに実行される JavaScript ですが、これまでコードを一度も見ないまま有効化される可能性がありました。バックエンドが「コードが付いている」ことを「実行に同意した」とみなし、確認ダイアログは有効 / 無効のバッジしか表示せず、スクリプト本体は決して表示しなかったためです。スクリプトは既定で無効になりました——リンクが明示的に usageEnabled=true を持つ場合にのみ有効化を要求します——確認ダイアログはデコード済みのスクリプト全文を、スクロール可能で完全に折り返されたコードブロックとして表示し、有効化すると実行される旨を警告します。デコードに失敗した場合は元のペイロードを表示するフォールバックとなるため、不正なスクリプトが「スクリプトなし」を装うことはできません。スクリプトコードは従来どおりプロバイダーに保存され、確認したうえでアプリ内から手動で有効化できます。
URL-safe Base64 で確認ダイアログが丸ごと空になっていた
上の 2 項目が直すのは「確認ダイアログの表示が足りない」ことですが、この項目が直すのは「確認ダイアログが何も表示しないことがある」ことです。バックエンドは 4 種類の Base64 バリアント(RFC 4648 §5 の URL-safe アルファベットを含む)を受け付けますが、フロントエンドの atob は標準アルファベットしか認識せず、解けないときはエラーを出さずに入力をそのまま返していました——その結果、同じペイロードでもバックエンドはデコードに成功してインポートし、フロントエンドが手にするのは解けない文字の塊になります。使用量スクリプトとシステムプロンプトは不透明な Base64 として表示されました。最悪なのは MCP 設定です。JSON.parse の失敗がコンポーネントに飲み込まれ、確認ダイアログは「0 個のサーバー」と空のリストを描画する一方、バックエンドは従来どおり実際の項目を live MCP ファイルへ書き込みます。ペイロードの / を 1 つ _ に替えるだけで十分でした——確認ダイアログは空になり、インポート機能は完全に動き、上の 2 項目で補ったばかりの完全表示も同時に効かなくなります。
フロントエンドのデコーダーは、URL-safe アルファベットを正規化してからデコードするようになり、確認ダイアログの表示は常にインポートされる内容と一致します。共有デコーダーには初めてユニットテストが付き、テストケースには前提条件の自己検証が含まれていて、サンプルが確かに URL-safe の分岐に落ちること(たまたま両方のエンコードが同一なのではないこと)を保証します。
この不具合は v3.8.0 以降のすべてのバージョンに影響します。
ccswitch://リンクで MCP サーバーをインポートしたことがある場合は、一度確認することをおすすめします——「アップグレード時の注意」を参照してください。
SQL インポートはインポート対象データベースの外に触れる文を拒否
データベースバックアップのインポートは、これまでファイル先頭のコメントを検証するだけで、その後はテキスト全体をそのまま execute_batch に渡していました——巧妙に作られたバックアップは ATTACH DATABASE でユーザーが書き込める任意の場所に SQLite ファイルを作成でき、しかもその副作用はインポート自身の状態検証より前に発生するため、インポート全体が失敗してもファイルは既に作られています。WebDAV / S3 の同期スナップショットも同じコードパスを通ります。現在は外部バッチの実行中に SQLite authorizer をインストールします(終了時に直ちに取り外すため、アプリ自身の schema メンテナンスは影響を受けません)。ATTACH / DETACH、VACUUM、仮想テーブルの作成(csvfile のようなファイルバックエンドのモジュールは任意のパスを読み書きできます)、および SQLite が未知と報告するすべてのアクションは一律に拒否されます——将来の新しい文も既定で失敗します。PRAGMA はエクスポーターが実際に書き込む foreign_keys と user_version の 2 つだけを許可します。
共通設定スニペットのプロトタイプ汚染
共通設定スニペットの適用・削除・比較を行う 3 つのトラバーサルは、これまでいずれも __proto__ をたどってグローバルな Object.prototype に入り込んでいました。JSON.parse('{"__proto__":{…}}') が生成するのは自身の列挙可能プロパティであり、マージすると攻撃者が指定した値がグローバルなプロトタイプに書き込まれます——そして settings テーブルは同期時にリモート側でテーブルごと上書きされるため、悪意ある WebDAV / S3 のスナップショットが着地した後にプロバイダーフォームを一度開くだけでマージが発火します。3 つのトラバーサルは __proto__、constructor、prototype を一律にスキップするようになりました。「共通設定が適用済みか」の比較では自身のプロパティであることも同時に要求するようにし、ついでに目に見える奇妙な挙動——{"__proto__":{}} がこれまで任意の設定の部分集合と判定されていたこと——も修正しました。
ターミナル起動におけるディレクトリ名のコマンドインジェクション
外部ターミナルでセッションを復元する際、cd 行はこれまで作業ディレクトリをダブルクォートで囲み、バックスラッシュとダブルクォートだけをエスケープしていました——ダブルクォートの中でもシェルは $(…)、バッククォート、$VAR を展開しますし、この値は CLI のセッション履歴に記録された実際のプロジェクトパスで、macOS ではディレクトリ名にこれらの文字を合法的に含められます。フォルダーにそのような名前が付いていれば、「復元」をクリックしただけであなたのターミナルで埋め込まれたコマンドが実行されます。侵害されたコンポーネントは一切必要ありません。シェル行を組み立てる 3 つのランチャー——Terminal.app、iTerm、kitty——は POSIX のシングルクォートエスケープに変更し、いかなる内容も展開されなくなりました(Terminal / iTerm を通すために必要な AppleScript の引用層も同様に安全です)。Ghostty、WezTerm / Kaku、Alacritty はもともとディレクトリを独立した引数として渡しており、初めから安全でした。
GrokBuild の認証情報解決が環境のキーを差し替えたりインライン化したりしない
GrokBuild の認証情報の取り出しは、これまで設定が指定する env_key 変数が未設定の場合にプロセスレベルの XAI_API_KEY へフォールバックしていました——別アカウントの key に黙って差し替えられ、設定が指す任意の base URL へ送られます。認証情報は現在、明示的なインラインの api_key か、env_key が正確に名指しする環境変数からのみ取得されます。ディープリンクインポートは環境変数を平文の api_key に解決しなくなりました。env_key の名前だけを持つリンクは拒否され、手動での追加を促します——そのまま受け入れると、リクエスト時に被害者の環境のキーが解決され、リンクが宣言したアドレスへ送られてしまうためです。あわせて修正:base URL の解決を認証情報の解決から切り離しました。これまでは認証情報が欠けると base URL まで空になり、macOS(GUI プロセスはシェル環境を継承しません)で UI に表示されるアドレスと実際に使われるアドレスが食い違い、使用量スクリプトの {{baseUrl}} が空に展開されていました。(#5811)
ドキュメント
「Claude Code で GPT モデルを使う」ガイドに英語版・日本語版を追加
これまで中国語版しかなかったローカルルーティングガイドを、英語と日本語へ完全に移植しました。2 つの接続経路をエンドツーエンドでカバーします——サードパーティの OpenAI Responses ゲートウェイ(API Key)と、ChatGPT Plus/Pro サブスクリプションを Codex のデバイスコード OAuth ログインで使う経路です。2 つのルーティングガイドは同時に、「どのクライアントが正しいか」ではなく「どのモデルを使うか」を示すタイトルへ変更しました——《Claude Code で GPT モデルを使う》《Codex で Claude モデルを使う》——そしてすべての相互リンク(3 言語の v3.18.0 リリースノートを含む)を読者の言語のバージョンへ向けました。
ユーザーマニュアル:ディープリンク usageEnabled の既定値を修正
3 言語のユーザーマニュアルのディープリンクリファレンスは、これまで usageEnabled の既定値が true だと記載していましたが、実際の既定値は false で、インポーターと一致します。マニュアルには正しい既定値を明記し、2 つの帰結も補いました。インポート前の確認ダイアログはスクリプトのコードを完全に表示すること、そして明示的な usageEnabled=true がない場合はスクリプトが無効の状態でインポートされ、後からアプリ内で有効化できることです。
SECURITY.md:脅威モデルと報告範囲
SECURITY.md に 2 言語の脅威モデルと、明確な範囲内 / 範囲外のリストを整備しました。報告は「値が最終的にどの API へ届いたか」ではなく「この入力を誰が制御しているか」で分類します。内蔵の WebView レンダラーは信頼されたコンポーネントとして宣言し(独立に検証できる 4 つの事実と、その前提が崩れる条件を添えています)、ディープリンクのペイロード、WebDAV / S3 の復元データ、インポートファイル、上流 API のレスポンス、ローカルプロキシへの受信リクエストはすべて信頼できない入力として列挙し、報告を歓迎します。
アップグレード時の注意
本リリースにデータベース移行はありません
v3.19.0 に schema 移行は含まれません(バージョンは v16 のまま)。アップグレードすればすぐ使え、データの再構築を待つ必要はありません。
Gemini キーの一回限りのクリーンアップ(必ずお読みください)
アップグレード後の初回起動時、通常の設定抽出より前に、一回限りの Gemini 共通設定クリーンアップが実行されます。その後、一部の Gemini プロバイダーで API Key が不足していると表示される場合があります。項目は認証情報型のキー名と値の完全一致で削除され、通常削除されるのは共有スニペット経由で漏れ込んだ他プロバイダーの認証情報です(そのプロバイダー自身の元の値は、漏えいが発生した時点で上書きされており復元できません)——ただし、複数の Gemini プロバイダー間で意図的に使い回していた同じ値の key も一緒に削除されます。いずれの場合も、ローテーションしてから入力し直してください。共有 Gemini スニペットを通過したキーはすべて漏えい済みとみなすべきです。削除されたキー名と影響を受けたプロバイダー id(値は決して含みません)は settings テーブルの gemini_common_config_scrub_audit_v1 に記録されており、これをもとにキーの再入力が必要なプロバイダーを 1 つずつ特定できます。
ディープリンクで MCP をインポートしたことがありますか?一度確認をおすすめします(必ずお読みください)
本リリース以前、ccswitch:// の MCP インポート確認ダイアログは書き込まれる内容を表示できないことがありました。引数と環境変数は一切描画されず(command: "sh" に args: ["-c", …] を付けても無害な sh としか表示されません)、ペイロードが URL-safe Base64 でエンコードされている場合はリスト全体が「0 個のサーバー」と表示されました——それでいてバックエンドはどちらの場合も従来どおり項目を各アプリの live MCP ファイルへ書き込みます。この 2 つの不具合は v3.8.0 以降のすべてのバージョンに影響し、本リリースでまとめて修正されました。
悪用には、攻撃者が提供したリンクをあなた自身が開いて「インポート」をクリックする必要があるため、大多数のユーザーは影響を受けません。完全には信頼できない出所から ccswitch:// の MCP インポートリンクを開いたことが実際にある場合は、MCP パネルで 1 件ずつ確認するか、~/.claude.json の mcpServers(Codex は ~/.codex/config.toml の mcp_servers)を直接確認し、見覚えのない項目がないことを確かめてください——MCP サーバーは CLI の次回起動時に子プロセスとして実行されます。
ディープリンクの使用量スクリプトは既定で無効
使用量照会スクリプトを含むディープリンクは、リンクが明示的に usageEnabled=true を持たない限り、既定で無効の状態でインポートされるようになりました。自動有効化に依存していたリンク(一部パートナーのワンクリック設定リンクなど)はスクリプトをインポートしますが、使用量照会は有効になりません——コードを確認したうえで、プロバイダーエディターから手動で有効化してください。アプリ内で手動設定した使用量スクリプトは影響を受けません。
新しい既定モデルは新規プロバイダーにのみ影響します
保存済みのプロバイダーは作成時のモデル ID を維持するため、新しいモデルを使うには手動での編集が必要です。Claude Desktop の opus ルートの現在値は claude-opus-5 に前進し、claude-opus-4-8 は互換エイリアスのスロットへ移りました。既存の設定は従来どおり解決されます。
価格のシードとローカル価格ファイル
新しい価格行(claude-opus-5、gemini-3.6-flash、grok-4.5-build)は次回起動時に「存在しなければ挿入」で追加されます——シードがあなたの編集した価格を上書きすることは決してありません。~/.cc-switch/model-pricing.json は作成時点では空で、本リリース以降の手動の価格変更と削除のみを記録します——それより前の価格変更は移行されないので、データベースの再構築に耐えさせたい場合は一度保存し直してください。models.dev の自動同期は、あなたが手動で有効にするまで無効のままです。いったん有効にすると、これは同名の価格を上書きする(内蔵・手動を問わず)唯一の経路になります。
GrokBuild の暗黙的な環境変数フォールバックを削除
暗黙的な XAI_API_KEY 環境変数フォールバックに依存していた GrokBuild プロバイダーは、明示的な api_key か、正しく名前を指定した env_key が必要になりました。
Grok 公式モードの使用量は意図的に遅れます
公式モードの Grok 使用量は、約 10 分 + 同期周期 1 回分だけ遅れて現れます——イベントをまず寝かせて確定を待ち、その後プロキシが記録した行と照合して二重計上を防ぐためです。ルーティング経由のトラフィックと公式のトラフィックがウィンドウ内で交互に発生する場合、一部の公式ターンは重複計上の危険を冒す代わりにスキップされます。旧来のコスト補填で過大評価されていた Grok Build の行は元の値のままです——補填はコストがゼロの行のみを処理し、既にある正のコストを修正することは決してありません。
更新ミラーは次のバージョンから有効になります
アップデーターの endpoint リストはアプリのバイナリに内蔵されているため、既存のインストールは本変更を含むバージョンへアップグレードするまで GitHub のみを照会し続けます。それ以降は dl.ccswitch.io ミラーを優先し、GitHub にフォールバックします。
スポンサーのドメイン移転は既存プロバイダーを変更しません
作成済みのプロバイダーはデータベースに保存された旧アドレスを保持し、引き続き旧ドメインを指します。新しいドメインへ移したい場合は、プロバイダーのアドレスを手動で変更するか、更新後のプリセットから作り直してください。
リスク通知
SuperGrok クォータ照会(本リリース新規)
プロバイダーカードの SuperGrok クォータ表示は、Grok CLI 自身の OAuth 認証情報(~/.grok/auth.json)を読み取り、grok.com の課金 endpoint に問い合わせます——この endpoint は公開ドキュメント化されたインターフェースではなく、レスポンスの解析は現行フォーマットの観察に基づいています。xAI がインターフェースを変更するとこの機能は動かなくなる可能性があります(その場合カードはクォータを表示しない状態に縮退し、他の機能は影響を受けません)。CC Switch がこれらの認証情報を保存したり変更したりすることはありません。
引き続き適用される注意
xAI Grok OAuth サインイン:公式 Grok CLI の公開 OAuth クライアント識別情報を再利用しており、利用によってアカウントの制限や停止につながる恐れがあります——詳細は v3.18.0 release notes を参照してください。
Codex OAuth リバースプロキシ:ChatGPT サブスクリプションの Codex OAuth をリバースプロキシ経由で使用すると、OpenAI の利用規約に違反する可能性があります。詳細は v3.13.0 release notes を参照してください。
サードパーティプロバイダーのルーティング:CC Switch ローカルプロキシで Codex、Claude Desktop、Grok Build のリクエストを変換してサードパーティプロバイダーへ転送する場合、課金・コンプライアンス・データ保持に関する制約はプロバイダーごとに異なります。利用前に対象プロバイダーの利用規約を確認してください。
上記機能を有効化したユーザーは、関連するリスクを自ら負うものとします。CC Switch は、これらの機能の利用によって発生したアカウント制限、警告、サービス停止について責任を負いません。
謝辞
本リリースのセキュリティ強化は、そのほとんどが外部からもたらされたものです——1 本の PR と、寄せられたセキュリティ報告です。
コード貢献
- #5811:Skill インストールの zip-slip とリポジトリ座標のトラバーサル、Gemini 共通設定のキー漏えいと一回限りのクリーンアップ、GrokBuild の認証情報解決、複数の panic 経路の修正、@zayokami に感謝。本リリースにおいて単一の出所として最も広い範囲をカバーした仕事です。
- #5734:models.dev 自動価格同期、@YUZHEthefool に感謝。
- #5626:Codex fork セッションの使用量インポート高速化、@ayanamislover に感謝(@SaladDay との共同署名)。
セキュリティ報告
本リリースの「セキュリティ強化」のうち 4 項目の修正は、非公開で寄せられたセキュリティ報告に基づくものです。23pds(SlowMist 慢雾)と zues devil に感謝します——項目ごとの帰属は以下のとおりです:
- ディープリンクインポート確認ダイアログが切り詰められた 1 行の
Command:しか表示しない——args、url、envは一切描画されず、sh -cにLD_PRELOADを組み合わせたペイロードが画面上ではただのshに見えていました。本リリースで最も影響範囲の大きい 1 件です。(23pds、SlowMist) - SQL バックアップのインポートが制約されていない——
ATTACH DATABASEでユーザーが書き込める任意の場所にファイルを作成でき、しかもその副作用はインポート自身の検証より前に発生します。(zues devil) - 外部ターミナル起動におけるディレクトリ名のコマンドインジェクション——
cd行がダブルクォートで囲まれており$(…)が通常どおり展開され、しかもこの値はセッション履歴に記録された実際のプロジェクトパスです。(zues devil と 23pds がそれぞれ独立に報告。内蔵ランチャーとカスタムテンプレートの 2 つの経路をそれぞれ指摘) - 共通設定スニペットのマージにおけるプロトタイプ汚染——3 つのトラバーサルがいずれも
__proto__をたどってグローバルなObject.prototypeに入り込んでいました。(23pds、SlowMist)
これらの報告はまた、SECURITY.md の脅威モデルと報告範囲を整備するきっかけにもなりました——それ以前、このプロジェクトには報告の方法しか書かれておらず、何が脆弱性にあたるかは書かれていませんでした。
残る 2 つのディープリンク修正(使用量スクリプトの既定無効化、URL-safe Base64 のバイパス)は、上記の修正そのものをレビューする過程で発見されたもので、元の報告には含まれていません。
問題報告
#4465 と #5663 で、プロキシ経由の画像読み取りによるコンテキスト溢れを報告してくださったユーザーに感謝します——本リリースで最も重要なプロキシの修正は、こうした実際の場面からの再現情報をもとにしています。
ダウンロードとインストール
Releases から、お使いのシステムに対応するビルドをダウンロードするか、公式サイト ccswitch.io から入手してください(本リリースからダウンロードは Cloudflare のエッジノード経由で配信され、GitHub への到達性に依存しなくなりました)。
システム要件
| システム | 最低バージョン | アーキテクチャ |
|---|---|---|
| Windows | Windows 10 以降 | x64 / ARM64 |
| macOS | macOS 12 (Monterey) 以降 | Intel (x64) / Apple Silicon (arm64) |
| Linux | 下表を参照 | x64 / ARM64 |
Windows
| ファイル | 説明 |
|---|---|
CC-Switch-v3.19.0-Windows.msi |
推奨 - 自動更新対応の MSI インストーラー |
CC-Switch-v3.19.0-Windows-Portable.zip |
ポータブル版、展開してそのまま実行できます |
Windows ARM64 デバイスでは、ファイル名に arm64 が含まれる対応する成果物を選択してください。
macOS
| ファイル | 説明 |
|---|---|
CC-Switch-v3.19.0-macOS.dmg |
推奨 - DMG インストーラー、Applications へドラッグ |
CC-Switch-v3.19.0-macOS.zip |
展開して Applications へドラッグ、Universal Binary |
CC-Switch-v3.19.0-macOS.tar.gz |
Homebrew インストールと自動更新用 |
Homebrew インストール:
brew install --cask cc-switch
更新:
brew upgrade --cask cc-switch
Linux
Linux アセットは x86_64 と ARM64(aarch64)の両方を提供します。ファイル名のアーキテクチャ識別子を、マシンの uname -m 出力に合わせて選択してください:
CC-Switch-v3.19.0-Linux-x86_64.AppImage/.deb/.rpmCC-Switch-v3.19.0-Linux-arm64.AppImage/.deb/.rpm
| ディストリビューション | 推奨形式 | インストール方法 |
|---|---|---|
| Ubuntu / Debian / Linux Mint / Pop!_OS | .deb |
sudo dpkg -i CC-Switch-*.deb または sudo apt install ./CC-Switch-*.deb |
| Fedora / RHEL / CentOS / Rocky Linux | .rpm |
sudo rpm -i CC-Switch-*.rpm または sudo dnf install ./CC-Switch-*.rpm |
| openSUSE | .rpm |
sudo zypper install ./CC-Switch-*.rpm |
| Arch Linux / Manjaro | .AppImage |
実行権限を付与して直接実行、または AUR を利用 |
| その他 / 不明な場合 | .AppImage |
chmod +x CC-Switch-*.AppImage && ./CC-Switch-*.AppImage |