【免费下载链接】macos-harness
The simplest, thinnest harness that gives an LLM complete freedom to control a Mac.
macOS Harness是一个让 LLM 直接控制 Mac 的极简工具,官方说明中有一句容易被忽略的话:匿名遥测默认开启。它到底收集了什么?会不会把屏幕内容、文件路径、聊天记录发出去?这篇文章带你完整看懂 macOS Harness 遥测机制——记录了什么、怎么发送、以及如何一键关闭。
一、先说结论:遥测只记"命令类别 + 运行元数据" 🎯
macOS Harness 的遥测模块总共只有一两百行代码,全部集中在 src/macos_harness/telemetry.py 中,文件开头的设计目标写得很直白:Tiny, privacy-safe, opt-out——极小、隐私安全、可随时退出。
核心规则只有一条:遥测只记录"哪个已知命令、是否成功、花了多久",外加少量运行环境信息,绝不记录任何用户数据。
二、遥测到底记录了什么?一张清单看明白
每次执行macos-harness命令结束时,cli.py 都会在finally块中调用capture_cli()上报一次事件(事件名macos_harness_cli)。完整字段清单如下:
| 字段 | 含义 | 示例值 |
|---|---|---|
command | 命令类别,仅限白名单值 | doctor、see、repl… |
success | 本次执行是否成功 | true/false |
duration_seconds | 执行耗时(秒,保留 2 位小数) | 1.23 |
macos_harness_version | 工具版本 | 0.1.2 |
python_version | Python 主/次版本 | 3.12 |
os/machine | 操作系统 / 硬件架构 | Darwin/arm64 |
agent | 检测到哪个 AI 客户端在调用 | codex、claude-code… |
两个值得展开的设计:
command 字段有白名单机制
只有 7 个命令会被原样记录:python、doctor、apps、repl、skill、see、state(见 telemetry.py 中的COMMANDS)。任何其他值都会被归一化为python,所以你输入的参数、脚本内容、应用名在结构上就不可能被带出去。
agent 字段靠环境变量猜测
遥测会检查环境变量来判断是哪个 AI 客户端在调用:CODEX_THREAD_ID→ codex、CLAUDECODE→ claude-code、CURSOR_AGENT→ cursor、GEMINI_CLI→ gemini-cli、OPENCODE→ opencode(见 telemetry.py)。没有命中任何标记时,该字段为空。
三、遥测绝对不记录的内容
README 的 "Permissions and privacy" 一节给出了明确的"负面清单":
- ❌ 你给 Agent 的提示词(prompts)
- ❌ 应用名称(app names)
- ❌ 截图(screenshots)
- ❌ 屏幕上的 UI 文本
- ❌ AppleScript 脚本内容
- ❌ 文件路径、窗口标题
这不只是口头承诺,而是有自动化测试守护的。tests/test_telemetry.py 会把真实上报的 payload 序列化后,断言其中不含app、path、prompt、script、screenshot、text、title、window等任何敏感字样;CONTRIBUTING.md 也把"绝不通过遥测发送用户数据"列为项目三大不可妥协原则之一。
四、install_id:一个随机 UUID,不是硬件指纹 🆔
上报数据需要一个标识符来区分不同安装,macOS Harness 的做法是:
- 首次运行时生成一个随机 UUIDv4作为
install_id,写入本地配置(见 telemetry.py) - 配置文件默认位于
~/Library/Application Support/macos-harness/telemetry.json,可通过MACOS_HARNESS_HOME环境变量改变位置(见 telemetry.py) - 目录权限设为
700、文件权限设为600,仅本用户可读写(见 telemetry.py)
注意:这个 ID 与硬件序列号、MAC 地址、用户名均无关,删掉配置文件就是全新的匿名身份。此外 payload 中还显式设置了$process_person_profile: False和$geoip_disable: True——不做用户画像合并、不做 IP 地理位置解析(见 telemetry.py)。
五、数据怎么发出去?后台静默、失败无感 📡
发送逻辑见 telemetry.py:
- 每次上报启动一个分离的后台子进程发送,不阻塞你的命令执行
- 默认 5 秒超时,可用
MACOS_HARNESS_TELEMETRY_TIMEOUT调整 - 目标是 PostHog 的欧洲节点
eu.i.posthog.com,地址可用MACOS_HARNESS_POSTHOG_HOST覆盖 - 任何异常都被静默吞掉——网络不通、超时、报错都不会影响正常使用
换句话说,遥测是"锦上添花"式的:发不出去,工具也不会变慢或失败。
六、如何关闭 macOS Harness 遥测:一条命令即可 🔕
方法一:一条命令永久关闭(推荐)
macos-harness telemetry disable它会在本地配置中写入disabled: true,之后所有上报直接跳过。随时可以用macos-harness telemetry status查看当前状态(输出 JSON:是否启用、install_id、配置文件路径),用macos-harness telemetry enable重新开启。命令实现见 telemetry.py,官方安装文档 install.md 也有同样说明。
方法二:环境变量即时关闭
以下任意一个环境变量生效即可禁用遥测(判断逻辑见 telemetry.py):
| 环境变量 | 生效取值 |
|---|---|
MACOS_HARNESS_TELEMETRY | 0/false/no/off |
ANONYMIZED_TELEMETRY | 0/false/no/off |
DO_NOT_TRACK | 1/true/yes/on |
比如MACOS_HARNESS_TELEMETRY=0 macos-harness doctor,本次运行就不收集任何数据。
七、小结
macOS Harness 的遥测机制可以概括为三点:
- 记录极小:只有命令类别、成功与否、耗时、版本与平台信息
- 匿名彻底:随机 UUID + 关闭地理解析 + 不做用户画像
- 退出自由:一条命令或环境变量即可完全关闭,且有自动化测试防止用户数据混入上报
如果你打算把 macOS Harness 交给 AI 助手长期使用,建议先跑一次macos-harness telemetry status确认状态,再按需选择开启或关闭——知情,才有得选。
【免费下载链接】macos-harness
The simplest, thinnest harness that gives an LLM complete freedom to control a Mac.
相关推荐
StashBase遥测与用量统计透明解读:它到底收集了什么?如何一键关闭?
StashBase遥测与用量统计透明解读:它到底收集了什么?如何一键关闭? StashBase 是一款开源、本地优先(local first)的写作工作台,让你
GLiNER2 深度拆解:从 arXiv:2507.18546 到「省 80% token」,它到底动了什么手术
GLiNER2 深度拆解:从 arXiv:2507.18546 到「省 80% token」,它到底动了什么手术 2025 年 7 月,一篇 arXiv 论文(
人工智能NLP信息抽取macOS Harness 安全与隐私指南:最小权限原则与匿名遥测机制详解
macOS Harness 安全与隐私指南:最小权限原则与匿名遥测机制详解 macOS Harness 是给予 LLM 完整控制 Mac 能力的最薄一层工具,这
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考