把 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 上打开终端。

先执行:

shell 复制代码
brew -v

如果能正常显示版本,就可以跳过安装。

如果没有安装,继续使用当前流程中的 Homebrew 官方安装脚本:

shell 复制代码
# 官方安装脚本(需要良好的网络环境)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装完成以后,按照终端提示把 Homebrew 加入环境。

当前示例命令是:

shell 复制代码
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 安装:

shell 复制代码
brew install node@22

安装完成后,把 Node 22 加入 PATH:

shell 复制代码
# 1. 将路径写入你的配置文件
echo 'export PATH="/opt/homebrew/opt/node@22/bin:$PATH"' >> ~/.zshrc

# 2. 让配置立即生效
source ~/.zshrc

然后检查 Node.js、npm 和 Git:

shell 复制代码
# 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

执行当前安装命令:

shell 复制代码
curl -fsSL https://openclaw.ai/install.sh | bash

等待安装完成。

安装以后进入初始化向导。

5. OpenClaw 初始化:先把模型跑通

初始化时先确认安全警告。

当前流程里使用方向键选择:

YES

如果不小心退出,说明中给出的重新进入命令是:

openclaw onboard --install-daemon

然后选择:

QuickStart

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

5.1 这次使用硅基流动

当前示例先进入:

shell 复制代码
https://cloud.siliconflow.cn/i/TGbSCR57

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

然后创建 API Key。

复制密钥备用。

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

Custom Provider

API Base URL 填:

shell 复制代码
https://api.siliconflow.cn/v1

API Key 提供方式选择:

Paste API key now

粘贴前面创建的密钥。

Endpoints 兼容模式保持:

OpenAI-compatible

接着进入当前界面里写作【Mode ID】的模型选择步骤。

回车后,会需要让你输入【Mode ID】,即代表你要使用的模型,可以在模型广场选择一个你要使用的模型Code,这里以【Pro/MiniMaxAI/MiniMax-M2.5】为例:

这里使用:

shell 复制代码
Pro/MiniMaxAI/MiniMax-M2.5

提示:

Verification successful

以后,再继续设置 Endpoint ID 和 Model alias。

到这里,模型接入这一层先完成。

6. 接入飞书之前,先安装 Feishu 插件

模型配置完成后进入消息平台选择。

选择:

Feishu/飞书

插件来源选择:

Download from npm

下载完成以后,向导会继续要求配置飞书应用凭证。

7. 在飞书开放平台创建机器人

打开飞书开放平台:

shell 复制代码
https://open.feishu.cn/?lang=zh-CN

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

创建企业自建应用。

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

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

继续设置机器人名称。

8. 导入飞书机器人权限

进入【权限管理】,点击【批量导入】。

当前流程使用下面这份 JSON:

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:readaily:file:write 等字段。

9. 配置 App Secret、App ID 和连接方式

进入【凭证与基础信息】,先复制:

App Secret

回到 Mac mini 终端粘贴。

再复制:

App ID

继续粘贴到终端。

看到:

client ready

说明当前客户端已经准备就绪。

后面的连接选项依次使用:

  • WebSocket (default)
  • Feishu - China
  • Allowlist

【Group chat allowlist】这里直接回车,当前流程暂时不让机器人加入群聊。

10. 把 OpenClaw 剩余初始化跑完

【Search provider】先选择:

Skip for now

【Configure skills now】选择:

NO

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

接着开始安装网关服务。

安装完成以后选择:

Open The Web UI

浏览器打开 OpenClaw 后,用下面这段话做第一次验证:

tex 复制代码
你好,你是谁,你当前运行在什么操作系统上,接入的上什么模型,你能够干什么,请你详细回答。

OpenClaw 能够正常返回回答,说明 Web UI 和模型层已经跑起来。

11. 飞书还差两步:事件与发布

回到飞书开放平台。

在【事件与回调】里,把订阅方式改成:

长连接

并保存。

当前说明中特别提醒:如果 OpenClaw 网关没有启动或渠道没有添加,长连接设置会保存失败。

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

接收消息

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

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

确认发布。

12. 在飞书客户端完成机器人授权

飞书客户端下载地址:

shell 复制代码
https://www.feishu.cn/download

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

第一次发消息时,当前示例返回的是:

shell 复制代码
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 执行授权命令:

shell 复制代码
openclaw pairing approve feishu FLK2Z9XT

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

到这里,这条基础链路已经成立:

飞书 → OpenClaw 网关 → 模型 → Mac mini → 飞书回复。

13. 真正决定它"能做多少"的,是 tools.profile

默认情况下,当前说明里 OpenClaw 使用的是:

coding

工具集。

如果需要更多能力,可以切换到:

full

当前列出的工具集包括:

工具集名称 说明 包含工具举例
minimal 只开放 session_status 工具 session_status
coding 编程模式(默认) 文件读写、执行命令、会话、内存、图片相关
messaging 消息模式 消息发送、会话列表/历史/发送、session_status
full 全工具模式 所有工具(等同于未设置)

切换命令:

shell 复制代码
# 切换到 full 工具集
openclaw config set tools.profile full

# 重启网关使配置生效
openclaw gateway restart

这里需要特别注意:full 不只是"功能更多",而是权限更大。当前说明中提到它会开放发送消息、读写文件、执行命令、浏览器控制等能力,所以只适合自己信任的环境和账号。

14. 第一个实测:让 OpenClaw 截图并通过飞书发回来

先直接发送:

shell 复制代码
请你截一张当前Mac mini屏幕目前显示画面的图片,然后发送给我看一下

当前第一次尝试并不能直接把图片发回来。

于是继续给它一段更明确的任务说明:

shell 复制代码
截图一张当前屏幕显示的界面图片发给我,我需要测试是否能正常查看该图片。
要求:
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

继续发送:

shell 复制代码
帮我做一个ppt,主题是:《元旦节快乐》,大概页数10张左右,要美观好看一点的,做完后打开,截张图给我看一下

如下图:

当前生成了 PPT 稿件,但没有真正打开。

于是继续:

shell 复制代码
你得打开这个ppt,然后截图这个ppt页面给我看

这时 OpenClaw 提示 Mac mini 上没有能打开 PPT 的应用。

继续发送:

shell 复制代码
帮我安装一个吧

当前流程里,它安装了:

WPS Office

但页面还需要同意协议并登录,所以这里手动完成了这一步。

然后继续:

shell 复制代码
好了,我登陆了一下,你帮我打开ppt,截个图给我看下内容

PPT 成功打开并截图返回。

继续翻看以后,当前稿件确实做了大约 10 页。

这一段不写成"AI 一句话就完整做完 PPT",因为真实过程里至少经历了:

生成 → 没打开 → 发现缺少应用 → 安装 WPS → 手动确认 / 登录 → 再打开 → 截图返回。

16. 第三个实测:生成 HTML 简历,再让手机打开

接下来让它生成一个简历页面:

shell 复制代码
我想写一个简历,姓名就用苏苏,其他的信息你用模拟的数据就可以,请你用html帮我写一个简历的页面,要做好看一点,最后打开那个页面,截图发给我看一下

当前 OpenClaw 完成了 HTML 页面,并在浏览器里打开后截图返回。

随后继续提出一个新的要求:

shell 复制代码
我看到了,写的很棒!但是我想在我手机上访问查看具体的效果,我电脑上有安装cpolar内网穿透并且登录了,你可以帮我把它穿透出来把链接提供给我吗?

它返回了一个公网链接。

第一次打开以后,页面显示的是目录,而不是直接进入简历。

这说明公网入口已经建立,但链接还少了一层具体文件路径。

点击:

resume.html

以后,实际地址是:

shell 复制代码
https://630c8107.r7.cpolar.cn/resume.html

这次才真正进入简历页面。

手机端也继续做了访问验证。

这一段很适合保留下来,因为它不是一个"一次成功"的理想流程,而是很真实地暴露出一个小问题:

穿透地址能打开 ≠ 已经直接打开目标文件。

17. cpolar 在这里负责什么?

前面的简历示例里,OpenClaw 已经尝试调用现有 cpolar 环境完成公网发布。

但为了把网络入口本身说清楚,后面继续手工跑一遍安装和穿透流程。

cpolar 在这套方案里只负责:

把 Mac mini 本地正在运行的 Web 服务提供到公网。

它不负责生成简历、不负责写小游戏,也不负责飞书消息和 OpenClaw 的本地任务。

18. Mac mini 安装 cpolar

使用 Homebrew 安装:

shell 复制代码
brew tap probezy/core && brew install cpolar

安装服务:

shell 复制代码
sudo cpolar service install

启动服务:

shell 复制代码
sudo cpolar service start

然后检查版本:

shell 复制代码
cpolar version

注册账号。

进入注册页面。

本地 Web UI 地址:

shell 复制代码
http://127.0.0.1:9200

登录以后进入后台。

19. 再做一个更直观的任务:生成贪吃蛇小游戏

回到飞书,让 OpenClaw 创建一个移动端也能玩的贪吃蛇页面。

shell 复制代码
请你写一个贪吃蛇的小游戏,界面要好看些,还得适配移动端,写完后,把文件放在桌面,然后,把这个贪吃蛇小游戏运行起来,不用穿透,给我本地能够访问的地址

当前第一次出现了一个小问题:没有成功创建。

继续对话以后解决了,再打开它给出的本地地址。

小游戏可以正常操作。

这一步确认的是:

飞书任务 → OpenClaw 编写页面 → 本地服务运行 → 浏览器可玩。

当前页面运行在本地:

8080

端口。

20. 手工把这个小游戏发布到公网

回到 cpolar Web UI。

默认已有两个隧道。

编辑 website 隧道,当前设置里:

  • 协议:http
  • 本地地址:8080
  • 地区:China Top

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

访问时需要注意具体文件路径。

当前示例地址:

shell 复制代码
# 注意拼接上 snake.html
https://7c13f9f.r33.cpolar.top/snake.html

页面可以正常打开。

这一步验证的是:

Mac mini 8080 → cpolar 随机公网地址 → /snake.html → 外部浏览器。

21. 长期使用再换固定二级子域名

随机地址适合先验证,但长期使用时更适合固定入口。

进入预留页面:

shell 复制代码
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。先把飞书消息、本地任务和公网网页这三件事分别跑通,再逐步增加权限和自动化,会比一开始就追求"全能助手"更稳。

相关推荐
宇文仲竹1 天前
docker agent 代替 openclaw 的 本地 简化 agent
openclaw
gf13211112 天前
【python_发送飞书卡片消息_直接组装JSON格式发送卡片】
python·json·飞书
shandianchengzi3 天前
【工具】飞书多维表格插件|附件批量导出并自定义名称的免费插件
飞书
kongxinniaoren3 天前
已经开学了,大学生还能做近视手术吗?有哪些需要注意的?
飞书
我是Superman丶4 天前
飞书文档下载
飞书
qwsaedca6 天前
在Mac上跑 Kokoro TTS经验总结
rust·mac·tts
云雀衔光6 天前
多个 MCP Server 怎么编排:数据库 / Redis / Git / 飞书一把梭
java·数据库·人工智能·redis·git·语言模型·飞书
RestCloud7 天前
飞书多维表格落地新思路:ETL做数据导入,豆包做业务智能分析
数据仓库·飞书·etl·数据传输·api对接·豆包
PM老周7 天前
团队知识库软件哪个好用?ONES、Confluence、Notion、飞书、语雀等主流工具对比
飞书·confluence·ones·知识库管理