一个藏在“/tmp/”里的"安全陷阱",以及如何用一行配置彻底解决它
起因:Agent 截了图,我却啥也看不到
最近一直在用 OpenClaw 把 AI 接入飞书,让 Agent 帮我处理日常任务:写报告、查数据、截桌面截图汇报进展。
这套工作流跑起来相当顺手,直到有一天,我让 Agent 截个屏发给我,它回复说:
截图已完成:
/tmp/desktop_2223.png
然后……就没了。飞书里显示的是一个 📎 附件图标,也看不了,效果类似下方截图:

完全不是我想要的"直接预览图"效果。
我以为是网络问题,重试了几次,还是一样。
排查:错误信息藏在哪里?
打开 OpenClaw 日志(~/.openclaw/logs/),发现了这么一段报错:
LocalMediaAccessError: Local media path is not under an allowed directory:/tmp/screen.png这才是关键。
意思是:OpenClaw 出于安全考虑,限制了媒体文件的访问目录白名单。 等目录不在白名单内,所以插件直接拒绝发送这个文件。
以前的版本是直接可以返回图片的,现在安全等级提升了。
截图工具默认把图片存到了 /tmp/(这是多数 macOS 截图工具的默认行为),但 OpenClaw 的媒体管道只信任它自己的工作区(workspace)目录。
理解根因:OpenClaw workspace 是什么?
OpenClaw 有一个专属的"工作区"概念,默认位置在:
~/.openclaw/workspace/这是 Agent 的"家",所有文件操作、上下文引用、媒体文件,都应该落在这里。
从安全角度来说,这个设计是合理的:不能让 Agent 随意读写系统任意路径,尤其是发送本地文件到外部服务时,必须有明确的边界。
但问题来了:截图工具的默认保存路径是 /tmp/,完全在白名单之外。Agent 截图成功了,文件也在磁盘上,但就是"发不出去"。
解决方案:修改 TOOLS.md ,让截图保存到工作区
OpenClaw 支持通过 TOOLS.md 文件来定制 Agent 使用工具的行为。这个文件就在工作区里,Agent 每次启动时都会加载它作为工具使用规范。
第一步:创建截图专用目录
mkdir -p ~/.openclaw/workspace/screenshots第二步:修改 ,告诉 Agent 截图要保存到工作区
打开 ~/.openclaw/workspace/TOOLS.md(没有就新建),加入以下类似内容:
## 截图工具使用规范使用截图工具时,必须将图片保存到工作区目录,不允许保存到 /tmp/ 或其他系统临时目录。正确的截图保存路径格式:- ~/.openclaw/workspace/screenshots/screenshot_<timestamp>.png- ~/.openclaw/workspace/output/<filename>.png发送图片时,使用相对于工作区的路径:- MEDIA:./screenshots/screenshot_<timestamp>.png- MEDIA:./output/<filename>.png严禁使用以下路径发送媒体文件:- /tmp/ 下的任何文件- 不在 ~/.openclaw/workspace/ 下的绝对路径第三步:重启网关,让配置生效
# macOS 用户:通过 OpenClaw 菜单栏 App 重启网关# 或者:pkill -f openclaw-gatewayopenclaw gateway run当然,你也可以直接通过飞书“下指令”完成这个设置(依赖模型能力):
效果验证
改完之后,让 Agent 重新截图:

飞书里直接显示预览图,完美!🎉
接下来的使用场景,你就可以发挥自己的想象了!这里就举一个扫码登录的例子:

这个问题的本质是什么?
这个问题背后有一个通用模式,不只是截图,凡是 Agent 生成文件后需要"发出去"的场景,都要注意:
• 生成的 PDF 报告 → 存在工作区 • 数据分析的图表 → 存在工作区 • 音视频文件 → 存在工作区
一句话总结:文件要落在工作区,引用要用相对路径。
相关资源
• OpenClaw 官方文档 · Agent Workspace:https://docs.openclaw.ai/gateway/agent-workspace • 本文对应的 GitHub Issue:https://github.com/openclaw/openclaw/issues/22608 • 飞书插件权限配置参考( im:resource权限也必须开启)
如果这篇文章帮到了你,欢迎转发给同样在折腾 OpenClaw 的朋友。有问题也可以在 评论区交流 👇
夜雨聆风