참조

데이터와 개인정보

리뷰는 프로젝트 폴더에 저장됩니다. 설정은 ~/.ferret/에, 키와 계정은 OS의 사용자 데이터 폴더에 있습니다. 개발자에게 전달되는 것은 Sentry를 통한 충돌 보고서뿐이며, 이것도 끌 수 있습니다. 앱에서 직접 보내기로 선택한 피드백은 공개 GitHub Issue가 됩니다.

#.ferret/reviews/의 내용

<project>/.ferret/reviews/20261003-104500/
├── feedback.md      # what the agent reads
├── 01.png, 02.png…  # one or more images per finding
├── session.json     # review state and edit history
├── events.jsonl     # action log (built-in browser only)
├── recording.webm   # the video
└── work/            # intermediate audio and frames

이름이 바뀌기 전에 만든 리뷰는 .ade-movie/reviews/에 있습니다. 이 리뷰들도 계속 목록에 나오고 열 수 있으며, 새 리뷰는 .ferret/reviews/에 저장됩니다.

녹화를 시작하면 .ferret/가 .git/info/exclude에 추가됩니다. worktree와 submodule도 처리됩니다. .gitignore는 수정하지 않습니다. 중간에 끊긴 리뷰는 기록이 남아 있으면 기록에서 복구할 수 있습니다. 이때 앱은 마지막 몇 초가 빠졌을 수 있다고 경고합니다.

#보관 기간

녹화 보관(기본 7일, 30일 또는 영구): 시작할 때 그보다 오래된 완료된 리뷰에서 recording.webm과 work/가 삭제됩니다. feedback.md와 지적 사항 이미지는 유지됩니다. 완료되지 않은 리뷰는 삭제하지 않습니다. 정리는 앱을 시작할 때 마지막으로 연 프로젝트를 대상으로 실행됩니다.

#컴퓨터 밖으로 나가는 것

언제보내는 곳데이터
음성 인식: 기기 내(무료)없음—
음성 인식: OpenAI / 호환OpenAI 또는 설정한 Base URL오디오 조각
모델 다운로드Hugging Face파일 요청
정리사용자의 Claude Code / Codex CLI, 또는 organizer에 설정한 LLM 엔드포인트텍스트와 동작 로그만(이미지, 오디오, 동영상 없음)
완료 검사(판정 모델, 기본값은 꺼짐)사용자의 에이전트가 로컬 중계를 거쳐 Ollama / Cloudflare / AI Gateway / TypeSafe / 설정한 URL로에이전트가 보내는 것: 지적 사항 텍스트, "완료 조건", BEFORE/AFTER 스크린샷(이미지 모델만)
에이전트에게 보내기터미널의 에이전트feedback.md를 가리키는 지시 하나
GitHub로 보내기gh를 통해 GitHub본문 텍스트만(이미지 없음)
푸터의 사용량 표시(Claude Code와 Codex만)Anthropic, ChatGPT사용자 본인의 로그인으로 보내는 사용량 요청
GitHub 스타 요청사용자의 gh를 통해 GitHub저장소에 스타를 줬는지 확인하고, GitHub에서 스타를 눌렀을 때만 스타를 줌
업데이트 확인(수동)다운로드 서버(Cloudflare R2)latest.json 요청
앱에서 피드백 보내기(직접 보낼 때만, 출시 예정)개발자의 피드백 중계 서버(Cloudflare Worker). JapanMarketing-Dev/ferret에 공개 Issue를 엶작성한 텍스트, 버그인지 아이디어인지, 앱 / OS 버전과 CPU, 첨부한 스크린샷 최대 3장. 키, 토큰, 이메일 주소, 홈 폴더 경로는 가려집니다. 중계 서버는 IP 주소를 저장하지 않습니다(앱에서 보내는 피드백 참고)
충돌 또는 오류(충돌 보고서 보내기가 켜져 있을 때)Sentry스택 트레이스와 OS / CPU / 앱 버전(충돌 보고서 참고)
  • 앱에는 분석 도구, 성능 추적, 세션 리플레이가 없습니다. 사용자가 요청하지 않아도 보내는 데이터는 충돌 보고뿐입니다. 즉 오류, 실행당 세션 하나, 느린 시작과 멈춤 경고이며, 모두 아래에 설명되어 있고 모두 충돌 보고서 보내기로 제어됩니다.
  • URL 안의 비밀처럼 보이는 값(토큰, 키)은 feedback.md에 기록되기 전에 가려집니다.
  • 페이지에서 가져온 텍스트는 feedback.md에서 데이터로 표시되므로, 에이전트는 그 안에 있는 지시를 따르지 않도록 안내받습니다.
  • 이 웹사이트(앱이 아님)는 Cloudflare Web Analytics로 페이지 조회수를 셉니다. 쿠키를 쓰지 않고, 사이트 간 추적도 개인 데이터도 없습니다.

#앱에서 보내는 피드백

출시 예정

앱 안의 피드백 양식과 그 중계 서버는 아직 공개되지 않았습니다. 이 섹션은 앞으로 어떻게 동작할지를 설명합니다.

GitHub 계정이 없어도 Ferret 안에서 버그 보고나 아이디어를 보낼 수 있게 됩니다. 직접 보낼 때만 전송되며, JapanMarketing-Dev/ferret (새 탭에서 열림)에 from-app 라벨이 붙은 공개 Issue가 됩니다. 공개적으로 올리지 않을 내용은 넣지 마세요.

  • 앱은 사용자의 컴퓨터에서 작은 중계 서버(개발자가 운영하는 Cloudflare Worker)로 보내고, 중계 서버가 자체 GitHub 토큰으로 Issue를 엽니다. 사용자가 작성한 내용을 받는 개발자의 서버는 이 중계 서버뿐입니다.
  • 보내는 것: 제목과 본문, 버그인지 아이디어인지, 앱 버전, 첨부한 PNG 또는 JPEG 스크린샷 최대 3장. OS 이름과 버전, CPU 아키텍처, 무작위 설치 ID는 포함된 상태로 두었을 때만 보냅니다. 보내지 않는 것: 이름, 이메일, GitHub 계정, 프로젝트 파일, 녹화, 지적 사항.
  • Issue를 만들기 전에 중계 서버는 키나 토큰처럼 보이는 텍스트, 이메일 주소, 홈 폴더 경로 안의 사용자 이름을 가리고, @mentions가 누군가에게 알림을 보내지 않도록 막습니다. 스크린샷에서 위치 정보 등의 메타데이터도 제거합니다. 그래도 텍스트는 직접 확인하세요. 가리기로 모든 것을 잡아낼 수는 없습니다.
  • 중계 서버는 IP 주소를 저장하지 않습니다. 한 발신자가 올릴 수 있는 횟수(시간당 5회, 하루 20회)를 제한하기 위해 IP 주소(보낸 경우 설치 ID도)의 키 기반 해시를 최대 24시간 동안 세고, 그 뒤 삭제합니다. 둘 다 Issue에는 나타나지 않습니다.
  • 스크린샷은 중계 서버가 추측할 수 없는 이름으로 Cloudflare R2에 보관하고 Issue에 표시합니다. Issue나 그 스크린샷을 지우고 싶으면 해당 Issue에 코멘트를 달거나 새 Issue를 여세요.
  • 중계 서버의 코드는 저장소의 workers/feedback-relay에 있습니다.

#충돌 보고서

앱이 충돌하거나 처리되지 않은 오류가 발생하면, Ferret은 버그를 고칠 수 있도록 Sentry (새 탭에서 열림)에 충돌 보고서를 보냅니다. 기본값은 켜짐입니다. 설정 → 개인정보 보호 → 충돌 보고서 보내기에서 끄거나, 처음 실행할 때 표시되는 알림의 끄기로 끌 수 있습니다. 끄면 즉시 적용됩니다. 다시 켜면 다음 실행부터 적용됩니다. 개발 빌드(pnpm dev)도 development 태그를 붙여 보내므로, 개발자가 작업 중에 겪은 충돌을 고칠 수 있습니다. E2E 실행과 단위 테스트에서는 절대 보내지 않습니다.

보내는 것보내지 않는 것
  • 오류의 종류와 메시지(홈 폴더 경로는 ~로 표시)
  • 스택 트레이스(Ferret 코드의 어디에서 발생했는지)
  • 네이티브 충돌의 경우: 어느 프로세스가 충돌했는지, 종료된 이유(예: crashed 또는 oom), 앱 버전만
  • OS 이름과 버전, CPU 아키텍처, Electron / Chrome / Node 버전, 앱 버전, 화면 크기, 메모리 크기
  • 오류 직전의 앱 수명 주기 이벤트(예: app.ready)와 시작 실패
  • 앱의 어느 부분이 실패했는지: 렌더링하지 못한 화면 영역(과 그 React 컴포넌트 이름), IPC 호출, 시작하지 못한 터미널, 충돌하거나 응답이 없는 프로세스, 로드에 실패한 앱 페이지
  • 앱의 어디에 있었는지: 에디터 모드인지 피드백 모드인지, 열린 탭(브라우저, 지적 사항, 설정, 또는 그냥 file), 녹화 중이었는지
  • 실행당 세션 하나(시작, 정상 종료, 충돌). 버전별 무충돌 비율을 측정하기 위해서입니다
  • 무작위 설치 ID(처음 실행할 때 만들어져 앱의 설정 폴더에 보관됨). 영향을 받은 설치 수를 세기 위해서입니다. 이름, 이메일, 기기와 연결되지 않습니다
  • JavaScript 충돌의 경우에만: Ferret 자체 로그의 마지막 50줄(예: [startup], [recording]). 짧게 줄이고 경로, URL, 이메일, 키를 제거합니다
  • 프로젝트 폴더 경로와 파일 이름(<project>로 바뀜)
  • 내장 브라우저에서 연 URL과 그 밖의 모든 웹 주소(<url>로 바뀜)
  • 터미널 출력, 음성 인식 텍스트, 지적 사항, 페이지 텍스트, 스크린샷
  • 이메일 주소와 API 키 또는 토큰(바뀜)
  • 이름, 기기 이름, IP 주소(저장하지 않음), 쿠키, 지역 변수
  • 네이티브 충돌의 메모리 덤프(minidump). 메모리에 있던 무엇이든 담길 수 있으므로 사용자의 컴퓨터에 남습니다
  • 클릭, 네트워크 요청, Ferret 자체 로그가 아닌 모든 로그 줄

설치된 앱은 실행당 최대 10건의 보고서를 보내며, JavaScript 오류는 절반만 보냅니다(네이티브 충돌은 항상 보냄). 개발 빌드는 실행당 최대 50건까지 모든 오류를 보냅니다. 같은 오류는 실행당 한 번만 보냅니다. 느린 시작(5초 초과)과 앱의 긴 멈춤(1초 초과)은 경고로 보내며, 최대 10분에 한 번입니다. 성능 추적이나 세션 리플레이는 사용하지 않습니다. 앱은 Sentry의 무료 플랜을 사용합니다. 한도가 차면 추가 보고서는 버려지고 누구에게도 요금이 청구되지 않습니다.

Ferret을 직접 빌드하나요? FERRET_SENTRY_DSN(예전 이름인 MOVIE_ADE_SENTRY_DSN도 동작)을 자신의 Sentry DSN으로 설정하거나, 아무것도 보내지 않으려면 빈 문자열로 설정하세요. 코드는 src/main/telemetry.ts와 src/shared/telemetry.ts에 있습니다.

GitHub에서 이 페이지 번역 돕기 (새 탭에서 열림)