使用 cclayer 在多台電腦之間同步 Claude Code 設定(CLAUDE.md、skills、外掛、MCP),按團隊隔離 git 身分
Claude Code 用久了,~/.claude 底下會累積不少東西:全域的 CLAUDE.md、各種 rules、skills、hooks、settings.json 裡的權限和外掛,還有一堆 MCP server。我平常在好幾台電腦上用 Claude Code,每台都要重新設定一遍,哪台改了點規則,其他電腦也得跟著手動改,時間一久各台的設定就對不上了。
更麻煩的是專案來自不同的團隊。每個團隊的 git 提交身分(使用者名稱、信箱)不一樣,有的團隊還有自己的規則和 hook,這些東西只應該在這個團隊的專案裡生效,不能混進別的專案,更不能把公司信箱提交到自己的開源儲存庫裡。
直接把 ~/.claude 丟進 git 儲存庫也不行:裡面有登入狀態、對話紀錄、本機的權限設定,團隊的東西又不能放進公開儲存庫。所以我寫了 cclayer,專門解決這個問題。
cclayer 是什麼
cclayer 把 Claude Code 的設定拆成兩種「層」:
- 基礎層:每台電腦都一樣的東西,
CLAUDE.md、rules/、skills/、output-styles/、agents/、hook 腳本、settings.json裡共用的鍵、外掛和 marketplace 清單、MCP 定義。裡面沒有任何身分資訊,可以放公開儲存庫。 - 覆蓋層:一個團隊一個,放這個團隊的 git 身分、hook、儲存庫網址規則(例如
github.com/acme-inc/*),以及要寫進這些專案的.claude/settings.local.json和CLAUDE.local.md。覆蓋層只在符合的專案裡生效,不往~/.claude寫任何東西。
每台電腦只拉基礎層加上它需要的覆蓋層,cclayer apply 一條指令鋪好,cclayer push 一條指令把本機的改動傳回去。
層可以是 git 儲存庫,也可以直接是雲端硬碟同步資料夾裡的一個目錄,不想碰 git 也能用。
安裝
macOS 用 Homebrew:
brew install --cask zhaojiannet/tap/cclayer之後升級:
brew upgrade --cask cclayerLinux 和 Windows 到 Releases 頁面 下載執行檔。需要先裝好 git;外掛、MCP 這幾步需要 Claude Code 2.1.288 以上。
最簡單的用法:一個人,幾台電腦
沒有團隊要分開的話,一個基礎層就夠了。
第一台電腦
cclayer setupsetup 是一個全螢幕的設定介面,左欄是各個層和本機設定,右欄是選中項目的說明和可修改的欄位,按下儲存之前不會寫入任何檔案。介面文字支援簡體中文、英文、日文,預設跟隨系統語言。

只需要填兩項:
- 基礎層:填一個目錄(例如雲端硬碟裡的
~/Dropbox/cclayer/base)或一個私有 git 儲存庫網址。目錄還不存在的話,儲存時會自動產生起步用的layer.toml。 - 專案目錄:放程式碼的目錄,例如
~/Projects。
選「儲存並套用」,然後把這台電腦現有的設定收進層裡:
cclayer capture --add CLAUDE.md --add rules/ --add skills/路徑相對於 ~/.claude。收進去之前每個檔案都會先檢查一遍,像金鑰、信箱、指向本機家目錄的絕對路徑這些會被擋下來,並告訴你在哪一行。只有自己用、層也放在私有的地方時,在 layer.toml 的 [layer] 底下加一行 private = true,就不再擋信箱了。
其他電腦
裝好 cclayer,同樣跑 cclayer setup,基礎層填同一個位址,儲存並套用,第一台電腦的設定就過來了。本機已有、內容又不一樣的檔案會列出來問你要不要覆蓋,覆蓋前舊檔案會備份到 ~/.local/state/cclayer/backups/。
日常同步
用 git 儲存庫當層的話:
cclayer push # 上傳:收集本機改動,列出要提交的內容,確認後提交並推送cclayer apply --pull # 下載:拉取最新的層,再鋪到本機用雲端硬碟目錄當層的話,雲端硬碟負責同步,改完跑 cclayer capture,另一台電腦跑 cclayer apply 就可以了。
還可以把下面這個 SessionStart hook 放進基礎層的 claude/settings.json,再在 setup 裡打開「自動拉取」,之後每次開啟 Claude Code 對話都會自動拉取並套用:
{ "hooks": { "SessionStart": [{ "matcher": "startup", "hooks": [{ "type": "command", "command": "command -v cclayer >/dev/null && cclayer apply --hook || true" }] }] }}為不同團隊設定不同的 git 身分
這是我寫 cclayer 的主要原因。先為團隊建一個私有儲存庫,根目錄放一個 layer.toml,寫明身分和要比對的儲存庫:
[layer]name = "acme"kind = "overlay"
[identity]name = "Full Name"email = "me@acme.example"
[[match]]remote = "github.com/acme-inc/*"然後在需要的電腦上加入這個覆蓋層,它會問你怎麼設定儲存庫的存取憑證,再 clone 下來檢查一遍:
cclayer layer add acme git@github.com:you/cclayer-acme.gitapply 之後,cclayer 會在 ~/.gitconfig 結尾加一個 include 區塊,用 git 的 includeIf "hasconfig:remote.*.url:..." 讓這個身分只在遠端網址符合 github.com/acme-inc/* 的儲存庫裡生效,~/.gitconfig 原本的內容一律不動。預設身分(default_identity)留空時,沒有任何覆蓋層符合的儲存庫 git 會拒絕提交,不會再發生用錯信箱提交的情況。
比對規則必須寫明主機和組織,不能用萬用字元代替,免得一個團隊的覆蓋層認領了別的團隊的儲存庫。
如果想讓每個團隊的 Claude Code 登入、對話和提示詞紀錄也完全分開,可以打開 profiles 模式,每個覆蓋層會有自己的 ~/.claude-profiles/<層名> 設定目錄,cclayer env 輸出對應的 CLAUDE_CONFIG_DIR,搭配 direnv 就能進哪個專案用哪套設定。
安全方面的處理
同步過來的 hook、skills 都會在本機被 Claude Code 執行,所以 cclayer 在這方面比較謹慎:
hooks、statusLine、enabledPlugins這類會執行程式或啟用外掛的設定,以及hooks/、skills/底下的檔案、帶執行權限的檔案,寫入前都會先列出內容讓你確認,同一內容確認過一次後不再重複詢問。- git 設定片段只放行
pull.rebase、push.default這類常見設定,alias、core.hooksPath、credential.helper等能執行程式的鍵,要在裝置清單裡明確信任這個層才行。 - Claude Code 的登入狀態、
history.jsonl、projects/不會被讀進層裡,permissions.allow、env留在本機。 - 層裡不允許出現符號連結,寫檔案時也不會跟隨符號連結。
常用指令
| 指令 | 作用 |
|---|---|
cclayer setup | 全螢幕設定介面,首次設定和之後修改都用它 |
cclayer apply | 把各層鋪到本機,--pull 先拉取 |
cclayer capture | 把本機改動寫回層,不提交 |
cclayer push | capture 後提交並推送各層儲存庫 |
cclayer check | 檢查層裡有沒有不該出現的內容 |
cclayer status | 各層的 git 狀態和比對到的專案 |
cclayer keys setup <層> | 為本機設定層儲存庫的存取憑證(deploy key 或 HTTPS token) |
cclayer layer add <名字> <網址> | 為本機加入一個覆蓋層 |
cclayer leave <層> | 從本機移除一個層,清掉它寫過的東西 |
cclayer doctor | 檢查 Claude Code 和 git 的常見問題 |
更詳細的用法,包括 git 儲存庫的建立方式、私有儲存庫的憑證、常見問題,可以看 cclayer 中文教學。
GitHub 專案網址: https://github.com/zhaojiannet/cclayer