Skip to content

Two-Weeks-Team/ClaudeSync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

47 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ClaudeSync

macOS 메뉴바 μ•±. 두 Mac κ°„ Claude Code Β· Claude Desktop Β· Codex CLI의 μ„€μ • / μ„Έμ…˜ / λ©”λͺ¨λ¦¬λ₯Ό μžλ™ λ™κΈ°ν™”ν•©λ‹ˆλ‹€.

tests macOS arch version

⚠️ ν˜„μž¬ μƒνƒœ: 1:1 두 Mac 동기화. ad-hoc μ„œλͺ… (Developer ID + 곡증은 v1.2 μ˜ˆμ •). μ™ΈλΆ€ 라이브러리 0, μ™ΈλΆ€ μ„œλΉ„μŠ€ 0.


λͺ©μ°¨


μ„€μΉ˜ β€” μ„Έ κ°€μ§€ path 쀑 ν•˜λ‚˜

Path A β€” Claude Code(λ˜λŠ” λ‹€λ₯Έ AI agent)μ—κ²Œ μœ„μž„ ⭐ κ°€μž₯ 게으λ₯Έ 방법

λ‹€λ₯Έ Macμ—μ„œ git clone만 ν•œ ν›„ κ·Έ ν΄λ”μ—μ„œ Claude Codeλ₯Ό μ—΄κ³  ν•œ λ§ˆλ””:

이 ν”„λ‘œμ νŠΈ μ„€μΉ˜ν•΄μ„œ μ‹€ν–‰ν•΄μ€˜

Claude Codeκ°€ μžλ™μœΌλ‘œ CLAUDE.md의 "Install workflow" μ„Ήμ…˜μ„ 읽고 λ‹€μŒμ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€:

  1. bash scripts/install.sh μ‹€ν–‰ (Xcode CLT / Homebrew / xcodegen μžλ™)
  2. Universal Release λΉŒλ“œ + /Applications/ClaudeSync.app μ„€μΉ˜ + launch
  3. macOSκ°€ λ¬»λŠ” GUI promptλ“€ (Remote Login, FDA, Local Network)을 μ‚¬μš©μžμ—κ²Œ λͺ…μ‹œμ μœΌλ‘œ μ•ˆλ‚΄
  4. Onboarding 6단계 λ§ˆλ²•μ‚¬λ‘œ κ°€μ΄λ“œ

LLM이 λͺ» ν•˜λŠ” λΆ€λΆ„ (μ‹œμŠ€ν…œ λ‹€μ΄μ–Όλ‘œκ·Έ 클릭, Onboarding λ²„νŠΌ 클릭)은 μ‚¬μš©μžμ—κ²Œ μ •ν™•νžˆ μ–΄λ””λ₯Ό ν΄λ¦­ν•˜λΌκ³  μ•ˆλ‚΄ν•©λ‹ˆλ‹€.

πŸ’‘ 사전 μš”κ΅¬: λ‹€λ₯Έ Mac에 Claude Codeκ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό 함 + git clone이 λλ‚˜ μžˆμ–΄μ•Ό 함. Claude Codeκ°€ μ—†μœΌλ©΄ Path B λ˜λŠ” Cλ₯Ό μ‚¬μš©.

Path B β€” ν•œ 쀄 web installer (Xcode 없어도 OK ⭐)

두 Mac 각각의 ν„°λ―Έλ„μ—μ„œ λ˜‘κ°™μ΄ ν•œ λ²ˆμ”©:

curl -fsSL https://raw.githubusercontent.com/Two-Weeks-Team/ClaudeSync/main/scripts/web-install.sh | bash

이 ν•œ 쀄이 μžλ™μœΌλ‘œ:

  1. GitHub Releasesμ—μ„œ latest .dmg λ‹€μš΄λ‘œλ“œ (SHA-256 verification)
  2. mount β†’ /Applications/ClaudeSync.app 볡사 β†’ quarantine 제거
  3. launch + 메뉴바 λ“±μž₯ 확인

Xcode/Homebrew/git λͺ¨λ‘ 없어도 λ™μž‘ν•©λ‹ˆλ‹€ β€” GitHub Actionsκ°€ 미리 λΉŒλ“œν•œ Universal binary DMGλ₯Ό λ°›μ•„μ„œ μ„€μΉ˜λ§Œ ν•©λ‹ˆλ‹€. 빈 macOS 15 Macμ—μ„œλ„ μ•½ 30초 μ•ˆμ— μ™„λ£Œ.

λ§Œμ•½ GitHub Releaseκ°€ 아직 μ—†κ±°λ‚˜ λ‹€μš΄λ‘œλ“œ μ‹€νŒ¨ν•˜λ©΄, μžλ™μœΌλ‘œ source build path(Xcode ν•„μš”)둜 fallback. κ°•μ œλ‘œ source build μ›ν•˜λ©΄ CLAUDESYNC_FORCE_SOURCE=1 ν™˜κ²½λ³€μˆ˜.

이 ν•œ 쀄이 μžλ™μœΌλ‘œ:

단계 무엇 μ‚¬μš©μž μž…λ ₯
1 Xcode Command Line Tools μ„€μΉ˜ (μ—†μœΌλ©΄) macOS μ‹œμŠ€ν…œ λ‹€μ΄μ–Όλ‘œκ·Έμ—μ„œ "μ„€μΉ˜"
2 git β†’ μ†ŒμŠ€ clone (~/.claudesync/source) μ—†μŒ
3 Homebrew μ„€μΉ˜ (μ—†μœΌλ©΄ λΉ„λŒ€ν™”ν˜•) μ—†μŒ
4 xcodegen μ„€μΉ˜ μ—†μŒ
5 Universal Release λΉŒλ“œ (~60초) μ—†μŒ
6 /Applications/ClaudeSync.app μ„€μΉ˜ + Gatekeeper quarantine 제거 μ—†μŒ
7 μ•± launch μ—†μŒ

μ’…λ£Œ ν›„ 터미널에 λ‹€μŒ 단계 μ•ˆλ‚΄κ°€ ν•œκ΅­μ–΄λ‘œ 좜λ ₯λ©λ‹ˆλ‹€.

⚠️ Xcode μžμ²΄λŠ” μžλ™ μ„€μΉ˜ λΆˆκ°€ β€” Apple 정책상 CLI둜 μ„€μΉ˜ λͺ» 함. Mac App Storeμ—μ„œ "Xcode" 검색 ν›„ ν•œ 번만 μ„€μΉ˜ (λŒ€μš©λŸ‰, 30λΆ„~1μ‹œκ°„ μ†Œμš”). μ„€μΉ˜ ν›„ μœ„ λͺ…λ Ή μ‹€ν–‰.

Path C β€” git clone ν›„ 직접 μˆ˜λ™ (개발자용)

git clone https://github.com/Two-Weeks-Team/ClaudeSync.git
cd ClaudeSync
bash scripts/install.sh

install.shλŠ” κΈ°λ³Έ non-interactive (μžλ™ yes). prompt λͺ¨λ“œ μ›ν•˜λ©΄ CLAUDESYNC_INTERACTIVE=1.

μ„Έ κ°€μ§€ path 비ꡐ

Path μ‚¬μš©μž μž…λ ₯ Xcode ν•„μš”? LLM ν•„μš”? μ†Œμš” μ‹œκ°„
B (curl ν•œ 쀄, DMG) ⭐ curl ... ν•œ 쀄 ❌ 없어도 됨 ❌ ~30초
A (AI μœ„μž„, source) "이 ν”„λ‘œμ νŠΈ μ„€μΉ˜ν•΄μ„œ μ‹€ν–‰ν•΄μ€˜" ν•œ λ§ˆλ”” βœ… (LLM이 λΉŒλ“œ) βœ… Claude Code ~2λΆ„
C (μˆ˜λ™, source) git clone + cd + bash βœ… ❌ ~2λΆ„

πŸ’‘ μΆ”μ²œ μˆœμ„œ: 일반 μ‚¬μš©μžλŠ” B (Xcode μ•ˆ 받아도 됨). μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄κ±°λ‚˜ μˆ˜μ •ν•˜λ €λŠ” κ°œλ°œμžλŠ” A λ˜λŠ” C.


전체 흐름 β€” 두 Mac μ²˜μŒλΆ€ν„° λκΉŒμ§€

Step 0 β€” 사전 점검 (μ–‘μͺ½ Mac λͺ¨λ‘)

쑰건 μ–΄λ–»κ²Œ 확인
macOS 15 (Sequoia) 이상 사과 메뉴 β†’ 이 Mac에 κ΄€ν•˜μ—¬
같은 Wi-Fi / 같은 LAN μ–‘μͺ½ Mac의 Wi-Fi 이름 일치 확인
Xcode μ„€μΉ˜λ¨ Mac App Store β†’ "Xcode" 검색

Step 1 β€” μ„€μΉ˜ (μ–‘μͺ½ Macμ—μ„œ λ”°λ‘œλ”°λ‘œ, λ™μ‹œ κ°€λŠ₯)

μ–‘μͺ½ Macμ—μ„œ 각각 터미널 μ—΄κ³ :

curl -fsSL https://raw.githubusercontent.com/Two-Weeks-Team/ClaudeSync/main/scripts/web-install.sh | bash

λΉŒλ“œ + μ„€μΉ˜ + launchκΉŒμ§€ 총 1~2λΆ„. μ–‘μͺ½μ΄ λ™μ‹œμ— μ‹€ν–‰λ˜μ–΄λ„ 무방.

μ„€μΉ˜ μ™„λ£Œ ν›„ μ–‘μͺ½ Mac의 ν™”λ©΄ 우츑 상단 메뉴바에 μ•ˆν…Œλ‚˜ μ•„μ΄μ½˜μ΄ λ“±μž₯ν•©λ‹ˆλ‹€.

[ν™”λ©΄ 우츑 상단 메뉴바]
                                      β”Œβ”€ μ•ˆν…Œλ‚˜ μ•„μ΄μ½˜ (ClaudeSync)
                                      β”‚
…  🌐  βš›  ☁  🍴  πŸ”΅  πŸ’¬  πŸ–₯  πŸ•  πŸŒ™  πŸ“‘  ───→ 클릭

Step 2 β€” 첫 launch μ‹œ macOS prompt (μ–‘μͺ½ Mac)

처음 launchν•˜λ©΄ macOSκ°€ λ‹€μŒμ„ λ¬»μŠ΅λ‹ˆλ‹€ β€” λͺ¨λ‘ "ν—ˆμš©" 클릭:

Prompt λ‹΅
"ClaudeSync을(λ₯Ό) μ—¬μ‹œκ² μŠ΅λ‹ˆκΉŒ?" (첫 launch만) μ—΄κΈ°
"ClaudeSync이(κ°€) 둜컬 λ„€νŠΈμ›Œν¬μ— μžˆλŠ” λ””λ°”μ΄μŠ€λ₯Ό μ°Ύκ³  μ—°κ²°ν•˜λ €κ³  ν•©λ‹ˆλ‹€." ν—ˆμš©

Step 3 β€” Onboarding λ§ˆλ²•μ‚¬ (μ–‘μͺ½ Macμ—μ„œ ν•œ λ²ˆμ”©)

메뉴바 μ•ˆν…Œλ‚˜ μ•„μ΄μ½˜ 클릭 β†’ popover λ“±μž₯ β†’ ν•˜λ‹¨ "Onboarding" λ²„νŠΌ 클릭 β†’ 별도 μœˆλ„μš° μ—΄λ¦Ό.

μœˆλ„μš°μ—λŠ” 6단계가 μˆœμ„œλŒ€λ‘œ:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Welcome to ClaudeSync                β”‚ ← ν˜„μž¬ step ν‘œμ‹œ
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Step 1 of 3 β€” Remote Login           β”‚
β”‚                                      β”‚
β”‚ ⚠ Remote Login is OFF               β”‚
β”‚ [Open System Settings] [Check now]   β”‚
β”‚                              [Continue]
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Step 무엇 μ‚¬μš©μž μ•‘μ…˜
β‘  Welcome ν™˜μ˜ ν™”λ©΄ "Continue" 클릭
β‘‘ Remote Login sshd ν™œμ„± 검사 "Open System Settings" β†’ μ‹œμŠ€ν…œ μ„€μ •μ—μ„œ "원격 둜그인" ν† κΈ€ ON β†’ μœˆλ„μš°λ‘œ λŒμ•„μ™€ "Check now" β†’ 녹색 βœ“ β†’ "Continue"
β‘’ Full Disk Access FDA 검사 "Open System Settings" β†’ 잠금 ν•΄μ œ β†’ "+" λ²„νŠΌ β†’ /Applications/ClaudeSync.app 선택 β†’ "Continue"
β‘£ Discovery λ‹€λ₯Έ Mac 발견 λŒ€κΈ° λ‹€λ₯Έ Mac이 같은 단계 λ„λ‹¬ν•˜λ©΄ λͺ©λ‘μ— μžλ™ λ“±μž₯ β†’ μ˜†μ˜ "Pair" 클릭
β‘€ Pairing Code 6자리 μ½”λ“œ ν‘œμ‹œ λ‹€λ₯Έ Mac ν™”λ©΄μ˜ μ½”λ“œμ™€ μ‹œκ°μ  일치 확인
β‘₯ Confirm μ΅œμ’… 확인 "Confirm β€” codes match" 클릭 β†’ μžλ™μœΌλ‘œ SSH ν‚€ + TLS ν•Έλ“œμ…°μ΄ν¬ + 동기화 μ‹œμž‘

Step 4 β€” νŽ˜μ–΄λ§ (ν•œ μͺ½μ΄ Pair ν΄λ¦­ν•˜λ©΄ λ‹€λ₯Έ μͺ½μ— λ°°λ„ˆ λ“±μž₯)

Mac A의 μ‚¬μš©μžκ°€ β‘£μ—μ„œ "Pair" ν΄λ¦­ν•˜λ©΄, Mac B의 메뉴바 popover에 μžλ™μœΌλ‘œ λ°°λ„ˆκ°€ λ“±μž₯:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ πŸ”΅ ClaudeSync   Searching for peer…  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Pair request from MacA               β”‚
β”‚                                       β”‚
β”‚         284579                        β”‚ ← 6자리 μ½”λ“œ (μ–‘μͺ½ 동일해야 함)
β”‚                                       β”‚
β”‚ [Accept β€” codes match]   [Cancel]    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Mac B μ‚¬μš©μž: μ½”λ“œκ°€ Mac A ν™”λ©΄κ³Ό μΌμΉ˜ν•˜λ©΄ "Accept β€” codes match" 클릭 β†’ Mac A의 Onboarding이 μžλ™μœΌλ‘œ Step β‘₯둜 λ„˜μ–΄κ° β†’ Mac A μ‚¬μš©μžκ°€ "Confirm β€” codes match" 클릭 β†’ μ–‘μͺ½ λͺ¨λ‘ "Watching" μƒνƒœ β†’ 동기화 μ‹œμž‘.

νŽ˜μ–΄λ§μ€ ν•œ 번만. μ˜μ†ν™”λ˜μ–΄ μ–‘μͺ½ Mac을 μž¬μ‹œμž‘ν•΄λ„ μžλ™ 볡원.


무엇을 ν•˜λ‚˜

ν•­λͺ© κ°’
동기화 λŒ€μƒ ~/.claude/, ~/Library/Application Support/Claude/, ~/.codex/, ~/Documents/GitHub/
발견 Bonjour _claudesync._tcp (같은 LAN)
νŽ˜μ–΄λ§ 6자리 μ‹œκ° 확인 μ½”λ“œ + 16-byte nonce + Ed25519 SSH ν‚€ μžλ™ κ΅ν™˜
전솑 rsync over SSH (openrsync ν˜Έν™˜)
λ³΄μ•ˆ TLS + nonce + known_hosts strict + HMAC-signed prefs (10 layers)
λ¦¬μ†ŒμŠ€ Idle 25MB Physical Footprint, 0 leaks
μ˜μ‘΄μ„± macOS 15+ + Xcode 만 β€” μ™ΈλΆ€ 라이브러리 0, μ™ΈλΆ€ μ„œλΉ„μŠ€ 0

πŸ§‘ For Human β€” μ‚¬μš©μž κ°€μ΄λ“œ

κΆŒν•œ λΆ€μ—¬ β€” μžμ„Ένžˆ

Remote Login (원격 둜그인)

사과 메뉴 β†’ μ‹œμŠ€ν…œ μ„€μ • β†’ 일반 β†’ 곡유 β†’ μš°μΈ‘μ—μ„œ "원격 둜그인" ν† κΈ€ ON.

ν•΄μ œλ˜μ–΄ 있으면 νŽ˜μ–΄λ§ ν›„ rsyncκ°€ "Connection refused (port 22)"둜 μ‹€νŒ¨ν•©λ‹ˆλ‹€.

Full Disk Access (전체 λ””μŠ€ν¬ μ ‘κ·Ό κΆŒν•œ)

사과 메뉴 β†’ μ‹œμŠ€ν…œ μ„€μ • β†’ κ°œμΈμ •λ³΄ 보호 및 λ³΄μ•ˆ β†’ 전체 λ””μŠ€ν¬ μ ‘κ·Ό κΆŒν•œ:

  1. μ’Œν•˜λ‹¨ μžλ¬Όμ‡  클릭 β†’ Touch ID λ˜λŠ” λΉ„λ°€λ²ˆν˜Έλ‘œ 잠금 ν•΄μ œ
  2. "+" λ²„νŠΌ β†’ Finder λ‹€μ΄μ–Όλ‘œκ·Έ μ—΄λ¦Ό
  3. /Applications/ClaudeSync.app 선택 β†’ "μ—΄κΈ°"
  4. λͺ©λ‘μ— ClaudeSync λ“±μž₯ν•˜κ³  토글이 μΌœμ ΈμžˆλŠ”μ§€ 확인

κ±°λΆ€ν•˜λ©΄ ~/Library/Application Support/Claude 변경을 κ°μ‹œ λͺ» 함 β†’ Claude Desktop μ„Έμ…˜ 동기화 μ•ˆ 됨.

Local Network (둜컬 λ„€νŠΈμ›Œν¬)

첫 launch μ‹œ μžλ™ prompt. κ±°λΆ€ν–ˆμœΌλ©΄:

사과 메뉴 β†’ μ‹œμŠ€ν…œ μ„€μ • β†’ κ°œμΈμ •λ³΄ 보호 및 λ³΄μ•ˆ β†’ 둜컬 λ„€νŠΈμ›Œν¬ β†’ ClaudeSync ν† κΈ€ ON.

메뉴바 popover ꡬ쑰

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ πŸ”΅ ClaudeSync                               β”‚
β”‚    Watching for changes                    β”‚ ← ν˜„μž¬ μƒνƒœ
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Coordinator                                 β”‚
β”‚ Watching for changes                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [pairing banner β€” νŽ˜μ–΄λ§ μ§„ν–‰ 쀑일 λ•Œλ§Œ ν‘œμ‹œ]β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Peers on this network                       β”‚
β”‚ β€’ MacBookAir (kim)            [Paired βœ“]   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Targets                                     β”‚
β”‚ πŸ“ Claude Code         3λΆ„ μ „     [⟳]       β”‚
β”‚ πŸ“ Claude Desktop      방금       [⟳]       β”‚
β”‚ πŸ“ Codex CLI           1μ‹œκ°„ μ „   [⟳]       β”‚
β”‚ πŸ“ Projects            β€”          [⟳]       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Recent Activity                             β”‚
β”‚ βœ“ Synced successfully                      β”‚
β”‚ βœ“ Synced successfully                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [Onboarding] [Settings…]            [Quit]  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

νŠΈλŸ¬λΈ”μŠˆνŒ…

증상 μ–΄λ””μ„œ λ³΄μ΄λ‚˜ ν•΄κ²°
메뉴바 μ•ˆν…Œλ‚˜ μ•„μ΄μ½˜μ΄ μ—†μŒ 메뉴바 μš°μƒλ‹¨ LSUIElement 앱이라 Dock μ—†μŒ. λ‹€λ₯Έ 메뉴바 μ•„μ΄μ½˜μ— κ°€λ €μ‘ŒμœΌλ©΄ βŒ˜λ“œλž˜κ·Έλ‘œ μœ„μΉ˜ μ‘°μ •
"Searching for peer..." λ¬΄ν•œ 메뉴바 popover 상단 (1) μ–‘μͺ½ Mac이 같은 Wi-Fi인지 확인 (2) νšŒμ‚¬/카페 Wi-FiλŠ” mDNS 차단 κ°€λŠ₯ (3) μ–‘μͺ½ Mac이 메뉴바에 λ“±μž₯ν•œ μƒνƒœμΈμ§€ 확인
"Failed: rsync exit=255" 메뉴바 popover의 Recent Activity μ–‘μͺ½ Macμ—μ„œ μ‹œμŠ€ν…œ μ„€μ • β†’ 일반 β†’ 곡유 β†’ "원격 둜그인" ON 확인
"Failed: peer clock skew Ns" Onboarding μœˆλ„μš° λ˜λŠ” 메뉴바 banner 두 Mac의 μ‹œκ° 차이 30초 초과. μ–‘μͺ½ Macμ—μ„œ μ‹œμŠ€ν…œ μ„€μ • β†’ 일반 β†’ λ‚ μ§œ 및 μ‹œκ°„ β†’ "μžλ™μœΌλ‘œ μ‹œκ°„ μ„€μ •" 켜기
"another instance is already running" 터미널 (install.sh μž¬μ‹€ν–‰ μ‹œ) killall ClaudeSync ν›„ bash scripts/install.sh λ‹€μ‹œ
"Control channel is plaintext" μ£Όν™© banner 메뉴바 popover 상단 openssl λˆ„λ½. brew install openssl ν›„ ClaudeSync μž¬μ‹œμž‘ (없어도 νŽ˜μ–΄λ§/λ™κΈ°ν™”λŠ” 정상 λ™μž‘)
동기화가 λ„ˆλ¬΄ 자주 일어남 Recent Activityκ°€ 5λΆ„ λ‚΄ 50+ ν–‰ Settings (⌘,) β†’ Excludes νƒ­μ—μ„œ 자주 λ³€κ²½λ˜λŠ” 파일 νŒ¨ν„΄ μΆ”κ°€
Onboarding μœˆλ„μš° 사라짐 메뉴바 popoverμ—μ„œ λ‹€μ‹œ "Onboarding" 클릭
νŽ˜μ–΄λ§ ν›„ λ‹€λ₯Έ Mac이 μ•ˆ λ³΄μž„ Settings β†’ "Forget paired peer" 클릭 β†’ μ²˜μŒλΆ€ν„° λ‹€μ‹œ

μ™„μ „ 제거

killall ClaudeSync                                                # 1) μ•± μ’…λ£Œ
rm -rf /Applications/ClaudeSync.app ~/.claudesync                 # 2) μ•± + 데이터 제거
sed -i '' '/claudesync@/d' ~/.ssh/authorized_keys                 # 3) (선택) authorized_keys 정리
# μ–‘μͺ½ Macμ—μ„œ 같이 μ§„ν–‰

μ•ˆ 함 / μ•ˆ 됨

  • ❌ 3λŒ€ 이상 Mac (1:1만)
  • ❌ ν΄λΌμš°λ“œ 경유 (LAN 직결만)
  • ❌ iCloud Drive Β· Dropbox λŒ€μ²΄ (AI 도ꡬ ν™˜κ²½ μ „μš©)
  • ❌ Windows / Linux

πŸ€– For LLM β€” Claude Code λ“± AI λ„κ΅¬λ‘œ μž‘μ—…ν•  λ•Œ

5초 μ»¨ν…μŠ€νŠΈ

ν”„λ‘œμ νŠΈ: macOS 메뉴바 트레이 μ•± (Swift 6, SwiftUI MenuBarExtra)
λͺ©μ :    두 Mac κ°„ Claude/Codex μ„€μ •Β·μ„Έμ…˜Β·λ©”λͺ¨λ¦¬ 동기화
전솑:    rsync over SSH + Bonjour 발견 + Ed25519 ν‚€ νŽ˜μ–΄λ§ + TLS
μ •μ±…:    μ™ΈλΆ€ μ˜μ‘΄μ„± 0, sandbox μ—†μŒ, macOS 15+ μ „μš©
μƒνƒœ:    v1.1.0 (μ½”λ“œλŠ” v1.1.1 패치 포함), 214/214 tests green
λ‹€μŒ:    Developer ID μ„œλͺ… + 두 Mac μ‹€κΈ° 검증 (μ‚¬μš©μž 자격증λͺ… ν•„μˆ˜)

λ°˜λ“œμ‹œ λ¨Όμ € 읽을 파일 (이 μˆœμ„œ)

  1. HANDOFF.md β€” κ°€μž₯ μ΅œμ‹  μƒνƒœ, μ–΄λ””μ„œ 이어야 ν• μ§€
  2. CLAUDE.md β€” ν”„λ‘œμ νŠΈ κ·œμΉ™ (Tech stack, branch μ •μ±…, openrsync ν˜Έν™˜ flag)
  3. docs/reports/2026-05-05-v1.1.0-defense-in-depth.html β€” κ°€μž₯ 졜근 λ§ˆμΌμŠ€ν†€
  4. docs/prd/PRD.md β€” 무엇을 λ§Œλ“œλŠ”κ°€
  5. docs/specs/TECHNICAL_SPEC.md β€” μ–΄λ–»κ²Œ (5269 lines, ν•„μš” μ‹œ grep)

핡심 λͺ…λ Ή

# λΉŒλ“œ 확인
xcodegen generate                                                              # project.yml -> .xcodeproj
xcodebuild -scheme ClaudeSync -configuration Debug -destination 'platform=macOS' build

# ν…ŒμŠ€νŠΈ (전체 ~12초, 214/214 톡과해야 함)
xcodebuild -scheme ClaudeSync -configuration Debug -destination 'platform=macOS' test

# Release + Universal binary + DMG
bash scripts/release-build.sh                  # -> .build/release-DD/.../ClaudeSync.app
bash scripts/measure-footprint.sh "<app>"      # -> Physical Footprint vs PRD G4 50MB
bash scripts/package.sh                         # -> dist/ClaudeSync-1.1.0.dmg

# One-shot install (μ‚¬μš©μžκ°€ 두 Mac κ°κ°μ—μ„œ μ‹€ν–‰)
bash scripts/install.sh

# μ„œλͺ…·곡증 (μ‚¬μš©μž 자격증λͺ… ν•„μš” β€” LLM이 직접 λͺ» 함)
export CODESIGN_IDENTITY="Developer ID Application: ..."
export NOTARY_PROFILE=ClaudeSync
bash scripts/package.sh

μ½”λ“œλ² μ΄μŠ€ 지도

ClaudeSync/
β”œβ”€β”€ App/                β€” @main + @Observable AppEnvironment (DI μ»¨ν…Œμ΄λ„ˆ)
β”œβ”€β”€ Coordinator/        β€” 3-pump λΌμš°ν„° (watcher / batch / results)
β”œβ”€β”€ Discovery/          β€” Bonjour (NWBrowser/NWListener) + ControlMessage + TLS
β”œβ”€β”€ FileWatcher/        β€” FSEvents -> 2s debounce -> 3-Tier λΌμš°ν„°
β”œβ”€β”€ Pairing/            β€” 6자리 μ½”λ“œ + nonce + clock skew + 단일 μ‹œλ„
β”‚   └── Preflight/     β€” Remote Login / FDA / SSH connectivity
β”œβ”€β”€ Persistence/        β€” preferences.json (HMAC) + history.json + paired peer
β”œβ”€β”€ SSH/                β€” Ed25519 ν‚€ + authorized_keys + known_hosts + wrapper
β”œβ”€β”€ Sync/               β€” rsync builder + queue + ConflictResolver (newer-wins)
β”œβ”€β”€ UI/                 β€” MenuBarRootView + Settings + Onboarding
β”œβ”€β”€ Utilities/          β€” ProcessRunner + Logger + LaunchAtLogin
β”‚                          + NetworkResilience + SingleInstanceGuard
└── Resources/          β€” Info.plist + entitlements + AppIcon

ClaudeSyncTests/        β€” 26 μŠ€μœ„νŠΈ / 214 ν…ŒμŠ€νŠΈ
scripts/                β€” install / web-install / release-build / measure-footprint / package
docs/
β”œβ”€β”€ prd/                β€” PRD
β”œβ”€β”€ specs/              β€” Technical spec, Test strategy
β”œβ”€β”€ references/         β€” Tech references
β”œβ”€β”€ reports/            β€” Phase 1~6 + v1.0/v1.0.1/v1.1.0 milestones (HTML)
β”œβ”€β”€ screenshots/        β€” 메뉴바 / μ‚¬μš©μž κ°€μ΄λ“œμš© 캑처
└── DEMO_TWO_MACS.md    β€” 두 Mac μ‹€κΈ° μ‹œμ—° κ°€μ΄λ“œ

μœ„λ°˜ κΈˆμ§€ (CLAUDE.md 발췌)

  • ❌ μ™ΈλΆ€ 라이브러리 μΆ”κ°€ κΈˆμ§€ (SPM dependency 0 μ •μ±…)
  • ❌ Sandbox 켜기 κΈˆμ§€ (rsync/ssh-keygen/openssl μ‹€ν–‰ λͺ» 함)
  • ❌ GNU rsync μ „μš© flag μ‚¬μš© κΈˆμ§€ (openrsync ν˜Έν™˜λ§Œ: --archive --compress --delete --update --itemize-changes --partial --timeout=30)
  • ❌ Squash merge κΈˆμ§€ (gh pr merge --merge)
  • ❌ μ‚¬μš©μžμ—κ²Œ ν…μŠ€νŠΈλ‘œ 묻지 마라 β€” AskUserQuestion λ„κ΅¬λ§Œ
  • ❌ 보고λ₯Ό ν…μŠ€νŠΈλ§ŒμœΌλ‘œ 끝내지 마라 β€” HTML λ³΄κ³ μ„œ (docs/reports/) 생성

자주 λ§‰νžˆλŠ” λΆ€λΆ„

λ§‰νž˜ ν•΄κ²°
"matching destinations" warning 무해. λ¬΄μ‹œ
Swift 6 actor 격리 μ—λŸ¬ nonisolated λ˜λŠ” @MainActor λͺ…μ‹œ
Settings 변경이 sync에 반영 μ•ˆ 됨 AppEnvironment.applyPreferences()κ°€ builderλ₯Ό swapν•΄μ•Ό 함
μƒˆ Swift 파일이 컴파일 μ•ˆ 됨 xcodegen generate λ‹€μ‹œ
setenv("HOME") ν…ŒμŠ€νŠΈ race parallelTesting λΉ„ν™œμ„±ν™” λ˜λŠ” homeDirectory μ£Όμž…
TLS handshake μ‹€νŒ¨ ~/.claudesync/tls/server.p12 κΆŒν•œ 0o600 + openssl 경둜 확인 (μ—†μœΌλ©΄ plaintext fallback λ™μž‘)
xcodebuild testκ°€ μ¦‰μ‹œ exit SingleInstanceGuardκ°€ λ‹€λ₯Έ ClaudeSync.app 발견 β€” XCTest ν™˜κ²½λ³€μˆ˜ κ°μ§€λ‘œ μžλ™ skipλ˜μ§€λ§Œ, μ•ˆ 되면 CLAUDESYNC_DISABLE_SINGLE_INSTANCE=1

λ‹€μŒ LLM μ„Έμ…˜ Resume Prompt

HANDOFF.md의 "Resume Prompt" μ„Ήμ…˜μ΄ 항상 μ΅œμ‹ . v1.1.0 κΈ°μ€€:

이전 μ„Έμ…˜μ—μ„œ ClaudeSync v1.1.0κΉŒμ§€ μ™„λ£Œν–ˆμŠ΅λ‹ˆλ‹€ (TLS, nonce, known_hosts, HMAC, auto recovery, single-instance, install.sh, web-install.sh). HANDOFF.mdλ₯Ό 읽고 ν˜„μž¬ μƒνƒœλ₯Ό νŒŒμ•…ν•œ ν›„, μ„œλͺ…+곡증 / 두 Mac μ‹€κΈ° 검증 / GitHub Release 쀑 μ‚¬μš©μžκ°€ μ›ν•˜λŠ” μž‘μ—…μ„ μ§„ν–‰ν•˜μ„Έμš”. ν…ŒμŠ€νŠΈ 214/214 κ·Έλ¦°.


μŠ€ν¬λ¦°μƒ· μΆ”κ°€ κ°€μ΄λ“œ

μŠ€ν¬λ¦°μƒ·μ€ μ‚¬μš©μžκ°€ 직접 docs/screenshots/에 PNG둜 μΆ”κ°€ν•˜λŠ” 것이 κ°€μž₯ μ •ν™•ν•©λ‹ˆλ‹€. ꢌμž₯ 캑처 (Shift+Cmd+4 β†’ μ˜μ—­ λ“œλž˜κ·Έ):

파일λͺ… 무엇을 캑처
docs/screenshots/menubar-tray.png 메뉴바 μš°μƒλ‹¨ μ•ˆν…Œλ‚˜ μ•„μ΄μ½˜ μ˜μ—­ (이미 μžλ™ 캑처됨)
docs/screenshots/menubar-popover.png μ•ˆν…Œλ‚˜ 클릭 ν›„ λ‚˜νƒ€λ‚˜λŠ” popover 전체
docs/screenshots/onboarding-step1.png Onboarding의 Remote Login 단계
docs/screenshots/onboarding-pair.png Onboarding의 6자리 μ½”λ“œ ν‘œμ‹œ ν™”λ©΄
docs/screenshots/menubar-pair-banner.png λ©”λ‰΄λ°”μ˜ Pair request λ°°λ„ˆ

μΆ”κ°€ ν›„ README의 ν•΄λ‹Ή μ„Ήμ…˜μ— ![](docs/screenshots/파일λͺ….png) μΆ”κ°€.


License

λ‚΄λΆ€ ν”„λ‘œμ νŠΈ.

Repository

Credits

이 ν”„λ‘œμ νŠΈλŠ” Claude Code (Anthropic Opus 4.7)와 νŽ˜μ–΄ μ½”λ”©μœΌλ‘œ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

About

Keep your AI coding environments in perfect sync across Macs

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors