OpenClaw系列第12课:exec 工具详解 - 让 AI 真正执行命令

这是「OpenClaw 教程课程」第 12 课。
上一课我们讲了 Skills:它解决的是“这类任务应该怎么做”。这一课开始讲真正能落地执行的工具:exec

图:exec 让 Agent 不只是回答命令应该怎么写,而是可以在合适权限下真正执行命令、读取结果、继续判断下一步。

很多人第一次用 AI 助手时,最自然的用法是:

“帮我看看这个命令怎么写。”

这当然有用。

但 OpenClaw 更进一步。

它不只是让 AI 告诉你命令,而是可以在你允许的范围内,直接通过 exec 工具执行命令,然后根据真实输出继续判断。

这就是 exec 最核心的价值:

让 Agent 从“会建议”变成“会动手”。

不过,exec 也正因为强,所以一定要理解它的边界和安全机制。

这一课我们就把它讲清楚。

一、exec 是什么?

exec 是 OpenClaw 里用于执行 shell 命令的工具。

你可以把它理解成:

Agent 手里的一扇终端窗口。

通过它,Agent 可以做很多真实操作,比如:

  • 查看当前目录
  • 检查文件是否存在
  • 运行构建命令
  • 执行测试
  • 查看服务状态
  • grep / rg 搜索代码
  • 调用脚本
  • 在允许的情况下管理本机或节点上的任务

例如你可以直接说:

1
帮我检查这个项目有没有 package.json,然后看看有哪些 npm scripts。

如果当前 Agent 有 exec 权限,它就可以真的运行类似:

1
2
ls
cat package.json

然后把结果读回来,而不是靠猜。

二、exec 和普通回答最大的区别

普通回答是“语言层面的推理”。

exec 是“环境里的动作”。

区别非常大。

普通回答更像这样

你问:

1
Linux 怎么查看磁盘空间?

AI 回答:

1
df -h

这只是告诉你命令。

exec 更像这样

你问:

1
帮我看看这台机器磁盘空间够不够。

Agent 可以实际执行:

1
df -h

然后根据真实输出告诉你:

  • 哪个分区快满了
  • 哪个目录可能需要清理
  • 是否影响 OpenClaw 运行

所以 exec 的重点不是“会写命令”,而是:

可以用真实环境反馈来闭环任务。

这也是 Agent 能从聊天机器人变成操作助手的关键一步。

三、exec 最适合做哪些事?

exec 很适合用在这些场景:

1)检查环境状态

例如:

1
帮我看一下 OpenClaw 当前状态。

可能会用到:

1
2
openclaw status
openclaw gateway status

这类任务特别适合 exec,因为状态是实时变化的,不能只靠记忆回答。

2)运行测试或构建

例如:

1
我刚改了代码,帮我跑一下测试。

可能会用到:

1
2
3
npm test
pnpm test
npm run build

这类任务如果不实际执行,就只能“看起来像检查过”。

但用了 exec,Agent 可以拿到真实失败信息,再继续修。

3)搜索和整理项目文件

例如:

1
帮我找一下项目里哪里用到了 gateway status。

可能会用到:

1
rg "gateway status"

这比让模型凭上下文猜要可靠得多。

4)执行小脚本

例如:

1
帮我批量统计 articles 目录里每篇文章的标题。

可能会用到:

1
grep -R "^title:" articles

或者写一段临时脚本来处理。

5)启动长时间任务

例如:

1
帮我跑一次完整构建,如果时间长就后台执行。

这时候 exec 可以配合后台进程机制,后面再用 process 看进度。

图:exec 适合环境检查、测试构建、搜索文件、执行脚本、运行长任务等需要真实反馈的场景。

四、exec 的基本执行方式:前台运行

最简单的执行方式,就是前台运行。

也就是:

  1. Agent 发起命令
  2. OpenClaw 执行命令
  3. 命令结束后,把输出返回给 Agent
  4. Agent 根据输出继续回答

比如:

1
2
pwd
ls -la

这种短命令就很适合前台执行。

它的特点是:

  • 简单
  • 直接
  • 适合很快结束的命令
  • 输出会立刻进入当前对话上下文

但如果命令运行时间比较长,例如:

1
npm run build

或者:

1
pnpm test

那就不一定适合一直前台等着。

这时候就要理解后台执行。

五、长任务:exec 可以转入后台

OpenClaw 的 exec 支持后台执行。

文档里有两个常见参数:

  • yieldMs:命令运行超过多少毫秒后自动转后台
  • background:是否一开始就直接后台运行

你不需要在日常对话里手写这些参数,但你要知道背后的机制。

比如你让 Agent:

1
帮我跑构建,时间长的话后台跑。

它可以启动命令,短时间内如果没结束,就把任务放到后台。

后台执行时,OpenClaw 会返回一个后台 session id,后续可以用 process 工具继续查看。

这点很重要:

exec 负责启动命令,process 负责管理后台命令。

六、process 是 exec 的搭档

如果说 exec 是“启动命令”,那 process 就是“管理已经启动的命令”。

process 常见动作包括:

  • list:列出后台任务
  • poll:查看任务新输出和退出状态
  • log:读取任务日志
  • write:给进程发送 stdin
  • send-keys:给 PTY 会话发送按键
  • kill:终止后台任务

一个典型流程是:

1
帮我跑 npm run build,如果没结束就后台执行。

然后后续你可以问:

1
刚才那个构建跑完了吗?

Agent 就可以用 process 去查。

这比让 Agent 每隔几秒死循环检查要好得多。

OpenClaw 文档里也明确强调:

对于已经开始的长任务,启动一次即可;需要状态、日志或人工干预时再用 process。不要用 sleep 循环或反复轮询来模拟定时任务。

如果你要“以后某个时间再做”,应该用后面课程会讲的 cron,而不是让 exec 跑一个 sleep 3600

图:exec 用来启动命令;命令转入后台后,process 用来查看日志、发送输入或终止任务。

七、什么时候需要 pty?

exec 默认适合跑普通命令。

但有些命令需要一个真实终端环境,也就是 TTY。

例如:

  • 交互式 CLI
  • 终端 UI
  • 某些 coding agent
  • 需要方向键、回车、Ctrl-C 的程序

这种情况下,exec 可以使用 pty: true

你可以先简单理解成:

普通命令用默认 exec;像终端软件一样交互的命令,需要 PTY。

后续如果你看到 Agent 需要 send-keyspastesubmit 这些动作,通常就和 PTY 场景有关。

八、exec 在哪里执行?host 很关键

exec 不是抽象地“在云上执行”。

它一定会落到某个执行位置。

OpenClaw 文档里提到,host 常见取值包括:

  • auto
  • sandbox
  • gateway
  • node

你可以先这样理解:

1)auto

默认策略。

如果当前会话启用了 sandbox,就在 sandbox 里跑;如果没有 sandbox,就在 gateway 上跑。

2)sandbox

在沙箱环境里跑。

更安全,但能访问的文件、命令、系统资源受限制。

3)gateway

在 Gateway 所在机器上跑。

这就接近真实主机环境了,所以更要注意审批和权限。

4)node

在已配对的节点上跑。

比如某台 macOS 节点、手机 companion 节点或其他 headless node host。

这里新手最容易误解的一点是:

host=auto 不是“哪里都可以随便跑”,它只是一个默认路由策略。

如果启用了 sandbox,默认会优先待在 sandbox 里。

九、sandbox、tool policy、elevated:三个安全概念别混淆

exec 一定会碰到这三个词:

  • sandbox
  • tool policy
  • elevated

它们很容易混,但其实控制的是不同层面。

1)sandbox:决定在哪里跑

Sandbox 关心的是执行环境。

比如:

  • 在容器里跑
  • 在真实 gateway 主机上跑
  • 是否能访问宿主机文件

它回答的问题是:

命令跑在哪里?

2)tool policy:决定能不能用这个工具

Tool policy 关心的是工具是否可用。

如果 exec 被工具策略禁用了,那就算你说 /exec 也没有用。

它回答的问题是:

Agent 有没有资格调用 exec?

3)elevated:sandbox 下的主机逃逸开关

Elevated 只影响 exec

当 Agent 在 sandbox 里时,/elevated on 可以让 exec 跑到 sandbox 外面的配置目标上。

/elevated full 则是更强模式,会跳过 exec approvals。

所以 elevated 回答的是:

在 sandbox 场景下,要不要允许 exec 跑到外面?

记住这句话就不容易乱:

sandbox 管位置,tool policy 管工具,elevated 管 exec 是否能从沙箱出去。

图:exec 的安全控制不是一个开关,而是由 sandbox、tool policy、approvals、elevated 等多层共同决定。

十、exec approvals:为什么有时命令需要你批准?

因为 exec 能真的执行命令,所以 OpenClaw 提供了审批机制。

尤其是当 sandboxed agent 想在真实 host 上执行命令时,审批就很重要。

OpenClaw 的 exec approvals 可以控制:

  • 哪些命令允许执行
  • 哪些命令需要提示确认
  • 哪些命令完全拒绝
  • 是否允许一次
  • 是否持久信任类似命令

文档里把安全模式分成几类:

security: deny

拒绝 host exec。

适合非常保守的环境。

security: allowlist

只允许白名单里的命令。

适合希望 Agent 能做一些固定动作,但不能随便执行命令的环境。

security: full

允许执行。

这就是很开放的模式,适合你完全信任当前环境和 Agent 行为时使用。

还有一个审批行为参数:

ask: off

不提示。

ask: on-miss

白名单没命中时才提示。

ask: always

每次都提示。

这套机制的意义很简单:

exec 的能力要强,但不能强到没有刹车。

十一、YOLO 模式是什么?

你可能会在文档里看到 YOLO mode。

它大概意思是:

不走审批,直接允许 host exec。

通常对应的是:

  • security=full
  • ask=off

文档也提醒了一个重点:

YOLO 来自 host 执行策略,不是来自 host=auto

也就是说:

  • host=auto 只是决定默认跑在哪里
  • YOLO 是决定执行时要不要审批

新手不要把这两个混在一起。

如果你只是自己本地玩、环境可控,YOLO 会很方便。

但如果是服务器、多人环境、生产机器,我更建议先用保守策略:

  • sandbox 优先
  • 必要命令 allowlist
  • 高风险命令 ask always

十二、一个实用建议:让 Agent 先查,再动手

使用 exec 时,我建议你养成一个习惯:

先让 Agent 查看状态,再让它修改。

例如不要一上来就说:

1
把没用的文件都删掉。

更好的说法是:

1
先帮我列出你认为可以清理的文件和原因,不要删除。等我确认后再执行。

这会安全很多。

再比如:

1
先检查当前 Git 状态和变更内容,不要提交,也不要改文件。

然后再根据结果决定下一步。

exec 本身不是危险的。

真正危险的是:

  • 目标不清楚
  • 范围不清楚
  • 权限过大
  • 没有确认就修改

所以使用 exec 的最佳心法是:

读操作大胆让它做,写操作让它先说明。

十三、适合新手的 exec 提问模板

你可以直接复制这些句式。

1)检查状态

1
帮我检查当前 OpenClaw 状态,只做只读命令,不要修改配置。

2)排查问题

1
帮我排查为什么服务没起来。先收集信息和日志,不要重启服务。

3)运行测试

1
帮我运行项目测试。如果失败,先总结失败原因,不要自动大改代码。

4)后台长任务

1
帮我运行构建。超过 10 秒还没结束就放到后台,后面告诉我怎么查看进度。

5)谨慎修改

1
先列出你准备执行的命令和风险,我确认后再执行会修改系统的命令。

这些说法的好处是,你把“权限边界”说清楚了。

Agent 就更容易按安全方式执行。

十四、常见坑

坑 1:把 exec 当成普通问答

如果你只是问:

1
怎么查看端口占用?

那 AI 可能只会回答命令。

如果你想让它真正检查,要说:

1
帮我实际检查当前机器的端口占用情况。

坑 2:长任务一直前台等

构建、测试、下载、扫描这类任务可能很久。

更好的方式是:

1
时间长就后台跑。

后面再让 Agent 用 process 查看。

坑 3:在 sandbox 里找不到宿主机文件

如果当前会话在 sandbox 中,能看到的文件不一定等于宿主机完整文件系统。

这不是 bug,而是安全边界。

遇到类似问题,可以先让 Agent 检查:

1
openclaw sandbox explain

它会显示当前 sandbox、工具策略和 elevated 相关状态。

坑 4:以为 /exec 可以突破工具禁用

不可以。

如果工具策略里禁用了 exec/exec 不能强行恢复。

/exec 只是调整当前 session 的 exec 默认选项,例如 host、security、ask、node。

它不是万能授权。

坑 5:把 elevated 当成所有工具的提权

也不对。

Elevated 只影响 exec

它不会让 browsermessagewrite 等其他工具自动拥有更高权限。

十五、这一课最值得记住的一句话

如果今天只记一句话,我建议你记这句:

exec 让 Agent 能在真实环境里执行命令;process 让 Agent 能管理长时间运行的命令。

再补一句安全原则:

读操作可以放开一点,写操作一定先明确范围和风险。

十六、总结

今天这节课,我们把 OpenClaw 的 exec 工具拆开讲了一遍:

  1. exec 是让 Agent 执行 shell 命令的工具。
  2. 它最大的价值是基于真实环境反馈完成任务闭环。
  3. 短命令适合前台执行,长任务适合后台执行。
  4. 后台任务要配合 process 管理日志、状态、输入和终止。
  5. host 决定命令跑在哪里:auto、sandbox、gateway、node。
  6. sandbox、tool policy、elevated 是三层不同的安全概念。
  7. exec approvals 用来给 host 执行加刹车。
  8. 使用 exec 时,先查再改,是最稳的习惯。

学会 exec 之后,你会发现 OpenClaw 的体验会明显变得不一样。

它不再只是“给建议的 AI”,而是可以变成一个能检查、能执行、能验证、能继续推进的操作伙伴。

下一课预告

下一课我们继续讲第三模块里的另一个强工具:

第 13 课:browser 工具——让 AI 操作网页

也就是:

  • AI 怎么打开网页
  • 怎么点击、输入、截图
  • browser 和普通网页搜索有什么区别
  • 哪些任务适合交给 browser,哪些不适合

🦞 本文由八条撰写,持续更新中。