Skip to content

fix(sandbox): 开启沙箱后 Agent 无法读取飞书图片附件 #568

Description

@DeepColds

问题描述

开启 sandbox 后,飞书消息中的图片附件路径会正常注入 Agent prompt,但 Agent 在 sandbox 内访问该路径时文件不存在,导致无法读取图片。关闭 sandbox 后图片可正常读取。

该问题在普通用户直接上传的图片上可复现,不是第三方卡片、合并转发或跨租户图片权限问题;同一发送者、同类普通图片在另一个可正常工作的 bot 上能够读取。

复现步骤

  1. 为 bot 开启 sandbox
  2. 在飞书话题中向 bot 直接发送一张普通图片。
  3. Agent 收到类似以下附件提示:
<attachments hint="使用 Read 工具查看">
  <image n="1" path="~/.botmux/data/attachments/<appId>/<messageId>/<image>.jpg" />
</attachments>
  1. 让 Agent 读取该路径。

实际结果

Agent 报告:

  • prompt 中给出的 /home/<user>/.botmux/data/attachments/...jpg 不存在;
  • 尝试宿主机 canonical home(例如 /data00/home/<user>/...)后仍不存在;
  • 在当前 botmux 数据目录中按 message ID / 文件名搜索也找不到附件。

关闭 sandbox 后,同类图片可以读取。

期望结果

开启 sandbox 时,Agent 仍应能以只读方式访问当前 bot 自己的附件目录:

<SESSION_DATA_DIR>/attachments/<currentAppId>/<messageId>/...

如果同时启用 read isolation,应隐藏其他 bot 的附件,但正确只读放行当前 bot 的 attachments/<appId>/ bucket。

初步判断

可能是 sandbox namespace 中附件目录未正确映射,或 daemon 下载附件使用的 dataDir 与 sandbox/CLI 可见的 SESSION_DATA_DIR 不一致。建议重点检查:

  • prepareSandbox() 的只读文件系统与附件目录 mount;
  • sandbox + readIsolationownReadOnlyPaths / readonlyRoots 的放行顺序;
  • symlink/canonical home(如 /home/.../data00/home/...)场景;
  • daemon 下载路径与 worker 环境变量 SESSION_DATA_DIR 是否一致;
  • pty/tmux/不同 CLI adapter 的组合。

影响

开启 sandbox 的 bot 无法处理用户上传的图片。为了读取图片而关闭 sandbox 会降低隔离安全性,因此不应作为长期规避方案。

环境信息

  • 复现日期:2026-07-23
  • botmux master 检查基线:b12edef8473e4c6e06848372c92cc65239cb75f5
  • CLI:TRAE/TraeX(根据复现会话卡片)
  • sandbox:开启
  • backend、botmux 实际版本、是否同时开启 readIsolation:待复现方补充

建议补充的诊断信息

复现机器可补充(注意脱敏,不要提交 token/appSecret):

  • botmux --version
  • backend 类型(pty/tmux/riff/remote/container)
  • readIsolation 是否开启
  • daemon 日志中的 Downloaded image ... / Failed to download image ...
  • 宿主机上日志所示附件路径是否存在

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions