{"id":49652401,"url":"https://github.com/two-weeks-team/claudesync","last_synced_at":"2026-05-20T02:09:37.272Z","repository":{"id":355788973,"uuid":"1229486141","full_name":"Two-Weeks-Team/ClaudeSync","owner":"Two-Weeks-Team","description":"Keep your AI coding environments in perfect sync across Macs","archived":false,"fork":false,"pushed_at":"2026-05-05T09:31:47.000Z","size":258,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-05T10:08:20.530Z","etag":null,"topics":["claude-code","developer-tools","macos","menu-bar-app","swift","sync"],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Two-Weeks-Team.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-05T05:03:22.000Z","updated_at":"2026-05-05T09:31:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Two-Weeks-Team/ClaudeSync","commit_stats":null,"previous_names":["two-weeks-team/claudesync"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Two-Weeks-Team/ClaudeSync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Two-Weeks-Team%2FClaudeSync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Two-Weeks-Team%2FClaudeSync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Two-Weeks-Team%2FClaudeSync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Two-Weeks-Team%2FClaudeSync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Two-Weeks-Team","download_url":"https://codeload.github.com/Two-Weeks-Team/ClaudeSync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Two-Weeks-Team%2FClaudeSync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32679444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T02:33:58.958Z","status":"ssl_error","status_checked_at":"2026-05-06T02:33:39.611Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","developer-tools","macos","menu-bar-app","swift","sync"],"created_at":"2026-05-06T05:01:30.652Z","updated_at":"2026-05-06T05:01:35.488Z","avatar_url":"https://github.com/Two-Weeks-Team.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ClaudeSync\n\n\u003e macOS 메뉴바 앱. 두 Mac 간 Claude Code · Claude Desktop · Codex CLI의 설정 / 세션 / 메모리를 자동 동기화합니다.\n\n[![tests](https://img.shields.io/badge/tests-214%20passing-3fb950)]() [![macOS](https://img.shields.io/badge/macOS-15%2B-58a6ff)]() [![arch](https://img.shields.io/badge/arch-arm64%20%2B%20x86__64-d2a8ff)]() [![version](https://img.shields.io/badge/version-1.1.0-d29922)]()\n\n\u003e ⚠️ **현재 상태**: 1:1 두 Mac 동기화. ad-hoc 서명 (Developer ID + 공증은 v1.2 예정). 외부 라이브러리 0, 외부 서비스 0.\n\n---\n\n## 목차\n\n- [설치 — 세 가지 path 중 하나](#설치--세-가지-path-중-하나)\n  - [Path A — Claude Code에게 위임 ⭐](#path-a--claude-code또는-다른-ai-agent에게-위임--가장-게으른-방법)\n  - [Path B — 한 줄 web installer](#path-b--한-줄-web-installer-claude-code-없어도-ok)\n  - [Path C — 직접 수동](#path-c--git-clone-후-직접-수동-개발자용)\n- [전체 흐름 — 두 Mac 처음부터 끝까지](#전체-흐름--두-mac-처음부터-끝까지)\n- [무엇을 하나](#무엇을-하나)\n- [🧑 For Human — 사용자 가이드](#-for-human--사용자-가이드)\n- [🤖 For LLM — Claude Code 등 AI 도구로 작업할 때](#-for-llm--claude-code-등-ai-도구로-작업할-때)\n\n---\n\n## 설치 — 세 가지 path 중 하나\n\n### Path A — Claude Code(또는 다른 AI agent)에게 위임 ⭐ 가장 게으른 방법\n\n다른 Mac에서 git clone만 한 후 그 폴더에서 Claude Code를 열고 한 마디:\n\n```\n이 프로젝트 설치해서 실행해줘\n```\n\nClaude Code가 자동으로 `CLAUDE.md`의 \"Install workflow\" 섹션을 읽고 다음을 처리합니다:\n\n1. `bash scripts/install.sh` 실행 (Xcode CLT / Homebrew / xcodegen 자동)\n2. Universal Release 빌드 + `/Applications/ClaudeSync.app` 설치 + launch\n3. macOS가 묻는 GUI prompt들 (Remote Login, FDA, Local Network)을 사용자에게 명시적으로 안내\n4. Onboarding 6단계 마법사로 가이드\n\nLLM이 못 하는 부분 (시스템 다이얼로그 클릭, Onboarding 버튼 클릭)은 사용자에게 정확히 어디를 클릭하라고 안내합니다.\n\n\u003e 💡 사전 요구: 다른 Mac에 Claude Code가 설치되어 있어야 함 + git clone이 끝나 있어야 함. Claude Code가 없으면 Path B 또는 C를 사용.\n\n### Path B — 한 줄 web installer (Xcode 없어도 OK ⭐)\n\n**두 Mac 각각의 터미널에서 똑같이 한 번씩**:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/Two-Weeks-Team/ClaudeSync/main/scripts/web-install.sh | bash\n```\n\n이 한 줄이 자동으로:\n\n1. **GitHub Releases에서 latest .dmg 다운로드** (SHA-256 verification)\n2. mount → `/Applications/ClaudeSync.app` 복사 → quarantine 제거\n3. launch + 메뉴바 등장 확인\n\n**Xcode/Homebrew/git 모두 없어도 동작합니다** — GitHub Actions가 미리 빌드한 Universal binary DMG를 받아서 설치만 합니다. 빈 macOS 15 Mac에서도 약 30초 안에 완료.\n\n\u003e 만약 GitHub Release가 아직 없거나 다운로드 실패하면, 자동으로 source build path(Xcode 필요)로 fallback. 강제로 source build 원하면 `CLAUDESYNC_FORCE_SOURCE=1` 환경변수.\n\n이 한 줄이 자동으로:\n\n| 단계 | 무엇 | 사용자 입력 |\n|------|------|-----------|\n| 1 | Xcode Command Line Tools 설치 (없으면) | macOS 시스템 다이얼로그에서 \"설치\" |\n| 2 | git → 소스 clone (`~/.claudesync/source`) | 없음 |\n| 3 | Homebrew 설치 (없으면 비대화형) | 없음 |\n| 4 | xcodegen 설치 | 없음 |\n| 5 | Universal Release 빌드 (~60초) | 없음 |\n| 6 | `/Applications/ClaudeSync.app` 설치 + Gatekeeper quarantine 제거 | 없음 |\n| 7 | 앱 launch | 없음 |\n\n종료 후 터미널에 다음 단계 안내가 한국어로 출력됩니다.\n\n\u003e ⚠️ **Xcode 자체는 자동 설치 불가** — Apple 정책상 CLI로 설치 못 함. Mac App Store에서 \"Xcode\" 검색 후 한 번만 설치 (대용량, 30분~1시간 소요). 설치 후 위 명령 실행.\n\n### Path C — git clone 후 직접 수동 (개발자용)\n\n```bash\ngit clone https://github.com/Two-Weeks-Team/ClaudeSync.git\ncd ClaudeSync\nbash scripts/install.sh\n```\n\n`install.sh`는 기본 non-interactive (자동 yes). prompt 모드 원하면 `CLAUDESYNC_INTERACTIVE=1`.\n\n### 세 가지 path 비교\n\n| Path | 사용자 입력 | Xcode 필요? | LLM 필요? | 소요 시간 |\n|------|-----------|-----------|---------|----------|\n| **B (curl 한 줄, DMG)** ⭐ | curl ... 한 줄 | ❌ 없어도 됨 | ❌ | ~30초 |\n| A (AI 위임, source) | \"이 프로젝트 설치해서 실행해줘\" 한 마디 | ✅ (LLM이 빌드) | ✅ Claude Code | ~2분 |\n| C (수동, source) | git clone + cd + bash | ✅ | ❌ | ~2분 |\n\n\u003e 💡 **추천 순서**: 일반 사용자는 B (Xcode 안 받아도 됨). 코드를 살펴보거나 수정하려는 개발자는 A 또는 C.\n\n---\n\n## 전체 흐름 — 두 Mac 처음부터 끝까지\n\n### Step 0 — 사전 점검 (양쪽 Mac 모두)\n\n| 조건 | 어떻게 확인 |\n|------|------------|\n| macOS 15 (Sequoia) 이상 | 사과 메뉴 → 이 Mac에 관하여 |\n| 같은 Wi-Fi / 같은 LAN | 양쪽 Mac의 Wi-Fi 이름 일치 확인 |\n| Xcode 설치됨 | Mac App Store → \"Xcode\" 검색 |\n\n### Step 1 — 설치 (양쪽 Mac에서 따로따로, 동시 가능)\n\n양쪽 Mac에서 각각 터미널 열고:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/Two-Weeks-Team/ClaudeSync/main/scripts/web-install.sh | bash\n```\n\n빌드 + 설치 + launch까지 **총 1~2분**. 양쪽이 동시에 실행되어도 무방.\n\n설치 완료 후 양쪽 Mac의 화면 우측 상단 메뉴바에 안테나 아이콘이 등장합니다.\n\n```\n[화면 우측 상단 메뉴바]\n                                      ┌─ 안테나 아이콘 (ClaudeSync)\n                                      │\n…  🌐  ⚛  ☁  🍴  🔵  💬  🖥  🕐  🌙  📡  ───→ 클릭\n```\n\n### Step 2 — 첫 launch 시 macOS prompt (양쪽 Mac)\n\n처음 launch하면 macOS가 다음을 묻습니다 — **모두 \"허용\" 클릭**:\n\n| Prompt | 답 |\n|--------|-----|\n| \"ClaudeSync을(를) 여시겠습니까?\" (첫 launch만) | **열기** |\n| \"ClaudeSync이(가) 로컬 네트워크에 있는 디바이스를 찾고 연결하려고 합니다.\" | **허용** |\n\n### Step 3 — Onboarding 마법사 (양쪽 Mac에서 한 번씩)\n\n메뉴바 안테나 아이콘 클릭 → popover 등장 → **하단 \"Onboarding\" 버튼** 클릭 → 별도 윈도우 열림.\n\n윈도우에는 6단계가 순서대로:\n\n```\n┌──────────────────────────────────────┐\n│ Welcome to ClaudeSync                │ ← 현재 step 표시\n├──────────────────────────────────────┤\n│ Step 1 of 3 — Remote Login           │\n│                                      │\n│ ⚠ Remote Login is OFF               │\n│ [Open System Settings] [Check now]   │\n│                              [Continue]\n└──────────────────────────────────────┘\n```\n\n| Step | 무엇 | 사용자 액션 |\n|------|------|-----------|\n| ① Welcome | 환영 화면 | \"Continue\" 클릭 |\n| ② Remote Login | sshd 활성 검사 | \"Open System Settings\" → 시스템 설정에서 **\"원격 로그인\" 토글 ON** → 윈도우로 돌아와 \"Check now\" → 녹색 ✓ → \"Continue\" |\n| ③ Full Disk Access | FDA 검사 | \"Open System Settings\" → 잠금 해제 → **\"+\" 버튼 → /Applications/ClaudeSync.app 선택** → \"Continue\" |\n| ④ Discovery | 다른 Mac 발견 대기 | 다른 Mac이 같은 단계 도달하면 목록에 자동 등장 → 옆의 **\"Pair\" 클릭** |\n| ⑤ Pairing Code | 6자리 코드 표시 | 다른 Mac 화면의 코드와 **시각적 일치 확인** |\n| ⑥ Confirm | 최종 확인 | **\"Confirm — codes match\" 클릭** → 자동으로 SSH 키 + TLS 핸드셰이크 + 동기화 시작 |\n\n### Step 4 — 페어링 (한 쪽이 Pair 클릭하면 다른 쪽에 배너 등장)\n\nMac A의 사용자가 ④에서 \"Pair\" 클릭하면, **Mac B의 메뉴바 popover**에 자동으로 배너가 등장:\n\n```\n┌───────────────────────────────────────┐\n│ 🔵 ClaudeSync   Searching for peer…  │\n├───────────────────────────────────────┤\n│ Pair request from MacA               │\n│                                       │\n│         284579                        │ ← 6자리 코드 (양쪽 동일해야 함)\n│                                       │\n│ [Accept — codes match]   [Cancel]    │\n└───────────────────────────────────────┘\n```\n\n**Mac B 사용자**: 코드가 Mac A 화면과 일치하면 \"Accept — codes match\" 클릭 → Mac A의 Onboarding이 자동으로 Step ⑥로 넘어감 → Mac A 사용자가 \"Confirm — codes match\" 클릭 → **양쪽 모두 \"Watching\" 상태** → 동기화 시작.\n\n페어링은 **한 번만**. 영속화되어 양쪽 Mac을 재시작해도 자동 복원.\n\n---\n\n## 무엇을 하나\n\n| 항목 | 값 |\n|------|------|\n| 동기화 대상 | `~/.claude/`, `~/Library/Application Support/Claude/`, `~/.codex/`, `~/Documents/GitHub/` |\n| 발견 | Bonjour `_claudesync._tcp` (같은 LAN) |\n| 페어링 | 6자리 시각 확인 코드 + 16-byte nonce + Ed25519 SSH 키 자동 교환 |\n| 전송 | rsync over SSH (openrsync 호환) |\n| 보안 | TLS + nonce + known_hosts strict + HMAC-signed prefs (10 layers) |\n| 리소스 | Idle 25MB Physical Footprint, 0 leaks |\n| 의존성 | macOS 15+ + Xcode 만 — 외부 라이브러리 0, 외부 서비스 0 |\n\n---\n\n## 🧑 For Human — 사용자 가이드\n\n### 권한 부여 — 자세히\n\n#### Remote Login (원격 로그인)\n\n`사과 메뉴 → 시스템 설정 → 일반 → 공유` → 우측에서 **\"원격 로그인\" 토글 ON**.\n\n해제되어 있으면 페어링 후 rsync가 \"Connection refused (port 22)\"로 실패합니다.\n\n#### Full Disk Access (전체 디스크 접근 권한)\n\n`사과 메뉴 → 시스템 설정 → 개인정보 보호 및 보안 → 전체 디스크 접근 권한`:\n\n1. 좌하단 자물쇠 클릭 → Touch ID 또는 비밀번호로 잠금 해제\n2. **\"+\" 버튼** → Finder 다이얼로그 열림\n3. `/Applications/ClaudeSync.app` 선택 → \"열기\"\n4. 목록에 ClaudeSync 등장하고 **토글이 켜져있는지** 확인\n\n거부하면 `~/Library/Application Support/Claude` 변경을 감시 못 함 → Claude Desktop 세션 동기화 안 됨.\n\n#### Local Network (로컬 네트워크)\n\n첫 launch 시 자동 prompt. 거부했으면:\n\n`사과 메뉴 → 시스템 설정 → 개인정보 보호 및 보안 → 로컬 네트워크` → ClaudeSync 토글 ON.\n\n### 메뉴바 popover 구조\n\n```\n┌─────────────────────────────────────────────┐\n│ 🔵 ClaudeSync                               │\n│    Watching for changes                    │ ← 현재 상태\n├─────────────────────────────────────────────┤\n│ Coordinator                                 │\n│ Watching for changes                        │\n├─────────────────────────────────────────────┤\n│ [pairing banner — 페어링 진행 중일 때만 표시]│\n├─────────────────────────────────────────────┤\n│ Peers on this network                       │\n│ • MacBookAir (kim)            [Paired ✓]   │\n├─────────────────────────────────────────────┤\n│ Targets                                     │\n│ 📁 Claude Code         3분 전     [⟳]       │\n│ 📁 Claude Desktop      방금       [⟳]       │\n│ 📁 Codex CLI           1시간 전   [⟳]       │\n│ 📁 Projects            —          [⟳]       │\n├─────────────────────────────────────────────┤\n│ Recent Activity                             │\n│ ✓ Synced successfully                      │\n│ ✓ Synced successfully                      │\n├─────────────────────────────────────────────┤\n│ [Onboarding] [Settings…]            [Quit]  │\n└─────────────────────────────────────────────┘\n```\n\n### 트러블슈팅\n\n| 증상 | 어디서 보이나 | 해결 |\n|------|--------------|------|\n| 메뉴바 안테나 아이콘이 없음 | 메뉴바 우상단 | LSUIElement 앱이라 Dock 없음. 다른 메뉴바 아이콘에 가려졌으면 ⌘드래그로 위치 조정 |\n| \"Searching for peer...\" 무한 | 메뉴바 popover 상단 | (1) 양쪽 Mac이 같은 Wi-Fi인지 확인 (2) 회사/카페 Wi-Fi는 mDNS 차단 가능 (3) 양쪽 Mac이 메뉴바에 등장한 상태인지 확인 |\n| \"Failed: rsync exit=255\" | 메뉴바 popover의 Recent Activity | 양쪽 Mac에서 시스템 설정 → 일반 → 공유 → \"원격 로그인\" ON 확인 |\n| \"Failed: peer clock skew Ns\" | Onboarding 윈도우 또는 메뉴바 banner | 두 Mac의 시각 차이 30초 초과. **양쪽 Mac**에서 시스템 설정 → 일반 → 날짜 및 시간 → \"자동으로 시간 설정\" 켜기 |\n| \"another instance is already running\" | 터미널 (install.sh 재실행 시) | `killall ClaudeSync` 후 `bash scripts/install.sh` 다시 |\n| \"Control channel is plaintext\" 주황 banner | 메뉴바 popover 상단 | openssl 누락. `brew install openssl` 후 ClaudeSync 재시작 (없어도 페어링/동기화는 정상 동작) |\n| 동기화가 너무 자주 일어남 | Recent Activity가 5분 내 50+ 행 | Settings (⌘,) → Excludes 탭에서 자주 변경되는 파일 패턴 추가 |\n| Onboarding 윈도우 사라짐 | 메뉴바 popover에서 다시 \"Onboarding\" 클릭 |  |\n| 페어링 후 다른 Mac이 안 보임 | Settings → \"Forget paired peer\" 클릭 → 처음부터 다시 |  |\n\n### 완전 제거\n\n```bash\nkillall ClaudeSync                                                # 1) 앱 종료\nrm -rf /Applications/ClaudeSync.app ~/.claudesync                 # 2) 앱 + 데이터 제거\nsed -i '' '/claudesync@/d' ~/.ssh/authorized_keys                 # 3) (선택) authorized_keys 정리\n# 양쪽 Mac에서 같이 진행\n```\n\n### 안 함 / 안 됨\n\n- ❌ 3대 이상 Mac (1:1만)\n- ❌ 클라우드 경유 (LAN 직결만)\n- ❌ iCloud Drive · Dropbox 대체 (AI 도구 환경 전용)\n- ❌ Windows / Linux\n\n---\n\n## 🤖 For LLM — Claude Code 등 AI 도구로 작업할 때\n\n### 5초 컨텍스트\n\n```\n프로젝트: macOS 메뉴바 트레이 앱 (Swift 6, SwiftUI MenuBarExtra)\n목적:    두 Mac 간 Claude/Codex 설정·세션·메모리 동기화\n전송:    rsync over SSH + Bonjour 발견 + Ed25519 키 페어링 + TLS\n정책:    외부 의존성 0, sandbox 없음, macOS 15+ 전용\n상태:    v1.1.0 (코드는 v1.1.1 패치 포함), 214/214 tests green\n다음:    Developer ID 서명 + 두 Mac 실기 검증 (사용자 자격증명 필수)\n```\n\n### 반드시 먼저 읽을 파일 (이 순서)\n\n1. **`HANDOFF.md`** — 가장 최신 상태, 어디서 이어야 할지\n2. **`CLAUDE.md`** — 프로젝트 규칙 (Tech stack, branch 정책, openrsync 호환 flag)\n3. **`docs/reports/2026-05-05-v1.1.0-defense-in-depth.html`** — 가장 최근 마일스톤\n4. **`docs/prd/PRD.md`** — 무엇을 만드는가\n5. **`docs/specs/TECHNICAL_SPEC.md`** — 어떻게 (5269 lines, 필요 시 grep)\n\n### 핵심 명령\n\n```bash\n# 빌드 확인\nxcodegen generate                                                              # project.yml -\u003e .xcodeproj\nxcodebuild -scheme ClaudeSync -configuration Debug -destination 'platform=macOS' build\n\n# 테스트 (전체 ~12초, 214/214 통과해야 함)\nxcodebuild -scheme ClaudeSync -configuration Debug -destination 'platform=macOS' test\n\n# Release + Universal binary + DMG\nbash scripts/release-build.sh                  # -\u003e .build/release-DD/.../ClaudeSync.app\nbash scripts/measure-footprint.sh \"\u003capp\u003e\"      # -\u003e Physical Footprint vs PRD G4 50MB\nbash scripts/package.sh                         # -\u003e dist/ClaudeSync-1.1.0.dmg\n\n# One-shot install (사용자가 두 Mac 각각에서 실행)\nbash scripts/install.sh\n\n# 서명·공증 (사용자 자격증명 필요 — LLM이 직접 못 함)\nexport CODESIGN_IDENTITY=\"Developer ID Application: ...\"\nexport NOTARY_PROFILE=ClaudeSync\nbash scripts/package.sh\n```\n\n### 코드베이스 지도\n\n```\nClaudeSync/\n├── App/                — @main + @Observable AppEnvironment (DI 컨테이너)\n├── Coordinator/        — 3-pump 라우터 (watcher / batch / results)\n├── Discovery/          — Bonjour (NWBrowser/NWListener) + ControlMessage + TLS\n├── FileWatcher/        — FSEvents -\u003e 2s debounce -\u003e 3-Tier 라우터\n├── Pairing/            — 6자리 코드 + nonce + clock skew + 단일 시도\n│   └── Preflight/     — Remote Login / FDA / SSH connectivity\n├── Persistence/        — preferences.json (HMAC) + history.json + paired peer\n├── SSH/                — Ed25519 키 + authorized_keys + known_hosts + wrapper\n├── Sync/               — rsync builder + queue + ConflictResolver (newer-wins)\n├── UI/                 — MenuBarRootView + Settings + Onboarding\n├── Utilities/          — ProcessRunner + Logger + LaunchAtLogin\n│                          + NetworkResilience + SingleInstanceGuard\n└── Resources/          — Info.plist + entitlements + AppIcon\n\nClaudeSyncTests/        — 26 스위트 / 214 테스트\nscripts/                — install / web-install / release-build / measure-footprint / package\ndocs/\n├── prd/                — PRD\n├── specs/              — Technical spec, Test strategy\n├── references/         — Tech references\n├── reports/            — Phase 1~6 + v1.0/v1.0.1/v1.1.0 milestones (HTML)\n├── screenshots/        — 메뉴바 / 사용자 가이드용 캡처\n└── DEMO_TWO_MACS.md    — 두 Mac 실기 시연 가이드\n```\n\n### 위반 금지 (CLAUDE.md 발췌)\n\n- ❌ 외부 라이브러리 추가 금지 (SPM dependency 0 정책)\n- ❌ Sandbox 켜기 금지 (rsync/ssh-keygen/openssl 실행 못 함)\n- ❌ GNU rsync 전용 flag 사용 금지 (openrsync 호환만: `--archive --compress --delete --update --itemize-changes --partial --timeout=30`)\n- ❌ Squash merge 금지 (`gh pr merge --merge`)\n- ❌ 사용자에게 텍스트로 묻지 마라 — `AskUserQuestion` 도구만\n- ❌ 보고를 텍스트만으로 끝내지 마라 — HTML 보고서 (`docs/reports/`) 생성\n\n### 자주 막히는 부분\n\n| 막힘 | 해결 |\n|------|------|\n| \"matching destinations\" warning | 무해. 무시 |\n| Swift 6 actor 격리 에러 | `nonisolated` 또는 `@MainActor` 명시 |\n| Settings 변경이 sync에 반영 안 됨 | `AppEnvironment.applyPreferences()`가 builder를 swap해야 함 |\n| 새 Swift 파일이 컴파일 안 됨 | `xcodegen generate` 다시 |\n| `setenv(\"HOME\")` 테스트 race | parallelTesting 비활성화 또는 `homeDirectory` 주입 |\n| TLS handshake 실패 | `~/.claudesync/tls/server.p12` 권한 0o600 + openssl 경로 확인 (없으면 plaintext fallback 동작) |\n| `xcodebuild test`가 즉시 exit | SingleInstanceGuard가 다른 ClaudeSync.app 발견 — XCTest 환경변수 감지로 자동 skip되지만, 안 되면 `CLAUDESYNC_DISABLE_SINGLE_INSTANCE=1` |\n\n### 다음 LLM 세션 Resume Prompt\n\n`HANDOFF.md`의 \"Resume Prompt\" 섹션이 항상 최신. v1.1.0 기준:\n\n\u003e 이전 세션에서 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 그린.\n\n---\n\n## 스크린샷 추가 가이드\n\n스크린샷은 사용자가 직접 `docs/screenshots/`에 PNG로 추가하는 것이 가장 정확합니다. 권장 캡처 (Shift+Cmd+4 → 영역 드래그):\n\n| 파일명 | 무엇을 캡처 |\n|--------|-----------|\n| `docs/screenshots/menubar-tray.png` | 메뉴바 우상단 안테나 아이콘 영역 (이미 자동 캡처됨) |\n| `docs/screenshots/menubar-popover.png` | 안테나 클릭 후 나타나는 popover 전체 |\n| `docs/screenshots/onboarding-step1.png` | Onboarding의 Remote Login 단계 |\n| `docs/screenshots/onboarding-pair.png` | Onboarding의 6자리 코드 표시 화면 |\n| `docs/screenshots/menubar-pair-banner.png` | 메뉴바의 Pair request 배너 |\n\n추가 후 README의 해당 섹션에 `![](docs/screenshots/파일명.png)` 추가.\n\n---\n\n## License\n\n내부 프로젝트.\n\n## Repository\n\n- GitHub: https://github.com/Two-Weeks-Team/ClaudeSync\n- 마일스톤별 결정 과정과 패치 이유: `docs/reports/`의 HTML 보고서들\n\n## Credits\n\n이 프로젝트는 Claude Code (Anthropic Opus 4.7)와 페어 코딩으로 작성되었습니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwo-weeks-team%2Fclaudesync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftwo-weeks-team%2Fclaudesync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwo-weeks-team%2Fclaudesync/lists"}