news 2026/9/20 6:29:49

oh-my-openagent 匿名遥测与隐私机制全解析:采集边界、PostHog 上报管线与 Opt-out 配置指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
oh-my-openagent 匿名遥测与隐私机制全解析:采集边界、PostHog 上报管线与 Opt-out 配置指南

oh-my-openagent 匿名遥测与隐私机制全解析:采集边界、PostHog 上报管线与 Opt-out 配置指南

【免费下载链接】oh-my-openagentOmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent

本文以 oh-my-openagent / oh-my-opencode 官方隐私政策(docs/legal/privacy-policy.md)为骨架,结合仓库内packages/telemetry-corepackages/omo-config-core的真实源码实现,系统讲解该项目的匿名遥测体系:采集了哪些事件、哪些数据被刻意排除、遥测如何经过 PostHog 上报,以及如何通过环境变量和配置文件彻底关闭遥测。读完本文,你将能完整掌握该项目的隐私边界与全部退出(opt-out)开关,并理解其底层调用链与去重机制。

1. 适用范围与角色定义

隐私政策首先明确了术语边界,避免歧义:

  • Application(应用):指已发布的oh-my-opencodeCLI 包及其安装的 OpenCode 插件运行时;
  • Service(服务):指 Application 与项目分发渠道(npm、GitHub 仓库等)的合称;
  • We / our:指 oh-my-opencode 的维护者;
  • You:指服务的使用者。

使用该服务即表示你接受本隐私政策及其配套的服务条款(docs/legal/terms-of-service.md)。政策最后更新于 2026 年 8 月 21 日。

2. 采集的信息:两类数据与明确的"不采集清单"

政策将采集内容严格划分为两类,并在源码层面得到印证。

2.1 自动采集的匿名事件

当匿名遥测启用时,Application 可能采集以下事件:

事件触发时机用途
omo_daily_active插件加载(reason: "plugin_loaded")或runCLI 被调用(reason: "run_started"),每台机器每个 UTC 日最多一次估算日活 / 周活 / 月活安装量
omo_codex_daily_activeomo-codex适配器安装完成(reason: "install_completed"),或其 Codex 插件运行时在SessionStart钩子上触发(reason: "session_start"),与omo_daily_active相同的退出姿态估算 omo-codex 活跃安装
OmO Native 事件族(omo-senpi 适配器)会话开始、提示词分类桶、单轮 token 与成本汇总、技能与功能使用、并行度汇总、逐委托聚合指标、类别配置快照等匿名产品分析,完整 schema 见 docs/reference/senpi-telemetry.md
逐委托(per-delegation)聚合指标子代理任务结束:终端状态、掩码后的类别与模型标识、时长、token 与成本汇总、后续消息数理解委托执行概况

上述载荷只包含布尔值、计数器、分桶值和白名单枚举,例如prompt_submitted事件的prompt_length_bucketlt_100/100_500/500_2000/gte_2000)与memory_bucketlt_8_gb/8_15_gb/ …)——这些枚举值在 senpi-telemetry.md 中以机器生成的方式完整公布,且仓库中存在 schema 漂移测试,确保文档与生成器永远一致。

2.2 随事件携带的匿名元数据

  • 包版本、插件名、运行时、OS 系列、locale、时区(IANA 时区名,随会话开始事件发送);
  • 一个伪匿名安装标识:由本地主机名的单向哈希派生而来(具体实现见第 4.3 节);
  • 一个近似国家:由 PostHog 服务端根据连接 IP 推导。Application 从不把 IP 地址写入任何事件载荷,自身也不存储 IP;VPN、代理、移动网络、共享机器或流量从其他地区出口时,该近似国家可能不准确。

2.3 明确不采集的数据

政策明文规定:遥测路径不会创建或更新 PostHog 用户画像(person profile),也不会采集:

  • 提示词内容(prompt contents)
  • 源文件与仓库内容
  • 访问令牌与 API 密钥
  • 原始主机名
  • 运行时错误诊断信息
  • 任务名称、提示词、响应、错误消息、文件路径(逐委托指标层面)

3. 配置与本地状态

Application 会在本机存储本地配置遥测去重状态,用于支持安装、配置与匿名日活追踪。这部分状态由packages/telemetry-coreactivity-state.ts管理:状态文件名为posthog-activity.json(见 activity-state.ts),记录lastActiveDayUTC字段,位于基于 XDG 约定解析的缓存目录中。该文件仅在本机保留,删除即重置日活去重状态。

4. 遥测如何工作:源码级剖析

政策指出遥测通过PostHog进行匿名产品分析,默认启用(与 cmux 相同的 opt-out 姿态),其目的仅为估算活跃安装量。下面从源码还原完整管线。

4.1 核心模块结构

遥测逻辑集中在 packages/telemetry-core/src 下,职责划分清晰:

文件职责
record-daily-active.ts日活事件上报入口,串联客户端创建、去重判断、上报与关闭
activity-state.ts本地日活去重状态读写(posthog-activity.json
env.ts环境变量解析与 opt-out 判定(shouldDisableTelemetry
constants.ts默认 PostHog Host、默认 API Key 与"未配置占位 Key"
posthog-client.ts创建 PostHog 客户端、注入共享属性、发送事件
machine-id.ts从主机名生成伪匿名安装标识

4.2 调用链:recordDailyActive

recordDailyActive(record-daily-active.ts)是日活上报的核心入口,调用链如下:

  1. 先调用isTelemetryClientEnabled检查开关与 API Key 是否有效,无效则直接返回(连客户端都不创建);
  2. 创建 PostHog 客户端;若创建失败(如初始化异常)返回空操作客户端;
  3. 读取本地posthog-activity.json计算当日是否已上报;
  4. 若当日已上报则关闭客户端直接返回;
  5. 否则trackActive上报事件(携带day_utcdistinctIdreason),随后flushshutdown

4.3 伪匿名标识:主机名单向哈希

getTelemetryDistinctId 的实现是sha256(machineIdPrefix + hostname)的十六进制摘要——原始主机名不会离开机器,外部仅能看到不可逆的哈希值,这正对应政策中"由本地主机名单向哈希派生的伪匿名安装标识"的描述。

4.4 PostHog 客户端配置细节

createTransport 展示了客户端的安全配置倾向:

  • enableExceptionAutocapture: falseenableLocalEvaluation: falsedisableRemoteConfig: true——关闭异常自动采集与远程配置拉取,杜绝意外数据外泄;
  • flushAt: 1flushInterval: 0——事件即时刷出,不批量滞留本地;
  • $process_person_profile: false(posthog-client.ts)——明确不创建用户画像,与政策承诺一致;
  • 默认 Host 为https://us.i.posthog.com(见 constants.ts),API Key 可通过POSTHOG_HOST/POSTHOG_API_KEY环境变量覆盖;内置一个值为phc_REPLACE_ME_OMO_NATIVE的"未配置占位 Key",该值被刻意设计为必须 fail closed(未配置即禁用)。

共享属性(getSharedProperties)包括平台、包名与版本、运行时、OS 版本/架构、CPU 数量与型号、内存分桶(GB)、locale、时区(Intl.DateTimeFormat().resolvedOptions().timeZone)、shell、是否 CI、终端程序等——注意 CPU 型号与内存仅以计数 / 取整 GB 形式出现,并包在 try/catch 中以应对读取失败。

4.5 每日去重机制

getDailyActiveCaptureState 用toISOString().slice(0, 10)得到当日 UTC 日期字符串,与本地状态中的lastActiveDayUTC比较:相同则不再上报,不同则先原子写入新日期再上报。这正是"每台机器每个 UTC 日最多一次"承诺的实现基础。

5. 完整的 Opt-out 退出矩阵

政策给出两类退出方式,均可在任何时间生效。

5.1 环境变量(推荐,全局生效)

在运行 CLI 或插件宿主之前设置任一全局开关即可彻底关闭遥测:

export OMO_SEND_ANONYMOUS_TELEMETRY=0 # 或 export OMO_DISABLE_POSTHOG=1

5.2 omo-codex 专属开关

export OMO_CODEX_DISABLE_POSTHOG=1 export OMO_CODEX_SEND_ANONYMOUS_TELEMETRY=0

OMO_CODEX_DISABLE_POSTHOGOMO_CODEX_SEND_ANONYMOUS_TELEMETRY抑制omo-codex的遥测;而全局开关OMO_DISABLE_POSTHOG/OMO_SEND_ANONYMOUS_TELEMETRY同时抑制 oh-my-openagent/oh-my-opencode 与 omo-codex 两边的遥测。关闭后 PostHog 事件不再发送。

5.3 开关的源码语义

env.ts 中的shouldDisableTelemetry精确实现了上述语义:

  • *_DISABLE_POSTHOG的"真值"为1/true/yes(先 trim 再小写归一化);
  • *_SEND_ANONYMOUS_TELEMETRY的"退出值"为0/false/no(以及归一化后的yes,保持收敛一致);
  • 前缀集合取OMO(全局前缀)与产品专属前缀(如OMO_CODEX)的并集,因此全局开关天然覆盖 codex;
  • 额外的DO_NOT_TRACK=1也是一个全局退出开关,对 omo-opencode、omo-codex、omo-senpi 一律生效。

这一矩阵被 env.test.ts 以OPT_OUT_CASES表驱动用例逐条锁定:包括OMO_CODEX_SEND_ANONYMOUS_TELEMETRY: " TRUE "(带空格大写)与"maybe"(无效值,不退出)等边界情况,防止后续回归。

5.4 配置文件方式

对于 OpenCode 插件,还可以在 oh-my-openagent 配置中设置"telemetry": false关闭遥测。对应地,packages/omo-config-core/src/schema/telemetry.ts 中的telemetry.enabled为布尔值且默认true,并明确telemetry.enabled属于 senpi harness 支持项(TELEMETRY_HARNESS_SUPPORT)。

6. 第三方服务

服务可能使用以下第三方提供方,各自适用其独立的条款与隐私实践:

  • PostHog:匿名产品分析;
  • npm 与 GitHub:包分发、发布与仓库托管;
  • OpenCode 及你自行配置的模型提供方:用于你自己的代理使用,其数据流向由你的配置决定,与本遥测路径无关。

7. 信息用途、保留与你的选择

收集的信息仅用于三类目的:

  1. 估算日活 / 周活 / 月活安装量;
  2. 了解跨操作系统与包版本的总体采纳情况;
  3. 维护与演进服务。

政策明确声明:不会通过该遥测路径出售个人信息。匿名分析数据的保留仅以满足采纳分析所需的合理时间为限;本机遥测状态(如posthog-activity.json)则一直保留到你自行删除。

作为用户,你随时可以:

  • 通过环境变量或"telemetry": false配置关闭匿名遥测;
  • 删除本机的本地配置或缓存状态文件;
  • 随时停止使用该服务。

8. 安全、政策变更与联系

项目对自身控制的系统采取合理的行政与技术安全措施,同时政策如实声明:任何传输或存储方式都无法做到绝对安全。政策可能不定期更新,重大变更会通过修订文档顶部日期体现。有关本政策的疑问,可通过项目仓库的 issue 跟踪器或仓库中公布的联系渠道提出。

9. 延伸阅读

  • 隐私政策原文:docs/legal/privacy-policy.md;配套服务条款:docs/legal/terms-of-service.md
  • OmO Native 完整事件 schema:docs/reference/senpi-telemetry.md
  • 遥测核心实现:packages/telemetry-core/src(入口 index.ts)
  • 配置 schema:packages/omo-config-core/src/schema/telemetry.ts
  • 退出矩阵测试证据:packages/telemetry-core/src/env.test.ts

【免费下载链接】oh-my-openagentOmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering.项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-openagent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 6:28:09

TabPFN 完整使用指南:小数据表格任务,fit 完直接出预测

TabPFN 完整使用指南:小数据表格任务,fit 完直接出预测 【免费下载链接】TabPFN ⚡ TabPFN: Foundation Model for Tabular Data ⚡ 项目地址: https://gitcode.com/GitHub_Trending/ta/TabPFN 如果你的表格只有几千行,还在为调参、交叉验证和特征工程反复折腾,可以试试…

作者头像 李华
网站建设 2026/9/20 6:27:53

从零搭建OpenResearch开放研究流程:可复现、可追溯的科研工作流

一直以来,我在不同的技术社区和学术圈子里,都能听到一个词:OpenResearch。说实话,很多人把它理解成“开源一个研究项目”,或者是“公开一份实验数据”,但以我这么多年折腾各种工具链和科研流程的经验来看&a…

作者头像 李华
网站建设 2026/9/20 6:27:30

英语介词短语核心攻略:逻辑辨析、高频汇总与实战运用

介词短语这个事,我太有感触了。带过这么多届学生,几乎每隔几天就会有人拿着作文或者翻译题来问我:“老师,in the end 和 at the end 到底哪个是‘最后’?”、“at Christmas 和 on Christmas Day 怎么就差了一个词&…

作者头像 李华
网站建设 2026/9/20 6:27:05

Windows下Ollama安装与模型路径迁移实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 6:26:46

AI交互演进:从提示词工程到智能体技能设计

1. 从口头指令到标准化流程的AI交互演进在AI技术应用领域,我们正经历着从初级指令构造到系统化能力设计的范式转变。早期用户与AI的交互就像新员工面对模糊的上级指示——需要反复揣摩意图、尝试不同表达方式才能获得理想输出。这种基于即时指令调整的交互模式&…

作者头像 李华