乐于分享
好东西不私藏

L02 — 搞懂 OpenClaw 架构:一条消息的完整旅程

L02 — 搞懂 OpenClaw 架构:一条消息的完整旅程

📖 「Agent 学习实操系列:OpenClaw x Hermes 」

第2篇:搞懂 OpenClaw 架构:一条消息的完整旅程

- 引言 -

你可能已经装好了 OpenClaw,飞书机器人也跑起来了,发条消息过去秒回。但你想过没有,这条消息经历了什么?

从你在飞书打字,到 Agent 把结果送回来,中间经过了网关、会话、模型、工具调用好几个环节。搞懂这条链路,后面加 Skill、配 Cron、调模型,你都知道该改哪里。

这篇把 OpenClaw 的架构拆开给你看。不是源码级分析,是"作为使用者你需要理解的全部"。

🔻

● 六个关键词,建立心智模型

OpenClaw 的架构可以浓缩成六个关键词。先记住它们,后面逐个展开。

Gateway(网关)

OpenClaw 的心脏,一个常驻后台的 Node.js 进程。所有消息进出都经过它。

它的职责很单纯:收消息、找 Agent、把结果送回去。不思考,不判断,只做调度。

管理方式:

openclaw gateway start    # 启动
openclaw gateway stop    # 停止
openclaw gateway restart # 重启
openclaw gateway status  # 看状态

默认跑在本地 18789 端口,配置在 openclaw.jsongateway 字段。

Session(会话)

每个对话窗口对应一个 Session。你跟 Agent 私聊是一个 Session,群里 @ 它是另一个 Session,Cron 任务跑起来又是独立的 Session。

三种 Session 类型:

- main:主会话,你直接跟 Agent 聊天时用
- isolated:隔离会话,Cron 定时任务专用,跑完就销毁
- subagent:子 Agent 会话,主 Agent 派出去干活的

Session 决定了两件事:上下文隔离(不同 Session 之间互不干扰)和工具权限(isolated session 能用什么工具有限制)。

Agent(智能体)

配置在 openclaw.json 里,每个 Agent 有自己的模型、工具权限、身份文件。

最简单的配置只有一个 Agent:

{
  "agents": {
    "list": [{
      "id": "main",
      "model": "zai/glm-5.1",
      "tools": { "profile": "full" }
    }]
  }
}

Channel(渠道)

飞书、Telegram、Discord、微信——都是 Channel。Agent 不关心消息从哪来,Gateway 负责统一格式。

Skill(技能)

Agent 的工具箱。一个 Skill 就是一个 SKILL.md 文件加上可选的脚本。Agent 收到消息后扫描所有可用 Skill,根据 description 字段判断要不要调用。

Cron(定时任务)

配置在 cron/jobs.json 里,支持热加载——改完文件不用重启 Gateway。

📌 小结:Gateway 是引擎,Session 是车厢,Agent 是司机,Channel 是乘客上车的地方,Skill 是司机的技能包,Cron 是闹钟。记住这个比喻就够了。

🔻

● 目录结构:哪个文件管什么

你不需要记住所有目录。重点关注三个:

1. openclaw.json — 改模型、改渠道、改权限
2. workspace/ — 改 Agent 性格、加记忆、装 Skill
3. cron/jobs.json — 定时任务全在这里

workspace 目录是 Agent 的"大脑":

workspace/
├── AGENTS.md    # 行为准则(启动流程/红线/规则)
├── SOUL.md      # 性格内核(风格/偏好/态度)
├── USER.md      # 用户画像(你是谁/怎么沟通)
├── IDENTITY.md   # 身份卡(名字/emoji/定位)
├── MEMORY.md    # 长期记忆
├── memory/      # 短期记忆(每天一个日志)
├── skills/       # 用户安装的 Skill
├── scripts/      # 自定义脚本
└── temp/         # 临时文件

📌 小结:openclaw.json 管"硬件"(模型、渠道、权限),workspace/ 管"灵魂"(身份、记忆、技能)。一个管身子,一个管脑子。

🔻

● 四个身份文件:让 Agent 变成"你的"Agent

这是 OpenClaw 最独特的设计。四个纯文本文件定义 Agent 的人格。

AGENTS.md — 宪法(必须遵守的规则)

启动时必须读哪些文件、红线(不能做的事)、群聊行为规范、自我改进协议。

SOUL.md — 性格(愿意怎么做)

核心价值观和沟通风格。我自己的 SOUL.md 里写了一句"用能力赢得信任",直接影响了 Agent 每次回复的语气。

USER.md — 用户画像(对用户的理解)

你是谁、什么职业、什么沟通偏好。知道你是工程师,Agent 就直接用术语,不每次解释。

IDENTITY.md — 名片(对外展示)

名字、emoji、定位、核心能力。最轻量的文件。

实操验证:改 SOUL.md,加一句"回复时最后加个 🧊",保存后发消息,下一秒就能看到变化。

📌 小结:AGENTS.md 是宪法,SOUL.md 是性格,USER.md 是对你的理解,IDENTITY.md 是名片。四个文件协作,让 Agent 从"通用机器人"变成"你的专属助手"。

🔻

● 一条消息的完整旅程

全篇最核心的部分。跟着一条消息走一遍,把前面所有概念串起来。

场景:你在飞书发了"今天深圳天气怎么样?"

第1站:飞书服务器 — 通过 WebSocket 长连接把消息推送到你服务器的 18789 端口。

第2站:Gateway — 解析消息来源,找到对应 Session,路由到 main Agent。

第3站:Agent 醒来 — 读取 SOUL.md、USER.md、近期记忆、MEMORY.md,然后扫描 Skill 列表。

第4站:调用工具 — 匹配到 weather skill,读取 SKILL.md,调用天气 API。

第5站:生成回复 — 按 SOUL.md 的风格和 USER.md 的偏好,把数据整合成自然语言。

第6站:返回飞书 — 回复经 Gateway → WebSocket → 飞书,你在聊天窗口看到结果。

整个过程,通常 2-5 秒。

📌 小结:理解这条链路,你就理解了 OpenClaw 的全部。后面遇到任何问题,都能定位到是哪个环节出了状况。

🔻

● openclaw.json 核心字段速查

最常用的字段整理出来,方便查阅:

{
  "agents": {
    "defaults": {
      "model": {
        "primary": "zai/glm-5.1",
        "fallbacks": ["minimax/MiniMax-M2.7"]
      }
    },
    "list": [{ "id": "main", "model": "zai/glm-5.1" }]
  },
  "gateway": { "port": 18789 },
  "session": { "dmScope": "per-channel-peer" },
  "channels": { "feishu": { "enabled": true } }
}

常用操作:换模型改 agents.defaults.model.primary,加渠道在 channels 下加配置块,改完 openclaw gateway restart 生效。

📌 小结:一个文件管完所有硬件配置。改完 restart 就生效。

🔻

● 写在最后

这篇覆盖了 OpenClaw 架构的五个维度:核心概念、目录结构、身份文件、消息生命周期、配置文件。

搞懂这些不需要写代码。OpenClaw 的设计哲学就是"配置即一切"——改文本文件就能改行为,改 JSON 就能改架构。

下一篇 L03,我们拆 Hermes Agent 的架构,重点对比两个框架的异同,以及双 Agent 共存的运维模式。

以上,如果觉得有用,请点个赞,谢谢。。

🏗️ 系统架构 | 💡 行业观察