遥测与隐私说明
个人版匿名「打开统计」采集什么、绝不采集什么、保留多久、如何一键关闭与请求删除。团队私有版从不上报。
牛牛个人版默认本地优先、网络隔离(绑定 127.0.0.1、关闭账号体系),因此我们无法知道「外部到底有多少人在使用」。为了统计活跃用户数、版本分布、操作系统分布与留存,个人版会在启动时发送一条匿名的「打开事件」——仅此而已。
本说明逐项告诉你采集什么、绝不采集什么,以及如何一键关闭。这种透明是「默认开启、可随时关闭(opt-out)」设计成立的前提。
适用范围:仅个人版 / 自托管单用户实例。厂商托管的团队私有版完全不启用本遥测——详见下方 启用范围。
采集什么(最小集,仅 6 个字段)
每条「打开事件」只包含以下字段,别无其他:
| 字段 | 含义 | 说明 |
|---|---|---|
install_id | 匿名安装标识 | 首次启动生成的随机 UUID,非账号、非设备序列号 |
machine_fp_hash | 机器指纹哈希 | 机器指纹经固定 salt 做 SHA-256 哈希后的字符串,不是原始硬件 ID;仅用于去重「同一台机器重装」 |
version | 应用版本号 | 用于统计版本分布 |
os | 操作系统 | 如 windows / darwin / linux |
arch | CPU 架构 | 如 amd64 / arm64 |
opened_at | 打开时间 | RFC3339 格式的时间戳 |
服务端会严格校验:任何未知字段、疑似个人信息字段、任何用量数值字段都会被拒绝。
绝不采集
牛牛永远不会通过本遥测采集以下内容:
- 账号 / 邮箱等个人信息(个人版本就没有账号体系,本接口完全匿名)。
- token / 工作量 / 项目数等任何用量聚合——不统计你用了多少 token、跑了多少 workspace、建了多少 issue / project。
- 仓库路径与文件名。
- issue / 提示词 / 对话内容。
- token 明文。
- 原始硬件 ID(只发 salted 哈希,不发原始指纹)。
- 精确 IP 关联画像(仅按 IP 做匿名限流,不做基于 IP 的画像关联)。
用途
采集到的最小字段仅用于以下统计,不作他用:
- DAU / WAU / MAU(按
install_id在查询侧按天去重); - 版本分布(
version); - 操作系统分布(
os/arch); - 留存曲线。
machine_fp_hash 仅在分析时用于把「同一台机器的多次重装」合并,避免重装被重复计为新装机。
上报机制
- 触发:应用启动后约 10 秒发一条「打开 ping」;运行中每 24 小时发一条保活心跳(字段相同),保证长开会话每天准确计一个活跃日。
- 匿名:请求不携带任何账号凭证。
- 限流:按来源 IP 限流;请求体有大小上限。
- 尽力而为:发送失败会静默重试几次后放弃,绝不阻塞主流程,也不会刷错误日志。
保留期
- 原始事件保留 90 天,到期自动清理。
- 每日聚合统计长期保留(聚合后不含可定位到单次打开的原始明细)。
如何关闭
本遥测是 opt-out,可随时关闭,两种入口任选其一:
-
设置 → 隐私 中的「匿名使用统计」开关(推荐)。关闭后下一个心跳周期即停止上报,无需重启。
-
直接改配置文件
~/.niuniu/config.yaml:telemetry: enabled: false # 默认 true(opt-out)
启用范围
| 实例形态 | 是否上报 |
|---|---|
| 个人版 / 自托管单用户 | 是(受「匿名使用统计」总开关控制,默认开) |
| 厂商托管团队私有版 | 否(遥测组件根本不启动,无需关闭) |
如何请求删除
由于本遥测完全匿名(无账号、无邮箱),唯一能定位你数据的标识是你的 install_id。
- 你的
install_id可在 设置 → 隐私 查看,或在~/.niuniu/config.yaml的server.id字段找到。 - 如需删除与该
install_id关联的原始事件,请携带install_id,通过官网或公开仓库 issue 提交删除请求。 - 即便不主动请求,原始事件也会在 90 天后按保留期自动清理。