opencode 是一款人们在 Mac 终端中运行的开源 AI 编程智能体,常见于“opencode security mac”“is opencode safe”和“opencode network access”等搜索。其文档对权限模型以及唯一一项会把对话上传到服务器的功能说得很直接。本文列出这些有文档记载的事实,然后说明 HisnLabs 开发的 macOS 设备端防火墙 FireAI 如何监视该程序发起的连接,以及它做不到什么。
opencode 是什么
opencode 自称“the open source AI coding agent”(开源 AI 编程智能体)。其 GitHub 代码仓库已从 sst 组织迁移到 anomalyco,采用 MIT 许可证。它以终端界面、桌面应用(README 中标注为 beta)和 IDE 扩展的形式提供,并包含两个内置智能体:默认的完全访问智能体 build,以及会请求权限的只读智能体 plan [1]。用户使用 API 密钥将其连接到模型提供方;入门介绍推荐 OpenCode Zen,这是一份经 opencode 团队测试的精选模型列表 [2]。
opencode 如何在 macOS 上运行
README 列出了在 macOS 上安装的几种方式:脚本 curl -fsSL https://opencode.ai/install | bash、npm、bun、pnpm 或 yarn、Homebrew,以及桌面应用的 DMG。对于命令行安装,你启动的程序名为 opencode,系统中显示的进程也是这个名称。
它能访问什么,如何加以控制
权限系统有三种状态:allow、ask 和 deny。规则可以全局设置或按工具设置,并可以匹配工具输入的模式,以最后一条匹配的规则为准。文档说明,大多数权限默认为 allow;doom_loop 和 external_directory 默认为 ask,.env 文件默认被阻止。--auto 标志会自动批准请求,除非有明确的 deny 规则适用 [3]。
external_directory 权限管理项目工作区之外的路径。这些权限管理的是智能体使用工具所做的事情,例如读取、编辑和运行命令。文档并未把它们描述为网络允许列表。
它连接到哪里
关于分享的页面记录了唯一一项会把对话发送到 opencode 服务器的功能。/share 命令会创建一个公开 URL,并把对话历史、消息、响应和会话元数据同步到这些服务器。分享默认为手动,因此不执行该命令就不会发送任何内容;可以在 opencode.json 中用 "share": "disabled" 关闭此功能,已分享的会话在使用 /unshare 之前一直可以访问 [4]。本文查阅的页面没有列出更多域名,因此除了你的模型提供方和工具所联系的任何地方之外,应把其他目的地视为此处未有文档记载。
用 FireAI 监视 opencode
FireAI 是一款在 Mac 上运行的 macOS 防火墙。其 Agent profile 功能可识别 19 种 AI 智能体,学习每种智能体通常连接到哪里,并标记新出现的情况。FireAI 的 Agent profile 页面把 opencode 列为按程序名称识别的命令行智能体之一。因此,名为 opencode 的程序及其子进程(例如 shell 或 git)发起的连接都会归属于 opencode。
- 在最初的 3 天里,FireAI 学习该智能体通常联系的目的地,并按域名分组,因此 api.anthropic.com 会归为 anthropic.com。在此期间不会标记任何内容。
- 此后,基线之外首次出现的目的地会在 Suggestions、AI agents 卡片和 Quick Review 中被标记以供审查。向左滑动为拦截,向右滑动为“It’s fine”(没问题)。
- 上传峰值也会被标记:某一小时内该智能体的上传量至少是其此前最繁忙一小时的 4 倍,且不少于 25 MB。
- FireAI 只使用元数据,即主机名和字节数,从不读取连接的有效载荷。
为 opencode 设置 FireAI
- 安装 FireAI,然后像平常一样使用该智能体。3 天学习期会自动开始,期间不会标记任何内容。
- 打开 Suggestions,找到 AI agents 卡片。学习期结束后,针对该智能体的标记会出现在那里以及 Quick Review 中。
- 审查每一个标记。选择 Block 会为发起连接的进程创建一条规则,选择“It’s fine”会把该目的地加入智能体的基线。
- 若要让智能体只访问它已经在用的地方,请在安全模式菜单中选择 Agent profile,它与 Home、Coffee shop、Paranoid 和 Under attack 并列。你的规则会像在 Home 模式中一样生效,而一旦智能体完成学习,连接到基线之外目的地的请求会被拦截,而不只是被标记。
- 被拦截的目的地会出现在 AI agents 卡片中,并附有 Allow 和 Keep blocked 两个选项。Allow 会把它加入基线,智能体随即可以访问。Keep blocked 会创建一条在所有模式下都有效的拦截规则。
你为网站、域名或地址编写的允许规则仍然优先,DNS 和你的本地网络也绝不会被拦截。对于 FireAI 未列出的智能体,请在按 App 设置规则中为其程序手动编写规则。Agent profile 模式需要 FireAI 1.0.3 或更高版本,识别 opencode 需要 1.0.4。
局限
- opencode 的权限规则决定哪些工具调用被批准,而在
--auto模式下,它们会批准其中的大部分。FireAI 则在连接层工作,因此两者是互补而非重叠的关系。 - opencode 是按程序名称识别的,这意味着它只是被标注,而未经验证:只有 Claude Code、Claude 和 Cursor 会根据其开发者的签名进行核验。
- FireAI 无法阻止提示注入。它通过标记数据离开你的 Mac 的路径并允许你拦截该路径来限制损害。
- FireAI 看不到提示、MCP 工具的内容、文件访问或技能。TLS 隐藏了有效载荷,而且 FireAI 并不在智能体内部。
- 很快就退出的子进程可能会被遗漏,而且子进程是按路径而非签名匹配的。
- 在 3 天学习期内不会标记任何内容,上传峰值只会被标记,不会被拦截。
- 在 Agent profile 模式下,直接连接到没有主机名的裸 IP 地址时,会按地址进行匹配,因此智能体常用服务的新地址在你允许之前会被拦截。
其他智能体
同样的方法适用于 FireAI 识别的每一种智能体。请参阅其他指南:Claude Code、Claude 桌面 App、Cursor、ChatGPT Mac App、OpenAI Codex CLI、OpenClaw、Hermes Agent、Gemini CLI、GitHub Copilot CLI、Amp、Qwen Code、Aider、Goose、Crush、Windsurf、Kiro、Trae、Meta 的 Muse、在 python 或 node 上运行的任何其他 AI 智能体。完整的功能说明见 HisnLabs 发布的 Agent profile 文档页面。
FireAI 和 HisnLabs 在其中扮演的角色
FireAI 学习 opencode 在你的 Mac 上通常连接到哪里,并标记首次出现的目的地或上传峰值,而不读取你的数据。
FireAI 是 HisnLabs 自己的产品:一款直接在 Mac 上运行的 AI 防火墙。它用通俗易懂的语言显示你的应用建立的每一个连接,并让你决定哪些数据可以离开你的 Mac——它的 AI 在本地运行,因此你的流量永远不会发送给我们或任何其他人。HisnLabs 的安全研究团队负责让这些判断保持准确:归类哪些域名只是普通的遥测、哪些属于真正的服务,追踪连接背后的国家和网络,并用真实的流量模式训练设备端模型(FireAI Pilot 功能)——这一切都不会离开你的 Mac。
你可以阅读它背后的技术决策,或试用 FireAI 17 天:HisnLabs 出品的 FireAI。
