Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/123hi123/cs/main/install.sh | bashWindows(PowerShell):
irm https://raw.githubusercontent.com/123hi123/cs/main/install.ps1 | iex一個純終端 TUI 工具,快速切換 ~/.claude/settings.json 裡的 env 設定組(API 端點、token、模型選項等),不動其他設定。
- 只改 profile 提到的鍵:切換時只覆寫 profile 內列出的 env 變數,settings.json 其餘內容(hooks、permissions、平常自己改的設定)完全不動。
- 自動還原:切換到別的 profile(或
cs off)時,上一個 profile 蓋掉的鍵會還原回套用前的原始值——原本不存在的鍵會被移除,且還原時讀取的是「當下」的檔案,平時手動改過的其他設定不會被倒退。 - 貼上即解析:建立 profile 時開啟貼上介面,混貼任何格式都能解析,並先預覽確認再儲存:
甚至整份 settings.json 貼進來也只會擷取
export ANTHROPIC_AUTH_TOKEN="joe" export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 "ANTHROPIC_CUSTOM_MODEL_OPTION": "fable", { "ANTHROPIC_BASE_URL": "http://localhost:8080" }env區塊。從終端機或 TUI 複製時,過長的值(例如 token)常被硬換行切成兩行,cs 會自動接回並警告;預覽中有任何警告時要按兩次 Enter 才會儲存,憑證值也會標出長度,方便看出是否少了一段。 - 殘留衝突偵測:切換時若 settings.json 殘留與新 profile 衝突的鍵(例如設定
CLAUDE_CODE_OAUTH_TOKEN官方登入,但殘留舊的ANTHROPIC_BASE_URL指向本地 proxy,OAuth token 會被送去那個端點;或 profile 只改了ANTHROPIC_BASE_URL沒設憑證,殘留的舊 token 會被送往新端點——這種情況按 Enter 預設保留,因為遮蔽等於拿掉唯一的憑證,正解是用cs e補上 token),會逐鍵說明衝突原因並詢問是否遮蔽——遮蔽的鍵在套用期間暫時移除,切走或cs off時自動還原。決定會記住,之後切換不再重複詢問。 - 模糊搜尋:
cs offi→official、cs wk→work;多個候選時列出讓你選。TUI 內按/也可即時過濾。
| 指令 | 說明 |
|---|---|
cs |
開啟 TUI:↑↓ 選擇、Enter 套用、/ 搜尋、n 新增、e 編輯、u 更新自 env、d 刪除、r 還原、q 離開 |
cs <名稱> |
切換到指定 profile(支援模糊搜尋) |
cs t <名稱> |
只在目前終端套用 profile(其他終端與全域設定不受影響) |
cs t off |
取消本終端的 profile,回到全域設定 |
cs t |
查看本終端目前套用的 profile |
cs n <名稱> |
建立新 profile(開啟貼上介面:Ctrl+S 解析預覽 → Enter 儲存) |
cs e <名稱> |
編輯 profile:帶入現有內容的編輯介面,Ctrl+S 預覽 → Enter 儲存;編輯的若是使用中的 profile,儲存後自動重新套用到 settings.json |
cs u <名稱> |
把 profile 更新成目前 settings.json env 的完整內容(重新快照),並列出差異 |
cs d <名稱> |
刪除 profile(若使用中會先還原其變更) |
cs r <原名稱> <新名稱> |
重新命名 profile(新名稱與現有 profile 衝突時取消) |
cs ls |
列出所有 profile,● 為使用中 |
cs off |
還原目前 profile 的變更,回到未套用狀態 |
cs update |
檢查 GitHub release,有新版就自動下載更新自己(Linux/Windows) |
cs shell-init <bash|zsh|fish|powershell> |
輸出 cs t 所需的 shell 整合程式碼(install.sh 會自動加進 rc 檔) |
第一次執行會請你確認 settings.json 的路徑(預設 ~/.claude/settings.json,可自行輸入其他路徑),接著會問要不要把目前的 env 設定存成一個具名 profile(直接 Enter 跳過)——存了之後隨時可以一鍵切回這個原始狀態。
cs <名稱> 改的是 settings.json,所有終端都會吃到;cs t <名稱> 則只影響目前這個終端:
- 原理:Claude Code 的
--settings命令列設定優先序高於~/.claude/settings.json(而 shell 環境變數反而會被 settings.json 的env蓋過,所以單純export沒有用)。cs t把 profile 寫成一個終端專屬的設定檔(Linux 放$XDG_RUNTIME_DIR/cs/,重開機自動清),並由 shell 整合裝的claudewrapper 在啟動時自動帶上--settings該檔。 - 作用範圍由環境變數
CS_TERM_SETTINGS決定——它只存在於執行過cs t的那個 shell,所以其他終端、全域設定完全不受影響;關掉終端就自動失效。 - 需要 shell 整合(
cs與claude兩個 wrapper function)。install.sh/install.ps1 會自動加進 rc 檔;手動安裝:bash/zsh 加eval "$(cs shell-init bash)"、fish 加cs shell-init fish | source。 - 限制:
--settings是合併語意,只能覆寫鍵、不能移除全域已存在的鍵——全域殘留的衝突鍵(如ANTHROPIC_BASE_URL)若 profile 沒覆寫仍會生效,cs t會逐鍵警告;需要移除請用全域切換搭配遮蔽。另外只有經 wrapper 啟動的claude會吃到終端 profile(絕大多數情況就是你在該終端打的claude)。
安裝腳本會先掃描系統上是否已有叫 cs 的東西(PATH 上的其他執行檔、bash/zsh/fish 的 alias 或 function),有衝突時會詢問:
- 覆蓋 — 繼續安裝,rc 檔裡的
csalias/function 自動改名為cs_old(原檔備份為*.bak-cs-install,原功能保留);安裝完成後會自動重新載入目前終端的 shell,不用開新終端就能直接使用cs(僅在互動安裝、且確認cs已能正確解析到新 binary 時;從腳本或 sudo 呼叫不會觸發,改印手動提示) - 交給 AI agent — 把衝突報告複製到剪貼簿(或存到
/tmp/cs-conflict-report.txt),貼給 AI agent 處理後再重新安裝 - 取消
非互動環境(CI、腳本)可用環境變數指定:CS_ON_CONFLICT=overwrite|agent|abort。本工具自己的舊版安裝會直接升級,不算衝突。
- Profile 只儲存「要改的鍵值」,存放於
~/.config/cs/config.json(Windows 為%APPDATA%\cs\config.json)。衝突鍵的遮蔽決定存於同檔的masks區塊,想改決定可直接編輯。 - 套用 profile 時,工具會記下每個被蓋掉的鍵的原始值;之後切換或還原時,就把這些鍵寫回原始值(原本不存在的鍵則移除),再套用新 profile。
- 寫入 settings.json 採「暫存檔 + rename」的原子寫入,不會寫壞檔案。
- 敏感值(TOKEN/SECRET/PASSWORD)在畫面輸出時會遮蔽,只留頭尾 4 字並附上長度。
git clone https://github.com/123hi123/cs
cd cs
cargo install --path .MIT