SeaworkSeawork

安全

Seawork 采用类似 Docker 的客户端-服务器架构。守护进程在你的机器上运行并管理你的编程智能体。客户端(移动应用、CLI 或网页界面)连接到守护进程来监控和控制这些智能体。

你的代码永远不会离开你的机器。Seawork 是一个本地优先的工具,直接连接到你的开发环境。

架构

Seawork 守护进程可以在任何你想执行智能体的地方运行:你的笔记本、Mac Mini、VPS 或 Docker 容器。守护进程监听连接并管理智能体生命周期。

客户端通过 WebSocket 连接到守护进程。建立连接有两种方式:

  • 中继连接(推荐) ——守护进程向外连接到我们的中继服务器,客户端在那里与它会合。无需开放端口。
  • 直接连接 ——守护进程监听网络地址,客户端直接连接

中继连接(推荐)

中继是从手机连接的最简单方式。无需 VPN 配置、端口转发或防火墙配置。守护进程可以保持绑定到 localhost 或 socket 文件——它向外连接到中继,你的手机在那里与它会合。

中继的设计目标是不可信任的。你的手机和守护进程之间的所有流量都是端对端加密的。中继服务器无法读取你的消息、查看你的代码或在不被发现的情况下修改流量。即使中继被攻陷,你的数据仍然受到保护。

工作原理

  1. 守护进程生成持久的 ECDH 密钥对并存储在 $SEAWORK_HOME/daemon-keypair.json
  2. 当你扫描二维码或点击配对链接时,你的手机会收到守护进程的公钥
  3. 你的手机发送包含其公钥的握手消息。守护进程在握手完成之前不会接受任何命令。
  4. 双方执行 ECDH 密钥交换以推导共享密钥。所有后续消息使用 AES-256-GCM 加密。

中继只能看到:IP 地址、时序、消息大小和会话 ID。它无法读取消息内容、伪造消息或通过观察握手推导加密密钥。

为什么中继无法攻击你

守护进程在处理任何命令之前需要有效的加密握手。被攻陷的中继无法:

  • 发送命令 ——没有你手机的私钥,它无法完成握手
  • 读取你的流量 ——握手后所有消息使用 AES-256-GCM 加密
  • 伪造消息 ——GCM 提供认证加密;篡改的消息会被拒绝
  • 重放旧消息 ——每个会话派生新的加密密钥

信任模型

二维码或配对链接是信任锚点。它包含守护进程的公钥,这是建立加密连接所必需的。像对待密码一样对待它——不要公开分享。

如果你认为配对提供已被泄露,重启守护进程以生成新的会话 ID 并轮换中继配对。

直接连接

默认情况下,守护进程监听 127.0.0.1:6767 (仅限本地)。这对本地 CLI 使用是安全的,但无法从你的手机或其他设备访问。

Socket 文件(仅 CLI)

为了最大隔离,你可以将守护进程配置为监听 Unix socket 文件而不是 TCP 端口。这完全阻止了网络访问——只有同一机器上的进程才能连接。CLI 支持此模式,但移动应用和网页界面需要网络连接。

VPN 访问

如果你更喜欢通过中继进行直接连接,可以使用 Tailscale等 VPN。Tailscale 在你的设备之间创建私有网络,让你无需将守护进程暴露在公共互联网即可访问它。

设置步骤:

  1. 在你的机器和手机上安装 Tailscale,并将它们加入同一个 tailnet
  2. 将守护进程配置为监听你的 Tailscale IP(例如, 100.x.y.z:6767
  3. 将你的 Tailscale 主机名添加到 allowedHosts cors.allowedOrigins
  4. 在 Seawork 应用中使用 Tailscale 地址添加守护进程作为直接连接

绑定到 0.0.0.0

警告: 绑定到 0.0.0.0 会使守护进程在所有网络接口上可达,包括公共 Wi-Fi 和本地网络。这可能将你的守护进程暴露给未授权访问。如果必须绑定到所有接口,请确保有适当的防火墙规则并检查你的 allowedHosts 配置。

DNS 重绑定保护

CORS CORS 不是完整的安全边界。它控制哪些浏览器来源可以发出请求,但不能阻止恶意网站将其域名解析到你的本地机器(DNS 重绑定)。

Seawork 使用主机白名单来验证传入请求的 Host 头。带有未识别主机的请求会被拒绝。

通过 daemon.allowedHosts 中的 config.json:

  • 默认([]):允许 localhost, *.localhost和所有 IP 地址
  • ['.example.com']:允许 example.com 及任何子域,加上默认值
  • true:允许任何主机(不推荐)

智能体认证

Seawork 包装智能体 CLI(Claude Code 和 Codex),但不管理它们的认证。每个智能体提供商处理自己的凭证:

  • Claude Code ——通过 Anthropic 的 OAuth 流程认证,存储在 ~/.claude/
  • Codex ——使用你的 OpenAI API 密钥或 OAuth 会话

Seawork 从不存储或传输提供商 API 密钥。智能体在你的用户上下文中使用你现有的凭证运行。

建议

  • 使用中继 进行移动访问——这是最简单的选项,所有流量都是端对端加密的
  • 像对待密码一样对待二维码 ——任何拥有配对提供的人都可以连接到你的守护进程
  • 除非了解其影响并有适当的防火墙规则,否则永远不要绑定到 0.0.0.0
  • 保持守护进程更新 ——安全改进会定期发布