>> 打破沙盒:OpenClaw 联动 AppleScript,AI 智能体直控 Mac 桌面
OpenClaw AppleScript Mac 自动化为纯文本代理网关提供 macOS 桌面上的物理实体 — shell 工具、桥接脚本和一个登录会话中的本机应用程序控制。
介绍
大多数球队都在跑OpenClaw作为纯文本operator:网关通道、HTTP 工具和从不接触图形会话的 shell 片段。这就留下了一个缺口——本机 Mac 应用程序(Keynote、邮件、音乐、System Settings)位于 Apple 的 GUI 自动化层后面,而不是在无头 SSH 管道内。
OpenClaw AppleScript Mac 自动化故意缩小这一差距桥梁图案: OpenClaw 的本地人外壳工具调用一个小型 bash 入口点,该入口点会调度AppleScript (osascript) 或者Automator工作流程另存为.workflow/ 应用程序包。智能体仍然用自然语言进行计划; macOS 仍然在登录的用户会话中执行 UI 操作。
从安全意义上来说,这并不是“破坏”苹果的沙箱——你承认自动化和无障碍明确的权限。您正在给OpenClaw肉体在 Mac 桌面上:打开 Keynote、导出 PDF、微调音量、调暗显示屏 — 同时在 Telegram 或 Slack 上继续聊天回复。
若要用本地模型做规划、用 macOS 自动化做执行,请搭配阅读 OpenClaw + Ollama 云 Mac mini。启用 GUI 工具前,请先完成 OpenClaw 轻量部署,确保网关健康、launchd 与磁盘水位稳定。
根据Apple 的 macOS 自动化文档、AppleScript 和Automator 是脚本和可编写脚本的应用程序之间受支持的桥梁。
架构:贝壳桥 → AppleScript / Automator
数据流
Channel message → OpenClaw planner → shell tool "mac_desktop"
→ ~/bin/openclaw-mac-bridge.sh (JSON args)
→ osascript (inline .scpt) OR open MyWorkflow.app
→ Target app (Keynote, System Events, …)
→ stdout JSON { "ok": true, "artifact": "/path/file.pdf" }
成分表
| 层 | 路径/工件 | 责任 |
|---|---|---|
| 规划师政策 | ~/.openclaw/skills/mac-desktop/SKILL.md | 何时调用桌面操作;禁止的行为 |
| 工具注册 | ~/.openclaw/config/tools/mac_desktop.json | shell命令+超时+env |
| 桥接脚本 | ~/bin/openclaw-mac-bridge.sh | 验证JSON、调度操作、日志 |
| AppleScript图书馆 | ~/Library/Application Support/OpenClaw/scripts/*.applescript | 可重复使用Keynote/音量/亮度 |
| Automator 导出 | ~/Library/Application Support/OpenClaw/workflows/ExportKeynotePDF.workflow | 复杂的多应用序列 |
| 审核日志 | ~/.openclaw/logs/mac-desktop.log | 操作,duration_ms,退出代码 |
会话规则:GUI 自动化需要已登录macOS用户使用图形会话(本地控制台或云 Mac 上的屏幕共享)。仅SSH 没有GUI 的会话无法驱动Keynote。
为什么不是纯shell呢?
| 任务 | curl/ 命令行界面 | AppleScript / Automator |
|---|---|---|
| 将Keynote导出至PDF | 没有稳定的公共 CLI | exportKeynote 字典中的命令 |
| 设置显示亮度 | 没有便携式单衬管 | tell application "System Events" |
| 批准 Finder 对话框 | 不可能无头 | 具有辅助功能的 UI 脚本 |
八步操作手册
步骤 1 — 基线网关和 GUI 会话
ssh user@your-mac
openclaw --version
curl -s http://127.0.0.1:11430/health
whoami
ls /dev/console # should exist when GUI session active
通过条件:网关HTTP 200, 开机音量≥25GB免费(与72小时护栏).
第 2 步 — 创建桥接目录
mkdir -p ~/bin
mkdir -p "$HOME/Library/Application Support/OpenClaw/scripts"
mkdir -p "$HOME/Library/Application Support/OpenClaw/workflows"
mkdir -p ~/.openclaw/logs
chmod 700 ~/bin/openclaw-mac-bridge.sh 2>/dev/null || true
第 3 步 — 安装桥接脚本
节省~/bin/openclaw-mac-bridge.sh:
#!/usr/bin/env bash
set -euo pipefail
LOG="$HOME/.openclaw/logs/mac-desktop.log"
ACTION="${1:-}"
ARG_JSON="${2:-{}}"
ts() { date -u +"%Y-%m-%dT%H:%M:%SZ"; }
case "$ACTION" in
keynote_export_pdf)
DECK="${ARG_JSON:-}"
OUT="${3:-$HOME/Desktop/openclaw-export.pdf}"
osascript "$HOME/Library/Application Support/OpenClaw/scripts/keynote_export_pdf.applescript" "$DECK" "$OUT"
echo "{\"ok\":true,\"artifact\":\"$OUT\"}"
;;
set_volume)
LEVEL="${ARG_JSON:-50}"
osascript -e "set volume output volume $LEVEL"
echo "{\"ok\":true,\"volume\":$LEVEL}"
;;
set_brightness)
LEVEL="${ARG_JSON:-0.5}"
osascript "$HOME/Library/Application Support/OpenClaw/scripts/set_brightness.applescript" "$LEVEL"
echo "{\"ok\":true,\"brightness\":$LEVEL}"
;;
run_automator)
WF="${ARG_JSON:-}"
open -a "$WF"
echo "{\"ok\":true,\"workflow\":\"$WF\"}"
;;
*)
echo "{\"ok\":false,\"error\":\"unknown_action\"}" >&2
exit 2
;;
esac >>"$LOG" 2>&1
chmod 750 ~/bin/openclaw-mac-bridge.sh
第 4 步 — 添加 AppleScript 助手
keynote_export_pdf.applescript:
on run argv
set deckPath to item 1 of argv
set outPath to item 2 of argv
tell application "Keynote"
activate
set docRef to open POSIX file deckPath
export docRef to POSIX file outPath as PDF
close docRef saving no
end tell
end run
set_brightness.applescript(使用System Events;需要辅助功能):
on run argv
set level to item 1 of argv as number
tell application "System Events"
tell appearance preferences
set brightness to level
end tell
end tell
end run
手动烟雾测试:
osascript "$HOME/Library/Application Support/OpenClaw/scripts/set_volume.applescript" 40
# or inline:
osascript -e 'set volume output volume 40'
第 5 步 — 构建 Automator 工作流程(可选)
- 打开Automator→ 新快速行动或者应用.
- 添加运行AppleScript→ 粘贴Keynote 导出步骤。
- 另存为
ExportKeynotePDF.workflow在下面~/Library/Application Support/OpenClaw/workflows/. - 测试:
open -a "$HOME/Library/Application Support/OpenClaw/workflows/ExportKeynotePDF.workflow"
在网桥中注册为run_automator当序列超过 AppleScript 约 30 行时。
第 6 步 — 注册 OpenClaw shell 工具
添加下~/.openclaw/config/tools/(确切的架构因构建而异):
{
"name": "mac_desktop",
"description": "Control native Mac apps via AppleScript/Automator. Actions: keynote_export_pdf, set_volume, set_brightness, run_automator. Args: action string, JSON payload, optional third path.",
"type": "shell",
"command": "/Users/OPERATOR/bin/openclaw-mac-bridge.sh",
"timeout_seconds": 120,
"allowed_actions": ["keynote_export_pdf", "set_volume", "set_brightness", "run_automator"]
}
代替OPERATOR使用macOS 帐户运行网关。保留工具在实验室禁用直到步骤 7 通过。
第 7 步 — 创建 SKILL.md 政策
创造~/.openclaw/skills/mac-desktop/SKILL.md:
# Mac Desktop Automation (AppleScript)
## When to use
- User asks to export slides, adjust volume/brightness, or open a native app.
- Channel message includes `/deck` or `export pdf` with a file path on the Mac.
## Never
- Delete files outside ~/OpenClawExports without human confirmation.
- Change System Settings security/privacy panes.
- Run Automator workflows not listed in allowed_actions.
## Steps
1. Confirm deck path exists: `test -f path`.
2. Call mac_desktop with keynote_export_pdf.
3. Reply with artifact path and file size from `stat -f%z`.
工具+技能更改后重新启动网关。
步骤 8 — 用护栏引导烟雾
- 发送测试消息:“将音量设置为 35%。”
- 发送:“导出
/Users/you/Decks/Q2.key到PDF。” - 核实
~/.openclaw/logs/mac-desktop.log节目出口0和 JSON 标准输出。
使能够一仅消息传递通道 - 请参阅网关通道。并发桌面操作上限1在 16GB 主机上以避免 Keynote + 严重的模型争用。
故障排除
错误:Not authorized to send Apple events to Keynote
图案: osascript出口1,日志包含Not authorized.
使固定:在 Mac 上 →System Settings → 隐私和隐私安全 → 自动化→ 允许osascript(或终端/iTerm)进行控制Keynote。重新运行步骤 4 冒烟测试。对于云 Mac,每个快照映像执行一次。
错误:GUI scripting is not allowed
图案:亮度脚本失败; System Events错误-25211.
使固定:授予无障碍到终端/ssh 会话父级Apple 的辅助功能 guide。更喜欢通过降低亮度brightness仅在互动时间内 - 在 SKILL.md 中记录政策。
运营影响
| 监视器 | 临界点 | 行动 |
|---|---|---|
mac-desktop.log尺寸 | >200MB 256GB | 每周轮换 |
| 桥接延迟 | >90s | 分割Automator工作流程;预热Keynote |
| 自动化失败率 | >3/小时 | 禁用工具;警报人类operator |
| GUI 会话 | 断开连接 | 暂停频道;重新连接控制台 |
使用 Ollama 序列化桌面作业:不运行14B本地模型+Keynote导出同时在16GB统一记忆。
常问问题
OpenClaw 可以在没有 AppleScript 的情况下控制 Mac 应用程序吗?
只是部分。 Shell 工具处理 CLI 二进制文件;原生GUI应用程序需要 AppleScript、Automator 或快捷方式。桥接模式保持 OpenClaw 的规划器不变,而 macOS 执行 UI 工作。
AppleScript 是否单独对 SSH 起作用?
不。osascript目标是登录的图形会话。使用控制台访问或远程 Mac 上的屏幕共享,并在同一用户下运行网关。
如何从OpenClaw触发Automator?
登记run_automator在桥接脚本中并调用open -a /path/to/Workflow.app。通过工作流在第一个操作中读取的 plist 或 sidecar JSON 文件传递参数。
这对于生产代理来说安全吗?
将桌面工具视为高特权。限制allowed_actions,记录每次调用,并要求人类批准破坏性路径。跟随OpenClaw安全用于本地主机网关绑定。
这对Apple Silicon Mac mini M4 有效吗?
是的。 AppleScript 和Automator 在macOS 14+ 上是架构中立的。来自 Keynote + OpenClaw + Ollama 的 RAM 压力是实际的限制器 — 在 16GB 上一次保留一项繁重的工作。
SKILL.md 与 AppleScript 有何关系?
SKILL.md 教什么时候规划者调用mac_desktop; AppleScript/Automator 定义如何macOS 执行该操作。每当添加新的工作流程文件时更新SKILL.md。
结论
OpenClaw AppleScript Mac 自动化将文本网关变成桌面operator:shell工具→桥接脚本→osascript/ Automator → 本机应用程序。这种模式的竞争程度较低,因为大多数教程都停留在聊天回复上。
开始于音量 + Keynote PDF冒烟测试,每台机器强化一次权限,然后在 SKILL.md 中连接通道意图。让促销远离热门路径——这是一座工程桥梁,而不是租赁推销。