博客
零云架构:Tactic Remote 如何让你的代码始终留在本地
Tactic Remote 采用零云架构,所有代码执行、会话数据和文件访问均保留在开发者的 Mac 上,iPhone 与 Mac 之间的加密连接完全绕过我们的基础设施。
继续查看该栏目下的产品与工程更新。
浏览此分类每周都会出现新的报道:某个 AI 工具将源代码上传到了云服务、在未经同意的情况下使用专有数据进行训练,或者因 API 配置错误导致开发环境凭据泄露。开发者对接触代码库的工具心存警惕是完全合理的。
Tactic Remote 从设计之初就围绕一个简单的原则:你的代码永远不会离开你的机器。本文将详细解释这是如何实现的、信任边界在哪里,以及我们能看到什么和不能看到什么。
"零云"意味着什么
Tactic Remote 没有云端后台。我们不运营任何中继、存储或处理你开发数据的服务器。iPhone 与 Mac 之间的连接是直接的。
在局域网模式下,"直接"是字面意义上的直接——你的 iPhone 通过本地 Wi-Fi 网络与 Mac 通信。流量不会离开你的网络,DNS 解析也不会访问外部服务器。连接发生在同一子网的两台设备之间。
在 Cloudflare Tunnel 模式下,当你不在本地网络时,流量通过 Cloudflare 的边缘网络到达你的 Mac。Cloudflare 提供传输层,但应用层的有效载荷在 iPhone 和 Mac companion 应用之间进行端到端加密。Cloudflare 看到的是加密字节,我们什么也看不到。
具体来说,"零云"涵盖以下内容:
- 源代码 ——从不传输给我们。Claude Code 读取的文件内容留在你的 Mac 上。当 iPhone 应用的审批视图显示文件差异时,它们直接从 Mac 传输到 iPhone。
- 会话记录 ——你与 Claude Code 之间的对话留在 Mac 上。iPhone 接收终端输出流用于显示,但该流从 Mac 到 iPhone,没有我们控制的中间环节。
- Shell 命令输出 ——留在 Mac 上。流式传输到 iPhone 用于显示,不存储在其他地方。
- 审批决定 ——从 iPhone 传输到 Mac。我们没有你批准或拒绝了什么的记录。
- 推送通知载荷 ——这是我们与 Apple 基础设施交互的唯一领域。详见下方讨论。
iPhone 与 Mac 之间的认证
当你将 iPhone 与 Mac companion 配对时,设备通过以下两种方式之一建立共享密钥:
二维码配对。 Mac companion 生成一个包含一次性配对令牌和 Mac 本地网络地址的二维码。你用 iPhone 应用扫描它。设备在初始连接上交换加密密钥,后续连接使用这些密钥进行认证。配对令牌是一次性的,60 秒后过期。
手动输入代码。 对于二维码扫描不方便的情况,Mac companion 会显示一个 6 位数字代码。你在 iPhone 上输入。该代码与二维码令牌作用相同——引导密钥交换。
配对完成后,认证是自动的。iPhone 在每次连接时出示存储的密钥,Mac companion 根据已授权设备列表进行验证。无需密码、无需轮换令牌、无需 OAuth 流程。
配对数据在 Mac 上存储在 macOS Keychain 中,在 iPhone 上存储在 iOS Keychain 中。两者都是由 Apple Secure Enclave 提供的硬件加密存储。
信任边界
每个安全模型都有信任边界——你必须信任外部事物的界限。我们希望明确说明我们的信任边界:
你信任 Anthropic 的 Claude Code
Tactic Remote 是 Claude Code 的控制层。Claude Code 本身与 Anthropic 的 API 通信以生成响应。你的提示词和 Claude 的响应会经过 Anthropic 的服务器。这是使用 Claude Code 的固有特性,不是 Tactic Remote 添加的,也不是它能移除的。Anthropic 的数据处理政策适用于这些流量。
你信任 Apple 的推送通知
当 Mac companion 需要唤醒 iPhone 以发送审批请求时,它会通过 Apple 推送通知服务 (APNs) 发送推送通知。通知载荷包含最少的提示信息——会话名称和操作类型(例如,"Claude 想要运行一个 shell 命令")。它不包含实际命令、文件内容或任何源代码。
我们将通知载荷设计得尽可能精简。详细的审批信息在你打开通知时由 iPhone 应用直接从 Mac 获取。Apple 能看到你收到了一条来自 Tactic Remote 的通知,但看不到 Claude Code 正在做什么。
你信任 Cloudflare(仅限 Tunnel 模式)
如果你使用 Cloudflare Tunnel 进行远程访问,流量会经过 Cloudflare 的网络。正如我们在 Cloudflare 深度集成文章 中所讨论的,传输层由 Cloudflare 提供,但应用载荷使用 Cloudflare 不拥有的密钥进行加密。
你信任你的本地网络(仅限局域网模式)
在局域网模式下,连接的安全性取决于你的 Wi-Fi 网络。在受信任的家庭或办公网络中,这没问题。在公共 Wi-Fi 网络中,局域网模式的流量理论上可能被拦截。无论网络类型如何,我们都会为 WebSocket 连接使用 TLS,但在通过不受信任的网络连接时,我们建议使用 Cloudflare Tunnel 模式。
我们能看到什么和不能看到什么
我们认为数据访问的透明度是不可妥协的。以下是精确的说明:
| 数据 | 我们能看到吗? | 说明 |
|---|---|---|
| 源代码 | 否 | 从不离开你的 Mac |
| 会话记录 | 否 | 仅限 Mac 到 iPhone |
| 执行的命令 | 否 | 仅限 Mac 到 iPhone |
| 审批决定 | 否 | 仅限 iPhone 到 Mac |
| 读取或写入的文件 | 否 | 仅限本地 Mac |
| 通知投递状态 | 是 | Apple 报告投递状态 |
| 应用崩溃报告 | 是(可选) | 标准 iOS 崩溃报告 |
| 使用分析 | 是(可选) | 会话计数、时长——无内容 |
可选的分析数据(如果启用)仅包含聚合使用指标:启动了多少会话、平均会话时长、连接模式分布。不包含内容、文件路径或命令文本。分析功能可在 iPhone 应用的设置中完全关闭。
网络架构
以下描述了典型 Tactic Remote 会话中网络层面发生的情况:
局域网模式
你的路由器看到两台设备之间的本地流量。你的 ISP 看不到与 Tactic Remote 相关的任何内容。唯一的外部流量是 Claude Code 与 Anthropic API 的通信,无论是否使用 Tactic Remote,这都会发生。
Cloudflare Tunnel 模式
Cloudflare 看到的是加密的应用流量。Mac 上的 cloudflared 守护进程终止 Cloudflare 隧道,并将流量转发到 localhost 上的 Mac companion。除 Cloudflare 边缘网络外,没有其他外部方处理流量,且 Cloudflare 无法解密应用层加密。
威胁模型
我们考虑了以下攻击场景以及架构如何应对:
Wi-Fi 网络被入侵。 WebSocket 连接上的 TLS 可防止被动窃听。执行 TLS 拦截(MITM)攻击的主动攻击者需要突破 iPhone 应用中的证书锁定,这是一种高复杂度的攻击。
iPhone 被盗。 Tactic Remote 应用需要生物识别认证(Face ID 或 Touch ID)才能打开。配对密钥存储在 Secure Enclave 中,即使在越狱设备上也无法提取。被盗的 iPhone 在没有机主生物识别的情况下无法批准操作或查看会话数据。
Mac 被入侵。 如果攻击者能访问你的 Mac,他们就能访问 Claude Code 能访问的一切——无论是否使用 Tactic Remote 都是如此。Tactic Remote 不会扩大被入侵 Mac 的攻击面。
恶意 Mac companion 更新。 Mac companion 作为签名二进制文件通过我们的网站分发。macOS Gatekeeper 在执行前验证代码签名。我们没有推送静默更新的能力——用户必须手动下载并安装更新。
为什么这很重要
AI 辅助开发工具的趋势是云托管代理,在沙箱环境中运行,通过仓库集成访问你的代码。这种模式适用于某些团队,但它要求你信任工具供应商来处理你的源代码、凭据和开发工作流。
Tactic Remote 采取相反的方式。你的 Mac 就是执行环境。代码留在你的磁盘上。凭据留在你的 Keychain 中。唯一涉及的 AI 服务是 Claude Code 与 Anthropic API 的现有关系,这是你安装 Claude Code 时就已同意的。
这种架构有其代价。你需要一台保持开机的 Mac。你需要自行管理网络连接。你无法享受可从任何浏览器访问的云端仪表板的便利。
我们认为这个权衡是值得的。对于从事专有软件开发、处理敏感数据或在受监管行业运营的开发者来说,能够说"我的代码从未离开过我的机器"不是一个功能——而是一个要求。
有关安全加固建议和详细配置指南,请参阅我们的安全与网络加固文档。