openclaw

OpenClaw Exec Approval 配置避坑指南

遇到 Exec approval is required, but chat exec approvals are not enabled 错误?这篇帮你彻底解决。

OpenClaw Exec Approval 配置避坑指南

遇到 “Exec approval is required, but chat exec approvals are not enabled” 错误?这篇帮你彻底解决。

引言

如果你在部署 OpenClaw 时遇到这个错误:

Exec approval is required, but chat exec approvals are not enabled on Telegram.
Approve it from the Web UI or terminal UI, or enable Discord, Slack, or Telegram exec approvals.

那么这篇文章就是为你准备的。让我们深入了解 OpenClaw 的 Exec Approvals 机制。

1. Exec Approvals 是什么

OpenClaw 的 exec 工具能让 Agent 直接在宿主机上执行 shell 命令。Exec Approvals 就是这道安全锁——命令执行前需要人工确认。

关键点:默认行为是拒绝所有 exec,或者弹出审批等待手动批准。很多人在升级或全新部署后发现 Agent 突然”失效”,问题就出在这里。

2. 两种审批方式及问题

2.1 Web UI 审批

访问 http://你的gateway地址:18789,待审批的命令会出现在界面里,点击 Allow / Deny 即可。

优点:最稳定可靠

缺点:每次都要开浏览器,移动端场景麻烦

2.2 聊天频道审批

支持在飞书、Telegram、Discord 等频道用命令审批:

/approve <id> allow-once   # 本次放行
/approve <id> allow-always # 加入白名单
/approve <id> deny         # 拒绝

两个实际问题

  1. 消息里经常没有审批 ID — Agent 触发审批时,ID 根本不显示,只能回 Web UI 查找
  2. ID 过期后报错 — 审批 ID 有超时限制,没及时输入或 gateway 重启后 ID 失效

3. 为什么配了 security=full, ask=off 还要审批

这是最常见的坑!原因是 OpenClaw 有 两套独立的配置,必须同时设置。

3.1 第一套:exec-approvals.json

Docker Compose 部署通常在宿主机 .openclaw 目录下:

{
  "version": 1,
  "defaults": {
    "security": "full",
    "ask": "off",
    "askFallback": "full",
    "autoAllowSkills": true
  },
  "agents": {
    "main": {
      "security": "full",
      "ask": "off",
      "askFallback": "full",
      "autoAllowSkills": true
    }
  }
}

3.2 第二套:openclaw.json

"tools": {
  "exec": {
    "security": "full",
    "ask": "off"
  }
}

关键点tools.exec.ask 必须显式写出来,不能省略!

用 CLI 设置更方便:

docker compose run --rm openclaw-cli config set tools.exec.security full
docker compose run --rm openclaw-cli config set tools.exec.ask off

设置完记得重启 gateway:

docker compose restart openclaw-gateway

4. 三种策略选择

策略 A:完全放行(个人私有服务器)

按第 3 节同时配好两套配置,重启 gateway。适合完全可控的个人环境。

策略 B:白名单放行(团队场景推荐)

常用命令自动执行,白名单之外的命令才触发审批:

{
  "security": "allowlist",
  "ask": "on-miss",
  "askFallback": "deny",
  "autoAllowSkills": true,
  "allowlist": [
    { "pattern": "/usr/bin/git" },
    { "pattern": "/usr/bin/python3" },
    { "pattern": "/usr/local/bin/node" }
  ]
}

策略 C:保留审批,推送到飞书

不关闭审批,而是把审批请求推送到飞书:

"approvals": {
  "exec": {
    "enabled": true,
    "mode": "both",
    "targets": [
      { "channel": "feishu", "to": "你的飞书 open_id" }
    ]
  }
}

总结

Exec Approvals 配置的核心要点:

  • 两套配置必须同时设置exec-approvals.json + openclaw.json 中的 tools.exec
  • ask 字段必须显式写出,不能省略
  • 选择适合你的策略:完全放行 / 白名单 / 保留审批推送到IM

掌握这些要点,就能愉快地使用 OpenClaw 了!