Skip to content

im-in-J/HappyVirus

Repository files navigation

긍정봇 (HappyVirus)

우울하거나 무거운 웹 콘텐츠를 친구가 톡 보내듯 긍정적으로 재해석해 주는 macOS 메뉴바 앱.

화면 우하단에 작은 캐릭터가 떠 있고, 누르면 현재 보고 있는 브라우저 탭의 글을 읽어 Claude 에 보내고, 짧고 따뜻한 재해석을 거대한 캐릭터 + 말풍선으로 띄웁니다. 캐릭터 4명 중 페르소나를 골라 사용할 수 있어요.


⚡ 한 줄 설치 (Claude Code 사용자)

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 | bash

수동 설치

git 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.app

첫 실행 시 설정

1. 자동화 권한

macOS 가 "HappyVirus 가 Safari 등을 제어하려 합니다" 다이얼로그를 띄움 → 확인 클릭. 이거 거부하면 브라우저 글을 못 읽습니다. 나중에 시스템 설정 → 개인정보 보호 및 보안 → 자동화 에서 허용 가능.

2. 인증 모드 선택

앱이 첫 실행 시 두 가지 옵션을 보여줍니다:

  • Claude Pro/Max 구독 (권장)claude CLI 자동 탐지, 추가 결제 불필요
  • API 키 직접 입력 — Anthropic Console 에서 발급한 sk-ant-… (Keychain 저장)

언제든 메뉴바 → ⌘1 (CLI) / ⌘2 (API 키) 로 전환 가능.


사용

  1. Safari·Chrome·Arc·Edge·Brave·Vivaldi 중 하나에서 우울하거나 무거운 글 띄우기
  2. 우하단 캐릭터 클릭 (또는 메뉴바 아이콘 → ⌘P)
  3. 잠시 후 화면 가운데 거대한 캐릭터가 등장해서 말풍선으로 재해석 표시
  4. 말풍선 외부 아무 곳이나 클릭 → 닫힘

단축키

단축키 동작
⌘P 현재 페이지 긍정 해석
⌘1 Claude 구독 (CLI) 모드로 전환
⌘2 API 키 입력 모드로 전환
⌘R 캐릭터 우하단으로 위치 리셋
⌘Q 종료

(선택) 빌드할 때마다 권한 다이얼로그 안 뜨게 하기

기본 빌드는 ad-hoc 서명이라 코드를 한 줄 고칠 때마다 macOS 가 자동화 권한을 다시 묻습니다. 자체 서명 인증서를 한 번만 만들어두면 영구 해결:

  1. 키체인 접근 실행 → 메뉴 → 인증서 지원 → 인증서 생성...
  2. 입력값:
    • 이름: HappyVirus
    • ID 유형: 자체 서명 루트
    • 인증서 유형: 코드 서명 ← 정확히 이거 선택
  3. 생성 후 인증서 더블클릭 → 신뢰 펼치기 → "이 인증서를 사용 시: 항상 신뢰"
  4. 검증:
    security find-identity -v -p codesigning | grep HappyVirus
    1 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 설치
매번 권한 다이얼로그 위 "자체 서명 인증서" 섹션 참고

🤖 For Claude Code (자동 설치 시 따라가는 절차)

You are Claude Code reading this README to install on the user's behalf. Follow these exact steps:

  1. Verify prerequisites:

    xcodebuild -version          # Xcode 설치 확인
    swift --version              # Swift 6+
    sw_vers -productVersion      # macOS 13+

    하나라도 실패하면 사용자에게 알리고 중단.

  2. 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의 '자체 서명 인증서' 섹션 참고" 한 줄 안내.
  3. 빌드 + 실행:

    ./build-app.sh
    open build/HappyVirus.app
  4. 사용자에게 알려야 할 것:

    • 첫 클릭 시 macOS 가 자동화 권한 다이얼로그를 띄움 → 반드시 허용 눌러야 브라우저 읽기 가능
    • 첫 실행 시 인증 모드 다이얼로그가 뜸 → Claude Pro/Max 사용 중이면 첫 번째 옵션 (CLI) 선택, 아니면 API 키 입력
    • 캐릭터는 우하단에 떠 있음, 메뉴바에 face.smiling 아이콘으로도 접근
  5. 자동 커밋·푸시·코드 수정 금지 — 사용자가 명시적으로 요청하지 않는 한 working tree 변경 안 함.


구조 / 개발 가이드

코드 구조, Swift 6 동시성 결정, 페르소나 시스템, 빌드 파이프라인 디테일은 CLAUDE.md 참고.

새 페르소나 추가는 Personas/{id}.md 만 추가하면 끝 — 코드 수정 없이 메뉴에 자동으로 등장합니다.


라이선스

MIT (자유 사용·수정·배포). 캐릭터 일러스트는 별도 저작권 — 본인 캐릭터로 교체해서 쓰는 것을 권장.

About

macOS 메뉴바 앱 — 우울한 웹 콘텐츠를 친구가 톡 보내듯 긍정적으로 재해석. Claude API 또는 Pro/Max 구독 사용.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors