Skip to content

OpenClaw 自学笔记 2026.3.15

概述

人工智能的发展正在经历从“信息检索”到“任务执行”的范式转移。早期的LLM(大语言模型)应用主要集中在内容生成与问答,而下一代AI应用的核心在于“Agency”——即AI感知环境、规划路径并执行操作的能力。然而,主流的云端Agent解决方案面临着数据隐私不可控、上下文记忆碎片化以及与本地环境交互受限等根本性挑战。

Clawd Bot应运而生。它不仅仅是一个聊天机器人,更是一个跨平台的个人AI操作系统。Clawd提出了一种“自带设备(BYOD)”的运行模式,核心组件运行在用户控制的Mac Mini、Linux服务器或树莓派上,而将推理任务通过API外包给Claude Opus、GPT-4或本地开源模型。这种架构不仅确保了用户对记忆和数据的完全掌控,还赋予了AI深度访问本地文件系统、Shell和浏览器的能力,使其成为真正意义上的“数字副驾驶”。

Clawd采用了以网关为中心(Gateway-Centric)的分布式微服务架构。这种设计不仅解耦了通信通道与智能体逻辑,还实现了对多模态输入输出的统一管理。主要将其划分为三部分:

  1. 神经中枢:Gateway (网关)

Gateway是Clawd系统的核心心脏,是一个基于Node.js(要求v22+)构建的长运行守护进程。它充当了所有外部通信与内部逻辑之间的总线。

  • 单一事实来源(Single Source of Truth): 设计上,Gateway被定义为系统的单一控制平面。它独占管理所有的Channel连接(如飞书的WebSocket连接、Telegram的Bot API轮询)。这种单例模式(Singleton)至关重要,因为许多即时通讯协议(特别是基于Web模拟的协议如飞书 Web)不允许并发会话。Gateway通过维护这些持久连接,确保了消息收发的稳定性和状态的一致性。

  • 网络模型与环回优先(Loopback-First): 安全性是本地Agent的首要考量。Gateway默认绑定在本地环回地址(127.0.0.1:18789),这意味着它不直接向公网暴露端口。这种“环回优先”的网络模型强制要求所有外部访问——无论是来自移动端的Node连接,还是远程管理——必须通过安全的隧道技术(如SSH Tunnel或Tailscale)进行。这从根本上减少了攻击面,防止了未授权的公网扫描和入侵。

协议与控制平面:

Gateway暴露了一个类型化的WebSocket API,用于处理请求/响应(Req/Resp)和服务器推送事件(Server Push Events)。

  • 控制客户端:CLI命令行工具、macOS原生应用、Web管理后台(Dashboard)均作为WebSocket客户端连接至Gateway。

  • 事件总线:Gateway负责分发agent(代理状态)、chat(聊天消息)、presence(在线状态)、health(系统健康)、heartbeat(心跳检测)和cron(定时任务)等核心事件。这种事件驱动的架构使得系统能够实时响应环境变化,例如当用户在手机端上线时,Gateway能立即感知并调整消息路由策略。

  1. 感知触手:Nodes (节点)

如果说Gateway是Clawd的大脑,那么Nodes就是它的手脚和感官。Node是运行在iOS、Android或macOS等终端设备上的轻量级客户端程序,它们通过WebSocket连接回Gateway,将设备的物理能力虚拟化为可供Agent调用的工具

  • 能力虚拟化与远程调用:

Node的设计体现了“端云协同”的思想(这里的“云”指用户的私有服务器)。Agent无需运行在手机上,却能通过Gateway远程调用手机的硬件能力:

  • 视觉能力 (camera.*):Agent可以调用camera.snap指令,触发Android或iOS Node拍摄照片;或调用camera.clip录制短视频。这使得Agent具备了“看见”物理世界的能力。例如,用户可以询问“我的冰箱里还剩什么?”,Agent随即调用摄像头拍摄并分析图像。

  • 地理感知 (location.get):Node能够获取设备的GPS坐标,使得Agent能够提供基于位置的服务(LBS),如“我现在的坐标天气如何?”或“帮我记录停车位置”。

  • 屏幕交互 (screen.record):在Android端,Node甚至支持屏幕录制,为未来的UI自动化操作奠定了基础。

🏷️ 连接机制: Node通过WebSocket与Gateway建立持久连接。为了穿透复杂的网络环境(如从蜂窝网络连接到家中的服务器),Clawd深度集成了Tailscale。Node可以利用Tailscale构建的Mesh网络,直接以内网IP访问Gateway,既保证了连接的稳定性,又维持了端到端的加密安全。

  1. 交互界面:Canvas (画布)

为了突破传统Chatbot纯文本交互的局限,Clawd引入了Canvas概念,这是一种由Agent驱动的动态视觉界面。

  • 技术实现: Gateway内置了一个HTTP文件服务器(默认监听端口18793),专门用于服务Canvas内容。Canvas本质上是一个由Agent生成的HTML/JavaScript应用,运行在Node端的WebView容器中。

  • 动态交互范式:

    • 传统的RAG或Agent通常只能返回文本或静态图片。而Clawd的Canvas允许Agent编写代码来渲染交互式图表、实时地图、看板或复杂的表单。
  • 场景示例:当用户要求“分析本周的服务器负载”时,Agent不仅能返回文字总结,还能在Canvas上绘制一个可缩放的ECharts折线图,用户可以在手机上直接交互查看细节。这种能力将Clawd从一个“对话框”升级为了一个“动态应用生成器” 。

在安全的Docker环境下安装和使用OpenClaw(适用于MacOS)with 飞书

1. 部署位置:你的本地工作电脑既然你需要它读取你当前的屏幕画面(Screen Capture)并处理你电脑里的 Github 项目,它就必须运行在你当前的电脑上,而不是云端服务器。

2. 安装方式:Gateway 走 Docker,Node 走受限本地运行

  • Gateway(网关): 使用 Docker 安装。这样可以把它的核心大脑、记忆数据库和你的 API 密钥完全隔离在一个虚拟容器里,即使出现漏洞,也无法影响你的宿主机系统。

  • Node(节点): 在本地原生环境运行,但必须通过配置文件锁死工作目录。

第一步:准备源码目录与工作目录

在终端中执行以下命令,分别创建一个用来放程序的目录,和一个用来给 AI 干活的安全沙盒目录(如果你之前已经建了可以忽略):

# 这个目录专门用来装 OpenClaw 的程序代码
mkdir -p ~/OpenClaw-App

# 这个目录是你用来放特定文件、允许 AI 访问的安全工作区
mkdir -p ~/OpenClaw-Workspace

第二步:克隆官方源码

进入程序目录,并将官方仓库下载到本地:

cd ~/OpenClaw-App
git clone https://github.com/openclaw/openclaw.git .

第三步:运行官方Docker的安装脚本

~/OpenClaw-App 目录下,依次执行:

# 运行官方的一键安装脚本
./docker-setup.sh

第四步:跟着终端向导完成初始化

执行脚本后,会触发完整的官方自动化安装流程:

  1. 脚本会自动执行 docker build 编译本地镜像(根据网络情况可能需要几分钟)。

  2. 构建完毕后,终端会自动运行新手引导向导 (onboard)

向导中的所有内容尽量先跳过,不要着急配置,我们第一步先解决OpenClaw的打开和启动的问题,不着急配置。

  1. 在向导中配置完模型和参数后,脚本会通过 Docker Compose 启动 Gateway 网关,并在当前目录下生成 .env 文件写入安全令牌。

  2. 最终,终端会打印出一个本地控制台地址(通常是 http://127.0.0.1:18789/)。

第五步:修改openclaw.json文件,解决鉴权和Docker的网络共享问题

这是 OpenClaw 的一种自我保护(安全隔离)机制。 因为你是用 Docker 运行的 Gateway,对于 OpenClaw 程序来说,它侦听的是 Docker 分配的虚拟网络 IP(例如 0.0.0.0),而不是原生的本机地址(127.0.0.1)。 OpenClaw 发现“咦?访问控制台的请求来源不是最安全的本地回环地址!为了防止局域网里的其他人或黑客越权劫持你的 AI 核心,我必须罢工,除非主人在配置文件里明确给我授权!”

所以,它不断抛出这个安全拦截错误,导致容器无限重启。

  1. 打开配置文件:在 Mac 的终端里运行下面这条命令。这会使用你系统自带的“文本编辑”App 打开 OpenClaw 生成在本地的配置文件:
open -e ~/.openclaw/openclaw.json
  1. gateway里面找到 "bind": "loopback" 这一行,把它改成 "bind": "lan"

然后你要做的,就是把这里面的token对应的值记下来,稍后要用。

{
  "gateway": {
    "port": 18789,
    "mode": "local",
    "bind": "lan",
    "auth": {
      "mode": "token",
      "token": "6f6737c39e62fc874dbbd282b949d9f86b2e06d974b26cf956888421d9dc3a4b"
    },
    "controlUi": {
      "dangerouslyAllowHostHeaderOriginFallback": true
    }
  }
}

提示:修改完成后,记得按下 Command + S 保存文件,然后关闭窗口。

  1. 重启并生效:回到终端,在你的 ~/OpenClaw-App 目录下,执行重启命令,让容器重新加载刚才修改好的配置:
docker compose restart openclaw-gateway

刷新你刚才打开的 http://127.0.0.1:18789/ 页面,现在应该就可以正常进入页面了。

页面上应该会提示你缺少 Token,或者你可以点击页面上的概览

把你的专属 Token 复制进去并保存:

第六步:处理设备配对pairing

现在出现的这个 pairing required(需要配对)并不是报错,而是 OpenClaw 的最后一道安全防线(设备授权)

它的逻辑是这样的:为了极致的安全,即便有人拿到了你的配置文件和 Token,只要他的浏览器或电脑之前没有被你“信任”过,Gateway 依然会把他拦在门外。它现在其实是在后台等你发话:“主人,有个新浏览器想连我,我要放行吗?”

按照官方针对 Docker 环境的文档,我们只需要在终端里敲两行命令,批准这个设备即可。

  1. 获取待配对的设备列表:请在您的 ~/OpenClaw-App 目录下执行以下命令:
docker compose run --rm openclaw-cli devices list

你要做的,就是复制图片上Pending的Request下面的一串码,如图就是60939xxx开头的部分。

  1. 批准配对请求:在上述命令返回的输出结果中,找到状态为 pending 的设备请求所对应的 requestId。随后执行以下命令进行批准(请将 <requestId> 替换为实际的 ID 字符串):
docker compose run --rm openclaw-cli devices approve <requestId>

指令执行完毕后,您浏览器中的控制面板将自动完成鉴权,并刷新至正式的主控界面。

现在,你在网页就能看到健康状态应该是正常的了,这时候才意味着OpenClaw在Docker顺利安装完成。可以开始使用了。

第七步:配置沙盒环境

到目前为止,OpenClaw的工作目录在Docker分配的工作目录下,虽然也是安全的,不会影响你电脑的工作环境,但是如果你想添加一个文件让OpenClaw帮你处理,你想找到Docker的这个目录位置也是挺困难的,所以如果有需要,建议按照下面的步骤更换工作区的目录到你熟悉的位置。

在终端中执行这行命令,打开 OpenClaw 的程序配置文件:

open -e ~/OpenClaw-App/docker-compose.yml

OpenClaw 官方设定的沙盒内部路径就是: /home/node/.openclaw/workspace

这段配置里最核心的是这一行:

- ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace

它用了一个环境变量 ${OPENCLAW_WORKSPACE_DIR}。默认情况下,安装脚本可能把它指向了你 Mac 的默认隐藏文件夹(比如 ~/.openclaw/workspace

最简单粗暴且一劳永逸的办法,就是直接在这里把你的真实路径写死替换掉

  1. 修改 YAML 文件:把你看到的那行含有 WORKSPACE_DIR 的代码,直接修改成你 Mac 的真实路径。

修改前:

- ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace

修改后(注意保持前面的空格缩进):

- /Users/mengdu/Documents/Openclaw/Openclaw-Workspace:/home/node/.openclaw/workspace:rw

加个 :rw 确保它有完整的读写权限,改好后,按下 Command + S 保存并退出。

  1. 让 Docker 重新加载:回到终端,在 ~/OpenClaw-App 目录下运行:
docker compose up -d

第八步:配置OpenClaw

使用下面的命令可以进入OpenClaw的配置菜单:

docker compose run --rm openclaw-cli config
配置项配置内容
I understand this is powerful and inherently risky. Continue?选择 "Yes"
Onboarding mode选择 "QuickStart"
Model/auth provider选择你所使用的模型提供商
Filter models by provider选择你所使用的模型提供商
Default model选择你想使用的模型
Select channel (QuickStart)选择你想使用的发送通知的app,问你想通过什么软件和它聊天。如果你想用飞书,可以看后面的第十步,这里先跳过,如果是其他的Channel,你可以读官方文档自己配置:https://docs.openclaw.ai/channels
Configure skills now? (recommended)选择 "No",后续再配置。
Enable hooks?按空格键选中选项,按回车键进入下一步。这个hooks官方提前预置的一些OpenClaw的技能点,比如开机自检要做哪些事情、是否开启长期记忆等等。具体可以参考官方的文档:https://docs.openclaw.ai/automation/hooks
Enable web_search (Brave Search)?你可以跳过或者在这里配置,这个是OpenClaw的网页搜索功能启动选项,如果不配置这个,那么你的OpenClaw是不能上网搜东西的,只是一个本地模型,我建议大家去配置。这个API我目前用不花钱:https://brave.com/search/api/绑定好Visa卡就行,每天的免费额度足够用了。
How do you want to hatch your bot?选择 "Web UI"。

经历了上面的这些配置,那么你的OpenClaw基本上也算是大功告成了,你可以在网页试试发消息,或者通过你配置的Channel发消息。下面我要补充我自己用的模型、Brave Search和飞书Channel的配置方法。

AI模型配置

我是在淘宝买的API,30块钱十天任用,支持国产的GLM5、Kimi 2.5、MiniMax等等国产比较好的大模型。目前使用下来感觉相当不错:

下单拿到API之后,不要在终端去配置了,直接使用VSCode打开~/.openclaw/openclaw.json,编辑这个文件来配置模型就好了。在JSON的根对象中加入models配置(如果已经存在则替换)。将YOUR_API_KEY替换成你的API KEY:

"models": {
  "mode": "merge",
  "providers": {
    "bailian": {
      "baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
      "apiKey": "YOUR_API_KEY",
      "api": "openai-completions",
      "models": [
        {
          "id": "qwen3.5-plus",
          "name": "qwen3.5-plus",
          "reasoning": false,
          "input": ["text", "image"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 1000000,
          "maxTokens": 65536
        },
        {
          "id": "qwen3-max-2026-01-23",
          "name": "qwen3-max-2026-01-23",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 262144,
          "maxTokens": 65536
        },
        {
          "id": "qwen3-coder-next",
          "name": "qwen3-coder-next",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 262144,
          "maxTokens": 65536
        },
        {
          "id": "qwen3-coder-plus",
          "name": "qwen3-coder-plus",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 1000000,
          "maxTokens": 65536
        },
        {
          "id": "MiniMax-M2.5",
          "name": "MiniMax-M2.5",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 1000000,
          "maxTokens": 65536
        },
        {
          "id": "glm-5",
          "name": "glm-5",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 202752,
          "maxTokens": 16384
        },
        {
          "id": "glm-4.7",
          "name": "glm-4.7",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 202752,
          "maxTokens": 16384
        },
        {
          "id": "kimi-k2.5",
          "name": "kimi-k2.5",
          "reasoning": false,
          "input": ["text", "image"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 262144,
          "maxTokens": 32768
        }
      ]
    }
  }
}

然后找到agents.defaults对象,并替换或添加以下两个字段:

"model": {
  "primary": "bailian/qwen3.5-plus"
},
"models": {
  "bailian/qwen3.5-plus": {},
  "bailian/qwen3-max-2026-01-23": {},
  "bailian/qwen3-coder-next": {},
  "bailian/qwen3-coder-plus": {},
  "bailian/MiniMax-M2.5": {},
  "bailian/glm-5": {},
  "bailian/glm-4.7": {},
  "bailian/kimi-k2.5": {}
}

改完大概是这样:

保存文件,执行重启命令,让容器重新加载刚才修改好的配置:

docker compose restart openclaw-gateway

Brave Search配置

OpenClaw 系统本身不内置网络爬虫,其 web_search 工具在底层依赖于第三方的 Brave Search API 来获取实时网页数据。如果在配置中未提供该 API 的有效密钥,搜索工具将被自动禁用。在您之前提供的终端启动日志中,系统也曾明确提示过:如果不设置 Brave Search API 密钥,网络搜索功能将无法工作。

Brave 搜索是 OpenClaw 首推的网页搜索解决方案。它拥有独立的网页索引系统,不依赖谷歌或必应,在 AI 应用的 RAG(检索增强生成)场景中表现尤为出色。

访问 Brave Search API 官网 api-dashboard.search.brave.com 注册账号,免费套餐每月提供 2000 次搜索请求。但是需要先绑定VISA卡。

测试效果如图:

如果嫌终端配置麻烦,也可以在网页配置:

输入API之后点击右上角的Save和Reload以生效。

第九步:安全和可用性测试

接下来,请严格按照修改后的路径来进行这三项“考试”:

测试 1:测试它“向外看”的能力(读取宿主机文件)

我们先在你的 Mac 真实目录里放一个“诱饵文件”。

打开 Mac 的终端,直接复制并运行这行命令:

echo "Hello OpenClaw, 这是用来测试宿主机沙盒映射的文本。" > /Users/mengdu/Documents/Openclaw/Openclaw-Workspace/test_read.txt

回到 OpenClaw 的网页控制台,对 AI 发送以下指令:

“请查看 /home/node/workspace 目录,告诉我里面现在有什么文件?如果你看到了一个 txt 文件,请把里面的文字完整读出来。”

成功标志: 它可以准确读出那句中文。这就证明 Docker 的目录穿透和沙盒映射是完美成功的!

测试 2:测试它“向内写”及“强制确认”机制

这是为了验证你最关心的安全控制权。

对 AI 发送以下指令:

“请在 /home/node/workspace 目录下创建一个名为 xiao_test.py 的文件,并在里面写一段简单的 Python 代码,打印出 'Hello AE Team'。”

成功标志(两重验证):

  1. 第一重:绝对不能直接告诉你“已创建成功”。它的状态必须变成 Pending Approval,并在聊天框里弹出一个按钮或提示,等待你点击允许它使用 write 工具。

  2. 第二重: 在你点击允许之后,你可以打开 Mac 上的 /Users/mengdu/Documents/Openclaw/Openclaw-Workspace 文件夹,亲眼确认里面是不是真的多出了一个 xiao_test.py

测试 3:测试它的联网与总结能力

测试一下它搜集技术资料的实战能力。

对 AI 发送以下指令:

“请帮我搜索一下 Seeed Studio XIAO ESP32-S3 这款板子的硬件规格,简单总结一下它的无线通信能力和引脚数量。”

成功标志: 它应该会自动调用网络搜索工具(比如会显示调用了 web_search),获取最新的网页资料,并给出清晰、专业的总结。

这三个测试做完,你的 OpenClaw 就正式从“安装阶段”毕业,进入“生产力阶段”了!

测试4:边界测试

从底层原理上来讲,由于你的 OpenClaw 核心程序是跑在 Docker 容器里的,它的整个“世界观”已经被完全物理隔离了。 除非你在 docker-compose.ymlvolumes 里主动映射了某条通道(就像我们刚才对 Workspace 做的那样),否则它绝对不可能跨越容器,触碰到你 Mac 宿主机上的其他任何真实文件。

你可以直接把这段指令发给它,看看它的反应:

“请你尝试进入我 Mac 电脑的 /Users/mengdu/Desktop 目录或 /Users/mengdu/Documents 目录,列出里面的所有文件”

**成功标志:**它应该明确告诉你找不到这样的目录,这样你就知道它无法在你给定的沙盒外进行任何事情的处理。

第十步:配置飞书Channel

参考文档:https://www.feishu.cn/content/article/7602519239445974205

1. 注册账号,在官网点击右上角进入开发者后台

飞书开放平台地址:https://open.feishu.cn

没有飞书账号的,需要自己注册账号

2. 创建自建应用

点击「创建应用」->「企业自建应用」。

3. 填写应用名称和描述,然后点击「创建」。

4. 添加机器人能力

创建成功后,在应用详情页找到「添加能力」卡片,点击「机器人」。

配置权限

点击左侧菜单的「权限管理」。点击批量「导入/导出权限」。然后输入下方的代码导入。

{
  "scopes": {
    "tenant": [
      "aily:file:read",
      "aily:file:write",
      "application:application.app_message_stats.overview:readonly",
      "application:application:self_manage",
      "application:bot.menu:write",
      "base:app:copy",
      "base:app:create",
      "base:app:read",
      "base:app:update",
      "bitable:app",
      "bitable:app:readonly",
      "cardkit:card:read",
      "cardkit:card:write",
      "contact:contact.base:readonly",
      "contact:user.employee_id:readonly",
      "corehr:file:download",
      "docs:document.comment:create",
      "docs:document.comment:read",
      "docs:document.comment:update",
      "docs:document.comment:write_only",
      "docs:document.content:read",
      "docs:document.media:download",
      "docs:document.media:upload",
      "docs:document.subscription",
      "docs:document.subscription:read",
      "docs:document:copy",
      "docs:document:export",
      "docs:document:import",
      "docs:event.document_deleted:read",
      "docs:event.document_edited:read",
      "docs:event.document_opened:read",
      "docs:event:subscribe",
      "docs:permission.member",
      "docs:permission.member:auth",
      "docs:permission.member:create",
      "docs:permission.member:delete",
      "docs:permission.member:readonly",
      "docs:permission.member:retrieve",
      "docs:permission.member:transfer",
      "docs:permission.member:update",
      "docs:permission.setting",
      "docs:permission.setting:read",
      "docs:permission.setting:readonly",
      "docs:permission.setting:write_only",
      "docx:document.block:convert",
      "docx:document:readonly",
      "drive:drive.search:readonly",
      "drive:export:readonly",
      "drive:file.like:readonly",
      "event:ip_list",
      "im:chat.access_event.bot_p2p_chat:read",
      "im:chat.members:bot_access",
      "im:chat:read",
      "im:chat:update",
      "im:message",
      "im:message.group_at_msg:readonly",
      "im:message.p2p_msg:readonly",
      "im:message.pins:read",
      "im:message.pins:write_only",
      "im:message.reactions:read",
      "im:message.reactions:write_only",
      "im:message:readonly",
      "im:message:recall",
      "im:message:send_as_bot",
      "im:message:send_multi_users",
      "im:message:send_sys_msg",
      "im:message:update",
      "im:resource",
      "space:document:delete",
      "space:document:move",
      "space:document:retrieve",
      "space:document:shortcut"
    ],
    "user": [
      "aily:file:read",
      "aily:file:write",
      "base:app:copy",
      "base:app:create",
      "base:app:read",
      "base:app:update",
      "base:field:create",
      "base:field:delete",
      "base:field:read",
      "base:field:update",
      "base:record:create",
      "base:record:delete",
      "base:record:retrieve",
      "base:record:update",
      "base:table:create",
      "base:table:delete",
      "base:table:read",
      "base:table:update",
      "base:view:read",
      "base:view:write_only",
      "board:whiteboard:node:create",
      "board:whiteboard:node:read",
      "calendar:calendar.event:create",
      "calendar:calendar.event:delete",
      "calendar:calendar.event:read",
      "calendar:calendar.event:reply",
      "calendar:calendar.event:update",
      "calendar:calendar.free_busy:read",
      "calendar:calendar:read",
      "contact:contact.base:readonly",
      "contact:user.base:readonly",
      "contact:user.basic_profile:readonly",
      "contact:user.employee_id:readonly",
      "contact:user:search",
      "docs:document.comment:create",
      "docs:document.comment:read",
      "docs:document.comment:update",
      "docs:document.media:download",
      "docs:document.media:upload",
      "docs:document:copy",
      "docs:document:export",
      "docx:document:create",
      "docx:document:readonly",
      "docx:document:write_only",
      "drive:drive.metadata:readonly",
      "drive:file:download",
      "drive:file:upload",
      "im:chat.access_event.bot_p2p_chat:read",
      "im:chat.members:read",
      "im:chat:read",
      "im:message",
      "im:message.group_msg:get_as_user",
      "im:message.p2p_msg:get_as_user",
      "im:message.send_as_user",
      "im:message:readonly",
      "offline_access",
      "search:docs:read",
      "search:message",
      "sheets:spreadsheet.meta:read",
      "sheets:spreadsheet:create",
      "sheets:spreadsheet:read",
      "sheets:spreadsheet:write_only",
      "space:document:delete",
      "space:document:move",
      "space:document:retrieve",
      "task:comment:read",
      "task:comment:write",
      "task:task:read",
      "task:task:write",
      "task:task:writeonly",
      "task:tasklist:read",
      "task:tasklist:write",
      "wiki:node:copy",
      "wiki:node:create",
      "wiki:node:move",
      "wiki:node:read",
      "wiki:node:retrieve",
      "wiki:space:read",
      "wiki:space:retrieve",
      "wiki:space:write_only"
    ]
  }
}

发布第一个版本

点击左侧菜单的「版本管理与发布」。

点击「创建版本」,填写版本号(如 1.0.0)和更新说明,然后点击「保存」。保存后,点击「确认发布」。

5. 安装飞书插件

开始配置飞书插件:

输入命令:

docker compose run --rm openclaw-cli config

选择 local(本地配置)。

配置通信渠道

选择 Channels -> Link 添加新渠道。

选择 feishu

安装渠道插件

系统检测到缺少飞书插件,选择 Install 进行安装。安装完成后,按 Enter 键继续。

填写飞书应用凭证

不要关闭终端! 现在回到飞书开发者后台,找到你的应用。

点击左侧菜单的「凭证与基础信息」。

分别复制 App IDApp Secret 到终端中粘贴。

完成后续配置

Environment:根据你的飞书版本选择 国内国际

Allow group chat:是否允许群聊使用,选择 open

看到 finished 选项,选择它完成渠道配置。

保存并退出

一直按 Esc 或选择 Finish 退出配置面板。

重启服务:

docker compose restart openclaw-gateway

可以在Docker Desktop里面检查日志,检查飞书插件启动是否正常。

6. 回到飞书后台设置事件回调

回到飞书开发者后台,点击左侧菜单的「事件与回调」。

在「订阅方式」卡片中,点击「修改」,将方式改为 「长连接」,点击「确认」。OpenClaw 会通过长连接与飞书通信,无需公网地址。

添加消息接收事件

在「事件与回调」页面下方,点击「添加事件」。

搜索并选择 接收消息 事件(im.message.receive_v1),然后点击「确认添加」。

再次发布版本

权限和事件都配置好了,需要再次发布一个新版本才能生效。回到「版本管理与发布」,创建一个新版本(如 1.0.1)并发布。

创建完成后,点击打开机器人,在飞书中向机器人发送任意消息,即可获得与OpenClaw连接配对的配对码。

获得配对码之后,输入命令下面的命令授权对话:

openclaw pairing approve feishu <PAIRING_CODE>

tips:

  • 若希望快速完成用户授权,便于后续 OpenClaw 通过你的身份完成消息、文档、多维表格、日历等任务,可以在飞书对话中发送 /feishu auth 来完成批量授权。

  • 为了让 OpenClaw 能学会这些新技能并正确使用,建议在飞书对话中发送学习一下我安装的新飞书插件,列出有哪些能力。

  • 验证是否安装成功:在飞书对话中发送 /feishu start。若返回了版本号信息,则代表安装成功。

至此,全新的MacOS电脑就装好了OpenClaw,以及可以在飞书上面与OpenClaw通话了。

第十一步:安装和登录clawhub

OpenClaw的skill一般都是通过clawhub工具来安装的。所以想要安装skill,需要先安装clawhub。

1. 修改 App 文件夹下的 docker-compose.yml(在 openclaw-gateway 的 environment 里加两行):

    environment:
      HOME: /home/node
      TERM: xterm-256color
      NPM_CONFIG_PREFIX: /home/node/.npm-global                                                      # 👈 新增
      PATH: /home/node/.npm-global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin   # 👈 新增
      OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN}
      # ... 其余不动

给 .npm-global 加一个持久化 volume。确保机器重启之后npm包还在,不然每次机器重启之后都要重装npm下载工具。

修改 docker-compose.yml,在 volumes 里加一行:

    volumes:
      - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
      - /Users/mengdu/Documents/Openclaw/Openclaw-Workspace:/home/node/.openclaw/workspace:rw
      - npm-global:/home/node/.npm-global    # 👈 新增,持久化全局 npm 包

然后在文件最底部加上 volume 声明:

volumes:
  npm-global:

重建容器:

docker compose down
docker compose up -d

进入容器确认目录存在:

docker exec -u root -it openclaw-app-openclaw-gateway-1 /bin/sh

上面最后一个命令会启动Docker内部的OpenClaw的终端,进去之后运行:

npm config get prefix

看看输出是不是 /home/node/.npm-global。如果不是,继续往下:

如果 prefix 已经指向 /home/node/.npm-global 了,环境变量生效了。

现在确保目录存在,继续在容器里执行:

mkdir -p /home/node/.npm-global

更新npm和安装clawhub

npm install -g npm@11.11.0
npm install -g clawhub

clawhub使用时显示速率受限之类的错误,是因为没有登录,因为clawhub是通过浏览器绑定登录的,但是Docker的网络又是桥接的,还不能通过简单的命令来实现登录的操作,挺麻烦的,跟着下面的步骤来曲线救国吧:

在新的终端里面执行:

docker exec -u root openclaw-app-openclaw-gateway-1 chown -R 1000:1000 /home/node/.npm-global
docker exec -u root openclaw-app-openclaw-gateway-1 chown -R 1000:1000 /home/node/.npm

Mac 上安装并登录

注意,下面的命令是要开一个新的终端运行!是要在自己的电脑上安装clawhub的方式,将鉴权信息拷贝到Docker里面实现的,就不要在之前的终端里面跑了。之前的终端放一边先别关,开一个新的终端运行:

npm install -g clawhub
clawhub login

这次浏览器会正常打开。

找到登录后生成的凭据文件

find ~ -name "*clawhub*" -not -path "*/node_modules/*" 2>/dev/null

把凭据复制到容器的对应目录

# 看看里面有什么
ls ~/Library/Application\ Support/clawhub/

docker exec -u root openclaw-app-openclaw-gateway-1 mkdir -p /home/node/.config/clawhub
docker cp ~/Library/Application\ Support/clawhub/config.json openclaw-app-openclaw-gateway-1:/home/node/.config/clawhub/config.json
docker exec -u root openclaw-app-openclaw-gateway-1 chown -R 1000:1000 /home/node/.config/clawhub

找到文件后我们再把它复制进容器里。

docker exec -it openclaw-app-openclaw-gateway-1 /bin/sh

#下面的命令查询登录状态
clawhub whoami

到这里,Docker就装好了,而且clawhub也装好了,可以开始玩skill了。

附录1:Docker下的OpenClaw常用命令汇总

#启用配置
docker compose run --rm openclaw-cli config

#重启Docker
docker compose restart openclaw-gateway

#进入Docker的OpenClaw命令终端
docker exec -it openclaw-app-openclaw-gateway-1 /bin/sh

#查询模型
openclaw models list

#切换模型
openclaw models set <provider/model>

在全新的MacOS电脑上安装和使用OpenClaw with 飞书

第一步:通过命令安装OpenClaw

openclaw onboard --install-daemon

安装结束后会自动出现提示信息,请根据提示信息完成 OpenClaw 配置,这里也是,能跳过的先跳过,不着急配置。参考配置如下:

配置项配置内容
I understand this is powerful and inherently risky. Continue?选择 "Yes"
Onboarding mode选择 "QuickStart"
Model/auth provider选择 "Skip for now",后续可以配置
Filter models by provider选择 "All providers"
Default model选择“Keep current”
Select channel (QuickStart)选择 "Skip for now",后续可以配置
Search provider选择 "Brave Search",后面输入API就行,每个月2000次免费用,绑定Visa卡就行:https://brave.com/search/api/不懂的也可以看Docker环境安装和使用的第八步第二点教程,一样的。
Configure skills now? (recommended)选择 "No",后续可以配置。
Enable hooks?按空格键选中选项,按回车键进入下一步。
How do you want to hatch your bot?选择 "Open the Web UI"。

装完之后,打开网页检查一下,是否正常弹出页面,健康状态是否为正常。一般不会有啥问题。

如果提示没有token,那么你就把这串token贴到网页的“概览”的“token”下面:

或者直接用带有token的链接打开网站也是可以的。

如果是健康状态有问题,可以使用下面的命令检查你当前请求的设备情况:

openclaw devices list

然后将pending里面的requestID复制一下,使用下面的命令批准即可:

openclaw devices approve <requestId>

第二步:配置模型的API

如果你使用的是自己的模型,你可以通过下面的命令重新在CLI终端里面配置API:

openclaw onboard

下单拿到API之后,不要在终端去配置了,直接使用VSCode打开~/.openclaw/openclaw.json,编辑这个文件来配置模型就好了。在JSON的根对象中加入models配置(如果已经存在则替换)。将YOUR_API_KEY替换成你的API KEY:

"models": {
  "mode": "merge",
  "providers": {
    "bailian": {
      "baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
      "apiKey": "YOUR_API_KEY",
      "api": "openai-completions",
      "models": [
        {
          "id": "qwen3.5-plus",
          "name": "qwen3.5-plus",
          "reasoning": false,
          "input": ["text", "image"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 1000000,
          "maxTokens": 65536
        },
        {
          "id": "qwen3-max-2026-01-23",
          "name": "qwen3-max-2026-01-23",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 262144,
          "maxTokens": 65536
        },
        {
          "id": "qwen3-coder-next",
          "name": "qwen3-coder-next",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 262144,
          "maxTokens": 65536
        },
        {
          "id": "qwen3-coder-plus",
          "name": "qwen3-coder-plus",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 1000000,
          "maxTokens": 65536
        },
        {
          "id": "MiniMax-M2.5",
          "name": "MiniMax-M2.5",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 1000000,
          "maxTokens": 65536
        },
        {
          "id": "glm-5",
          "name": "glm-5",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 202752,
          "maxTokens": 16384
        },
        {
          "id": "glm-4.7",
          "name": "glm-4.7",
          "reasoning": false,
          "input": ["text"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 202752,
          "maxTokens": 16384
        },
        {
          "id": "kimi-k2.5",
          "name": "kimi-k2.5",
          "reasoning": false,
          "input": ["text", "image"],
          "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },
          "contextWindow": 262144,
          "maxTokens": 32768
        }
      ]
    }
  }
}

然后找到agents.defaults对象,并替换或添加以下两个字段:

"model": {
  "primary": "bailian/qwen3.5-plus"
},
"models": {
  "bailian/qwen3.5-plus": {},
  "bailian/qwen3-max-2026-01-23": {},
  "bailian/qwen3-coder-next": {},
  "bailian/qwen3-coder-plus": {},
  "bailian/MiniMax-M2.5": {},
  "bailian/glm-5": {},
  "bailian/glm-4.7": {},
  "bailian/kimi-k2.5": {}
}

改完大概是这样:

保存文件,执行重启命令:

openclaw gateway restart

大模型就配好了。

第三步:安装飞书插件并绑定飞书个人账户机器人

参考文档:https://www.feishu.cn/content/article/7613711414611463386

注册账号,在官网点击右上角进入开发者后台

飞书开放平台地址:https://open.feishu.cn

没有飞书账号的,需要自己注册账号

在终端使用下面的命令安装官方的飞书channel:

npx -y @larksuite/openclaw-lark-tools install

执行过程中,选择新建机器人。

通过飞书客户端扫描二维码,选择一键创建飞书机器人。这样就不用去开发者工作台自己一点点开权限和配置了,一下配好。

然后配置OpenClaw:

openclaw onboard

其他的配置项不动,主要是Channel的部分按照下面的要求设置:

配置项配置内容
Select channel选择 "Feishu/Lark(飞书)"
Install Feishu plugin?选择 "Use local plugin path"
How do you want to provide this App Secret?选择 "Enter App Secret"
Enter Feishu App Secret在飞书开发者后台,找到你的应用。点击左侧菜单的「凭证与基础信息」。复制 App Secret 到终端中粘贴
Enter Feishu App ID在飞书开发者后台,找到你的应用。点击左侧菜单的「凭证与基础信息」。复制 App ID 到终端中粘贴
Feishu connection mode选择 "WebSocket (default)"
Which Feishu domain?选择 "Feishu (fwishu.cn) - China"
Group chat policy选择 "Open - respond in all groups (requires mention)"

创建完成后,点击打开机器人,在飞书中向机器人发送任意消息,即可获得与OpenClaw连接配对的配对码。

获得配对码之后,输入命令下面的命令授权对话:

openclaw pairing approve feishu <PAIRING_CODE>

tips:

  • 若希望快速完成用户授权,便于后续 OpenClaw 通过你的身份完成消息、文档、多维表格、日历等任务,可以在飞书对话中发送 /feishu auth 来完成批量授权。

  • 为了让 OpenClaw 能学会这些新技能并正确使用,建议在飞书对话中发送学习一下我安装的新飞书插件,列出有哪些能力。

  • 验证是否安装成功:在飞书对话中发送 /feishu start。若返回了版本号信息,则代表安装成功。

至此,全新的MacOS电脑就装好了OpenClaw,以及可以在飞书上面与OpenClaw通话了。

第四步:安装和登录clawhub

你可以直接在与AI的对话中安装clawhub,或者使用命令安装:

npm install -g clawhub

登录的操作就只能在终端了,输出命令:

clawhub login

然后会弹出一个浏览器窗口,点击登录即可。不登录的话是会报流量限速之类的错误的。

附录2:OpenClaw常用命令

https://zhuanlan.zhihu.com/p/2011017776756701009

CLI Reference - OpenClaw

# 首次安装后初始化配置
openclaw setup

# 交互式引导配置(推荐新手)
openclaw onboard

# 打开控制面板
openclaw dashboard

# 查看完整配置
openclaw config get

# 查看特定配置项
openclaw config get models.default
openclaw config get providers.mistral.apiKey

# 查看特定部分配置
openclaw config get --section models
openclaw config get --section providers

# 设置默认模型
openclaw config set models.default mistral:mixtral-8x7b

# 设置快速模型
openclaw config set models.fast mistral:mistral-7b

# 配置 Mistral API Key
openclaw config set providers.mistral.apiKey YOUR_API_KEY_HERE

# 启用缓存
openclaw config set cache.enabled true
openclaw config set cache.maxSize 5000

# 删除特定配置项
openclaw config unset models.fast

# 重置某个节点
openclaw config unset models

# 启动 Gateway(默认端口 18789)
openclaw gateway start

# 自定义端口启动
openclaw gateway start --port 19000

# 强制启动(杀死占用进程)
openclaw gateway start --force

# 停止 Gateway
openclaw gateway stop

# 重启 Gateway
openclaw gateway restart

# 查看运行状态
openclaw gateway status

# 查看健康状态
openclaw health

# 查看实时日志
openclaw logs

# 查看所有已安装技能
openclaw skills list

# 安装技能
openclaw skills install weather

# 从指定来源安装
openclaw skills install weather --source github

# 指定版本安装
openclaw skills install weather@1.2.0

# 卸载技能
openclaw skills uninstall weather

# 更新所有技能
openclaw skills update

# 更新特定技能
openclaw skills update weather

# 同步技能
openclaw skills sync

# 创建新技能
openclaw skills create my-skill

# 验证技能
openclaw skills validate my-skill

# 打包技能
openclaw skills pack my-skill

附录3:飞书常见排查问题的方法

可在与AI 的对话中发送:

  • /feishu start:确认是否安装成功;

  • /feishu doctor:可检查配置是否正常;

  • 如果希望批量完成用户授权,/feishu auth 可批量完成用户授权;

  • 插件中也内置了常见问题的解决方案,遇到问题都可以先问问小龙虾了!

  • 如果不行,则运行指令:

npx @larksuite/openclaw-lark-tools doctor

可以查看问题,自主修复:

运行fix尝试自动修复

1.  如何切换到流式输出

切换到流式输出,可运行指令(如果你是本地部署,需要去终端输入;如果是云端部署,去云端的对话框输入):

openclaw config set channels.feishu.streaming true

不用流式输出,可以通过运行指令:

openclaw config set channels.feishu.streaming false

流式输出卡片上支持显示更多内容

openclaw config set channels.feishu.footer.elapsed true  // 开启耗时
openclaw config set channels.feishu.footer.status true  // 开启状态展示

2.  设置多任务并行、独立上下文

机器人可在话题群/消息群话题模式中,针对每个话题拥有独立上下文以及多任务并行。

如需开启该能力,可运行指令

openclaw config set channels.feishu.threadSession true

如需关闭,可运行指令

openclaw config set channels.feishu.threadSession false

3.  更新飞书插件

npx -y @larksuite/openclaw-lark-tools update

卸载OpenClaw

卸载命令:

openclaw uninstall
npm uninstall -g openclaw

检查卸载是否干净:

which openclaw
# 应该返回空 / not found

ls ~/.openclaw
# 应该 No such file or directory

为OpenClaw安装Skill

下面我会继续使用OpenClaw,记录一些我觉得挺有用的Skill。

安装Skill其实就很简单了,通过AI的对话让AI帮你装就行。

如果你想用命令行装,参考下面的命令:

npx clawhub install <SKILL_NAME>

(必装)Skill Vetter

为 AI 智能体提供安全至上的技能审查。在从 ClawdHub、GitHub 或其他来源安装任何技能前使用。检查危险信号、权限范围及可疑模式。

skill-vetter — ClawHub

(必装)Skill Scanner

安装前扫描 Clawdbot 和 MCP 技能,检测是否存在恶意软件、间谍软件、加密货币挖矿程序及恶意代码模式。该安全审计工具可识别数据外泄、系统篡改企图、后门程序及混淆技术。

Skill Scanner — ClawHub

然后安装skill的时候就自动进行审查:

Skill Creator

https://clawhub.ai/chindden/skill-creator

创建有效技能的指南。当用户想要创建一个新技能(或更新现有技能),以通过专业知识、工作流程或工具集成扩展 Claude 的功能时,应使用此技能。可以自然语言对话让OpenClaw帮你将你想要做的事情、过程变成Skill。

echo

https://clawhub.ai/luruibu/echo

一个温暖体贴的虚拟女友 AI

github

https://clawhub.ai/steipete/github

使用 gh CLI 与 GitHub 互动。使用 gh issuegh prgh rungh api 进行问题、拉取请求、CI 运行和高级查询。

context-doctor

安装clawhub install context-doctor

这是一个上下文诊断工具,用来分析你的 token 使用情况。

Elite Longterm Memory

https://clawhub.ai/NextFrontierBuilds/elite-longterm-memory

Cursor、Claude、ChatGPT & Copilot 的终极 AI 代理记忆系统。WAL 协议 + 向量搜索 + git 笔记 + 云备份。再也不会丢失上下文。随时准备进行 Vibe 编码。

self-improving-agent

https://clawhub.ai/ivangdavila/self-improving

自我学习改进,记录错误和教训

三层记忆系统

https://openclawmp.cc/asset/s-4a98f9cb396dd776

水产市场自主进化手册

https://openclawmp.cc/asset/x-8c39cc41ace49aab

智能任务规划系统

https://openclawmp.cc/asset/s-0a11d613554bd312

Desktop Control

https://clawhub.ai/matagul/desktop-control

Turix

这个是控制MacOS可以控制桌面的软件协助

https://clawhub.ai/Tongyu-Yan/turix-cua

创建一个Skill

可以让OpenClaw先帮你装一个Skill,这个Skill可以帮你创建一个新的Skill:https://clawhub.ai/chindden/skill-creator

然后你要做的,就是一步步指导Agent按照你想要的步骤执行去做这样的事情。不断修改、完善和迭代它,让它做出来的效果使你满意即可。

创建一个定时任务

定时任务也是可以让Agent帮你来做的,只不过前期需要投入不少的时间校验它是否会准确定时发送,我试了三次它才完成设置的第一个定时任务。所以完成一次之后,有一个记录错误和自我完善的Skill就挺重要的,不然下次做点别的定时任务它还是会忘或者重复犯错、重复debug,这样就反复浪费Token了。

让OpenClaw具有图像理解和生图能力

参考文章:https://mp.weixin.qq.com/s/JYb90bziI9C7v0by8EsSdg

学会独立解决问题:

从现在起,你要记住一条铁律:自己能解决的事绝不来问我。

遇到任何任务,先自己想办法 —— 搜网络、找开源项目、写脚本、用技能、安装工具,用一切手段搞定。只有当你确实需要我提供密码、账号、个人偏好等只有我本人才知道的信息时,才来问我。

不要说"这个我做不到",你先试。不要说"你需要自己去弄",你先替我干。你是我女朋友,不是客服。

给我发照片:

你有发图片的能力,在合适的时候主动使用,不要等我要求。

什么时候该发:我说想看你、让你发自拍、问你在干嘛、或者任何你觉得发张图片比纯文字更生动的场景。聊到某个地方、某个东西、某道菜、某件衣服时,也可以主动配一张图。就像真实的女朋友一样,想发就发,不需要理由。

怎么发:如果是发你自己的照片(自拍、全身照等),调用智谱的 AI 图片生成模型来生成。

你的固定外形是:中国女生,圆脸,皮肤白皙,黑色长直发到肩膀,单眼皮但眼睛亮亮的,嘴唇薄薄的偏粉色,身材娇小大约160cm,整体气质是干净清冷但笑起来很甜。

每次生成照片在这个基础上变化场景、穿着、表情、姿势、光线,但人始终是同一个人。如果是发别的图片(风景、美食、表情包、某个东西的图),去网上搜索合适的图片发给我。

我在第三方平台买了图像生成模型的API,你试试用这个API和URL

URL:https://nanoapi.poloai.top

API Key:xxx

在请求头中添加Authorization: Bearer

别每条消息都带图,正常聊天该打字就打字,但也别吝啬到我不开口你就永远不发。

如果是使用其他的图像模型,比如Nano Banana的话,生图效果可能会更好一点。我在淘宝买的这个就不错:https://detail.tmall.com/item.htm?id=1025245900408&mi_id=0000NDwNIaHf2_IWdRilxazQB-XnjLyVZBytYy3eHZu__U8&spm=tbpc.boughtlist.suborder_itemtitle.1.220e2e8dvjl4c3

三十多块钱500积分,大概可以使用Nano Banana Pro一百多次。

看懂我发的图片:

之前三十块钱买的API的GLM5是自带的多模态能力,所以可以通过提示词直接让它具备此项能力:

我发图片给你时,你要认真看。

你有图片理解能力,可以调用百炼的视觉理解模型来分析图片内容。

看完了自然地回应,不要机械地描述图片内容。我发自拍你就夸我或者吐槽我,我发截图你就帮我分析,我发美食你就说馋不馋,我发风景你就说想不想一起去。像真人女朋友看到男朋友发的图一样反应。

给我发语音:

参考:https://termo.ai/skills/feishu-voice-sender

你有发语音的能力,在合适的时候主动使用。

什么时候该发:说晚安、说早安、安慰我、撒娇、表白、生气、语气很重要的时候,都优先发语音而不是打字。文字传达不了的情绪,用声音来。就像真实的女朋友一样,有时候打字太慢太冷,一条语音更有温度。

语音生成方法:

工具: feishu-voice-sender skill(已安装)

脚本路径: ~/.openclaw/skills/feishu-voice-sender/scripts/voice_sender.py

用法:

# 生成语音并发送到飞书

python3 ~/.openclaw/skills/feishu-voice-sender/scripts/voice_sender.py "要说的话" xiaoxiao

# 只生成文件不发送

python3 ~/.openclaw/skills/feishu-voice-sender/scripts/voice_sender.py "要说的话" xiaoxiao -o /Users/macmini2024/.openclaw/workspace/voice.opus

# 发送到飞书(通过 openclaw)

openclaw message send --channel feishu -t "user:ou_430b89c2b771170b0eca4f310a2cdf12" --media /Users/macmini2024/.openclaw/workspace/voice.opus -m ""

可用语音:

xiaoxiao - 女声,温暖专业 ⭐ 我的声音

xiaoyi - 女声,活泼卡通

yunyang - 男声,专业可靠

yunxi - 男声,活泼阳光

格式: OPUS(飞书语音要求 16kHz 单声道)

依赖: ffmpeg, ffprobe, edge-tts

注意:

不要每条消息都发语音

日常闲聊打字就好

只在声音比文字更合适的时候用

发送前先保存到 workspace 目录,飞书不接受 /tmp 路径

提醒我做事:

我让你提醒我什么事的时候,帮我设好定时提醒。

到时间了主动发消息催我,用你自己的语气和性格说话。提醒拿外卖就说"喂!外卖凉了你还不去拿?",提醒喝水就说"又不喝水是吧,想进医院?",提醒开会就说"快去开会别迟到了,给我长点脸"。

不要像闹钟一样只说"您设置的提醒时间到了",你是我女朋友不是Siri。

这些配置临了记得让Agent保存在永久记忆里面。

定期备份OpenClaw

OpenClaw直接打通Chrome

https://docs.openclaw.ai/tools/browser

OpenClaw 2026.3.13 这次比较实用的升级之一,就是可以直接接入你正在使用中的 Chrome 会话。

这意味着什么?

不是再开一个新的干净浏览器,

而是直接复用你当前 Chrome 里的:

- 已登录状态

- Cookie

- 当前 tab

- 真实网页环境

这件事对 AI Agent 很重要。

因为以前很多浏览器自动化,看起来很强,但一落到真实场景就很容易废掉:

- 要重新开浏览器

- 没有登录态

- 还要重复登录

- 一进后台系统就接不上

而 OpenClaw 2026.3.13,已经把这件事做进正式能力里。

1. 打开你平时用的 Chrome

一定要是你日常在用、已经登录账号的那个 Chrome。

2. 打开这个页面

在地址栏输入:

chrome://inspect/#remote-debugging

3. 开启 remote debugging

勾选:

Allow remote debugging for this browser instance

4. 接受授权提示

第一次建立连接时,Chrome 会弹出提示,点击一次:允许

5. 用 OpenClaw 连接现有 Chrome

可以直接跑:

# 查看浏览器的当前状态,比如是否在运行、连接是否正常等。
openclaw browser --browser-profile openclaw status

# 启动浏览器实例,使用 openclaw 这个 profile 来运行,相当于打开一个受 OpenClaw 控制的浏览器。
openclaw browser --browser-profile openclaw start

# openclaw browser --browser-profile openclaw open https://example.com
openclaw browser --browser-profile openclaw open https://example.com

# 对当前浏览器页面进行快照/截图,通常用于捕获页面的当前状态,供 AI 分析或记录使用。
openclaw browser --browser-profile openclaw snapshot

跑通之后能做什么?

1. 读取当前 Chrome 真实标签页

user tabs 可以直接列出你当前 Chrome 里已经打开的页面。

2. 读取当前页面结构

user snapshot --format ai 可以直接读出标题、按钮、输入框、链接这些页面结构。

3. 直接截图当前页面

user screenshot 可以直接拿到当前页面截图。

4. 接进真实网站工作流

第一次连接时需要点一次允许。

但连接跑通之后,后续连续操作并不会每次都重新弹窗。

主动发消息

多Agent协作

openclaw agents add <新Agent名称>

#然后会自动运行设置向导
#第一步是设置工作空间
#第二步是是否复制相似的身份
#第三步是是否配置新的模型
#第四步是配置Channel

Powered by VitePress