Logo
Idealna synchronizacja Claude Code na każdej maszynie

Idealna synchronizacja Claude Code na każdej maszynie

Używam kilku maszyn do kodowania. Firmowego MacBooka z firmową licencją, prywatnego MacBooka z moją prywatną licencją dla projektów takich jak ten blog czy jotBook — a czasem jeszcze innych. I za każdym razem ten sam rytuał: kopiowanie skilli Claude Code, komend, hooków i zasad. Nudne i podatne na błędy. Wpadałam na świetny pomysł nowego workflowu na prywatnej maszynie, a potem musiałam go ręcznie przenosić na firmową, żeby działał też tam. Prędzej czy później coś wypadało z synchronizacji.

Zbudowałam proste rozwiązanie: repozytorium Git jako jedyne źródło prawdy dla całej konfiguracji Claude Code.

Problem

Claude Code przechowuje konfigurację w ~/.claude/ — skille, komendy, hooki, zasady. Na jednej maszynie działa świetnie. Ale gdy masz dwie, szybko tracisz kontrolę. Czy ten nowy skill dodałam na laptopie służbowym czy prywatnym? Czy CLAUDE.md jest wszędzie aktualny? Czy hook, który naprawiał irytujący problem, jest na obu maszynach?

Efekt był taki, że moje środowisko pracy na firmowym MacBooku i prywatnym zaczęło się rozjeżdżać. Na jednym działały rzeczy, których nie było na drugim. Przestałam wiedzieć, która wersja konfiguracji jest "ta lepsza".

Jednocześnie nie chciałam, żeby firmowy kontekst przepływał do prywatnych projektów. Skille stworzone pod konkretne potrzeby firmy nie powinny lądować na moim prywatnym MacBooku — i odwrotnie. Potrzebowałam kontroli nad tym, co synchronizuję i gdzie.

Rozwiązanie: repo Git jako źródło prawdy

Zbudowałam repo, którego struktura odzwierciedla to, czego oczekuje Claude Code:

claude-workflows/
  commands/       # slash commands (pliki .md)
  skills/         # katalogi ze skillami
  hooks/          # skrypty hooków
  rules/          # współdzielone zasady (bezpieczeństwo, voice profile itp.)
  scripts/
    sync.sh       # skrypt synchronizujący
    build.sh      # buduje CLAUDE.md z plików rules/

Kluczowe założenie: symlinki, nie kopie. Skrypt sync tworzy symlinki z ~/.claude/ wskazujące z powrotem na repozytorium. Dzięki temu edytuję plik w repo i Claude widzi zmianę natychmiast — bez ponownej synchronizacji, bez kopiowania.

Dodałam też pre-push hook, który sprawdza, czy żaden z commitowanych plików nie zawiera firmowego kontekstu — nazw projektów, wewnętrznych adresów, specyficznych reguł. Jeśli coś pasuje, push jest blokowany. Dzięki temu repo zostaje naprawdę generyczne i bezpieczne do trzymania na GitHubie.

# Co robi sync.sh (uproszczone)
git pull --ff-only
ln -s "$REPO/skills/brain-dump" "$HOME/.claude/skills/brain-dump"
ln -s "$REPO/commands/presentation.md" "$HOME/.claude/commands/presentation.md"
# ... i tak dalej dla hooków i rules

Nowa maszyna? Klonuję repo, uruchamiam sync.sh i gotowe. Całe środowisko jest zlinkowane i aktualne w kilka minut.

Jak to działa w praktyce

Nie myślę o tym na co dzień, ale kiedy dodaję coś nowego na jednej maszynie, flow wygląda tak:

  1. Tworzę lub modyfikuję skill albo komendę lokalnie w repo.
  2. Jest aktywna natychmiast — symlink sprawia, że Claude widzi zmianę od razu.
  3. Gdy jestem zadowolona z efektu, pushuję do remote.
  4. Na innej maszynie wystarczy: ./scripts/sync.sh — pull i re-link.

Dodałam też zasadę do CLAUDE.md: gdy Claude tworzy lub modyfikuje skill albo komendę podczas sesji, pyta mnie, czy chcę dodać to do repo. To ważne — bez tego łatwo zapomnieć o dobrym pomyśle, który powstał "przy okazji" jakiegoś zadania.

Co bym poprawiła

Na razie jest to synchronizacja jednokierunkowa — z repo do ~/.claude/. Jeśli stworzę coś bezpośrednio w ~/.claude/ na jednej maszynie (co zdarza się rzadko), muszę ręcznie przenieść to do repo. Dwukierunkowa synchronizacja byłaby wygodniejsza, ale w praktyce zasada "zapytaj mnie o dodanie" pokrywa zdecydowaną większość przypadków. A przy okazji — ta jednokierunkowość daje mi dokładnie tę kontrolę, na której mi zależy: żaden firmowy skill nie trafi do repo, jeśli świadomie go tam nie dodam.

Myślę też o dodaniu prostego skryptu, który sprawdza, czy w ~/.claude/ są pliki bez odpowiednika w repo — coś w rodzaju audytu, żeby nic nie umknęło.

Jeśli używasz Claude Code na więcej niż jednej maszynie, naprawdę polecam coś takiego postawić. Setup jest jednorazowy, a od tamtej pory nie musiałam już nic ręcznie kopiować.