遥测
最后更新: October 1, 2026
概要
官方构建的 MXterm Pro 会发送匿名使用报告,默认开启。报告用来了解有多少人在用这个应用、在用哪些版本、哪些故障最常出现,好决定下一步先修什么。
报告不包含终端输出、命令、文件内容、文件路径、SSH 主机名或用户名,也不包含许可证密钥。你可以在设置 → 隐私中关闭上报,也可以用环境变量关闭。自己编译的构建不会发送任何数据。
从 1.1.12 版本起,报告还会包含功能使用次数和范围,但不包含你输入或打开过的内容。下面的“使用次数”部分列出了每个字段。
收集哪些数据
截至 MXterm Pro 1.1.11,共有三类报告,下面列出每类报告的全部字段。从 1.1.12 版本起,每日签到会附带第四类:使用次数,列在最后。
1. 使用情况 ping
- 发送到
- Google Analytics(www.google-analytics.com)
- 时机
- 启动时发送一次 app_open 事件,本次运行的其余时间不再发送。
| 字段 | 内容 |
|---|---|
| client_id | 首次启动时生成的随机 ID,保存在名为 telemetry-id 的文件里 |
| event name | app_open |
| session_id | 应用启动的时间,单位为秒 |
| engagement_time_msec | 固定值:100 |
| app_version | MXterm Pro 的版本 |
| os | 操作系统名称,例如 macos |
Google 会根据请求来源的 IP 地址推测大致的国家。
2. 每日签到
- 发送到
- mxterm.net,我们自己的服务器
- 时机
- 应用启动时,如果距上次签到已过 24 小时就发送;如果上次运行崩溃了,则立即发送。应用开着好几天不关,会在下次启动时再签到。
| 字段 | 内容 |
|---|---|
| installId | 保存在名为 telemetry-install-id 的文件里的随机 ID。我们存的是它的哈希,不是 ID 本身 |
| currentVersion | MXterm Pro 的版本 |
| tier | 取值为 free 或 pro |
| telemetryEnabled | 始终为 true,因为只有开启上报时才会发送这份报告 |
| osVersion | macOS 版本,例如 15.5 |
| arch | 取值为 arm64 或 x64 |
| platform | 取值为 mac 或 windows |
| crashedLastRun | 上次运行是否没有正常退出 |
| sessionsSinceLastCheck | 自上次签到以来应用被打开的次数 |
| paywallShown | 每个升级提示出现的次数,按提示名称统计 |
| paywallClicked | 每个升级提示被点击的次数,按提示名称统计 |
这些升级提示的名称有:locked_panes、locked_ssh_hosts、locked_war_room_members、locked_mxterm_hosts、locked_my_devices、locked_access_password、locked_email_share、locked_remote_devices、locked_shared_panes、settings_license_panel、titlebar_menu 和 command_palette。
3. 故障事件
- 发送到
- mxterm.net,我们自己的服务器
- 时机
- 下面列出的特定故障发生时:MXterm Pro 1.1.11 有八种,从 1.1.12 版本起再增加七种。发送不出去的事件会排队,最多 50 个,稍后重试。
| 字段 | 内容 |
|---|---|
| eventId | 这个事件的随机 ID |
| installIdHash | 每日签到中安装 ID 的哈希 |
| occurredAt | 发生时间 |
| eventType | 下面列出的事件之一 |
| severity | warning;如果是崩溃,或激活后丢失许可证,则为 critical |
| detail | 下面列出的额外信息,不含其他内容 |
| app version, OS, arch | MXterm Pro 的版本、操作系统和处理器类型 |
原因代码由你的 Mac 通过匹配错误来选定,错误文本本身绝不发送。SSH、SFTP 和编辑器的原因代码是 auth_denied、password_expired、host_unreachable、timeout、permission_denied、not_found、disk_full、network 或 unknown 之一。许可证故障的原因代码是 bad_signature 或 expired 这类简短代码,有时是我们的许可证服务器返回的代码;通过 MXterm 账户激活失败时,则是 seat: 后面跟一个代码。
4. 使用次数(1.1.12 版本起)
- 发送到
- mxterm.net,我们自己的服务器
- 时机
- 从 1.1.12 版本起,每天一次,与每日签到在同一个请求里发送。关闭使用情况上报后,不会发送任何使用次数。
| 字段 | 内容 |
|---|---|
| schema | 这份字段列表的版本,目前为 1 |
| milestones | 每项只发送一次,之后不再发送,只是一个不带日期的标记,并且只在开启使用情况上报时记录:onboarding(完成或跳过)、firstPane、firstSplit、firstSshHost、firstSftpOpen、firstRemoteShare、firstLicenseActivation(在这台 Mac 上激活了许可证,用密钥或通过你的 MXterm 账户)、firstShortcutCustomized(你设置了自定义快捷键)、firstAgent(固定列表中的 Agent 名称,或 other)和 firstImport(ssh_config、moba、iterm2 或 session_json) |
| daysSinceInstall | 安装后的天数,以范围表示:0、1、2 至 6、7 至 29、30 至 89 或 90 及以上 |
| counters | 0 至 100000 的整数,从上一次成功发送的签到起累计,发送后清零:panesOpened、splits、warRoomRooms、sshConnects、sftpTransfers、worktreePanes、paletteOpens、remoteHostStarted、chatViewOpens、meshPeerConnects 和 myDeviceLinks。应用打开时恢复的分屏不计入;sftpTransfers 只统计下载;remoteHostStarted 只统计你自己按下 Start Server 的次数;chatViewOpens 统计分屏每次切换到聊天视图的次数;meshPeerConnects 统计每次成功连接实验性网络功能中的对端的次数;myDeviceLinks 统计你在“我的设备”中每关联一台设备的次数 |
| agentLaunches | 每个 Agent 的启动次数,按固定列表中的名称统计。不在列表中的名称计为 other |
| importsBySource | 按来源统计的导入次数,来源有 ssh_config、moba、iterm2 和 session_json |
| sftpBytes | SFTP 下载的数据量,以大小范围表示:0、低于 1 MB、低于 100 MB、低于 1 GB 或 1 GB 及以上。只统计下载 |
| pairedDevices | 已配对的设备数,以范围表示:0、1、2 至 4 或 5 及以上 |
| language | 界面语言,取值为 en、vi、zh、ja、ko、es、fr、tr、id、pt、de 或 other |
| theme | 主题:内置主题 iterm2-pro、vscode-dark、iterm-dark、tokyo-night、catppuccin、one-dark、monokai-pro、solarized-dark、mxterm-classic、mxterm-2、mxterm-light 或 warm-paper 之一,或 other |
| coldStartMs | 冷启动耗时,以毫秒范围表示:低于 500、低于 1000、低于 2000、低于 4000 或 4000 及以上 |
| firstPromptMs | 到出现第一个命令提示符的耗时,以毫秒范围表示:低于 100、低于 300、低于 1000 或 1000 及以上。只统计本地 shell |
| rssMb | 占用的内存,以 MB 范围表示:0 至 200、200 至 500、500 至 1000、1000 至 2000 或 2000 及以上。只统计 MXterm 自己的进程 |
| paneCount | 打开的分屏数量,以范围表示:1、2 至 4、5 至 9 或 10 及以上 |
| hiddenTimerGapMs | 窗口隐藏期间,应用的定时器晚了多久才运行,以范围表示:低于 1 秒、低于 5 秒、低于 30 秒或 30 秒及以上 |
| ptyBurst | 当天观察到的终端最高输出速率,单位为每秒数据块数,以范围表示:低于 100、低于 1000、低于 10000 或 10000 及以上 |
这些列表是固定的。Agent 有 claude_code、codex、gemini_cli、cursor_agent、opencode、github_copilot、amp、antigravity、omp、grok 和 other。不在列表中的值一律以 other 发送。其余性能数值取当天样本的中间范围。性能数据每天发送一次。使用次数保留 400 天。我们只报告至少包含 10 个安装实例的分组。
故障事件
| 事件 | 附带的额外信息 |
|---|---|
| ssh_connect_failed | 一个原因代码。通过 SFTP 列出远程文件夹失败时发送 |
| sftp_transfer_failed | 是上传还是下载,以及一个原因代码 |
| editor_read_failed | 一个原因代码 |
| editor_save_conflict | 没有任何内容 |
| license_activation_failed | 一个原因代码 |
| license_lost_after_activation | 一个原因代码:bad_signature、not_paid_tier、hwid_mismatch、expired、revoked、machine_inactive、refunded、invalid_license 或 no_seat |
| crash_recovered | 1.1.56 版本起:来自固定列表的两个词:应用停止时所处的阶段(boot、restore、running、voice、quit、network 或 other 之一),以及已运行多久(从不足 1 分钟到超过 1 天的区间) |
| ui_crashed | React 错误编号,或 other |
| pty_spawn_failed | 1.1.12 版本起:一个原因,shell_missing、permission 或 other 之一;1.1.56 版本起还有 cwd_missing 和 resource_limit |
| agent_not_found | 1.1.12 版本起:是哪个 Agent,按固定列表中的名称,或 other |
| update_failed | 1.1.12 版本起:失败的阶段,download、signature、install 或 other 之一;1.1.56 版本起还有 check(更新检查本身失败),并附一个类别:network、manifest、http_4xx、http_5xx 或 other(被拒绝的检查目前归为 manifest) |
| remote_attach_failed | 1.1.12 版本起:一个原因,auth、network、stale、revoked 或 other 之一 |
| worktree_failed | 1.1.12 版本起:一个原因,not_repo、exists、git_error 或 other 之一 |
| keychain_failed | 1.1.12 版本起:失败的操作,read、write、denied 或 other 之一 |
| import_failed | 1.1.12 版本起:导入来源(ssh_config、moba、iterm2、session_json 或 other)和一个原因(none_found、invalid、read_failed 或 other 之一) |
绝不发送的内容
- 终端输出或滚动历史
- 你运行的命令
- 文件内容或文件路径
- SSH 主机名、用户名、密码或密钥
- 许可证密钥
- 剪贴板或屏幕上的任何内容
三类报告在发送前都会检查一遍:如果报告里有看起来像主目录路径、SSH 密钥、许可证密钥、密码、token 或机密的字符串,整份报告会被丢弃,不会发送。
从 1.1.12 版本起,使用次数不包含路径、主机名、命令、文件名或仓库名、分支名、密钥、提示词和终端输出。如果看起来含有路径、密钥或 token,整份报告会被丢弃。
自 MXterm Pro 1.0.22 起,发往 Google Analytics 的使用情况 ping 也要过同一道检查。它只由上面列出的六个字段构成,这些字段都不可能携带你的数据;万一哪个字段带了,这份 ping 会被丢弃而不是发送。
故障还会写进一份只保存在你 Mac 上的列表,最多保留最新的 200 条,且不超过 14 天,无论上报是否开启。这份列表与发送队列是两个独立的文件,绝不会上传;它的用途是让诊断文件能说明哪里出了问题。
MXterm Pro 还会在应用数据文件夹里保留第二个本地文件 war-room-delivery.jsonl。对每条 Control Room (原 War Room) 消息,它记录这条消息在输入分屏之前为什么被挂起、放行或丢弃:时间、事件、原因、有多少条消息在等待、等了多久,以及分屏的一个简短代码(是哈希,不是终端 ID,显示为 Control Room 使用的 peer-… 名称)。文件里没有名称、路径、消息文本或终端 ID。它最多保留 500 行或 30 天,绝不上传,也不属于诊断文件。
如何关闭
打开设置 → 隐私,关闭分享匿名使用数据。关闭对三类报告立即生效:每次发送前都会重新读取这个开关,而不是只在启动时读取。
从 1.1.12 版本起,同一个开关也控制使用次数,关闭后不再产生新的使用报告。首次运行该版本时,会显示一行提示,说明会收集这些使用次数,以及在哪里关闭。
也可以用环境变量关闭:DO_NOT_TRACK 或 MXTERM_TELEMETRY_DISABLED。除 0、false 或 no 之外的任何值都算关闭,大小写不限。两个变量在每次发送之前都会读取;只要其中一个被设置,设置里的开关就会变灰,并写明是哪个变量关闭了上报。
重新开启无需重启应用。之前积压的故障事件和到期的每日签到会立即发送,使用情况 ping 大约十五秒内恢复。关闭上报期间不会有任何内容排队等待发送,所以那段时间发生的故障永远不会被发送。
想用新的随机 ID 重新开始,请先退出 MXterm Pro,再到 ~/Library/Application Support/com.mxterm.desktop/ 里删除 telemetry-id 和 telemetry-install-id 这两个文件。
从源码自行编译的构建不含任何这类上报:所需的密钥只在构建官方发行版时才会加入。
数据发往哪里
使用情况 ping 发往 Google Analytics,由 Google 处理,包括在美国处理。
每日签到和故障事件发往 mxterm.net。它运行在我们位于法国的自有服务器上,由 Contabo 托管,通过 Cloudflare 提供服务。每个安装实例只保留一条记录,包含上面列出的字段和请求来源的国家;我们不保存 IP 地址。故障事件同样连同国家一起保存。这些记录目前不会自动删除。
从 1.1.12 版本起,使用次数也发往 mxterm.net,包含在每日签到里,保留 400 天。我们只报告至少包含 10 个安装实例的分组。
诊断文件自己不会发往任何地方。设置 → 隐私 → 技术支持诊断文件 → 保存文件…会生成名为 mxterm-diagnostics-YYYY-MM-DD.json 的文件,并问你保存到哪里。文件包含应用版本、是否为官方构建、本次运行已持续多久、Free 还是 Pro、操作系统及其版本和处理器类型、上报是否开启、界面语言、上次运行是否崩溃、已保存的 SSH 主机数、打开的标签页数和分屏数、在用哪些 Agent 模板、哪些 Token Meter 提供商配置了密钥,以及本地的近期故障列表。写入之前,你的主目录会折叠成 ~,整个文件要过与报告相同的检查,一旦触发就直接拒绝生成,并且不会上传任何内容:你自己看文件,自己决定要不要发邮件给支持团队。
应用发起的其他网络请求
这些不是使用情况报告,所以上面的使用数据开关对它们不起作用。其中可以关闭的,各有自己的开关,条目里会写明;检查更新、Free 限额检查和许可证检查没有开关。
- 检查更新
- 启动后不久,以及之后每四小时,应用会向 mxterm.net 询问是否有新版本,并发送当前版本、你的操作系统和界面语言。每个构建都会这样做,包括你自己编译的。关闭使用数据上报后,一次检查仍可能在我们的服务器上留下一条匿名记录:应用版本、国家、是否有可用更新,以及应用是 Free 还是 Pro,不含 IP 地址,也不含安装 ID。 每次更新检查还会按应用版本和国家计数,不含任何标识符,用来了解有多少份应用正在运行。
- 许可证激活
- 输入许可证密钥时,应用会发送密钥、一个机器指纹(由你电脑硬件 UUID 的部分哈希生成)、你电脑的主机名、应用版本和平台。如果开启了使用数据上报,激活许可证时(用密钥或通过 MXterm 账号),应用还会发送它随机生成的安装 ID(与每日签到里的相同),这样我们就能把一份已购买的许可证与该安装的使用数据对应起来。关闭上报时,不会发送任何安装 ID。
- 许可证复查
- 启动时(最多每小时一次),之后在线期间大约每天一次,应用会发送许可证密钥、机器指纹和应用版本,询问这台机器是否仍然持有许可。如果你是通过 MXterm 账户而不是密钥激活的,则会连同你的账户会话发送机器指纹、机器名称、平台和应用版本。检查失败或你处于离线状态时,不会有任何改变;只有连续两次得到明确答复,说明许可证或席位已不存在,才会从应用中移除 Pro。服务器保存的是每台机器最近一次连接的时间和应用版本,不保存检查记录。
- Free 限额
- 启动后不久,之后每四小时一次,应用会向 mxterm.net 询问当前的 Free 套餐限额。请求不带安装 ID,也不带任何关于你的数据,只有任何请求都会暴露的内容,例如你的 IP 地址。所有版本都会这样做。
- MXterm 账户与 My Devices
- 只在你登录 MXterm 账户时才会发生。应用把登录 token 保存在你的 Keychain 里,并且为了 My Devices,向 mxterm.net 发送设备 ID、这台电脑的名称和公钥,大约每五分钟请求一次你的设备列表。大约每分钟还会发送一次在线状态,内容是这台电脑的主机服务器可以访问的网络地址,它是为你的其他设备加密的,所以 mxterm.net 读不到。mxterm.net 能看到的是设备 ID、时间和请求的 IP 地址。退出登录后,这些请求就会停止。服务器保存了哪些内容,列在隐私政策里。
- 实验性网络功能
- 只在你打开这项实验性网络功能时才会发生(macOS,受邀测试者)。应用的辅助程序会连接 mesh.mxterm.net(它负责让你的设备互相认识)和中继 sg.relay.mxterm.net。两者都运行在新加坡的 AWS 上。中继能看到设备公钥和来源 IP 地址,看不到终端内容,终端内容在你的设备之间是加密的。同一网络中的其他设备能看到彼此的设备名称、操作系统和地址。登录后,应用还会向 mxterm.net 申请一个一次性的注册密钥。详情见隐私政策。
- Claude 套餐限额
- 默认关闭。如果你在设置 → Token Meter 里打开套餐限额,应用会通过 macOS 的 security 工具从你的 Keychain 读取 Claude Code 保存的登录凭据(macOS 通常不会为此弹出提示),并用它从 api.anthropic.com 获取你的用量限额,最多每五分钟一次。
- 实时 Codex 限额
- 默认关闭。如果你在设置 → Token Meter 里打开实时 Codex 限额,应用会从 ~/.codex/auth.json 读取 Codex 的登录凭据,只发送给 chatgpt.com,用来读取你当前的 5 小时和每周限额,最多每五分钟一次。它从不修改或刷新这份登录凭据,Codex 保存在系统 Keychain 里的登录凭据也不会被读取。
- 账户提供商余额
- 添加密钥之前保持关闭。在设置 → Token Meter 里,你可以粘贴 DeepSeek、Moonshot、Kimi、MiniMax、OpenRouter 或 Z.ai 的 API 密钥。密钥保存在 macOS Keychain 里,条目由 MXterm Pro 自己创建,服务名为 MXterm Pro,每个密钥只发送给它自己的提供商:api.deepseek.com、api.moonshot.ai 或 api.moonshot.cn、api.kimi.com、api.minimax.io 或 api.minimaxi.com、openrouter.ai,以及 api.z.ai 或 open.bigmodel.cn。请求只读取你的余额或额度,除密钥外不带任何东西:没有提示词,没有对话记录,没有文件名。每个提供商最多每五分钟查询一次,至少配置了一个提供商之前完全不会查询。仅对 Kimi 而言,如果没有保存密钥,而这台 Mac 上已登录 Kimi Code CLI,应用会从 ~/.kimi-code 读取该 CLI 的 token 和旁边保存的设备 ID,并以同样的方式发送给 api.kimi.com;它从不写入该目录,也从不刷新 token。
- Token Meter
- Claude Code、Codex、Gemini CLI 和 omp 的 Token 数,以及 Codex 自己写进会话文件的套餐百分比,都是从这些工具保存在你 Mac 上的文件里读取的。不发送任何内容。
- 反馈
- 从 1.1.57 起(Mac;Windows 和 Linux 为 1.1.58),设置 → 反馈会在你点击发送时,把你的姓名、邮箱、消息、类型、应用版本、系统和语言发送到 mxterm.net;只有你勾选时才会附上诊断文件(保留 90 天)。内容由我们的邮件服务提供商处理。更早的版本改为打开你的邮件应用,不会向 mxterm.net 发起请求。
- 远程访问
- 使用之前保持关闭。只有在设置 → 远程访问与已配对设备里按下 Start Server,主机服务器才会运行,除非你开启了“打开 MXterm 时启动主机服务”(默认关闭)。启动后,它监听 6868 端口(如被占用,则顺延到下一个空闲端口,最高到 6877),监听你的 Tailscale 地址(如果有),如果你开启了“允许局域网中的设备”,还会监听你的私有网络地址,其余情况下只在这台 Mac 上监听。绝不使用公网地址。在私有网络上,流量未加密。已配对的设备只能访问你共享的分屏。分屏共享时可选仅查看或可控制,设备只能在可控制的分屏里输入。新设备用六位字符的配对码配对,或者用你开启的访问密码配对;之后的连接不会再发送密码本身,而发送时,它会发到 Tailscale 地址、该实验性网络中对端的本地代理,如果你允许局域网访问,也会发到局域网地址,此时它是未加密的。服务器运行且有分屏被共享时,MXterm Pro 会阻止电脑自行进入睡眠(为 macOS 和 Windows 构建,Windows 一侧尚未验证),除非你把它关掉。如果你在 MXterm Hosts 下添加了主机,应用会用保存在 macOS Keychain 里的 token 连接该主机的地址,用该主机的密码配对时,密码会发送到 Tailscale 地址、该实验性网络中对端的本地代理,如果你允许局域网访问,也会发送到局域网地址,此时它是未加密的。终端内容绝不经过 mxterm.net。如果你使用 My Devices,mxterm.net 只处理“MXterm 账户与 My Devices”里说明的设备列表和在线状态。
- Tailscale 指南视频
- 仅在你点击设置里 Tailscale 指南中的 Play 时:视频才会从 YouTube (youtube-nocookie.com) 加载。如果你没有点击 Play,应用不会为它建立任何连接。
- 你自己的连接
- SSH、SFTP 以及你在终端里运行的任何东西,都连到你指定的地方。你在 MXterm Pro 里运行的工具,比如 Claude Code 或 Codex,有自己的网络请求;那些属于这些工具,不属于 MXterm Pro。
问问 AI:MXterm Pro 怎么样
根据本页内容,在 ChatGPT、Claude 或 Perplexity 里直接生成回答。回答由 AI 写,不是我们写的,请核对它引用的来源。
发送的问题MXterm Pro 会记录哪些使用统计,绝不记录什么,数据发往哪里?