把 Mac mini 变成远程 AI 工作台:OpenClaw + 飞书 + cpolar 实战
把 Mac mini 变成远程 AI 工作台:OpenClaw + 飞书 + cpolar 实战
前言
Mac mini 很适合拿来长期跑一些本地服务,但真正让我想把 OpenClaw 装上去的原因,不是“再多一个聊天窗口”,而是想验证一件更具体的事:人在外面时,能不能直接从飞书发消息,让家里的 Mac mini 真正执行任务。聊天回复只是第一层,我更关心的是它能不能读写文件、跑命令、截图、生成页面,甚至把做出来的东西通过浏览器分享出去。只有这些步骤真的落到本地机器上,Agent 才不只是一个换了入口的聊天机器人。
这次我从 Homebrew、Node.js 22 和 OpenClaw 开始配置,在 Mac mini 上接入硅基流动模型,再把飞书机器人完整跑通;随后实际测试截图发送、PPT 生成与打开、HTML 简历、贪吃蛇小游戏这些任务。中间也遇到了“简历链接先打开目录而不是页面”“小游戏第一次没创建出来”这类小问题。最后再安装 cpolar,把本地网页从 8080 提供到公网,并配置固定二级子域名。我也不想把权限开满以后就当作理所当然,尤其飞书消息可以远程触发本地任务时,哪些人能发消息、OpenClaw 能调用哪些工具,比功能有多少更值得先想清楚。整篇我更关心的是一条真实链路:飞书发指令 → OpenClaw 在 Mac mini 执行 → 结果回到飞书或浏览器。
1. OpenClaw 在这套方案里扮演什么角色?

OpenClaw 在这套流程里可以理解为一个运行在本地电脑上的 AI Agent。
它和普通聊天界面的差别,不是“回答得更像人”,而是可以继续连接本地工具和系统能力。例如:
- 读取、写入文件;
- 执行命令;
- 运行脚本;
- 调用浏览器;
- 接入消息平台;
- 根据权限调用更多工具。
这也意味着它的权限边界比普通聊天机器人更重要。尤其后面切换到 full 工具集以后,OpenClaw 可以使用的能力会明显增加,所以我不会把“权限越大”直接当成优点,而是只在受信任环境里使用。
这次实际验证的重点是:
Mac mini 本地部署 → 模型接入 → 飞书消息 → 本地任务 → 文件 / 图片 / PPT / HTML / 小游戏 → cpolar 公网访问。
2. 先准备 Homebrew
2.1 检查 Homebrew 是否已经安装

在 Mac mini 上打开终端。

先执行:
brew -v

如果能正常显示版本,就可以跳过安装。
如果没有安装,继续使用当前流程中的 Homebrew 官方安装脚本:
# 官方安装脚本(需要良好的网络环境)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装完成以后,按照终端提示把 Homebrew 加入环境。
当前示例命令是:
echo >> /Users/susu/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv zsh)"' >> /Users/susu/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv zsh)"

这里的用户目录是当前示例中的 /Users/susu/,实际使用时以终端给出的路径为准。
3. 安装 Node.js 22,并确认 Git
OpenClaw 需要 Node.js 环境。
当前使用 Homebrew 安装:
brew install node@22

安装完成后,把 Node 22 加入 PATH:
# 1. 将路径写入你的配置文件
echo 'export PATH="/opt/homebrew/opt/node@22/bin:$PATH"' >> ~/.zshrc
# 2. 让配置立即生效
source ~/.zshrc
然后检查 Node.js、npm 和 Git:
# 1. 检查 Node.js 版本,看到类似 v22.x.x 的数字即为成功
node -v
npm -v
# 2. 检查 Git 版本,看到 git version 2.x.x 即为成功
git --version

当前流程要求 Node.js 版本在 22 及以上;Git 没有额外指定版本要求。
4. 在 Mac mini 上安装 OpenClaw
执行当前安装命令:
curl -fsSL https://openclaw.ai/install.sh | bash

等待安装完成。

安装以后进入初始化向导。
5. OpenClaw 初始化:先把模型跑通
初始化时先确认安全警告。
当前流程里使用方向键选择:
YES
如果不小心退出,说明中给出的重新进入命令是:
openclaw onboard --install-daemon

然后选择:
QuickStart

继续进入模型提供商配置。

5.1 这次使用硅基流动
当前示例先进入:
https://cloud.siliconflow.cn/i/TGbSCR57

注册后领取当前页面展示的额度。

然后创建 API Key。

复制密钥备用。

回到 OpenClaw,模型提供商这里选择:
Custom Provider

API Base URL 填:
https://api.siliconflow.cn/v1

API Key 提供方式选择:
Paste API key now

粘贴前面创建的密钥。

Endpoints 兼容模式保持:
OpenAI-compatible

接着进入当前界面里写作【Mode ID】的模型选择步骤。
回车后,会需要让你输入【Mode ID】,即代表你要使用的模型,可以在模型广场选择一个你要使用的模型Code,这里以【Pro/MiniMaxAI/MiniMax-M2.5】为例:
这里使用:
Pro/MiniMaxAI/MiniMax-M2.5

提示:
Verification successful
以后,再继续设置 Endpoint ID 和 Model alias。

到这里,模型接入这一层先完成。
6. 接入飞书之前,先安装 Feishu 插件
模型配置完成后进入消息平台选择。
选择:
Feishu/飞书

插件来源选择:
Download from npm

下载完成以后,向导会继续要求配置飞书应用凭证。
7. 在飞书开放平台创建机器人
打开飞书开放平台:
https://open.feishu.cn/?lang=zh-CN

登录以后进入开发者后台。

创建企业自建应用。

填写应用名称、描述和图标。

创建完成后,添加机器人能力。

继续设置机器人名称。

8. 导入飞书机器人权限
进入【权限管理】,点击【批量导入】。

当前流程使用下面这份 JSON:
{
"scopes": {
"tenant": [
"aily:file:read",
"aily:file:write",
"application:application.app_message_stats.overview:readonly",
"application:application:self_manage",
"application:bot.menu:write",
"cardkit:card:write",
"contact:user.employee_id:readonly",
"corehr:file:download",
"docs:document.content:read",
"event:ip_list",
"im:chat",
"im:chat.access_event.bot_p2p_chat:read",
"im:chat.members:bot_access",
"im:message",
"im:message.group_at_msg:readonly",
"im:message.group_msg",
"im:message.p2p_msg:readonly",
"im:message:readonly",
"im:message:send_as_bot",
"im:resource",
"sheets:spreadsheet",
"wiki:wiki:readonly"
],
"user": ["aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read"]
}
}

然后继续申请新增权限。

确认申请。

这里不调整 JSON 中的权限名称,当前配置按已有流程保留,包括其中的 aily:file:read、aily:file:write 等字段。
9. 配置 App Secret、App ID 和连接方式
进入【凭证与基础信息】,先复制:
App Secret

回到 Mac mini 终端粘贴。

再复制:
App ID

继续粘贴到终端。
看到:
client ready
说明当前客户端已经准备就绪。

后面的连接选项依次使用:
WebSocket (default)Feishu - ChinaAllowlist

【Group chat allowlist】这里直接回车,当前流程暂时不让机器人加入群聊。
10. 把 OpenClaw 剩余初始化跑完
【Search provider】先选择:
Skip for now

【Configure skills now】选择:
NO

【Enable hooks】当前流程选择全部。

接着开始安装网关服务。

安装完成以后选择:
Open The Web UI

浏览器打开 OpenClaw 后,用下面这段话做第一次验证:
你好,你是谁,你当前运行在什么操作系统上,接入的上什么模型,你能够干什么,请你详细回答。

OpenClaw 能够正常返回回答,说明 Web UI 和模型层已经跑起来。
11. 飞书还差两步:事件与发布
回到飞书开放平台。
在【事件与回调】里,把订阅方式改成:
长连接
并保存。
当前说明中特别提醒:如果 OpenClaw 网关没有启动或渠道没有添加,长连接设置会保存失败。

接着添加事件,搜索并勾选:
接收消息

然后进入【版本管理与发布】,创建版本。

填写版本号、更新说明和可用范围。

确认发布。

12. 在飞书客户端完成机器人授权
飞书客户端下载地址:
https://www.feishu.cn/download

登录以后,在【开发小助手】里找到机器人并打开。

第一次发消息时,当前示例返回的是:
OpenClaw: access not configured.
Your Feishu user id: ou_c523c04accc3966f4c80893bd59e06c7
Pairing code: FLK2Z9XT
Ask the bot owner to approve with:
openclaw pairing approve feishu FLK2Z9XT

这里会给出 Feishu user id 和 Pairing code。
然后回到 Mac mini 执行授权命令:
openclaw pairing approve feishu FLK2Z9XT

授权成功以后,再从飞书发送消息测试。

到这里,这条基础链路已经成立:
飞书 → OpenClaw 网关 → 模型 → Mac mini → 飞书回复。
13. 真正决定它“能做多少”的,是 tools.profile
默认情况下,当前说明里 OpenClaw 使用的是:
coding
工具集。
如果需要更多能力,可以切换到:
full
当前列出的工具集包括:
| 工具集名称 | 说明 | 包含工具举例 |
|---|---|---|
minimal | 只开放 session_status 工具 | session_status |
coding | 编程模式(默认) | 文件读写、执行命令、会话、内存、图片相关 |
messaging | 消息模式 | 消息发送、会话列表/历史/发送、session_status |
full | 全工具模式 | 所有工具(等同于未设置) |
切换命令:
# 切换到 full 工具集
openclaw config set tools.profile full
# 重启网关使配置生效
openclaw gateway restart

这里需要特别注意:full 不只是“功能更多”,而是权限更大。当前说明中提到它会开放发送消息、读写文件、执行命令、浏览器控制等能力,所以只适合自己信任的环境和账号。
14. 第一个实测:让 OpenClaw 截图并通过飞书发回来
先直接发送:
请你截一张当前Mac mini屏幕目前显示画面的图片,然后发送给我看一下

当前第一次尝试并不能直接把图片发回来。
于是继续给它一段更明确的任务说明:
截图一张当前屏幕显示的界面图片发给我,我需要测试是否能正常查看该图片。
要求:
1. 飞书发送图片有大小限制(限制大约为10MB左右,建议压缩至不超过1MB,推荐分辨率1920x1080)
2. 截图图片需要放在 ~/.openclaw/workspace/tmp_files/ 目录中
3. 使用 message 工具发送给我,工具调用参数如下:
- action: send
- target: 从对话上下文中获取对方 ID(格式:user:ou_xxx)
- filePath: 截图文件的绝对路径
- message: 询问对方是否能成功看到图片
4. 询问我是否能成功看到图片,等待我回复成功提示
5. 如果我确认成功,将解决方案步骤写入 MEMORY.md

这次成功把截图发送到了飞书。
这个过程反而很能说明 Agent 的实际使用方式:不是所有事情一句话都会一次成功,任务边界、文件路径和工具参数写清楚以后,成功率会更高。
15. 第二个实测:让它做一份 PPT
继续发送:
帮我做一个ppt,主题是:《元旦节快乐》,大概页数10张左右,要美观好看一点的,做完后打开,截张图给我看一下
如下图:
当前生成了 PPT 稿件,但没有真正打开。
于是继续:
你得打开这个ppt,然后截图这个ppt页面给我看

这时 OpenClaw 提示 Mac mini 上没有能打开 PPT 的应用。
继续发送:
帮我安装一个吧

当前流程里,它安装了:
WPS Office
但页面还需要同意协议并登录,所以这里手动完成了这一步。
然后继续:
好了,我登陆了一下,你帮我打开ppt,截个图给我看下内容

PPT 成功打开并截图返回。
继续翻看以后,当前稿件确实做了大约 10 页。

这一段不写成“AI 一句话就完整做完 PPT”,因为真实过程里至少经历了:
生成 → 没打开 → 发现缺少应用 → 安装 WPS → 手动确认 / 登录 → 再打开 → 截图返回。
16. 第三个实测:生成 HTML 简历,再让手机打开
接下来让它生成一个简历页面:
我想写一个简历,姓名就用苏苏,其他的信息你用模拟的数据就可以,请你用html帮我写一个简历的页面,要做好看一点,最后打开那个页面,截图发给我看一下

当前 OpenClaw 完成了 HTML 页面,并在浏览器里打开后截图返回。
随后继续提出一个新的要求:
我看到了,写的很棒!但是我想在我手机上访问查看具体的效果,我电脑上有安装cpolar内网穿透并且登录了,你可以帮我把它穿透出来把链接提供给我吗?

它返回了一个公网链接。

第一次打开以后,页面显示的是目录,而不是直接进入简历。
这说明公网入口已经建立,但链接还少了一层具体文件路径。
点击:
resume.html
以后,实际地址是:
https://630c8107.r7.cpolar.cn/resume.html

这次才真正进入简历页面。
手机端也继续做了访问验证。

这一段很适合保留下来,因为它不是一个“一次成功”的理想流程,而是很真实地暴露出一个小问题:
穿透地址能打开 ≠ 已经直接打开目标文件。
17. cpolar 在这里负责什么?
前面的简历示例里,OpenClaw 已经尝试调用现有 cpolar 环境完成公网发布。
但为了把网络入口本身说清楚,后面继续手工跑一遍安装和穿透流程。
cpolar 在这套方案里只负责:
把 Mac mini 本地正在运行的 Web 服务提供到公网。
它不负责生成简历、不负责写小游戏,也不负责飞书消息和 OpenClaw 的本地任务。

18. Mac mini 安装 cpolar
使用 Homebrew 安装:
brew tap probezy/core && brew install cpolar

安装服务:
sudo cpolar service install
启动服务:
sudo cpolar service start

然后检查版本:
cpolar version
注册账号。
进入注册页面。
本地 Web UI 地址:
http://127.0.0.1:9200
登录以后进入后台。
19. 再做一个更直观的任务:生成贪吃蛇小游戏
回到飞书,让 OpenClaw 创建一个移动端也能玩的贪吃蛇页面。
请你写一个贪吃蛇的小游戏,界面要好看些,还得适配移动端,写完后,把文件放在桌面,然后,把这个贪吃蛇小游戏运行起来,不用穿透,给我本地能够访问的地址

当前第一次出现了一个小问题:没有成功创建。
继续对话以后解决了,再打开它给出的本地地址。

小游戏可以正常操作。

这一步确认的是:
飞书任务 → OpenClaw 编写页面 → 本地服务运行 → 浏览器可玩。
当前页面运行在本地:
8080
端口。
20. 手工把这个小游戏发布到公网
回到 cpolar Web UI。
默认已有两个隧道。

编辑 website 隧道,当前设置里:
- 协议:
http - 本地地址:
8080 - 地区:
China Top

更新以后,在在线隧道列表看到两个 tcc01 地址,一个 HTTP,一个 HTTPS。

访问时需要注意具体文件路径。
当前示例地址:
# 注意拼接上 snake.html
https://7c13f9f.r33.cpolar.top/snake.html

页面可以正常打开。
这一步验证的是:
Mac mini 8080 → cpolar 随机公网地址 → /snake.html → 外部浏览器。
21. 长期使用再换固定二级子域名
随机地址适合先验证,但长期使用时更适合固定入口。
进入预留页面:
https://dashboard.cpolar.com/reserved
然后选择保留二级子域名。

当前记录为:
- 地区:
China Top - 二级域名:
tcc01
不同账号以自己实际保留结果为准。
回到【隧道管理 → 隧道列表】,找到:
tcc01

把域名类型改成:
二级子域名
并填写前面保留好的名称。

更新以后,在线隧道列表会切换成固定地址形式。

继续用 HTTPS 测试。

页面可以正常打开。
总结
这次把 OpenClaw 装到 Mac mini 上以后,我最大的感受并不是“终于有了一个全能 AI 管家”,而是消息入口、本地执行和公网发布真的可以被串成一条工作流。
实际跑通的链路包括:
Homebrew → Node.js 22 → OpenClaw → 硅基流动 → 飞书机器人 → Pairing → tools.profile full → 截图发送 → PPT → WPS Office → HTML 简历 → 公网简历 → cpolar → 贪吃蛇 8080 → 随机公网 → 固定二级子域名 tcc01。
几个边界也值得记住:
- OpenClaw 能做什么,取决于模型、工具和权限;
full工具集权限很高,不适合交给不受信任的人;- 飞书接入和公网发布是两条不同链路;
- cpolar 只负责网络入口,不负责 AI 任务本身;
- Agent 并不是每次一句话就一次成功,真实过程里也会出现缺少应用、路径没拼对、第一次创建失败等情况;
- 本地页面能跑通以后,再做公网发布,更容易排查问题。
对我来说,Mac mini 的价值不在于“吃灰机器翻身”,而在于它可以长期在线,适合承担这种需要持续运行的本地 Agent。先把飞书消息、本地任务和公网网页这三件事分别跑通,再逐步增加权限和自动化,会比一开始就追求“全能助手”更稳。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐






所有评论(0)