沙箱

概述

Hawa Code 提供原生沙箱功能,为 Agent 执行提供更安全的环境,同时减少频繁的权限提示。沙箱机制预先定义边界,让 Hawa Code 能够在降低风险的前提下更自由地工作,而无需为每个 bash 命令请求权限。
沙箱化的 bash 工具使用操作系统级别的原语来强制执行文件系统和网络隔离。

工作原理

文件系统隔离

沙箱化的 bash 工具将文件系统访问限制在特定目录:

  • 默认写入行为:对当前工作目录及其子目录具有读写权限
  • 默认读取行为:可以读取整个计算机,但某些目录除外
  • 阻止访问:未经明确许可无法修改当前工作目录之外的文件
  • 可配置:通过设置定义自定义的允许和拒绝路径

你可以使用设置中的 sandbox.filesystem.allowWrite 授予对额外路径的写入权限。这些限制在操作系统级别强制执行(macOS 上使用 Seatbelt,Linux 上使用 bubblewrap),因此它们适用于所有子进程命令,包括 kubectl、terraform 和 npm 等工具,而不仅仅是 Hawa Code 的文件工具。

网络隔离

网络访问通过运行在沙箱外部的代理服务器进行控制:

  • 域名限制:只能访问已批准的域名
  • 用户确认:新的域名请求会触发权限提示(除非启用了 allowManagedDomainsOnly,它会自动阻止非允许的域名)
  • 自定义代理支持:高级用户可以对外出流量实施自定义规则
  • 全面覆盖:限制适用于命令生成的所有脚本、程序和子进程

操作系统级强制执行

沙箱化的 bash 工具利用操作系统安全原语:

  • macOS:使用 Seatbelt 进行沙箱强制执行
  • Linux:使用 bubblewrap 进行隔离
  • WSL2:使用 bubblewrap,与 Linux 相同

WSL1 不受支持,因为 bubblewrap 需要仅在 WSL2 中可用的内核功能。

这些操作系统级限制确保 Hawa Code 命令生成的所有子进程都继承相同的安全边界。

开始使用

前置条件

在 macOS 上,沙箱功能开箱即用,使用内置的 Seatbelt 框架。
在 Linux 和 WSL2 上,需要先安装必需的软件包:

Ubuntu/Debian

sudo apt-get install bubblewrap socat

Fedora

sudo dnf install bubblewrap socat

启用沙箱

你可以通过运行 /sandbox 命令来启用沙箱:

/sandbox

这将打开一个菜单,你可以在其中选择沙箱模式。如果缺少必需的依赖项(例如 Linux 上的 bubblewrap 或 socat),菜单将显示适用于你平台的安装说明。