우울하거나 무거운 웹 콘텐츠를 친구가 톡 보내듯 긍정적으로 재해석해 주는 macOS 메뉴바 앱.
화면 우하단에 작은 캐릭터가 떠 있고, 누르면 현재 보고 있는 브라우저 탭의 글을 읽어 Claude 에 보내고, 짧고 따뜻한 재해석을 거대한 캐릭터 + 말풍선으로 띄웁니다. 캐릭터 4명 중 페르소나를 골라 사용할 수 있어요.
git clone https://github.com/im-in-J/HappyVirus.git && cd HappyVirus그 다음 이 디렉터리에서 Claude Code 를 열고 한 마디만:
이 README 따라서 설치해줘
Claude Code 가 알아서 빌드부터 실행까지 다 처리해 줍니다. 첫 실행 시 macOS 권한 다이얼로그 한 번 허용하면 끝.
- 우하단에 작은 캐릭터가 둥둥 떠다님 (Dock 아이콘 없음, 메뉴바 + 플로팅)
- 캐릭터 클릭 → 현재 활성 브라우저 (Safari·Chrome·Arc·Edge·Brave·Vivaldi) 의 탭을 읽음
- Claude 가 글을 받아서 페르소나 톤으로 짧고 따뜻한 재해석을 출력
- 거대한 캐릭터가 화면 가운데 등장해서 말풍선으로 응답 표시
- 토큰 절약을 위해 "브라우저 아닌 앱이 활성", "글이 너무 짧음" 같은 케이스는 API 안 부르고 페르소나 하드코딩 응답
| 이름 | 톤 | |
|---|---|---|
| 😼 | 냥수 (게으른 룸메이트) | 차분하고 살짝 시큰둥 — "음~ 별 거 아니야" |
| 👽 | 푸르푸르 (외계인 친구) | 우주적 zoom-out 시선 — "오~ 너네 지구에선 그게 큰 일이래?" |
| 🌱 | 콩이 (천진난만한 친구) | 들뜬 호기심 — "와! 이거 봐봐!" |
| 🍵 | 차담 (사려깊은 절친) | 차분한 공감 + 한 마디 — "이런 글 읽으면 무겁지" |
- macOS 13 이상
- Xcode (Swift 6 toolchain) — App Store 에서 설치
- Claude Code CLI (권장) — Pro/Max 구독으로 동작 / 또는 Anthropic API 키
Claude Code CLI 설치 (없을 경우):
curl -fsSL https://claude.ai/install.sh | bashgit clone https://github.com/im-in-J/HappyVirus.git
cd HappyVirus
./build-app.sh
open build/HappyVirus.app/Applications 으로 옮기려면:
mv build/HappyVirus.app /Applications/
open /Applications/HappyVirus.appmacOS 가 "HappyVirus 가 Safari 등을 제어하려 합니다" 다이얼로그를 띄움 → 확인 클릭. 이거 거부하면 브라우저 글을 못 읽습니다. 나중에 시스템 설정 → 개인정보 보호 및 보안 → 자동화 에서 허용 가능.
앱이 첫 실행 시 두 가지 옵션을 보여줍니다:
- Claude Pro/Max 구독 (권장) —
claudeCLI 자동 탐지, 추가 결제 불필요 - API 키 직접 입력 — Anthropic Console 에서 발급한
sk-ant-…(Keychain 저장)
언제든 메뉴바 → ⌘1 (CLI) / ⌘2 (API 키) 로 전환 가능.
- Safari·Chrome·Arc·Edge·Brave·Vivaldi 중 하나에서 우울하거나 무거운 글 띄우기
- 우하단 캐릭터 클릭 (또는 메뉴바 아이콘 →
⌘P) - 잠시 후 화면 가운데 거대한 캐릭터가 등장해서 말풍선으로 재해석 표시
- 말풍선 외부 아무 곳이나 클릭 → 닫힘
| 단축키 | 동작 |
|---|---|
⌘P |
현재 페이지 긍정 해석 |
⌘1 |
Claude 구독 (CLI) 모드로 전환 |
⌘2 |
API 키 입력 모드로 전환 |
⌘R |
캐릭터 우하단으로 위치 리셋 |
⌘Q |
종료 |
기본 빌드는 ad-hoc 서명이라 코드를 한 줄 고칠 때마다 macOS 가 자동화 권한을 다시 묻습니다. 자체 서명 인증서를 한 번만 만들어두면 영구 해결:
- 키체인 접근 실행 → 메뉴 → 인증서 지원 → 인증서 생성...
- 입력값:
- 이름:
HappyVirus - ID 유형: 자체 서명 루트
- 인증서 유형: 코드 서명 ← 정확히 이거 선택
- 이름:
- 생성 후 인증서 더블클릭 → 신뢰 펼치기 → "이 인증서를 사용 시: 항상 신뢰"
- 검증:
security find-identity -v -p codesigning | grep HappyVirus1 valid identities found보이면 OK.
build-app.sh 가 이 인증서를 자동으로 감지하고 사용합니다. 이후 빌드부터는 권한이 영구 유지.
| 증상 | 해결 |
|---|---|
| 캐릭터가 안 보임 | 메뉴바 아이콘 클릭 → ⌘R (위치 리셋) |
| "지원 안 되는 앱" 응답 | Safari/Chrome 등 진짜 브라우저를 활성 상태로 두고 다시 클릭 |
| API 키 모드인데 응답 실패 | 메뉴바 ⌘2 로 키 다시 입력 |
claude: command not found |
curl -fsSL https://claude.ai/install.sh | bash 로 CLI 설치 |
| 매번 권한 다이얼로그 | 위 "자체 서명 인증서" 섹션 참고 |
You are Claude Code reading this README to install on the user's behalf. Follow these exact steps:
-
Verify prerequisites:
xcodebuild -version # Xcode 설치 확인 swift --version # Swift 6+ sw_vers -productVersion # macOS 13+
하나라도 실패하면 사용자에게 알리고 중단.
-
Code signing identity 확인:
security find-identity -v -p codesigning | grep -q '"HappyVirus"' && echo HAS_CERT || echo NO_CERT
HAS_CERT: 그대로 진행. 권한 다이얼로그 1번만 뜨고 그 이후 영구.NO_CERT: ad-hoc 서명으로 진행해도 동작은 함. 사용자에게 "매 빌드마다 권한 다이얼로그가 뜰 수 있으니 README의 '자체 서명 인증서' 섹션 참고" 한 줄 안내.
-
빌드 + 실행:
./build-app.sh open build/HappyVirus.app
-
사용자에게 알려야 할 것:
- 첫 클릭 시 macOS 가 자동화 권한 다이얼로그를 띄움 → 반드시 허용 눌러야 브라우저 읽기 가능
- 첫 실행 시 인증 모드 다이얼로그가 뜸 → Claude Pro/Max 사용 중이면 첫 번째 옵션 (CLI) 선택, 아니면 API 키 입력
- 캐릭터는 우하단에 떠 있음, 메뉴바에
face.smiling아이콘으로도 접근
-
자동 커밋·푸시·코드 수정 금지 — 사용자가 명시적으로 요청하지 않는 한 working tree 변경 안 함.
코드 구조, Swift 6 동시성 결정, 페르소나 시스템, 빌드 파이프라인 디테일은 CLAUDE.md 참고.
새 페르소나 추가는 Personas/{id}.md 만 추가하면 끝 — 코드 수정 없이 메뉴에 자동으로 등장합니다.
MIT (자유 사용·수정·배포). 캐릭터 일러스트는 별도 저작권 — 본인 캐릭터로 교체해서 쓰는 것을 권장.