总览
Wingman 的面板与你的配置数据都在本机:本地服务只绑 127.0.0.1,面板在你自己的浏览器里打开。对外发送的数据只有两类:
- 第一层 · 匿名使用统计 —— 自动发送的极小白名单(版本/系统/功能计数),不含内容、不含路径、无任何标识。
- 第二层 · 内容样本 —— 只在你逐次主动点「分享」并在预览里确认后才发送,没有任何持续授权。
除此之外没有第三类。配置文件内容、会话内容、路径,永远不会被自动上传。
第一层 · 匿名使用统计
字段表(白名单全量,一个不多)
| 字段 | 示例 | 说明 |
|---|---|---|
| app 版本 | 0.1.0 | Wingman 自身的版本号 |
| 操作系统 | darwin | 平台类别(macOS/Linux/Windows),不含系统版本号 |
| CPU 架构 | arm64 | 处理器架构 |
| 检测到的 harness | cc:true, codex:false, dsh:true | 三个布尔:本机是否装有 Claude Code / Codex / dsh。只有装没装,没有版本、没有路径 |
| scan 次数 | 3 | 本次 serve 进程内完成的配置扫描次数(只是次数,不含扫描结果) |
| 实况接线数 | 1 | 已接实况 hook 的 harness 个数(0–3) |
| 开关写入次数 | 0 | 本次 serve 进程内成功执行的配置开关写入次数 |
| license 状态类别 | none | 五个类别之一:none / invalid / active / grace / expired。只有类别,没有邮箱、没有订阅号 |
| 错误类型名 | TypeError | 发生过的错误的构造名列表(最多 10 种)。不含错误消息正文、不含任何路径 —— 服务端还会对每一项做形状校验,长得不像类型名的直接丢弃 |
发送时机与方式
- 时机:
wingman serve启动时发一次,之后进程存活期间每 24 小时一次。一次性命令(scan / hook install)不发送。 - 方式:
POST https://api.getwingman.dev/metrics,3 秒超时、失败静默、不重试;发送失败不影响任何功能 —— 断网、被墙,Wingman 照常工作。 - 存储:Cloudflare Workers Analytics Engine(聚合统计数据集)。写入不设任何采样键/索引 —— 没有能把两条记录关联成「同一个人」的东西。
明确不收集
NEVER
- 任何配置文件内容、prompt、会话内容
- 任何文件路径、项目名、机器名、用户名
- 任何用户 ID、设备 ID、指纹、随机安装标识
- IP 地址 —— 服务端不记录、不存储请求来源 IP
为什么没有关闭开关
这一层没有 opt-out。如实说:上面那张表是我们判断「哪些功能真的被用、在什么系统上坏了」的唯一依据;它被设计成即使全量公开也不含任何一个人的任何东西 —— 所以我们选择让它保持完整,而把所有含内容的数据都放进第二层,由你逐次决定。你若不接受这一层,唯一诚实的建议是不使用 Wingman;我们不提供一个「看起来关了」的开关。
第二层 · 内容样本(仅逐次主动分享)
是什么
面板里有两个分享入口:CONTEXT 区的「分享配置样本」(当前 harness 的扫描结果 JSON)、实况区的「分享事件样本」(当前事件流)。分享样本帮助 Wingman 适配更多真实环境 —— 这是它唯一的用途。
流程(铁律)
- 点击入口 → 弹层展示将要发送的完整原文(等宽滚动区,一行不少)。
- 每一行都可以删除 —— 删掉的行绝不进入发送体;预览所见 = 发送原文。
- 只有明确按「发送」才会 POST;关闭弹层 = 什么都不发。
- 没有持续授权:每次分享都要重新走一遍预览。MOCK 演示数据不外发。
传输与存储
- 方式:
POST https://api.getwingman.dev/samples,单件上限 256 KB。 - 存储:Cloudflare Workers KV,90 天自动过期删除;存储键只含样本类型、时刻、随机 id —— 无任何用户标识。
- 服务端不记录、不存储 IP;样本与第一层统计之间没有任何可关联的键。
- 你删减后发出的内容我们无法再溯源补全 —— 删了就是删了。
变更记录
- 2026-08-26 —— 原「零遥测」承诺调整为本页的双层模型(仓库 FREEZE.md 同步记录了这次解冻)。在此之前的版本不发送任何数据。
本页是数据口径的单一事实源:任何字段增减、时机变化,都会先更新本页再发版。