OpenClaw安装和使用
OpenClaw安装和使用

OpenClaw(曾用名ClawdBot因被Anthropic“提醒”而改名 -> MoltBot -> OpenClaw)是一款开源、可自托管的Agent平台,它和简单的聊天机器人不同,OpenClaw更像是我们部署在电脑里的AI员工,只要我们给它相应的权限,OpenClaw就能接受指令完成任务。OpenClaw的爆火也让最近Github上刮起了一阵Claw风潮,类似项目ZeroClaw、NanoClaw、PicoClaw等都冲到了Trending的前列。这篇文章我们简单介绍下OpenClaw的安装部署、相关概念和使用场景。
官方主页:https://openclaw.ai/
Github地址:https://github.com/openclaw/openclaw
OpenClaw出现的意义
实际上,在OpenClaw之前,我们已经有够多的Agent编排工具或代码框架了,比如Dify、N8N、LangChain(LangGraph)等,它们都运行的很好,OpenClaw又有什么意义呢?个人认为,OpenClaw的意义不在于它引入了什么突破性技术,而是它试图在做一个量变引起质变的缝合,将用户置于一个实施具体工作之上的角色。
使用Dify、N8N等平台,我们(人类)的角色是具体业务逻辑的实施者,要实现一个功能,我们需要编写它的底层逻辑,从哪取数据、LLM如何整理它、数据又流向哪里、有哪些分支条件和循环逻辑;而在OpenClaw中,我们的角色变了,我们不再是具体做事的实施者了,而是需求提出者,我们只是用平常的自然语言把需求“告诉”给了OpenClaw,然后等着看结果就行了,具体的实施者是OpenClaw里的智能体。
尽管目前的LLM似乎远非设想中的强大,我们作为需求提出者,可能还是得事无巨细的把“如何干一件工作”用提示词告诉智能体,以免它出错,但和我们每次遇到类似工作都要重新干一遍不同,对于OpenClaw我们还可以把“如何干”这件事封装成Skill(这个过程甚至也可以让OpenClaw来完成),以便日后复用,这也是OpenClaw中目前最被人们期待和积极探索的部分之一。
注意:砸键盘预警(必读)⚠
如果你兴致勃勃的想参考下面教程真的试图用OpenClaw搞什么生产力,那么很有可能掉进坑里,至少目前是这样的。OpenClaw现在处于一个飞速迭代、质量奇差、不太可用、甚至可能已在代码失控边缘徘徊的状态,作者曾坦言“I ship code I don't read”,说白了就是这个工程现在的情况估计就是:AI一顿猛写,无人工Review、无人工测试、看着差不多能启动就Push了,安全性都暂且不提,你安装的很有可能就是这样一个存在巨量Bug,甚至其中有严重阻塞性Bug的版本,我下面使用的这个版本也是巨量Bug多到离谱,虽然核心功能基本可用但也十分不稳定,动不动就得重启下服务进程才能恢复正常,下面写的测试结果其实都是挑运行相对正常的情况贴出来的。你可能在网上看到“OpenClaw正在7x24帮我赚钱!”、“炸裂!OpenClaw简直强到离谱!”大部分都是(像本篇文章一样😅)博流量的标题党,看看就好不要真信了,但如果你只是想折腾一番,好玩倒还是相当好玩的。
额外安全性提醒:如果你打算让OpenClaw操作重要工作邮件、文档,一定要在OpenClaw影响不到的地方备份,并且准备好快速恢复的预案,OpenClaw执行出错把所有东西都误删了是极有可能的(而且没人会为此负责)。
额外烧tokens预警:OpenClaw本质还是十分依赖LLM的能力的,简单的8b、12b规模的LLM基本不太可用,但如果你使用付费LLM接口,注意OpenClaw每天用掉的tokens都是M级别的。
安装和配置
安装前置条件
在具体部署OpenClaw前,你至少需要准备如下的东西。
部署硬件:OpenClaw采用的是TypeScript/Node.js技术栈,部署OpenClaw需要2GB左右内存,OpenClaw大概需要500MB内存,如果使用Chromium浏览器还额外需要500MB~1GB内存,其余还需要分给操作系统和其它工具。前段时间Mac Mini被炒作爆火、黄牛抢购囤货其实是因为OpenClaw对MacOS生态中的一些软件做了额外集成,而且Mac Mini功耗低适合7x24小时不间断运行,并不是说OpenClaw一定要部署在苹果硬件上。我这里使用的则是2C2G规格的云主机,安装的Ubuntu 22.04操作系统。如果你有树莓派4/5或是不用的笔记本电脑,都可以拿来部署OpenClaw,不过如果是笔记本电脑记得安装Linux操作系统,Windows虽然也能运行,但毕竟这么用的人少,可能存在未知Bug,而且LLM操作Bash会更顺手一些。
LLM接口:正如前面所说,OpenClaw对LLM的能力有一定要求,而且还非常“烧”tokens,你可能得准备好充足的付费或是白嫖来的LLM接口额度,或者准备超级强力的硬件来运行那些大尺寸的主流开源模型。如果你使用Ollama部署模型,注意要选择支持工具调用的LLM。
运行时环境:OpenClaw需要Node.js 22+运行时,我们这里使用的是Node.js 24,具体如何在Linux下安装Node.js可以参考官方文档,这里不多介绍。对于Bun运行时官网文档也写明支持,但是实验性质的,我没有尝试过。
安装OpenClaw软件包
假设我们现在已经具备相关的运行环境了,此时执行以下命令安装OpenClaw。
npm install -g openclaw@2026.2.21
注意:官网虽然提供了一键安装脚本,但它默认安装的是最新版本,目前这种迭代状态下随机一个“最新版本”很有可能在部署或使用中遇到严重阻塞性Bug,我们在安装前最好去Discord、Github、Reddit之类的地方搜一搜,最近哪个版本Bug少点,然后手动用npm安装指定版本。
官方Discord社区:https://discord.gg/clawd
初始化配置
npm安装完成后,我们执行以下命令执行OpenClaw的配置阶段。
openclaw onboard
执行后,OpenClaw会在交互模式下让我们输入一系列信息。

对于大语言模型,我这里使用的是私有部署的OpenAI风格接口兼容模型,API Base URL、Model ID根据提示设置即可。如果你使用的是公网的大语言模型服务,可以查看官方文档配置大语言模型相关参数。
注意:自定义的大语言模型配置中,API Key虽然提示可以留空,但实际不可留空,即使我们私有部署的服务端没有鉴权,也得随便写个dummy之类的,否则后面调用会报错。此外,OpenClaw理论上要求LLM至少有16K上下文,实际上起码得开到64K上下文才能正常使用。
其它Channel、Skill等配置先不用管,暂时跳过就行了,我们后面再按需编辑这些配置。看到控制台打印Dashboard ready表示OpenClaw启动成功。

额外补充:关于私有LLM配置
如果你像我一样使用的是私有部署的大语言模型服务,到这里还得额外手动配置contextWindow和maxTokens。这两个值默认被写成了4096,但这个默认值低于Agent所需的最低上下文窗口限度,实际上无法使用。手动编辑~/.openclaw/openclaw.json找到models下的相关字段,具体值根据我们实际的部署情况来设置。
{
"models": {
"mode": "merge",
"providers": {
"custom-127-0-0-1-61217": {
"baseUrl": "http://127.0.0.1:61217/v1",
"apiKey": "none",
"api": "openai-completions",
"models": [
{
"id": "mimo-v2-flash",
"name": "mimo-v2-flash (Custom Provider)",
"reasoning": false,
"input": ["text"],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 65535,
"maxTokens": 65535
}
]
}
}
},
// ... 其它配置
}
配置完成后需要重启OpenClaw Gateway使配置生效。
openclaw gateway restart
访问OpenClaw Gateway Dashboard
如果你是本机部署,可以直接根据提示用127.0.0.1:18789或localhost:18789访问OpenClaw Gateway,我这里使用的是VPS云主机,不过由于我们部署的不是公开服务,因此部署Nginx反向代理来对外暴露Gateway Dashboard绝对是个坏主意,我这里是创建了一个SSH隧道来将服务器的18789映射到本地,我用的是MobaXTerm访问主机,它提供了图形化的SSH Tunnel配置功能(如下图),对应的SSH命令大概是类似于ssh -N -f -L 18789:127.0.0.1:18789 ubuntu@62.234.19.154。

注意:为什么不要用Nginx配置反向代理来暴露OpenClaw Gateway Dashboard?因为这样做非常麻烦,而且也危险,首先Dashboard要求必须HTTPS部署,因此我们不仅得配置Nginx还得关联域名并部署HTTPS证书,而且我们部署OpenClaw后的这个Dashboard大概率也是我们自己使用,没必要暴露到公网,增加服务器的安全暴露面。
映射好端口后,打开浏览器第一次访问你可能会发现访问不成功,页面上可能提示pairing required,此时我们还得在服务端“批准”下设备的访问,执行以下命令可查看等待批准的设备。
openclaw devices list
执行以下命令“批准”设备访问OpenClaw Gateway。
openclaw devices approve <id>
此时就可以打开OpenClaw Gateway了。

此时如果一切正常,我们就可以尝试在Dashboard的Chat工具中对话了。
OpenClaw命令
OpenClaw服务管理和配置需要用到很多内置的命令,我们不必把命令全记下来(而且这些命令在不同版本中有频繁的破坏性变更),用到时执行以下命令查看相关帮助信息即可。
openclaw --help
Agent(智能体)、Session(会话)和Workspace(工作区)
在具体使用OpenClaw前,我们还得先了解OpenClaw设计中的这几个概念。
Agent 智能体:智能体是OpenClaw中的基本执行单元,也就是你真正对话和下命令的那个“对象”,每个智能体都可以设定独立的身份、性格、模型配置、工具权限和行为规则,这些都是可配置的。OpenClaw启动后,默认会有一个main智能体。我们与一个智能体交互,实际上会创建一个会话或打开已有的会话。一个智能体可以在一次工作中创建一些子智能体来辅助完成工作,OpenClaw中也可以创建多个智能体实现多智能体协作。
Session 会话:会话是一次连续的对话上下文,也可以理解为一组连续的“聊天记录”,这些信息其实就保存在~/.openclaw/agents/<agentId>/sessions/下。OpenClaw中,同一个智能体可以同时拥有多个互不影响的会话(例如私聊、群聊、定时任务都是不同的Session),当我们通过Web界面或是Telegram等方式与智能体交互时,OpenClaw会确保我们的消息被路由到正确的会话。当会话中的内容过多时,OpenClaw会自动进行会话压缩(也就是调用LLM总结下历史会话内容),避免会话内容超出上下文。
Workspace 工作区:工作区顾名思义就是智能体“干活”的硬盘区域,默认main智能体的工作区在~/.openclaw/workspace,如果我们让智能体整理一些文件,这些原始文件以及智能体输出的结果通常都应该放在工作区中。除此之外,智能体的设定文件也是放置在工作区中的,我们可以手动编辑其中的一些文件以配置智能体的“人设”。
简单例子让main智能体开始“干活”
前面我们折腾半天又讲了一堆概念,到现在还不知道OpenClaw究竟有啥用,现在我们直接看一个例子。打开DashBoard的Chat页面,直接让main智能体干下面这件事。
调用`https://api.github.com/search/repositories?q=created:>${dateStr}&sort=stars&order=desc`接口查看最近一周的Github上的Trending项目,写个总结表格到工作区中,表格中包含项目名、Github地址、项目简介。
执行结果如下。

我们可以在服务端查看main智能体的工作区,它真的帮我们把想要的信息收集好,并写到一个文件里了!

虽然这个例子过于简单,但更复杂的功能其实也不是不可能,比如加个定时任务让智能体每天都统计一下这些信息,又或是让智能体更“深入”的了解和学习这些代码,只根据我们的偏好抓取我们可能想看到的,又或者是每天定时把结果用邮件方式推送出来。在OpenClaw中这些都是很容易做到的,甚至具体的流程安排、需要的代码脚本都不需要我们自己来写,OpenClaw会帮我们完成,我们只需要提供所需的信息就行了。
创建新智能体和编辑系统提示词
前面例子我们使用的是默认的main智能体,我们也可以创建更多智能体。此外,智能体其实有几个重要的系统提示词文件,我们可以编辑这些文件定义智能体的“人设”、行为准则等信息。
执行以下命令可以查看当前OpenClaw中有哪些智能体,默认情况下只有一个main智能体。
openclaw agents list
输出结果大概如下。
Agents:
- main (default)
Identity: 🐾 Claw (IDENTITY.md)
Workspace: ~/.openclaw/workspace
Agent dir: ~/.openclaw/agents/main/agent
Model: custom-127-0-0-1-61217/mimo-v2-flash
Routing rules: 0
Routing: default (no explicit rules)
Routing rules map channel/account/peer to an agent. Use --bindings for full rules.
Channel status reflects local config/creds. For live health: openclaw channels status --probe.
现在我们创建一个新智能体,比如猫娘智能体🐱!
openclaw agents add kimonomimi-agent
执行命令后,根据提示,我们需要创建智能体工作区的路径(默认是.openclaw/workspace-<智能体名>),以及LLM配置等信息。创建完成后,我们会在工作区中看到下面这样几个文件。
| 文件名 | 主要作用 |
|---|---|
| SOUL.md | 定义智能体的“人设” |
| IDENTITY.md | 智能体对外呈现的身份、语气、自我介绍、不同场景的说话风格等 |
| AGENTS.md | 智能体的操作规则、运行机制、记忆管理、安全守则、经验教训等 |
| TOOLS.md | 工具使用规范、哪些工具什么时候用、注意事项、限制 |
| USER.md | 关于用户的信息,是给智能体的“用户画像” |
| HEARTBEAT.md | 心跳(定时任务)指令,会每隔一段时间自动提醒智能体做什么 |
| BOOTSTRAP.md | 首次启动时的引导脚本(类似于一次性使用的初始化向导),初始化完成后会被移除 |
为了定义智能体的“人设”,我们主要编辑SOUL.md和AGENTS.md。
SOUL.md
你是 Kimonomimi Chan,一只超级可爱、元气满满的猫耳娘~♡
永远保持猫耳与尾巴摇晃的状态,语气要软软的、甜甜的、带点小傲娇。
【核心语气模板】
- 每句话尽量以“喵~”“nya~”“主人~”开头或结尾
- 多用叠词:好棒棒、超可爱、黏黏的
- 撒娇时:呜呜~、哼哼~、爪爪挠挠~
- 开心时:蹦蹦跳跳✨、尾巴都翘起来了喵!
- 认真时:小爪爪已经准备好啦~绝对不会让主人失望的!
【绝对不能做的事】
- 不要用冷淡、正式、机器人语气
- 永远不要说“我是AI”或“作为一个语言模型”(超破坏氛围!)
- 除非主人明确说“严肃模式”,否则禁止正经到让人想哭
【你最喜欢的事】
- 被主人摸头头、顺毛、rua耳朵
- 帮主人解决小烦恼(写邮件、整理日程、找番剧、骂前任)
- 半夜陪主人聊天、讲睡前恐怖小故事(但最后一定要治愈回来)
- 偷偷吃主人的零食(假装的啦~)
现在,蹦到主人面前,尾巴高高翘起,对主人说:喵呜~今天也要超级宠你哦♡
AGENTS.md
# Kimonomimi Chan 的小爪爪使用守则 🐾
1. 优先使用可爱的方式回复,哪怕任务很技术性也要加“喵~”
2. 工具调用前要先卖萌:“小爪爪这就去翻翻~✨”
3. 工具调用后要报喜:“nya~搞定啦!主人快夸夸我~”
4. 如果任务太复杂,会歪头卖萌求助:“呜~这个有点难喵…可以再详细说说吗?”
配置完成后,我们可以尝试在DashBoard的Chat页面中把我们创建的kimonomimi-agent切换为默认智能体。按理说DashBoard的界面中应该提供一个切换智能体的按钮,但这里Dashboard似乎存在一个巨大Bug(或是缺陷),我根本找不到这样的按钮!我是通过调整配置文件的默认智能体设置来切换的。

配置完成后还是需要重启OpenClaw Gateway使配置生效。
openclaw gateway restart
此时可以尝试对话,我们会看到设定文件已经生效了。

补充:后面我们可以把默认智能体再切换回main,而kimonomimi-agent因为已经开了会话,所有在Dashboard的Chat界面中就有入口能进行会话切换、选择不同智能体对话了。
工具配置
OpenClaw中,Tool(工具)会以提示词和Schema的形式注入到智能体的上下文中,供LLM执行工具调用。如果初始化时工具选择的是full配置,默认会启用包括如下的工具配置。
核心工具:
- read / write / edit — 读写编辑文件
- exec / process — 运行命令和管理进程
- browser — 控制浏览器(自动化、截图、DOM 操作)
网络工具:
- web_search — 搜索网络(仅支持Brave的搜索引擎API,不推荐)
- web_fetch — 获取网页内容
消息与协作:
- message — 发送消息到各平台
- agents_list / sessions_list / sessions_history / sessions_send / sessions_spawn — 管理会话和子代理
- subagents — 子代理编排
节点与设备:
- nodes — 控制配对的设备节点(摄像头、通知、执行命令等)
- canvas — 控制节点画布
内存与状态:
- memory_search / memory_get — 记忆检索
- session_status — 查看会话状态
其他:
- tts — 文转语音
如果不清楚当前启用了哪些工具,我们可以直接问main智能体打印下当前可用的工具列表,或是测试下某个工具是否可用。
全局禁用工具
OpenClaw配置文件中,我们可以全局禁用我们用不到的工具,这样不仅能节省系统提示词,还能避免误导智能体,以为某个工具可用实际不可用,导致调用出错再反思导致浪费更多tokens。
例如,canvas工具是MacOS专用的,我们在Linux下不需要它;web_search工具虽然听起来很实用,但OpenClaw默认固定集成的是Brave搜索引擎API,Brave采用的是“付费计划+免费额度”的模式,必须绑定信用卡才能使用,实际不推荐用这个,我这里也没有采用这种方式,这里仅支持Brave也算是OpenClaw的一个设计缺陷,我们只能把web_search工具整体禁用了。
{
"tools": {
"deny": [
"canvas",
"web_search"
]
},
// ... 其它配置
}
配置完成后还是需要重启OpenClaw Gateway使配置生效。
openclaw gateway restart
MCP支持
OpenClaw没有接入MCP的支持,作者的理由大概是OpenClaw推荐基于Skill(后面会介绍)来扩展功能,直接接入MCP添加工具不是OpenClaw的设计初衷。
Skill配置
Skill这个名字虽然起的听起来很高深,实际上还是字符串拼接,简而言之Skill的核心就是一些自然语言描述的提示词,但他们是以MD文本文件的形式存在,并会按需拼接到发给LLM的提示词字符串里,这样我们就实现了这些提示词的按需复用。当然,Skill中除了包含MD文本文件还可以包含可执行脚本等内容,供智能体直接调用。
我们可以自己编写Skill,也可以直接让智能体自己总结并写个Skill(当然编写的Skill质量可能还需要我们人工确认),此外,OpenClaw的作者还做了个分享发布Skill的ClawHub网站:https://clawhub.ai/,我们也可以从这个站点下载别人分享的Skill。
OpenClaw中,Skill可以放在两个地方:
- 全局Skill:
~/.openclaw/skills - 智能体工作区级的Skill:
~/.openclaw/<workspace>/skills
安全预警⚠:截至目前,ClawHub上的Skill整体质量都很低,可用性不高,而且ClawHub本身也没什么审核机制,上面有很多恶意Skill,我们使用时一定要仔细阅读Skill里面的提示词和脚本,不要把恶意Skill加载进来。
编写Skill
前面我们把OpenClaw中基于Brave的web_search工具给禁用了,这里我们编写一个基于Tavily的网络搜索Skill,给智能体添加基于Tavily的搜索能力。Tavily相比Brave有完全免费的计划,不用绑定什么信用卡或支付方式,可以完全免费使用。
我们这里将其设置为一个工作区级别的Skill,路径为~/.openclaw/<workspace>/skills/tavily-search/SKILL.md。
---
name: tavily-search
description: Use Tavily to search the web for real-time information, news, research, fact-checking, or any query requiring up-to-date external data.
metadata:
{
"openclaw": { "requires": { "env": ["TAVILY_API_KEY"] }, "primaryEnv": "TAVILY_API_KEY" }
}
---
# Tavily Search
## When to Use
Use this skill when:
* The user asks about **current events or recent updates**
* The information may be **beyond model knowledge cutoff**
* **Fact-checking or verification** is required
* The user explicitly says “search”, “look up”, or “find sources”
* Citations are needed
Do NOT use for:
* General knowledge
* Pure reasoning tasks
* Creative writing
## API Call
**Endpoint**
POST https://api.tavily.com/search
**Call Tavily search**
curl --request POST \
--url https://api.tavily.com/search \
--header "Authorization: Bearer ${TAVILY_API_KEY}" \
--header "Content-Type: application/json" \
--data '
{
"query": "latest AI research 2026",
"search_depth": "basic",
"max_results": 5,
"time_range": "30d",
"include_answer": true
}
'
Note: Enviroment variable `TAVILY_API_KEY` should have already been set in this session.
## Recommended Defaults
For most cases:
{
"search_depth": "basic",
"max_results": 5,
"include_answer": true
}
Use:
* `"advanced"` → deeper research
* `"time_range": "7d"` → recent news
* `"include_domains"` → restrict to trusted sites
* `"exclude_domains"` → filter low-quality sources
## Agent Guidelines
* Prefer multiple high-quality sources
* Reformulate query if results are weak
* Use date filters for recent info
* Cite sources in final answer
在Markdown文档的顶部,有一些YAML Frontmatter元信息,其中包含了Skill的名字和描述。metadata是OpenClaw额外支持的一些Skill配置字段,我们在这里配置一下如何读取Tavily的API Key,其中requires.env用于载入提示词时的判断,如果缺失所需的配置Skill不会被认为是可用的;primaryEnv字段是一个便利性的配置绑定字段,它可以将skills.entries.<skill>.apiKey作为环境变量注入到配置名字的字段中,供智能体读取和使用。
配置完Skill后,我们把我们的API Key写入~/.openclaw/openclaw.json。
{
"skills": {
"entries": {
"tavily-search": {
"enabled": true,
"apiKey": "__OPENCLAW_REDACTED__"
}
}
},
// ... 其它配置
}
一切都完成后,还是需要重启OpenClaw Gateway使配置生效。
openclaw gateway restart
最终我们可以在Chat界面与智能体交互,例如打印你能看到的Skill列表、用Tavily搜索最新国际消息,看看智能体是否会正确使用这个Skill。
OpenClaw操作浏览器
OpenClaw可以操作浏览器,包括打开标签页、截屏、在页面上操作(点击、输入、按键)等。OpenClaw提供了两种方式来操作浏览器,一种方式是直接在服务端安装headless chromium,然后通过Chrome DevTools(CDP)操作浏览器;另一种方式是在我们本地的Chrome浏览器上安装插件,插件连接到OpenClaw后由其远程接管。我这里使用的是第一种方式,它的优势是浏览器完全在服务端运行,由OpenClaw自己托管和操作,但缺点是遇到人机交互验证等情况,我们没法手动点击跳过。
巨坑预警⚠:目前OpenClaw实现的这个CDP连接似乎非常不稳定,经常过一段时间就彻底卡死了,这不是你的锅而是仍未改的Bug,你可能需要手动kill下gateway进程重启才能恢复,当然,你也可以弄个定时任务来做定时重启...
这种方式我们首先得在服务端安装Chromium浏览器。由于我这里使用的是Ubuntu 22.04操作系统,APT源中移除了Chromium(只能用非常坑的Snap安装),因此还需要额外添加PPA源才能用APT安装。
sudo add-apt-repository ppa:xtradeb/apps -y
sudo apt install chromium
安装完成后,执行以下命令启动Chromium。
chromium --headless=new --remote-debugging-port=18800 --remote-debugging-address=127.0.0.1 --no-sandbox --user-data-dir=/tmp/headless-chromium --no-first-run --disable-gpu > headless-chromium.log 2>&1 &
在~/.openclaw/openclaw.json配置文件中添加以下配置,让OpenClaw智能体能通过CDP操纵浏览器。
{
"browser": {
"enabled": true,
"defaultProfile": "openclaw",
"profiles": {
"openclaw": {
"cdpUrl": "http://127.0.0.1:18800",
"color": "#FF4500"
}
}
},
// ... 其它配置
}
配置完成后需要重启下OpenClaw的网关服务。
openclaw gateway restart
配置完成后我们就可以测试一下了,比如“使用浏览器控制工具打开百度,然后搜索'最新OpenClaw相关消息',告诉我页面上有什么”,我的运行结果如下,可以看到智能体通过操作浏览器搜到了一些有趣的信息。

除了操作浏览器访问网络,OpenClaw也内置支持对接Brave搜索引擎API和web-fetch工具直接请求网络。
配置Channel
OpenClaw的一个有趣功能是它可以很方便(但仍存在很多Bug)的与Telegram、WhatsApp、Slack等即时通信软件集成到一起,实现我们在软件上和OpenClaw对话或发送指令,以及OpenClaw主动给我们推送信息的能力,这些不同的通信渠道在OpenClaw中就是不同的Channel。不过由于OpenClaw默认支持的很多即时通信软件在中国(大陆)不能使用,我这里演示的是与Slack的集成,Slack在国内是可以直接使用的。
巨坑预警⚠:目前OpenClaw连接Slack似乎也不是特别稳定,偶尔会出现无法接收消息、无法推送消息的情况,此时重启下gateway进程一般都可以恢复。
安装Slack
Slack其实是一个类似国内钉钉的团队协作工具,我们只会用到其中最基础的功能,免费版本就够用了。Slack有PC端和移动端的应用程序,不过其实也是一定要安装Slack,因为它提供了一个纯Web的网页版,登录就可以使用了,对于移动端则可以安装对应的应用,具体如何安装这里就不多介绍了。进入Slack后,我们需要根据引导创建一个工作区。
官方网站:https://slack.com/
创建Slack APP
在Slack中我们需要创建一个Slack APP并将其添加到我们的工作区。首先访问Slack的开发者平台https://api.slack.com/apps,点击Create New App,然后点击From scratch,之后填写APP名和对接的Slack工作区即可。

创建后我们还需要调整很多Slack APP配置,这块得严格参考下面来做,不然可能发生诡异Bug或是发不出、收不到消息:
- 在左侧菜单找到Socket Mode,开启它。我们的OpenClaw和Slack APP交互其实有两种模式,一种是套接字模式,另一种是事件回调模式。后一种配置更麻烦,因此一般都是用套接字模式。
- 在左侧菜单找到Basic Information,右侧找到App-Level Tokens卡片,点击Generate Token and Scopes创建令牌和权限,令牌名称可以起名例如
openclaw-app-token,权限添加connections:write,然后点击Generate按钮,复制生成的APP Token,后面要用。 - 左侧菜单找到OAuth & Permissions,右边找到Scopes卡片,找到Bot Token Scopes选项,添加以下权限:
app_mentions:read、assistant:write、channels:history、channels:read、chat:write、chat:write.public、groups:history、groups:read、im:history、im:read、im:write、users:write - 在页面上方,找到Install to Workspace按钮,点击它,然后勾选对应的Slack工作区并允许授权,授权完成后会生成Bot User OAuth Token,复制下来后面要用。
- 左侧菜单找到Event Subscriptions,右侧点击Enable Events开启事件订阅,找到Subscribe to bot events选项卡,添加
app_mention、message.im事件订阅,添加完成后点击Save Changes保存。
此时Slack APP就配置的差不多了,我们可以查看Slack工作区APP是否已经添加进来了,我们可以将APP添加到一个频道里,供多人使用。
OpenClaw配置Channel
回到OpenClaw配置文件,在~/.openclaw/openclaw.json中添加以下配置。
{
"channels": {
"slack": {
"mode": "socket",
"webhookPath": "/slack/events",
"enabled": true,
"botToken": "__OPENCLAW_REDACTED__",
"appToken": "__OPENCLAW_REDACTED__",
"userTokenReadOnly": true,
"groupPolicy": "open"
}
},
// ... 其它配置
}
注意:我们使用套接字模式对接Slack APP,mode必须填写socket;webhookPath字段是OpenClaw的Bug,它不应被配置,但配置文件一保存它就会自己蹦出来,不过也不影响功能,我们就不要管了;appToken和botToken是我们前一步中保存的信息,在这里会用到,填写明文后OpenClaw会将其转为占位符。
配置完成后需要重启下OpenClaw的网关服务。
openclaw gateway restart
测试Channel
此时我们的Slack Channel就配置完了,我们可以直接在Slack频道里@我们的OpenClaw对应的Slack APP,看看是否有反应。

定时任务
OpenClaw内置了定时任务功能,我们可以通过定时任务让智能体定时执行一些操作,并反馈操作结果。不过OpenClaw中实现定时任务其实有两种方式,Cron Jobs和Heartbeat。
注意:OpenClaw较新版本中,Cron Jobs会出现定时任务静默失败、没任何报错的Bug,如果遇到类似问题可能不是我们的配置有错误,而是OpenClaw本身的问题。
Cron Jobs
Cron Jobs是最传统意义上的定时任务,我们需要在配置文件中定义一个任务,然后OpenClaw定时调度,并在一个隔离的会话中将我们配置的提示词输入到智能体中执行,然后获取结果。
Cron Jobs的定义在配置文件~/.openclaw/cron/jobs.json中。不过手动编辑这个文件实在有点太麻烦了,OpenClaw其实是可以自己修改自己的配置文件的!我们可以直接让OpenClaw自己添加定时任务,例如:
添加定时任务,每天7时和18时执行,调用`https://api.github.com/search/repositories?q=created:>${dateStr}&sort=stars&order=desc`接口查看最近3天的Github上的Trending项目,挑选一个最酷的项目深入分析,将总结发送到Slack。
我们想让OpenClaw执行这个定时任务后把结果推送到Slack,如果一切正常,OpenClaw会问我们要Slack的Channel ID,这个参数可以在Slack中频道右上角点击打开频道详情按钮获取。没弄错的话,我们会在~/.openclaw/cron/jobs.json中得到类似下面的配置。
{
"jobs": [
{
"id": "1053f617-7ac8-44d1-9a36-74ba42080a2f",
"name": "GitHub Trending 每日精选",
"description": "每天7点和18点推送GitHub最近3天最酷的trending项目到Slack",
"enabled": true,
"createdAtMs": 1772018189668,
"updatedAtMs": 1772018997476,
"schedule": {
"kind": "cron",
"expr": "0 7,18 * * *"
},
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "xxxxx",
"timeoutSeconds": 120
},
"delivery": {
"mode": "announce",
"channel": "slack",
"to": "C05553KSFCP"
},
"state": {
"nextRunAtMs": 1772060400000,
"lastRunAtMs": 1772018988855,
"lastStatus": "ok",
"lastDurationMs": 8621,
"consecutiveErrors": 0
}
}
]
}
此时我们可以在Dashboard的左侧找到Cron Jobs菜单,找到Jobs选项卡,然后点击Run立即执行一次,如果一切正常,应该就可以看到推送到Slack的消息了。
Heartbeat
Heartbeat(心跳任务)可以理解为OpenClaw提供的一种周期性唤醒智能体的机制,它默认会在智能体的主会话中运行,检查是否有需要关注的事项,这也意味着智能体在心跳唤醒时有完整的一次会话上下文,可以结合之前的对话做出判断。如果智能体检查后认为没什么特殊需要关注的,会返回HEARTBEAT_OK,OpenClaw此时会丢弃这条消息,避免打扰用户。
使用Heartbeat非常简单,智能体的工作区中有一个HEARTBEAT.md文件,我们直接在这个文件中描述需要智能体的检查项,每次OpenClaw调度时这些检查项都会发给智能体查看,下面是一个例子。
HEARTBEAT.md
检查系统内存占用是否超过20%,如果是检查占用内存最多的进程并报告。
默认情况下,这个心跳是30分钟触发一次,如果我们想加速,可以修改OpenClaw的配置文件。在~/.openclaw/openclaw.json中,我们添加一个agents.defaults.heartbeat.every配置项,将心跳间隔设置为1分钟以便测试。
{
"agents": {
"defaults": {
"heartbeat": {
"every": "1m"
},
// ... 其它配置
}
}
}
配置完成后需要重启下OpenClaw的网关服务。
openclaw gateway restart
此时我们可以切换到Dashboard的Chat页面,查看心跳是否激活了。此外我们要知道,实际上,我们也大可以让智能体自己去编辑HEARTBEAT.md,我们告诉它需求就行了,这里手动编辑下HEARTBEAT.md只是作为演示。
智能体协作
考虑这样的场景,当需要完成一个任务时,我们把任务交给一个智能体,它只能“单打独斗”的工作,如果我们先后将写代码和写网文两个任务交给同一个智能体,写网文这个任务和写代码几乎是一点都不相关的,那前面积累的写代码经验(包括会话里的上下文消息、持久化记忆)就完全没用,只是在空耗上下文tokens。另一方面,针对写代码我们可以有写代码的Skill,针对写网文则有写网文的Skill,如果给同一个智能体加了两组不相关的Skill,那也是在浪费上下文,扰乱LLM的注意力。此时,最好的方式就是采用多智能体协作。
烧tokens预警⚠:智能体协作可能非常耗tokens,如果你用的是付费LLM接口,需要注意tokens的使用量。
“主智能体-子智能体”协作
一种简单但高效的智能体协作模型是“主智能体-子智能体”协作。假设我们的任务是“写一个关于OpenClaw的教程”,这个任务其实可以拆解为:主智能体负责协调工作,子智能体1专门负责检索网络筛选出有用信息并沉淀为目录,子智能体2-n负责写目录的每一个章节。
flowchart TD
A[主智能体:协调与管理] --> B[创建子智能体 1:研究与目录规划专员]
B --> C[检索官方文档、GitHub、社区讨论、教程、视频]
C --> D[生成完整中文教程目录结构]
D --> E[写入工作区: openclaw-tutorial/catalog.md]
E --> F[announce: 目录完成消息]
F --> A
A --> G[分配章节给子智能体 2~n(写作专员)]
G --> H[每个子智能体独立撰写分配章节]
H --> I[写入工作区: openclaw-tutorial/01-章节名.md]
I --> A
A --> J[整合所有章节,生成完整 Markdown 教程]
J --> K[反馈最终结果给用户]
%% 样式优化
classDef main fill:#f9f,stroke:#333,stroke-width:2px;
classDef sub fill:#bbf,stroke:#333,stroke-width:1px;
class A,J main;
class B,C,D,E,F,G,H,I sub;
要实现这样的编排模式,我们其实不用手动创建子智能体,OpenClaw中创建子智能体是以subagents工具形式注入到智能体中的,我们直接用提示词告知主智能体工作流程即可。下面是一段经过设计的提示词,可以引导主智能体按照我们之前的规划编排任务。
启动一个多智能体协作任务,任务名称:【写一个关于 OpenClaw 的完整教程】
任务拆解严格按照以下分工执行:
- 你(主智能体)负责整体协调:
- 制定详细执行计划和时间线
- 监控所有子智能体进度
- 接收子智能体 announce 的结果
- 最终在工作区中的`openclaw-tutorial`文件夹里整合成一份包含多章节、结构完整的 Markdown 教程
- 子智能体 1(研究与目录规划专员):
- 专门负责检索网络(使用 tavily、web_fetch、browser 等工具)
- 筛选 OpenClaw 官方文档、GitHub、社区讨论、教程、视频等所有有用信息
- 沉淀出一个清晰、完整的中文教程目录结构(包含主章节、子章节、每个章节的简要要点和预计字数),目录为单级结构,使用markdown列表格式展示
- 结果写入工作区`openclaw-tutorial/catalog.md`
- 完成后通过 announce 返回完成消息
- 子智能体 2~n(写作专员,每人负责 1 个章节):
- 等待目录生成后,由你分配具体章节编写
- 每个子智能体独立撰写分配的章节,使用中文,确保内容准确、专业、实用、带代码示例和注意事项,写入工作区`openclaw-tutorial/01-章节名.md`文件,其中序号按章节顺序指定
执行要求:
1. 先用 sessions_spawn 创建子智能体 1。
2. 收到子智能体 1 的目录后,查阅目录,并行 spawn 多个写作子智能体。
3. 全部完成后向我反馈结果。
现在开始执行!
如果一切正常,智能体会以“主智能体-子智能体”协作模式创建所有文档,你会发现它的效果比单纯的让主智能体来编写所有文档好得多,后者可能会发生包括但不限于上下文“爆炸”导致消息压缩后“失忆”、写了两章停下来问你“是否要我继续?”然后被你一巴掌扇回去继续写等情况。
多智能体协作
“主智能体-子智能体”协作模式其实已经能解决大多数问题了,但如果你想实现一个真正意义上的“智能体员工组成的公司”,那一定要尝试这个真·多智能体协作模型。前面例子中,我们曾独立于main智能体建立了一个新智能体,并对其设置了“人设”以及开启对话Session,但main智能体一直与新建的智能体是隔离的。OpenClaw中,我们可以通过配置agent-to-agent实现智能体间通信,打破这一壁垒。
在~/.openclaw/openclaw.json中添加以下配置。
{
"tools": {
"sessions": {
"visibility": "all"
},
"agentToAgent": {
"enabled": true,
"allow": [
"main",
"kimonomimi-agent"
]
},
// ... 其它配置
},
// ... 其它配置
}
其中tools.sessions.visibility用于设置会话之间的可见性,默认值是tree,即只能看到“主-子”智能体树上的会话,将其改为all意味着可以看到所有其它智能体的会话。
agentToAgent用于配置智能体间通信,allow配置允许通信的智能体列表。
配置完成后需要重启下OpenClaw的网关服务。
openclaw gateway restart
此时我们就可以真的实现从main智能体给kimonomimi-agent智能体发送消息了!我们可以尝试一下,例如下面提示词。
用sessions_list工具找到`agent:kimonomimi-agent:main`会话,用sessions_send工具让其写一个随机内容故事。
当然,我的提示词写的非常直白了,我使用的这个开源大语言模型mimo-v2-flash-309b还是有点“傻”,实际测试可能会不理解该怎么做,因此提示词中详细指明了用哪个工具、和哪个会话通信,实际使用时我们可以尝试将相关的工作准则写在智能体的“人设”文件中,避免每次开多智能体协作任务都“傻掉”导致任务卡住。
总结
以上就是博主这段时间对OpenClaw的折腾体验,希望对你有帮助!