개인정보처리방침
시행일: 2026년 11월 7일
요약: Ovis 앱은 계정이 없어도 되고(로그인은 선택), 광고, 분석 도구, 추적이 없으며, 사용자가 추가한 컴퓨터, Ovis 릴레이로 페어링한 PC를 위한 저희 릴레이 서비스, 알림을 켜면 저희 푸시 중계 서버, 그리고 로그인했을 때만 저희 계정 서비스(account.ovis.sh)에만 연결됩니다(모두 아래에 설명). 릴레이로 페어링한 PC에는 저희 릴레이(relay.ovis.sh, 또는 지역 엔드포인트 relay-ap.ovis.sh)를 거쳐 종단 간 암호화된 채로 연결되며, 릴레이는 언제 얼마나 오가는지는 볼 수 있어도 내용은 볼 수 없습니다(같은 Wi-Fi나 Tailscale에서는 iPhone·Android 앱이 저희 서버를 거치지 않고 그 PC에 바로 연결할 수 있습니다). 그 PC를 여는 앱은 app.ovis.sh(또는 지역 사본 app-ap.ovis.sh)에서 제공되며, 이 서버는 그 PC의 릴레이 ID와 사용자가 연 페이지 주소를 봅니다. 이를 빼면 앱 자체는 알림을 켰을 때 PC의 암호화된 알림을 휴대폰으로 받기 위한 푸시 토큰과, 로그인했다면 계정에 적은 것 말고는 저희에게 아무것도 보내지 않습니다. PC에서 돌아가는 Ovis 서버는 익명 사용 집계를 저희에게 보내며, 여기에는 앱에서 고른 설정이 들어갑니다. 이 집계는 끌 수 있습니다.
운영자
Ovis는 devswha가 만들고, 소스를 GitHub에 공개합니다. 이 페이지의 "저희"는 devswha를 말합니다.
앱이 휴대폰에 저장하는 것
- 다시 열 수 있도록, 사용자가 추가한 PC 주소
- PC와 연결(페어링)할 때 PC가 휴대폰에 주는 로그인 쿠키. 그 PC에 로그인된 상태를 유지하는 데 씁니다.
- Ovis 릴레이로 페어링한 PC의 경우:
app.ovis.sh위의 그 PC 주소, PC 이름, 그리고 그 PC 하나만을 위해 휴대폰에서 만든 키 쌍. 개인 키는 앱 밖으로 꺼낼 수 없고, PC는 휴대폰을 알아보기 위한 공개 키만 보관합니다. 앱은 그 PC가 알려 준 직접 연결 주소(집 네트워크와 Tailscale 주소, 아래 "직접 연결" 참고)도 함께 저장합니다.
이 모두는 휴대폰에만 남고 저희에게 보내지지 않습니다. 다만 릴레이로 페어링한 PC를 열 때는 그 주소를 app.ovis.sh에 요청하고 그 릴레이 ID를 relay.ovis.sh 또는 relay-ap.ovis.sh에 알립니다(아래 "Ovis 릴레이" 참고). 연결 화면의 Forget을 누르면 목록에서 PC가 지워지고, 앱을 삭제하면 앱이 저장한 모든 것이 지워집니다.
카메라
카메라는 Scan QR code를 눌렀을 때만, PC가 보여 주는 연결용 QR 코드를 읽는 데 씁니다. 찍힌 화면은 저장하거나 어디로도 보내지 않으며, 코드 안의 주소만 씁니다.
네트워크로 오가는 것
앱은 사용자가 추가하거나 QR로 읽은 PC 주소와 릴레이로 페어링한 PC가 알려 준 직접 연결 주소(아래 "직접 연결" 참고)에만 연결되고, Ovis 릴레이로 페어링한 PC를 위해서는 저희 릴레이 서비스에(아래 "Ovis 릴레이" 참고), 로그인하면 저희 계정 서비스에(아래 "계정" 참고), 알림을 켜면 저희 푸시 중계 서버에도 연결됩니다(아래 "알림" 참고). 에이전트 대화, 터미널 출력, 파일처럼 앱에서 보고 입력하는 내용은 사용자가 정한 경로(예: Tailscale이나 Wi-Fi)로, 또는 PC를 Ovis 릴레이로 페어링했다면 릴레이를 거쳐(아래 설명) 휴대폰과 사용자의 PC 사이에서만 오갑니다. 직접 연결은 저희 서버를 거치지 않고, 릴레이와 푸시 중계 서버는 휴대폰과 PC가 서로를 위해 암호화한 것만 넘겨주므로 그 내용을 읽을 수 없습니다(릴레이로 페어링한 PC의 경우 이는 저희가 제공하는 앱 코드를 신뢰하는 것을 전제로 합니다. 아래 "Ovis 릴레이" 참고).
이 내용은 휴대폰 밖으로 나가므로, Google Play의 앱 정보에는 수집하는 데이터로 표시됩니다: 메시지, 입력한 내용, 첨부한 파일·사진·동영상·오디오, 받아쓰기한 음성, PC의 로그인 쿠키, 연결 진단 정보. 앱 기능에만 쓰이고 누구와도 공유되지 않으며, 사용자의 PC로만 갑니다(받아쓰기한 음성은 PC에서 설정한 음성 인식 서비스로 이어집니다).
앱은 사용자가 앱에서 고른 설정(테마, 글자 크기, 언어, 알림 옵션 등. 입력한 내용은 절대 아님)을 PC에 알려 줍니다. Ovis 서버는 마지막으로 연 브라우저나 휴대폰의 설정을 아래에 설명한 익명 사용 집계에 넣으므로, Google Play의 앱 정보에는 앱 설정, 무작위 ID, 국가도 분석 목적으로 수집하는 데이터로 표시됩니다. 이 집계는 기본으로 켜져 있으며, 앱이나 PC의 설정 → 정보 → 익명 사용 집계에서 끄면 보내지 않습니다.
연결 화면의 데모는 모두 휴대폰 안에서만 돌아갑니다.
Ovis 릴레이
Ovis 릴레이를 쓰면 Tailscale 없이도 어디서나 휴대폰으로 PC에 연결할 수 있습니다. PC의 설정 → 폰 및 기기에서 켜기 전에는 꺼져 있고, 켜면 휴대폰은 거기 표시되는 QR 코드를 읽어 페어링합니다. 여기에는 Cloudflare에서 돌아가는 저희 서비스 두 개가 쓰입니다. 다만 지역 릴레이 엔드포인트 relay-ap.ovis.sh는 호스팅 업체에서 빌린 서버에서 돌아갑니다.
relay.ovis.sh와 지역 엔드포인트relay-ap.ovis.sh(PC가 이쪽이 훨씬 빠르다고 재면 함께 연결하고 새 페어링 코드에 넣습니다)는 휴대폰의 연결과 PC의 연결을 이어 줍니다. 둘 사이의 모든 것은 종단 간 암호화되어 있어 릴레이는 그 내용을 읽거나 바꾸거나 덧붙일 수 없습니다. 릴레이는 연결마다 PC의 릴레이 ID(PC가 연결할 때는 공개 키도), 연결하는 쪽이 휴대폰인지 PC인지, 연결해 온 주소, 그리고 데이터가 언제 얼마나 오가는지를 봅니다. 그래서 어떤 휴대폰이 언제 어느 PC를 쓰는지, 양쪽으로 얼마나 오가는지는 알 수 있지만 무슨 내용인지는 알 수 없습니다. 로그를 남기지 않고 아무것도 저장하지 않으며, 주소는 한 주소에서의 연결 횟수를 제한하는 데만 씁니다.app.ovis.sh(지역 릴레이를 쓰는 PC라면relay-ap.ovis.sh와 같은 임대 서버에서 같은 파일을 제공하고 같은 요청을 보는 사본app-ap.ovis.sh도 해당되며, 사본이 동작할 때 휴대폰은 그곳에서 페어링합니다)는 릴레이로 페어링한 PC를 여는 앱을, Ovis 릴리스마다 빌드한 정적 파일로 제공합니다. 이 서버는 그 파일에 대한 요청, 즉 휴대폰의 주소와 페이지 주소에 들어 있는 PC의 릴레이 ID를 봅니다. 연 파일의 경로나 보고 있는 워크스페이스처럼 페이지가 보여 주는 내용은 브라우저가 보내지 않는 주소 부분에만 남습니다. QR 코드에 담긴 페어링 정보는 휴대폰에만 남으므로 받지 않고, 주고받는 데이터는 릴레이를 거치므로 받지 않습니다. 이 서버가 제공하는 코드가 곧 앱입니다. 그 PC를 위한 휴대폰의 키를 갖고 PC가 보내는 내용을 보여 주므로, 종단 간 암호화는 내용을 릴레이로부터 지켜 주지만 그 코드로부터 지켜 주지는 않습니다. 이 코드는 공개되어 있고, Ovis 릴리스 태그마다 빌드되어 체크섬과 함께 공개되므로 누구나app.ovis.sh가 제공하는 것과 비교할 수 있으며, 내용은 사용자의 PC로만 보냅니다.
이 연결은 Cloudflare(relay-ap.ovis.sh는 그 호스팅 업체)가 저희 대신 처리하므로, 서비스 앞단의 여느 네트워크처럼 이 서비스들이 보는 정보를 기록할 수 있습니다. 페어링한 PC는 휴대폰의 공개 키를 기기 목록에 보관하며, 거기서 지울 수 있습니다. 릴레이의 코드는 공개되어 있고, 신뢰 모델 문서에 각 부분이 무엇을 볼 수 있는지 설명되어 있습니다.
직접 연결
Ovis 릴레이가 켜져 있는 동안 PC는 iPhone·Android 앱의 연결을 직접 받기도 합니다. 그래서 같은 Wi-Fi에 있거나 Tailscale을 켠 휴대폰은 저희 릴레이 없이 PC에 연결할 수 있습니다. 페어링은 여전히 릴레이를 거치고, 릴레이가 먼저 연결되면 앱이 릴레이를 쓸 수도 있습니다(아래 참고). 직접 연결은 릴레이를 켜면 기본으로 켜지며, PC의 설정 → 기기와 PC → 내 기기에 있는 같은 Wi-Fi 직접 연결 스위치로 끌 수 있습니다.
- PC가 받는 곳. PC의 사설 네트워크 주소(
192.168.x.x등. 기본 경로가 쓰는 주소를 먼저, 그다음 다른 주소이며, 기본 경로가 쓰지 않는 컨테이너·가상 머신·VPN 어댑터는 제외)와, Tailscale이 켜져 있으면 PC의 Tailscale 주소의 7319번 포트(이미 쓰이면 비어 있는 다른 포트). 공인 주소에서는 받지 않습니다. - 누가 연결할 수 있는지. 그 PC와 릴레이로 이미 페어링한 기기만, 릴레이와 같은 키와 같은 종단 간 암호화로 로그인할 수 있습니다. 여기서는 새로 페어링되지 않고, 웹 페이지의 연결은 거부됩니다. Tailscale 주소는 사용자의 tailnet에 있는 기기의 연결만 받습니다.
- 다른 사람이 보는 것. 저희 서버는 관여하지 않습니다. 같은 네트워크에 있는 사람은 휴대폰이 PC와 통신한다는 것과 오가는 양과 시각은 볼 수 있지만 내용은 볼 수 없습니다.
- 앱이 경로를 고르는 방법. PC는 암호화된 연결 안에서 직접 연결 주소를 앱에 알려 주고, 앱은 이를 페어링 정보와 함께 저장합니다. 연결할 때마다 이 주소부터 시도하고, 잠깐 안에 답이 없으면 릴레이도 함께 열어 먼저 연결되는 쪽을 씁니다. iPhone에서는 처음 한 번 로컬 네트워크 접근 권한을 묻고, 거절하면 앱은 릴레이로만 연결합니다. 브라우저는 항상 릴레이를 씁니다.
다른 PC에 릴레이로 추가한 PC(설정 → 기기와 PC)도 같은 방식으로 연결됩니다.
계정
로그인은 선택입니다. 위의 모든 페어링 방법은 로그인 없이 그대로 됩니다. GitHub나 Google(앱이 제공하는 경우 Apple)로 로그인하면, 앱은 PC를 찾고 한 번의 승인으로 새 기기를 모든 PC에 넣기 위해 Cloudflare에서 돌아가는 저희 계정 서비스 account.ovis.sh를 씁니다. 누가 PC에 들어갈지는 계정 서비스가 정하지 않습니다. 각 PC가 자기 기기 목록을 그대로 가지며, 계정 서비스는 세션 내용을 읽을 수도, PC에 기기를 넣을 수도 없습니다. 저장하는 것은 다음뿐입니다.
- 계정: 무작위 계정 ID와 로그인 방법. 추가한 제공자(GitHub, Google 등)마다 그 제공자의 사용자 ID를 되돌릴 수 없게 바꾼 값(해시)과 추가한 때. 이메일, 이름, 사용자 이름, 프로필 사진, GitHub 저장소, 제공자의 토큰은 저장하지 않습니다. 이메일 주소가 같다고 두 계정을 합치지도 않습니다.
- 로그인 정보: 로그인한 기기마다 가진 토큰의 해시와 만료 시각(로그인은 마지막으로 쓴 때부터 60일 유지), 그리고 계정에 새 소식이 있다고 알려 주기 위해 기기가 등록한 푸시 구독(알림에는 그 이상 아무것도 담기지 않습니다).
- PC 목록: 추가한 PC마다 이름, 릴레이 ID와 공개 키, 쓰는 릴레이, 추가한 때와 마지막으로 확인한 때.
- PC를 기다리는 기록: 기기를 넣거나 빼는 서명된 기록(그 기기의 공개 키와 이름, 서명한 기기). PC가 가져가면 지웁니다. 30일이 지나면 더는 건네지 않고, 그 뒤 하루 안에 지웁니다.
- 가입 요청: 새 기기가 어느 PC에서 기다리는지, 그 기기의 이름과 공개 키. 다른 기기에 알림을 보내고 승인할 기기를 확인하는 데 씁니다.
- 로그인 페이지 요청: PC가
account.ovis.sh/link에서 코드로 로그인할 때 그 PC의 이름. - 요청한 쪽 정보: 가입 요청과 로그인 페이지 요청마다, 기기가 스스로 밝힌 운영체제(iOS, Linux 등)와 Cloudflare가 본 요청의 국가와 도시. 승인 카드와 로그인 페이지에 대략 어디서 온 요청인지 보여 주는 데 씁니다. IP 주소는 저장하지 않습니다.
가입 요청과 로그인 페이지 요청은 요청한 쪽 정보와 함께 10분 동안만 건네고 하루쯤 안에 지웁니다. 계정 서비스는 주소가 담긴 기록을 남기지 않으며, 주소는 한 주소에서 시도하는 횟수를 제한하는 데만 씁니다. 입력한 내용, PC가 보여 주는 내용, 파일, 비교하는 여섯 자리 숫자, 기기의 비밀 키는 받지 않습니다. 그만 쓰려면 앱에서 로그아웃을 누르고, 로그인 방법은 설정 → 기기와 PC → 계정에서 제거할 수 있으며, 계정과 위의 정보를 모두 지우려면 저희에게 연락해 주세요(아래 "연락처" 참고).
알림
앱에서 알림을 켜면 휴대폰은 Apple(iOS) 또는 Google Firebase Cloud Messaging(Android)에서 푸시 토큰을 받고, 앱은 이 토큰을 PC의 알림용 공개 키와 함께 저희 푸시 중계 서버(push.ovis.sh)에 등록합니다. 중계 서버는 PC의 알림을 Apple이나 Google로 넘기기 위해 이 토큰을 보관하며, Apple이나 Google이 토큰이 더 이상 유효하지 않다고 알리거나, 60일 동안 알림에 쓰이지 않으면 지웁니다(알림을 끄면 알림이 멈추고, 중계 서버는 그 60일 뒤에 토큰을 지웁니다). 알림은 PC에서 휴대폰만 가진 키로 암호화되므로, 중계 서버도 Apple도 Google도 내용을 읽지 못하고 그대로 전달만 합니다. 중계 서버는 기록을 남기지 않고 IP 주소도 저장하지 않습니다. 코드는 공개되어 있습니다. 이 토큰은 앱 기능을 위해 수집하는 기기 ID이며, 누구와도 공유하지 않습니다.
PC에서 돌아가는 프로그램
앱이 보여 주는 화면은 Ovis 서버입니다. 사용자의 컴퓨터에서 사용자가 관리하는 별도의 오픈소스 프로그램입니다.
- Ovis 서버는 설치될 때, 업데이트될 때, 그리고 열린 날마다 하루 한 번 익명 사용 집계를 관리자에게 보냅니다. 여기에는 PC에서 만든 무작위 ID, 버전, 운영체제와 CPU 종류, 설치 방식, 앱 설정 선택값, 실행 중인 코딩 에이전트의 종류(예:
claude,codex)가 들어갑니다. 받는 쪽은 메시지가 온 나라(두 글자)만 남기고 IP 주소는 저장하지 않습니다. 칸 이름, 경로, 터미널 내용, 코드, 메시지는 절대 들어가지 않습니다. PC의 설정 → 정보 → 익명 사용 집계에서 보내는 내용을 그대로 보고 끌 수 있습니다. 자세히(영어) - 설정 → 기기와 PC → 기기 연결의 Tailscale에서 찾은 PC는 PC에서
tailscale status를 읽고, 사용자 본인의 Tailscale 로그인에 속한 다른 PC에만 Tailscale로 Ovis가 실행 중인지 묻습니다. 찾는 과정에서 저희에게 가는 것은 없습니다. 그다음 PC 추가는 입력한 코드처럼 Ovis 릴레이를 통해 고른 PC와 페어링합니다. - 음성 입력이나 구독 사용량 표시처럼 사용자가 켠 기능은, 사용자가 설정한 서비스에 그 서비스의 약관에 따라 연결합니다.
코딩 에이전트
Claude Code나 Codex처럼 PC에서 실행하는 에이전트는 각자의 약관에 따라 각자의 모델 제공자와 통신합니다. Ovis는 그 연결에 관여하지 않습니다.
앱 스토어
Apple과 Google은 스토어에서 앱을 내려받거나 쓸 때 다운로드 수나, 사용자가 허용한 경우 오류 보고 같은 정보를 모을 수 있습니다. 이는 각 회사의 개인정보처리방침을 따릅니다.
아동
Ovis는 소프트웨어 개발자를 위한 도구이며, 만 13세 미만 아동을 대상으로 하지 않습니다.
변경
이 방침이 바뀌면 새 날짜와 함께 이 페이지에 올립니다.
문의
개인정보 관련 문의는 GitHub에 이슈를 남겨 주세요.
