Crush 是 Charm 推出的终端编程智能体,Charm 是一系列知名命令行工具背后的公司。它在运行工具之前会先询问,也可以被设置为不询问,其 README 记录了不止一种网络行为。因此,对于搜索“crush ai agent security mac”“crush network access”或“is Crush safe”的读者而言,它是一个合适的研究对象。本文汇总 README 的说明,然后解释 HisnLabs 开发的 macOS 设备端防火墙 FireAI 如何监视单个编译程序的连接。
Crush 是什么
Crush 由 Charm(GitHub 上的 charmbracelet)开发,使用 Go 编写。README 将它描述为一款终端中的智能体编程软件,把工具、代码和工作流连接到语言模型。它支持众多提供方,包括 OpenAI、Anthropic、Gemini、Ollama 和 Bedrock,其模型目录通过开源提供方数据库 Catwalk 保持更新。它可以通过 stdio、HTTP 和 SSE 使用 MCP 服务器(HTTP 支持 OAuth),并使用语言服务器(LSP)获取代码上下文 [1]。
Crush 如何在 macOS 上运行
README 列出了 brew install charmbracelet/tap/crush、npm install -g @charmland/crush、go install github.com/charmbracelet/crush@latest 以及适用于 macOS 的预构建二进制文件。由于它是 Go 程序,在 Mac 上运行的进程是一个名为 crush 的单一原生可执行文件,而不是运行脚本的解释器。
它能访问什么,如何加以控制
默认情况下,Crush 在执行工具调用之前会请求许可。--yolo 标志会跳过所有询问,README 对此警告:“Be very, very careful with this feature.”(使用此功能时务必非常非常小心。)权限也可以配置:permissions allow 让指定的工具无需询问即可运行,permissions deny 则让智能体完全看不到相应工具。配置范围涵盖提供方、LSP、MCP、权限、主题和技能 [2]。
这些控制决定哪些工具调用可以继续执行。README 没有描述网络允许列表。
它连接到哪里
README 记录了两种无需你发出提示就会建立连接的行为。第一,Crush 会收集假名化的使用元数据,并声明从不收集提示和响应;可以通过 CRUSH_DISABLE_METRICS=1 或遵循 DO_NOT_TRACK 将其关闭。第二,它会自动从 Catwalk 获取提供方目录,可以通过 CRUSH_DISABLE_PROVIDER_AUTO_UPDATE=1 关闭,并通过 crush update-providers 手动刷新 [2]。其他目的地取决于你配置的提供方和 MCP 服务器。
用 FireAI 监视 Crush
FireAI 是一款在 Mac 上运行的 macOS 防火墙。其 Agent profile 功能可识别 19 种 AI 智能体,学习每种智能体通常连接到哪里,并标记新出现的情况。FireAI 的 Agent profile 页面把 Crush 列为按程序名称识别的命令行智能体之一。来自名为 crush 的程序及其子进程(例如 shell、git 或 curl)的连接,都会被归属于 Crush。
- 在最初的 3 天里,FireAI 学习该智能体通常联系的目的地,并按域名分组,因此 api.anthropic.com 会归为 anthropic.com。在此期间不会标记任何内容。
- 此后,基线之外首次出现的目的地会在 Suggestions、AI agents 卡片和 Quick Review 中被标记以供审查。向左滑动为拦截,向右滑动为“It’s fine”(没问题)。
- 上传峰值也会被标记:某一小时内该智能体的上传量至少是其此前最繁忙一小时的 4 倍,且不少于 25 MB。
- FireAI 只使用元数据,即主机名和字节数,从不读取连接的有效载荷。
为 Crush 设置 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 或更高版本,识别 Crush 需要 1.0.4。
局限
CRUSH_DISABLE_METRICS等环境变量会改变 Crush 自身发送的内容。FireAI 不读取这些设置,只报告该程序联系了哪些主机、上传了多少数据。- Crush 是按程序名称识别的,这意味着它只是被标注,而未经验证:只有 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、opencode、Aider、Goose、Windsurf、Kiro、Trae、Meta 的 Muse、在 python 或 node 上运行的任何其他 AI 智能体。完整的功能说明见 HisnLabs 发布的 Agent profile 文档页面。
FireAI 和 HisnLabs 在其中扮演的角色
FireAI 会学习 Crush 在你的 Mac 上通常连接到哪里,并标记首次出现的目的地或上传峰值,且不读取你的数据。
FireAI 是 HisnLabs 自己的产品:一款直接在 Mac 上运行的 AI 防火墙。它用通俗易懂的语言显示你的应用建立的每一个连接,并让你决定哪些数据可以离开你的 Mac——它的 AI 在本地运行,因此你的流量永远不会发送给我们或任何其他人。HisnLabs 的安全研究团队负责让这些判断保持准确:归类哪些域名只是普通的遥测、哪些属于真正的服务,追踪连接背后的国家和网络,并用真实的流量模式训练设备端模型(FireAI Pilot 功能)——这一切都不会离开你的 Mac。
你可以阅读它背后的技术决策,或试用 FireAI 17 天:HisnLabs 出品的 FireAI。
