OpenLens
OpenCode의 iOS 컴패니언 앱 — 휴대폰에서 AI 코딩 어시스턴트와 채팅하세요.
<p align="leading">
<a href="https://apps.apple.com/pl/app/openlens-opencode-client/id6759910797">
<img src="https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg" alt="App Store에서 다운로드" height="50" />
</a>
</p>
OpenLens는 Mac에서 실행되는 OpenCode 서버에 연결하여, 키보드 없이도 iPhone 및 iPad의 네이티브 인터페이스를 제공하며 채팅하고, 변경 사항을 검토하고, 작업 공간 컨텍스트(workspace context)를 탐색하고, 에이전트 질문에 답하며, 세션을 관리할 수 있게 합니다.
<p align="center">
<img src="https://raw.githubusercontent.com/martynpekala/OpenLens/HEAD/PromoScreenshots/0x0ss-2.png" width="220" alt="OpenLens 프로모션 스크린샷 1" />
<img src="https://raw.githubusercontent.com/martynpekala/OpenLens/HEAD/PromoScreenshots/0x0ss-3.png" width="220" alt="OpenLens 프로모션 스크린샷 2" />
<img src="https://raw.githubusercontent.com/martynpekala/OpenLens/HEAD/PromoScreenshots/0x0ss-4.png" width="220" alt="OpenLens 프로모션 스크린샷 3" />
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/martynpekala/OpenLens/HEAD/PromoScreenshots/0x0ss-5.png" width="220" alt="OpenLens 프로모션 스크린샷 4" />
<img src="https://raw.githubusercontent.com/martynpekala/OpenLens/HEAD/PromoScreenshots/0x0ss-6.png" width="220" alt="OpenLens 프로모션 스크린샷 5" />
<img src="https://raw.githubusercontent.com/martynpekala/OpenLens/HEAD/PromoScreenshots/0x0ss-7.png" width="220" alt="OpenLens 프로모션 스크린샷 6" />
</p>
설치 (Install)
- App Store: 위의 배지(badge)를 사용하여 App Store에서 iPhone 또는 iPad에 OpenLens를 설치하세요.
- 소스 코드로부터 (From source): 리포지토리를 클론하고,
xcodegen generate를 실행한 다음, Xcode 26 이상에서 생성된 OpenLens.xcodeproj를 여세요.
릴리스 (Releases)
- iOS 앱 출시: 주요 최종 사용자 배포 채널은 App Store입니다.
- 소스 빌드: 기여자 및 자체 호스팅 사용자는 Git의
main 브랜치 또는 태그가 지정된 리비전에서 빌드할 수 있습니다.
- 호환성: 현재 저장소는 iOS/iPadOS 26 이상과 macOS 환경에서의 최신 OpenCode 서버 동작을 목표로 합니다.
기능 (Features)
- 네이티브 세션 채팅 — 풍부한 Markdown 렌더링, 코드 블록, 사고 지표(thinking indicators), 에이전트 활동 카드, 권한 프롬프트 및 질문 흐름 지원
- 유연한 연결 흐름 — QR 코드 스캔, Bonjour 자동 검색, 수동 URL 입력, 저장된 서버, 자동 재연결, 그리고
openlens:// 딥 링크 지원
- 세션 관리 — 기존 OpenCode 세션을 탐색하고, 생성하고, 삭제하고, 전환하며, 계속 진행할 수 있습니다.
- 검토(Review) 탭 — 세션 전체의 변경 사항 또는 단일 에이전트 업데이트를 검사하고, diff를 열어보고, 전체 세션을 폐기하지 않고도 한 번의 업데이트를 되돌릴 수 있습니다.
- 작업 공간(Workspace) 탭 — 파일을 탐색하고, 작업 트리(worktrees), 슬래시 명령어, 변경된 파일을 확인한 후, 활성 세션을 통해 브랜치 전환, 푸시, 풀 리퀘스트를 요청할 수 있습니다.
- 받은 편지함 및 통찰력 (Inbox and insights) — 보류 중인 질문에 답변하고, 권한을 승인하며, 세션별 로컬 비용, 토큰 사용량, 모델 분해 정보를 검사합니다.
- 모델 제어 — 앱에서 AI 제공업체/모델 및 사용 가능한 추론 변형(reasoning variants) 간 전환이 가능합니다.
- 라이브 액티비티 (Live Activities) — 잠금 화면과 Dynamic Island에서 에이전트 진행 상황을 추적할 수 있습니다.
- 데모 모드 — 서버 없이 앱을 사용해보고 작동 방식을 확인할 수 있습니다.
- 설정 마법사 및 온보딩 — 안내가 포함된 첫 실행 경험을 제공합니다.
빠른 시작 (Quick Start)
1. Mac에 OpenCode 설치하기
curl -fsSL https://opencode.ai/install | bash
2. 서버 시작하기
opencode serve --port 4096 --hostname 0.0.0.0
Bonjour를 통해 OpenLens가 서버를 찾도록 하려면 --mdns를 추가하십시오. 비밀번호가 필요하도록 설정하려면 시작 전에 OPENCODE_SERVER_PASSWORD를 설정하세요.
3. iPhone에서 OpenLens 실행 및 연결하기
- QR 스캔:
opencode pair를 실행한 후, "QR 코드 스캔"을 탭하고 터미널을 향해 비춥니다.
- 자동 검색: "주변 서버 스캔하기를 탭하세요(Bonjour; 검색을 원할 경우 OpenCode를
--mdns로 시작하세요)"를 탭합니다.
- 수동: Mac의 IP 주소와 포트 번호를 직접 입력합니다 (예:
192.168.1.50:4096).
이것으로 끝입니다. 휴대폰에서 AI 코딩 어시스턴트와 채팅할 수 있습니다.
OpenCode v2와 페어링하기
컴퓨터에서 opencode pair를 실행하거나, 인터넷을 통해 연결하려면 opencode pair --remote를 사용합니다. OpenCode의 HTTPS 터널을 통해 연결됩니다. 생성된 페어링 링크를 OpenLens의 서버 주소 필드에 붙여넣고 **연결(Connect)**을 탭하거나 QR 코드를 스캔하세요. OpenLens는 code와 urls가 포함된 현재 JSON QR 페이로드를, 단일 사용 http(s)://<host>/auth/connect/<code> 링크, 그리고 구형 http(s)://<host>/connect#<credentials> 링크를 수락합니다. 여러 주소가 포함된 QR의 경우, 모든 주소를 함께 시도하고 성공적으로 페어링되는 주소를 저장합니다.
OpenLens는 페어링 자격 증명을 해석하여 이후 연결을 위해 키체인(Keychain)에 저장합니다. 비밀번호를 입력할 필요가 없습니다. 단일 사용 코드는 5분 후에 만료되므로, 링크가 만료되었거나 이미 브라우저에서 열린 경우 opencode pair를 다시 실행하세요. 페어링 성공 후 연결이 실패하면, **다시 시도(Try Again)**는 저장된 토큰을 사용합니다.
사용자의 iPhone은 링크에 있는 호스트에 도달할 수 있어야 합니다. 사설 LAN 주소의 경우 해당 네트워크(직접 또는 VPN을 통해)에 대한 접근 권한이 필요합니다.
--remote를 사용하는 경우, iPhone은 다른 Wi-Fi 네트워크나 셀룰러 데이터를 사용할 수 있습니다. 컴퓨터와 OpenCode 백그라운드 서비스, 그리고 터널은 계속 실행 상태로 유지해야 합니다.
요구 사항 (Requirements)
- iOS 앱: iOS/iPadOS 26 이상을 지원하는 iPhone 또는 iPad
- 서버: OpenCode가 설치된 macOS
- 네트워크: 사용자의 iPhone이 OpenCode 서버에 도달할 수 있어야 합니다. 예를 들어, 동일한 로컬 네트워크나 VPN을 통해서입니다.
프로젝트 레이아웃 (Project Layout)
OpenLens/ — 메인 iOS 앱
OpenLensActivityWidget/ — 라이브 액티비티 위젯 확장(Live Activity widget extension)
OpenLensTests/ — 단위 테스트(unit tests)
개발 (Development)
- 툴체인(Toolchain): Xcode 26 이상, iOS 26 시뮬레이터/런타임, macOS, 로컬에 설치된 OpenCode
- 프로젝트 생성:
brew install xcodegen으로 XcodeGen을 설치한 후, xcodegen generate를 실행합니다.
- 프로젝트 열기: 생성된
OpenLens.xcodeproj를 엽니다.
- 디바이스 서명(Device signing): 본인의 기기에서 실행하려면,
Config/Signing.local.xcconfig.example을 Config/Signing.local.xcconfig로 복사하고 팀(team), 번들 식별자(bundle identifiers), 앱 그룹(App Group) 값을 본인 값으로 교체합니다.
저장소 루트에서 메인 검증 명령어를 실행하세요:
Python 3/툴 요구 사항, 시뮬레이터 선택, 집중 테스트 실행(focused test runs), 시간 제한, 복구 로그 등은 CONTRIBUTING.md를 참조하세요.
기여 (Contributing)
설정 및 PR 기대치에 대해서는 CONTRIBUTING.md를, 취약점 보고(vulnerability reporting)에 대해서는 SECURITY.md를, 커뮤니티 가이드라인에 대해서는 CODE_OF_CONDUCT.md를 참조하세요.
지원 및 커뮤니티 (Support And Community)
- 버그 보고(Bug reports): 버그 보고 템플릿을 사용하여 GitHub 이슈를 열고 명확한 재현 경로(reproduction path)를 포함하세요.
- 기능 제안(Feature proposals): 요청이 구체적이고 실행 가능할 때 기능 요청 템플릿을 사용하여 GitHub 이슈를 여세요.
- 보안 문제(Security issues): GitHub Private Vulnerability Reporting을 사용하고 SECURITY.md를 따르세요.
- 질문 및 설정 도움: 이 저장소에 활성화된 경우 GitHub Discussions를 사용하세요. 그렇지 않다면, 저장소의 내용 중 변경해야 할 것이 있을 때만 문서화 중심의 이슈를 여세요.
OpenCode
이 프로젝트는 OpenCode 팀에서 제작한 것이 아니며, 어떠한 방식으로도 OpenCode와 제휴하지 않습니다.
딥 링크(Deep Links)
OpenLens는 자동 연결을 위해 openlens:// URL 스킴을 지원합니다:
openlens://connect?url=192.168.1.50:4096&user=opencode&pass=optional&sessionID=abc123
만약 sessionID가 존재하면, OpenLens가 먼저 연결한 후 해당 세션을 자동으로 엽니다.
서버 상세 정보 없이 OpenCode v2 지원을 홍보하려면 (예를 들어 앱 스토어 인앱 이벤트 딥 링크로), 다음을 사용하세요:
openlens://setup
연결이 없을 경우, OpenLens는 연결 설정을 보여줍니다. 연결되었거나 저장된 서버에 재연결하는 경우에는, 대신 서버에서 감지된 버전과 함께 OpenCode v2 지원 화면을 보여줍니다.
라이선스
본 프로젝트는 MIT License 하에 라이선스가 부여됩니다.