リファレンス

データとプライバシー

レビューはプロジェクトのフォルダに、設定は ~/.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/ に入ります。

録画を始めると、.git/info/exclude に .ferret/ を書き足します。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 のスクリーンショット(画像を扱えるモデルのときだけ)
Agentへ送信ターミナルのエージェントfeedback.md を指す指示1つ
GitHub に送るgh 経由で GitHub本文だけ(画像は送らない)
フッターの使用量(Claude Code と Codex だけ)Anthropic、ChatGPT自分のログインで使用量を問い合わせる
GitHub の star のお願い自分の gh 経由で GitHubリポジトリに star 済みかを確かめ、GitHub で star を押したときだけ star する
更新を確認(手動)ダウンロードのサーバー(Cloudflare R2)latest.json の要求
アプリからフィードバックを送る(送ったときだけ。準備中)開発者のフィードバック中継(Cloudflare Worker)。ここが JapanMarketing-Dev/ferret に公開の issue を作る書いた文、不具合か案か、アプリ / OS のバージョンと CPU、添えたスクリーンショット3枚まで。キー、トークン、メールアドレス、ホームフォルダのパスは伏せます。中継は IP アドレスを保存しません(アプリからのフィードバックを参照)
クラッシュやエラー(クラッシュレポートを送る がオン)Sentryスタックトレースと OS / CPU / アプリのバージョン(クラッシュレポートを参照)
  • アプリにはアクセス解析も、パフォーマンスのトレースも、セッションリプレイもありません。頼まれずに送るのはクラッシュレポートだけです。中身はエラー、起動ごとに1つのセッション、遅い起動と固まったときの警告で、どれも下で説明しているとおり クラッシュレポートを送る で止められます。
  • URL の中の秘密らしい値(トークン、キー)は、feedback.md に書く前に伏せます。
  • ページから取った文字は feedback.md でデータとして印を付けるので、エージェントにはその中の指示に従わないよう伝わります。
  • この Web サイト(アプリではなく)は、Cloudflare Web Analytics でページの閲覧数を数えています。Cookie を使わず、サイトをまたいだ追跡もせず、個人のデータも取りません。

#アプリからのフィードバック

準備中

アプリ内のフィードバックの入力画面と、その中継はまだ公開していません。この節では、公開後の動きを説明します。

GitHub のアカウントが無くても、Ferret の中から不具合の報告や案を送れるようになります。送るのは自分で送ったときだけで、JapanMarketing-Dev/ferret (新しいタブで開きます) に from-app のラベル付きで公開の issue として載ります。人前に出したくないことは書かないでください。

  • アプリは自分のパソコンから小さな中継(開発者が動かす Cloudflare Worker)へ送り、中継が自分の GitHub のトークンで issue を作ります。書いた内容を受け取る開発者のサーバーは、この中継だけです。
  • 送るもの: 題名と本文、不具合か案か、アプリのバージョン、添えた PNG か JPEG のスクリーンショット3枚まで。OS の名前とバージョン、CPU のアーキテクチャ、ランダムなインストール ID は、含めたままにしたときだけ送ります。送らないもの: 名前、メールアドレス、GitHub のアカウント、プロジェクトのファイル、録画、指摘。
  • issue を作る前に、中継はキーやトークンに見える文字、メールアドレス、ホームフォルダのパスの中のユーザー名を伏せ、@mentions で誰かに通知が飛ばないようにします。スクリーンショットからは位置情報などのメタデータも取り除きます。それでも伏せきれないことがあるので、文は自分でも確かめてください。
  • 中継は IP アドレスを保存しません。1人が投稿できる回数(1時間に5回、1日に20回)を抑えるため、IP アドレス(と、送っていればインストール ID)の鍵付きハッシュを最長24時間数え、その後に消します。どちらも issue には出ません。
  • スクリーンショットは、中継が推測できない名前で Cloudflare R2 に置き、issue に表示します。issue やそのスクリーンショットを消してほしいときは、その issue にコメントするか、新しい issue を作ってください。
  • 中継のコードはリポジトリの workers/feedback-relay にあります。

#クラッシュレポート

アプリが落ちたり、処理されないエラーが起きたりすると、Ferret は不具合を直せるよう Sentry (新しいタブで開きます) にクラッシュレポートを送ります。最初の設定ではオンです。設定 → プライバシー → クラッシュレポートを送る か、初回の起動で出るお知らせの OFF にする で止められます。止めるとすぐに効きます。もう一度オンにしたときは、次の起動から効きます。開発用のビルド(pnpm dev)も development の札を付けて送るので、開発者は作業中に出会ったクラッシュも直せます。E2E の実行と単体テストからは送りません。

送るもの送らないもの
  • エラーの種類とメッセージ(ホームフォルダのパスは ~ にします)
  • スタックトレース(Ferret のコードのどこで起きたか)
  • ネイティブのクラッシュでは、どのプロセスが落ちたか、なぜ終わったか(たとえば crashed や oom)、アプリのバージョンだけ
  • OS の名前とバージョン、CPU のアーキテクチャ、Electron / Chrome / Node のバージョン、アプリのバージョン、画面の大きさ、メモリの量
  • エラーの直前のアプリの節目の出来事(たとえば app.ready)と、起動の失敗
  • アプリのどこで失敗したか: 描けなかった画面の部分(とその React のコンポーネント名)、IPC の呼び出し、起動できなかったターミナル、落ちたか固まったプロセス、読み込めなかったアプリのページ
  • アプリのどこにいたか: エディタモードかフィードバックモードか、開いていたタブ(ブラウザ、指摘、設定、またはただの file)、録画中だったか
  • 起動ごとに1つのセッション(始まった、ふつうに終わった、落ちた)。バージョンごとにクラッシュしなかった割合を測るためです
  • ランダムなインストール ID(初回の起動で作り、アプリの設定フォルダに置きます)。影響を受けたインストールの数を数えるためです。名前、メールアドレス、端末とは結び付きません
  • JavaScript のクラッシュのときだけ: Ferret 自身のログの最後の50行([startup] や [recording] など)。短くし、パス、URL、メールアドレス、キーを取り除きます
  • プロジェクトのフォルダのパスとファイル名(<project> に置き換えます)
  • 内蔵ブラウザで開いた URL と、その他の Web アドレス(<url> に置き換えます)
  • ターミナルの出力、文字起こし、指摘、ページの文字、スクリーンショット
  • メールアドレスと API キーやトークン(置き換えます)
  • 名前、端末名、IP アドレス(保存しません)、Cookie、ローカル変数
  • ネイティブのクラッシュのメモリダンプ(minidump)。メモリにあったものが何でも入りうるので、自分のパソコンに残します
  • クリック、ネットワークの要求、Ferret 自身のものでないログの行

インストールしたアプリが送るのは起動ごとに最大10件で、JavaScript のエラーは半分だけ送ります(ネイティブのクラッシュは必ず送ります)。開発用のビルドはすべてのエラーを、起動ごとに50件まで送ります。同じエラーは起動ごとに1回だけ送ります。遅い起動(5秒を超えるもの)と、アプリが長く固まったとき(1秒を超えるもの)は警告として、10分に1回まで送ります。パフォーマンスのトレースとセッションリプレイは使いません。アプリは Sentry の無料プランを使っています。上限に達したら余った分は捨てられ、誰にも料金はかかりません。

Ferret を自分でビルドする場合は、FERRET_SENTRY_DSN(古い名前の MOVIE_ADE_SENTRY_DSN も使えます)に自分の Sentry の DSN を入れるか、空の文字列にして何も送らないようにします。コードは src/main/telemetry.ts と src/shared/telemetry.ts にあります。

GitHub でこのページの翻訳を手伝う (新しいタブで開きます)