参考

数据与隐私

审查保存在你的项目文件夹中。设置保存在 ~/.ferret/ 中,密钥和账户保存在操作系统的用户数据文件夹中。只有崩溃报告会通过 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 和子模块也会被正确处理。.gitignore 永远不会被修改。中断的审查只要其记录得以保留,就可以从历史中恢复。此时应用会提示最后几秒可能缺失。

#保留期限

保留录制内容(默认 7 天,可选 30 天或 永久):启动时,超过该期限的已完成审查会删除 recording.webm 和 work/。feedback.md 和反馈图片会保留。未完成的审查永远不会被清理。清理在启动时针对上次打开的项目执行。

#哪些数据会离开你的电脑

时机目的地数据
转写:本机(免费)无—
转写:OpenAI / 兼容 OpenAIOpenAI 或你的 Base URL音频片段
模型下载Hugging Face文件请求
整理你的 Claude Code / Codex CLI,或你在 organizer 中设置的 LLM 端点仅文本和操作日志(不含图片、音频或视频)
验收检查(判定模型,默认关闭)你的 Agent,经由本地中继,发送到 Ollama / Cloudflare / AI Gateway / TypeSafe / 你的 URLAgent 发送的内容:反馈文本、“完成条件”以及 BEFORE/AFTER 截图(仅限图像模型)
发送给 Agent你终端中的 Agent一条指向 feedback.md 的指令
发送到 GitHub通过 gh 发送到 GitHub仅正文文本(不含图片)
底部栏用量显示(仅 Claude Code 和 Codex)Anthropic、ChatGPT使用你自己的登录发出的用量请求
GitHub 点星提示通过你的 gh 发送到 GitHub检查你是否已为仓库点星,只有在你点击 在 GitHub 上点星 时才会点星
检查更新(手动)下载服务器(Cloudflare R2)对 latest.json 的请求
从应用发送反馈(仅在你发送时;即将推出)开发者的反馈中继(一个 Cloudflare Worker),它会在 JapanMarketing-Dev/ferret 中创建一个公开 issue你的文字、问题或想法、应用 / 操作系统版本和 CPU,以及你附加的最多 3 张截图。密钥、令牌、电子邮件地址和主文件夹路径会被遮盖。中继不会保存你的 IP 地址(参见从应用发送反馈)
崩溃或错误(发送崩溃报告 开启时)Sentry堆栈跟踪以及操作系统 / CPU / 应用版本(参见崩溃报告)
  • 应用没有分析统计、没有性能追踪,也没有会话回放。它在你未要求的情况下发送的唯一数据是崩溃报告:错误、每次启动一个会话,以及启动缓慢和卡顿警告。这些都在下文说明,并且全部由 发送崩溃报告 控制。
  • URL 中看起来像机密的值(令牌、密钥)会在写入 feedback.md 之前被抹去。
  • 从页面采集的文本在 feedback.md 中会被标记为数据,因此 Agent 会被告知不要执行其中的指令。
  • 本网站(而非应用)使用 Cloudflare Web Analytics 统计页面浏览量:不使用 Cookie,没有跨站追踪,也不收集个人数据。

#从应用发送反馈

即将推出

应用内的反馈表单及其中继尚未发布。本节说明它们将如何工作。

你将可以在 Ferret 内发送问题报告或想法,无需 GitHub 账户。只有在你发送时才会发出,并且它会成为 JapanMarketing-Dev/ferret (在新标签页中打开) 中带有 from-app 标签的公开 issue。请不要包含任何你不愿公开发布的内容。

  • 应用从你的电脑将其发送到一个小型中继(由开发者运行的 Cloudflare Worker),中继使用自己的 GitHub 令牌创建 issue。在开发者的服务器中,只有这个中继会接收你写的内容。
  • 会发送:你的标题和正文、它是问题还是想法、应用版本,以及你附加的最多 3 张 PNG 或 JPEG 截图。操作系统名称和版本、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)以及应用版本
  • 操作系统名称和版本、CPU 架构、Electron / Chrome / Node 版本、应用版本、屏幕尺寸、内存大小
  • 错误发生前不久的应用生命周期事件(例如 app.ready),以及启动失败
  • 应用中出错的部分:无法渲染的界面区域(及其 React 组件名称)、IPC 调用、无法启动的终端、崩溃或无响应的进程,或加载失败的应用页面
  • 你当时在应用中的位置:编辑器模式还是反馈模式、打开的标签页(浏览器、反馈、设置,或仅显示为 file),以及是否正在录制
  • 每次启动一个会话(已开始、正常结束或崩溃),用于衡量每个版本的无崩溃率
  • 一个随机的安装 ID(首次启动时创建,保存在应用的设置文件夹中),用于统计受影响的安装数。它不与你的姓名、电子邮件或设备关联
  • 仅限 JavaScript 崩溃:Ferret 自身日志的最后 50 行(例如 [startup] 和 [recording]),经过缩短,并移除了路径、URL、电子邮件和密钥
  • 你的项目文件夹路径和文件名(替换为 <project>)
  • 在内置浏览器中打开的 URL 以及其他任何网址(替换为 <url>)
  • 终端输出、转写文本、反馈、页面文本、截图
  • 电子邮件地址以及 API 密钥或令牌(会被替换)
  • 你的姓名、设备名称、IP 地址(不保存)、Cookie、局部变量
  • 原生崩溃的内存转储(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 上帮助翻译此页 (在新标签页中打开)