Catatan Teknis zhaoJian

Sinkronisasi konfigurasi Claude Code (CLAUDE.md, skills, plugin, MCP) di beberapa komputer dengan cclayer, identitas git terpisah per tim

Teknologi ~9512 kata · 24 menit baca - dilihat

Kalau sudah lama pakai Claude Code, isi ~/.claude lama-lama menumpuk: CLAUDE.md global, macam-macam rules, skills, hooks, izin dan plugin di settings.json, plus segerombol MCP server. Saya biasa memakai Claude Code di beberapa komputer, dan tiap komputer harus dikonfigurasi ulang. Kalau saya mengubah sedikit aturan di satu komputer, komputer lain juga harus diubah manual, dan lama-lama konfigurasi di tiap komputer jadi tidak sama lagi.

Yang lebih repot, proyek saya datang dari tim yang berbeda-beda. Tiap tim punya identitas commit git (nama dan email) sendiri, dan sebagian tim punya rules dan hook sendiri. Semua itu seharusnya hanya berlaku di proyek tim tersebut, tidak boleh tercampur ke proyek lain, apalagi sampai email kantor ikut ter-commit ke repositori open source pribadi saya.

Memasukkan ~/.claude langsung ke repositori git juga tidak bisa: di dalamnya ada status login, riwayat sesi, dan pengaturan izin lokal, sedangkan barang milik tim tidak boleh masuk ke repositori publik. Karena itu saya menulis cclayer khusus untuk masalah ini.

Apa itu cclayer

cclayer memecah konfigurasi Claude Code menjadi dua jenis “lapisan” (layer):

  • Lapisan dasar (base): hal-hal yang sama di semua komputer, yaitu CLAUDE.md, rules/, skills/, output-styles/, agents/, skrip hook, key bersama di settings.json, daftar plugin dan marketplace, serta definisi MCP. Tidak ada informasi identitas sama sekali di dalamnya, jadi aman ditaruh di repositori publik.
  • Lapisan overlay: satu per tim, berisi identitas git tim tersebut, hook, aturan alamat repositori (misalnya github.com/acme-inc/*), serta .claude/settings.local.json dan CLAUDE.local.md yang akan ditulis ke proyek-proyek itu. Overlay hanya berlaku di proyek yang cocok dan tidak menulis apa pun ke ~/.claude.

Tiap komputer hanya menarik lapisan dasar ditambah overlay yang dibutuhkannya. Satu perintah cclayer apply untuk memasang semuanya, satu perintah cclayer push untuk mengirim balik perubahan dari komputer ini.

Lapisan bisa berupa repositori git, bisa juga langsung berupa folder di dalam folder sinkronisasi cloud storage, jadi tetap bisa dipakai tanpa menyentuh git.

Instalasi

Di macOS pakai Homebrew:

Terminal window
brew install --cask zhaojiannet/tap/cclayer

Untuk upgrade nanti:

Terminal window
brew upgrade --cask cclayer

Untuk Linux dan Windows, unduh binary dari halaman Releases. git harus sudah terpasang; langkah plugin dan MCP butuh Claude Code 2.1.288 ke atas.

Cara paling sederhana: satu orang, beberapa komputer

Kalau tidak ada tim yang perlu dipisahkan, satu lapisan dasar sudah cukup.

Komputer pertama

Terminal window
cclayer setup

setup adalah layar konfigurasi layar penuh. Kolom kiri berisi lapisan-lapisan dan pengaturan lokal, kolom kanan berisi penjelasan item yang dipilih dan field yang bisa diubah. Tidak ada file yang ditulis sebelum Anda menekan simpan. Teks antarmuka tersedia dalam bahasa Mandarin Sederhana, Inggris, dan Jepang, dan secara default mengikuti bahasa sistem.

Tangkapan layar layar konfigurasi penuh cclayer setup: kolom kiri berisi pengaturan lapisan dasar, direktori proyek, lokasi clone lokal, auto pull, dan lainnya; kolom kanan berisi penjelasan item yang dipilih; di bawah ada tombol simpan dan terapkan, hanya simpan, dan keluar

Cukup isi dua hal:

  1. Lapisan dasar: isi sebuah direktori (misalnya ~/Dropbox/cclayer/base di cloud storage) atau alamat repositori git privat. Kalau direktorinya belum ada, layer.toml awal akan dibuat otomatis saat menyimpan.
  2. Direktori proyek: direktori tempat kode, misalnya ~/Projects.

Pilih “Save and apply”, lalu masukkan konfigurasi yang sudah ada di komputer ini ke dalam lapisan:

Terminal window
cclayer capture --add CLAUDE.md --add rules/ --add skills/

Path-nya relatif terhadap ~/.claude. Sebelum dimasukkan, setiap file diperiksa dulu. Hal seperti secret key, email, dan path absolut yang menunjuk ke home directory lokal akan dicegat, lengkap dengan nomor barisnya. Kalau hanya Anda sendiri yang memakai dan lapisan disimpan di tempat privat, tambahkan satu baris private = true di bawah [layer] pada layer.toml, maka email tidak dicegat lagi.

Komputer lain

Pasang cclayer, jalankan juga cclayer setup, isi lapisan dasar dengan alamat yang sama, simpan dan terapkan, dan konfigurasi dari komputer pertama langsung masuk. File yang sudah ada di komputer ini tetapi isinya berbeda akan ditampilkan dan Anda ditanya apakah mau ditimpa. Sebelum ditimpa, file lama dicadangkan ke ~/.local/state/cclayer/backups/.

Sinkronisasi sehari-hari

Kalau lapisannya repositori git:

Terminal window
cclayer push # Unggah: kumpulkan perubahan lokal, tampilkan isi yang akan di-commit, commit dan push setelah dikonfirmasi
cclayer apply --pull # Unduh: tarik lapisan terbaru, lalu pasang ke komputer ini

Kalau lapisannya folder cloud storage, sinkronisasinya diurus cloud storage. Setelah mengubah sesuatu, jalankan cclayer capture, lalu di komputer lain jalankan cclayer apply.

Anda juga bisa menaruh SessionStart hook berikut di claude/settings.json milik lapisan dasar, lalu menyalakan “Auto pull” di setup. Setelah itu setiap kali membuka sesi Claude Code, lapisan akan ditarik dan diterapkan otomatis:

{
"hooks": {
"SessionStart": [{
"matcher": "startup",
"hooks": [{ "type": "command", "command": "command -v cclayer >/dev/null && cclayer apply --hook || true" }]
}]
}
}

Mengatur identitas git yang berbeda untuk tiap tim

Inilah alasan utama saya menulis cclayer. Pertama buat repositori privat untuk tim, lalu taruh layer.toml di root-nya yang menuliskan identitas dan repositori yang mau dicocokkan:

[layer]
name = "acme"
kind = "overlay"
[identity]
name = "Full Name"
email = "me@acme.example"
[[match]]
remote = "github.com/acme-inc/*"

Lalu tambahkan overlay ini di komputer yang membutuhkannya. cclayer akan menanyakan cara mengatur kredensial akses repositori, lalu meng-clone dan memeriksanya:

Terminal window
cclayer layer add acme git@github.com:you/cclayer-acme.git

Setelah apply, cclayer menambahkan blok include di akhir ~/.gitconfig dan memakai includeIf "hasconfig:remote.*.url:..." milik git agar identitas ini hanya berlaku di repositori yang alamat remote-nya cocok dengan github.com/acme-inc/*. Isi asli ~/.gitconfig sama sekali tidak diubah. Kalau identitas default (default_identity) dikosongkan, git akan menolak commit di repositori yang tidak cocok dengan overlay mana pun, jadi tidak akan ada lagi commit dengan email yang salah.

Aturan pencocokan wajib menuliskan host dan organisasi secara jelas, tidak boleh diganti wildcard, supaya overlay satu tim tidak mengklaim repositori tim lain.

Kalau ingin login, sesi, dan riwayat prompt Claude Code tiap tim juga benar-benar terpisah, nyalakan mode profiles. Tiap overlay akan punya direktori konfigurasi sendiri di ~/.claude-profiles/<nama-lapisan>, cclayer env mengeluarkan CLAUDE_CONFIG_DIR yang sesuai, dan dengan direnv setiap proyek otomatis memakai konfigurasinya masing-masing.

Soal keamanan

Hook dan skills yang disinkronkan akan dijalankan oleh Claude Code di komputer lokal, jadi cclayer cukup hati-hati dalam hal ini:

  • Pengaturan yang menjalankan program atau mengaktifkan plugin seperti hooks, statusLine, enabledPlugins, serta file di bawah hooks/ dan skills/ dan file yang punya izin eksekusi, semuanya ditampilkan dulu untuk Anda konfirmasi sebelum ditulis. Isi yang sama hanya ditanyakan sekali.
  • Potongan konfigurasi git hanya meloloskan pengaturan umum seperti pull.rebase dan push.default. Key yang bisa menjalankan program seperti alias, core.hooksPath, dan credential.helper hanya diizinkan kalau lapisan itu secara eksplisit dipercaya di daftar perangkat.
  • Status login Claude Code, history.jsonl, dan projects/ tidak dibaca ke dalam lapisan; permissions.allow dan env tetap di komputer lokal.
  • Symbolic link tidak diizinkan di dalam lapisan, dan saat menulis file pun symbolic link tidak diikuti.

Perintah yang sering dipakai

PerintahFungsi
cclayer setupLayar konfigurasi layar penuh, dipakai untuk konfigurasi pertama dan perubahan berikutnya
cclayer applyMemasang semua lapisan ke komputer ini, --pull menarik dulu
cclayer captureMenulis perubahan lokal kembali ke lapisan, tanpa commit
cclayer pushSetelah capture, commit dan push repositori tiap lapisan
cclayer checkMemeriksa apakah ada isi yang tidak seharusnya ada di lapisan
cclayer statusStatus git tiap lapisan dan proyek yang cocok
cclayer keys setup <lapisan>Mengatur kredensial akses repositori lapisan di komputer ini (deploy key atau HTTPS token)
cclayer layer add <nama> <alamat>Menambahkan satu overlay ke komputer ini
cclayer leave <lapisan>Menghapus satu lapisan dari komputer ini dan membersihkan apa yang pernah ditulisnya
cclayer doctorMemeriksa masalah umum Claude Code dan git

Untuk penggunaan yang lebih detail, termasuk cara membuat repositori git, kredensial repositori privat, dan pertanyaan umum, lihat tutorial cclayer (dalam bahasa Inggris).

Alamat proyek di GitHub: https://github.com/zhaojiannet/cclayer

Bagikan:

Komentar