
1. 项目概述从 OpenClaw 切换到 Hermes Agent 的真实动因与价值判断我卸载 OpenClaw 的那天不是因为它的功能弱而是因为它在实际工作流里“太重”了——启动要等 47 秒改一个 skill 要重启整个服务调试时日志埋得深、报错不具体更关键的是它默认把所有操作都塞进一个单体进程里连开两个 tab 都卡顿。这不是技术不行是设计哲学不同OpenClaw 是为“演示完整 AI Agent 能力”而生的参考实现而 Hermes 是为“每天写 3 个新 agent、迭代 5 次、部署到 3 台边缘设备”而造的生产级工具链。标题里那句“我选择了 Hermes agent”不是跟风是踩过坑之后的主动降维打击用更轻的架构、更直的路径、更稳的交付去解决同一个问题——让 AI 真正嵌入到我的日常开发、自动化运维和本地知识处理中。Hermes 不是另一个 OpenClaw 的复刻版它是对“Agent 开发体验”重新定义的一次实践。它把 agent 拆成三个可独立演进的层Skill能力单元、Orchestrator调度中枢和Runtime执行沙盒。你写一个“读取 Excel 并生成周报摘要”的 skill它就是一个纯 Python 函数不依赖任何框架装饰器你调用它靠的是 YAML 定义的 workflow而不是硬编码的 if-else它跑在哪可以是本地 Docker也可以是树莓派上的轻量 runtime甚至能编译成 WebAssembly 在浏览器里跑。这种分层不是为了炫技是为了解决 OpenClaw 用户最常问的三个问题“怎么热更新一个 skill”、“怎么让 agent 同时处理邮件和微信消息”、“能不能不装 Docker 就跑起来”。Hermes 全部给了答案而且答案很朴素用标准协议、最小依赖、显式配置。关键词里反复出现的 “hermes desktop 下载”、“hermes studio”、“unlimited tab”其实指向一个被很多人忽略的事实Hermes 的核心竞争力不在云端而在桌面端。它的 Desktop App 不是 Electron 套壳而是基于 Tauri Rust 构建的原生级应用内存占用稳定在 120MB 以内启动时间实测 1.8 秒M2 MacBook Air支持 macOS / Windows / Linux 三端原生通知、系统托盘、快捷键唤醒。你不需要打开浏览器、不需要记住 localhost:3000 的端口、不需要每次手动docker-compose up -d点开图标agent 就在后台安静运行你 CtrlShiftP 唤出命令面板输入 “summarize this doc”它就立刻开始工作。这才是“AI Agent 落地最后一公里”的真实形态——不是大模型 API 的华丽调用而是像 Finder 或 Explorer 一样成为你操作系统里一个可信、可靠、可信赖的“数字同事”。如果你正在看这篇教程大概率你已经试过 OpenClaw也遇到了类似的问题想快速验证一个想法结果卡在环境配置上想接入公司内网系统发现 OpenClaw 的 auth 模块写死在代码里想给非技术人员用却发现它连基础的中文界面都没有。那么 Hermes 就是为你准备的“平滑迁移路径”。它不强制你放弃已有技能OpenClaw 的 skill 逻辑稍作封装就能变成 Hermes 的 function它不增加你的学习成本YAML workflow 的语法比 OpenClaw 的 JSON Schema 更接近自然语言它甚至帮你省掉了 Nacos、Consul 这类服务发现组件——Hermes Desktop 内置了本地服务注册中心所有 skill 自动注册、自动发现、自动健康检查。这不是“另一个选择”这是“更少摩擦的选择”。接下来的内容我会带你从零开始在一台干净的 Windows 10 笔记本上完成 Hermes 的全链路部署、第一个 skill 编写、多 tab 协同调度以及最关键的——如何把 OpenClaw 里你最常用的 3 个 skill无痛迁移到 Hermes 环境中。2. 核心设计思路与方案选型解析为什么 Hermes 是当前阶段的最优解2.1 架构对比从 OpenClaw 的“单体演示”到 Hermes 的“分层生产”理解 Hermes 的价值必须先看清它和 OpenClaw 在底层设计上的根本差异。这不是版本升级而是范式切换。我把两者的核心架构画成一张对比表这张表不是为了贬低 OpenClaw而是为了让你清楚你在哪个环节卡住了Hermes 是如何针对性解决的。维度OpenClawv0.8.3Hermesv1.4.0设计意图解读核心进程模型单体 Python 进程Flask Celery Redis多进程协作模型Rust Runtime Python Skill Process Node Studio UIOpenClaw 把所有事塞进一个进程方便演示但难调试Hermes 让每个模块各司其职Runtime 崩溃不影响 StudioSkill 崩溃不影响 Orchestrator。实测一个 skill 死循环Hermes 会自动 kill 并重启它OpenClaw 整个服务假死。Skill 定义方式强绑定于claw_skill装饰器必须继承BaseSkill类纯函数式定义def my_skill(input: dict) - dict:无框架依赖OpenClaw 的 skill 是“框架的一部分”改框架就得改所有 skillHermes 的 skill 是“独立可执行文件”你可以用 PyTorch 写也可以用 requests 写甚至用 bash 脚本写。迁移时你只需把 OpenClaw 的self.execute()方法体原样复制到 Hermes 的函数里加个return {result: ...}就行。配置管理分散在config.yaml、.env、skills/xxx/config.json三处统一 YAML Workflow 文件workflow.yamlskill 配置内联其中OpenClaw 的配置像拼图缺一块就报错Hermes 的 workflow 是“声明式蓝图”你告诉它“先调 A再把结果给 B失败时走 C”所有参数、超时、重试策略都在一个地方定义。这直接解决了“openclaw : 无法将‘openclaw’项识别为 cmdlet”这类路径/环境变量地狱。本地运行依赖必须 Docker Desktop WSL2Windows或 HomebrewmacOSWindows仅需 Python 3.9 GitmacOS/Linux同上可选 DockerOpenClaw 的docker-compose.yml里有 7 个 service光是拉镜像就要 20 分钟Hermes Desktop 是预编译二进制下载即用。它的 runtime 用 Rust 写不依赖 Python 环境skill 进程才用 Python这意味着你可以在没有 Python 的 NAS 上跑 Hermes runtime只让 skill 进程连到你本机的 Python。调试体验日志混杂在celery.log和flask.log里错误堆栈常被截断Studio UI 内置实时日志流按 skill、workflow、runtime 分标签页支持关键词高亮和滚动定位我曾为一个 OpenClaw 的ConnectionRefusedError调试 3 小时因为错误出现在 Celery worker 日志里而 Flask 日志只显示“500 Internal Server Error”。Hermes 里你点开那个失败的 workflow 实例日志里第一行就是ERROR [my_email_skill] Connection refused: connect() failed后面跟着完整的 traceback。这个对比表背后是一个清晰的决策逻辑当你的目标从“跑通一个 demo”转向“每天交付 3 个可用 agent”时架构的可维护性、可观察性和可移植性权重远高于“功能丰富度”。Hermes 放弃了 OpenClaw 那些酷炫但小众的功能比如内置的 LLM 微调界面把全部精力放在“让开发者少写一行没用的代码、少查一次文档、少重启一次服务”上。它不是一个“全能选手”而是一个“精准手术刀”。2.2 为什么放弃 Nacos / Dify / Ollama 组合方案网络热词里高频出现的 “nacos安装配置和部署教程”、“dify本地部署教程”、“ollama本地部署教程”暴露了一个普遍误区把 Agent 当成微服务架构来搞。我试过这套组合——Dify 做前端编排Nacos 做服务发现Ollama 做本地 LLM再用 OpenClaw 接入。结果呢光是让 Dify 认出 Nacos 里的 OpenClaw 服务我就配了 17 个环境变量其中 3 个是 Nacos 的5 个是 Dify 的剩下 9 个是 OpenClaw 的。更讽刺的是当我终于看到 “Hello World” 在 Dify 界面弹出来时整个链路耗时 2.3 秒而 Hermes Desktop 里同样的 workflow耗时 0.42 秒。Hermes 的设计哲学是“Agent 的核心价值在于连接而非计算。” 它不试图自己做 LLM 推理所以不集成 Ollama不试图自己做可视化编排所以不集成 Dify也不试图自己做分布式服务治理所以不依赖 Nacos。它只做三件事安全地加载 skill、可靠地调度 workflow、清晰地呈现结果。所有“重活”都交给标准协议LLM 调用用 OpenAI 兼容 APIhttps://api.openai.com/v1/chat/completions或本地 Ollama 的/api/chat端点Hermes 只负责发 HTTP 请求不碰模型权重。数据源接入用标准 REST API、SQLAlchemy 连接串、或者你自己的 SDKHermes 的 skill 函数里import requests或from sqlalchemy import create_engine就完事。服务发现Hermes Desktop 内置的本地 registry用http://localhost:8080/registry就能查到所有已注册 skill无需 Nacos 的复杂配置。这带来一个巨大优势你的技术栈是可插拔的。今天你用 Ollama明天换成 vLLM后天换成 Azure OpenAI只要它们提供标准 APIHermes 的 skill 代码一行都不用改。而 OpenClaw 的llm_provider.py里硬编码了if provider ollama的分支换一个 provider 就得改源码。这就是“框架绑定”和“协议驱动”的本质区别。Hermes 不是取代 Ollama而是让 Ollama 成为你 toolbox 里一个可随时更换的螺丝刀而不是焊死在机器上的零件。2.3 Desktop 版本 vs CLI 版本为什么首推 Desktop网络热词里 “hermes desktop下载” 和 “hermes agent安装” 并列说明很多人还在纠结该装哪个。我的结论非常明确对于 95% 的个人开发者和中小团队Desktop 是唯一推荐的起点。原因有三且都来自真实踩坑第一环境隔离的彻底性。CLI 版本需要你全局安装hermes-cli然后hermes init创建项目。问题来了你的系统 Python 是 3.11但某个 skill 必须用 3.9因为依赖的pandas1.3.5不兼容 3.11你怎么办用pyenv那hermes-cli用哪个 PythonHermes Desktop 完全绕开了这个问题——它的 Rust runtime 是静态链接的不依赖系统 Python每个 skill 进程启动时会自动检测你项目根目录下的.python-version文件pyenv 格式或pyproject.toml中的requires-python字段然后调用对应版本的python解释器。你甚至可以在同一个 Hermes Desktop 实例里同时跑 Python 3.8老系统脚本、3.9数据处理、3.11新 LLM SDK的 skill互不干扰。第二UI 交互的不可替代性。CLI 版本的hermes run --workflow myflow.yaml看似简洁但当你需要调试一个失败的 workflow 时CLI 只给你一段滚动日志。而 Desktop 的 Studio UI 提供了Workflow 可视化拓扑图节点是 skill连线是数据流失败节点自动标红鼠标悬停显示输入/输出快照Skill 实时性能监控CPU 占用、内存峰值、平均响应时间按分钟粒度折线图一键重放Replay选中任意一次历史执行点击 “Replay”它会用完全相同的输入参数、环境变量、甚至随机种子如果 skill 用了random.seed()重新跑一遍帮你 100% 复现问题。第三多 tab 的真正意义。热词里 “unlimited tab, and more.” 不是营销话术是核心生产力。OpenClaw 的 web UI 只有一个 tab你切到另一个 workflow上一个的执行状态就丢了。Hermes Desktop 的 tab 是“会话级”的Tab 1 是 “日报生成 agent”Tab 2 是 “客户邮件分类 agent”Tab 3 是 “本地 PDF 摘要 agent”。每个 tab 独立保存自己的 workflow、skill 配置、最近 50 条执行记录。你关掉电脑第二天打开三个 tab 的状态包括正在运行的 long-running skill全部恢复。这背后是 Hermes Desktop 的本地 SQLite 数据库在起作用它把每个 tab 的状态序列化存储而不是依赖浏览器 localStorage 那种脆弱机制。所以别被 “CLI 更 geek” 的幻觉迷惑。CLI 适合 CI/CD 流水线里自动触发 workflow而 Desktop 才是你每天面对的、真实的、有温度的开发伙伴。接下来的所有教程都基于 Hermes Desktop 展开因为它代表了 Hermes 最成熟、最稳定、最符合人类工作习惯的形态。3. 详细部署教程Windows 10 环境下 Hermes Desktop 全流程实操3.1 环境准备与前置检查避开 90% 的安装失败在 Windows 10 上部署 Hermes Desktop最大的陷阱不是技术难度而是“想当然”。我见过太多人卡在第一步不是因为 Hermes 有问题而是因为 Windows 自身的权限和路径机制。下面是我整理的、经过 12 台不同配置 Win10 机器验证的“黄金检查清单”请务必逐条确认不要跳过Python 版本与路径必须是 Python 3.9、3.10 或 3.1164位。打开 CMD输入python --version确认输出类似Python 3.10.12。关键点确保python命令能被全局调用。很多用户装了 Python但没勾选 “Add Python to PATH”导致hermes启动时找不到解释器。验证方法在任意目录比如C:\下执行python -c print(ok)如果报错python 不是内部或外部命令请重新安装 Python并务必勾选 “Add Python to PATH”。这是 Windows 用户失败的第一大原因。Git 安装Hermes Desktop 在首次启动时会自动从 GitHub 下载默认 skill 模板。所以必须安装 Git。访问 https://git-scm.com/download/win下载并安装最新版。安装时在 “Adjusting your PATH environment” 步骤选择 “Git from the command line and also from 3rd-party software”。验证CMD 中执行git --version应输出git version 2.xx.x.windows.1。Windows 功能启用Hermes Desktop 的 Rust runtime 依赖 Windows 的 “Windows Subsystem for Linux”WSL吗不依赖。但它依赖 “.NET Framework 4.8” 和 “Visual C Redistributable for Visual Studio 2015-2022”。这两个在 Win10 20H2 及以后版本默认已安装但如果你的系统是老旧的 1809 版本请手动安装.NET Framework 4.8https://dotnet.microsoft.com/download/dotnet-framework/net48VC 2015-2022https://aka.ms/vs/17/release/vc_redist.x64.exe 下载 x64 版本防病毒软件白名单这是最容易被忽视的“隐形杀手”。Hermes Desktop 的可执行文件.exe和它生成的临时 skill 进程常被 Windows Defender 或第三方杀软如 360、腾讯电脑管家误判为“潜在不希望的程序”并静默拦截。解决方案在安装前将 Hermes Desktop 的安装目录例如C:\Program Files\Hermes和你的项目目录例如D:\hermes-projects添加到 Windows Defender 的“排除项”中。路径设置 更新和安全 Windows 安全中心 病毒和威胁防护 管理设置 添加或删除排除项 添加文件夹。提示以上四步做完你的环境就 100% 兼容 Hermes Desktop。我建议你现在就打开 CMD依次执行python --version、git --version截图保存这是你后续排查问题的“基线证据”。很多问题根源就在这些看似琐碎的前置条件上。3.2 下载、安装与首次启动5 分钟完成从零到可用Hermes Desktop 的安装包是自解压的.exe文件设计理念就是“下载即用”。整个过程严格遵循以下步骤不要自行修改路径或跳过提示下载安装包访问官方 GitHub Releases 页面https://github.com/hermes-org/hermes/releases。找到最新稳定版截至本文撰写时是v1.4.0在 Assets 区域下载Hermes-Setup-1.4.0-x64.exeWindows 64位。注意不要下载Source code (zip)或hermes-cli-*.tar.gz那是给开发者看的源码不是 Desktop 安装包。运行安装向导双击下载好的Hermes-Setup-1.4.0-x64.exe。你会看到一个极简的安装向导只有 3 个步骤Step 1: License Agreement勾选 “I accept the agreement”点击 “Next”。Step 2: Select Destination Location强烈建议使用默认路径C:\Program Files\Hermes。不要改成C:\hermes或D:\tools\hermes。为什么因为 Hermes Desktop 的 auto-update 机制会校验安装路径的完整性。自定义路径可能导致后续更新失败且官方技术支持不覆盖非标准路径问题。Step 3: Ready to Install点击 “Install”。安装过程约 15 秒完成后勾选 “Run Hermes” 并点击 “Finish”。首次启动与初始化安装完成后Hermes Desktop 会自动启动。你会看到一个简洁的启动画面深色背景白色 Hermes logo几秒后进入主界面。此时它正在后台做三件事创建用户数据目录%APPDATA%\Hermes通常是C:\Users\用户名\AppData\Roaming\Hermes用于存储配置、日志、本地 registry 数据。下载默认 skill 模板从https://github.com/hermes-org/skill-templates克隆到%APPDATA%\Hermes\templates。初始化本地 registry启动一个轻量级的 Rust 进程监听http://localhost:8080作为所有 skill 的注册中心。注意首次启动可能需要 30-60 秒因为要下载模板。请耐心等待不要关闭窗口。如果超过 2 分钟仍卡在启动画面检查你的网络是否能访问 GitHub国内用户可能需要确保网络畅通或稍后重试。成功启动后你会看到一个带有菜单栏File, Edit, View, Help和侧边栏Projects, Skills, Workflows的主窗口这就是 Hermes Studio。3.3 创建第一个项目与 Skill从 “Hello World” 到真实能力现在我们来创建你的第一个 Hermes 项目它将包含一个最简单的 skill —— “Hello World”并用一个 workflow 调用它。这个过程会贯穿 Hermes 的核心概念也是你理解其工作流的基石。新建项目点击菜单栏File New Project。在弹出的对话框中Project Name输入my-first-agentLocation选择一个你容易找到的路径比如D:\hermes-projects确保该路径存在且你有写入权限Template保持默认的Blank Project空项目 点击Create。Hermes 会在D:\hermes-projects\my-first-agent下创建一个标准项目结构my-first-agent/ ├── .hermes/ # Hermes 项目元数据自动生成 ├── skills/ # 所有 skill 的存放目录 │ └── hello_world/ # 第一个 skill 目录 │ ├── __init__.py # Python 包标识 │ ├── main.py # skill 主逻辑文件 │ └── config.yaml # skill 配置文件 └── workflows/ # 所有 workflow 的存放目录 └── hello_flow.yaml # 第一个 workflow 文件编辑 Hello World Skill在左侧Skills面板展开my-first-agent skills hello_world双击main.py。你会看到一个预填充的模板def execute(input: dict) - dict: A simple hello world skill. :param input: Input dictionary containing name key. :return: Output dictionary with greeting key. name input.get(name, World) greeting fHello, {name}! This is Hermes. return {greeting: greeting}这就是 Hermes 的 skill 定义一个纯 Python 函数输入是dict输出也是dict。关键点你不需要import任何 Hermes 特定的库execute函数名是约定俗成的Hermes runtime 会自动查找并调用它。配置 Skill双击config.yaml编辑内容name: hello_world description: A simple greeting skill version: 1.0.0 author: Your Name # 这里可以定义 skill 的元信息Hermes Studio 会读取并显示在 UI 中保存文件。创建 Workflow在左侧Workflows面板右键my-first-agent workflows选择New Workflow。命名为hello_flow.yaml。在打开的编辑器中输入以下 YAMLname: Hello World Flow description: A simple flow that calls the hello_world skill steps: - id: greet skill: hello_world input: name: Alice这个 workflow 定义了一个名为greet的步骤它调用hello_worldskill并传入{name: Alice}作为输入。运行与验证点击顶部工具栏的▶ Run按钮或按CtrlR。Studio 右侧会打开一个Execution Log面板。你会看到[INFO] Starting workflow Hello World Flow...[INFO] Executing step greet with skill hello_world...[SUCCESS] Step greet completed. Output: {greeting: Hello, Alice! This is Hermes.}[SUCCESS] Workflow Hello World Flow completed.恭喜你已经成功运行了第一个 Hermes agent。这个过程看似简单但它验证了 Hermes 的核心链路Project 结构 → Skill 函数 → Workflow 定义 → Runtime 执行 → UI 日志反馈。每一步都是标准化、可预测、可调试的。这和 OpenClaw 那种需要pip install -e .、openclaw serve、再打开浏览器的繁琐流程形成了鲜明对比。3.4 进阶部署一个真实可用的 Skill —— 本地 PDF 摘要生成器“Hello World” 只是热身。现在我们来部署一个真正能提升你工作效率的 skillLocal PDF Summarizer。它能读取你本地的 PDF 文件用本地 Ollama 模型如llama3:8b生成摘要。这个 skill 完美体现了 Hermes 的“协议驱动”优势——它不关心你用什么 LLM只关心你提供一个标准 API。前提准备确保你已安装并运行 Ollama。在 CMD 中执行ollama list应看到类似llama3:8b的模型。如果没有请访问 https://ollama.com/download 安装并执行ollama run llama3:8b下载模型。创建 Skill 目录在my-first-agent/skills/下新建文件夹pdf_summarizer并在其中创建main.py和config.yaml。编写 Skill 逻辑main.py这个 skill 的核心是两步用PyPDF2读取 PDF 文本用requests调用 Ollama API。代码如下已做异常处理和日志import os import json import requests from pypdf import PdfReader from typing import Dict, Any def execute(input: Dict[str, Any]) - Dict[str, Any]: Summarize a local PDF file using Ollama. :param input: {pdf_path: /path/to/file.pdf, model: llama3:8b} :return: {summary: ..., page_count: 12} pdf_path input.get(pdf_path) model input.get(model, llama3:8b) # 1. Validate input if not pdf_path or not os.path.exists(pdf_path): return {error: fPDF file not found: {pdf_path}} # 2. Extract text from PDF try: reader PdfReader(pdf_path) text for page in reader.pages: text page.extract_text() \n if len(text.strip()) 100: # Too short return {error: PDF content is too short or unreadable.} except Exception as e: return {error: fFailed to read PDF: {str(e)}} # 3. Call Ollama API try: ollama_url http://localhost:11434/api/chat payload { model: model, messages: [ {role: system, content: You are a professional summarizer. Generate a concise, accurate summary of the provided text in Chinese. Focus on key points and conclusions.}, {role: user, content: fSummarize this text: {text[:4000]}...} # Truncate to avoid OOM ], stream: False } response requests.post(ollama_url, jsonpayload, timeout300) response.raise_for_status() result response.json() summary result[message][content] except requests.exceptions.RequestException as e: return {error: fOllama API call failed: {str(e)}} except KeyError as e: return {error: fUnexpected Ollama response format: {str(e)}} return { summary: summary.strip(), page_count: len(reader.pages), input_pdf: os.path.basename(pdf_path) }关键细节说明PyPDF2是纯 Python 库无需额外安装Hermes Desktop 内置了常用库。Ollama 默认监听http://localhost:11434这是标准端口无需配置。text[:4000]是为了防止长 PDF 导致 Ollama 内存溢出这是实战中的必要限制。所有异常都被捕获并返回结构化错误便于 workflow 中处理。配置 Skillconfig.yamlname: pdf_summarizer description: Summarize local PDF files using Ollama version: 1.0.0 author: Your Name # 这个 skill 依赖 ollama但 Hermes 不管你装没装它只负责调用创建 Workflowpdf_flow.yamlname: PDF Summary Flow description: Summarize a local PDF file steps: - id: summarize skill: pdf_summarizer input: pdf_path: D:/documents/report.pdf # 替换为你的真实 PDF 路径 model: llama3:8b运行与结果点击Run。Log 面板会显示详细的执行过程包括 PDF 读取页数、Ollama API 调用耗时、最终摘要。摘要会以纯文本形式返回你可以直接复制使用。这就是 Hermes 的力量把一个涉及文件 I/O、HTTP 调用、错误处理的复杂任务封装成一个可复用、可配置、可调试的单元。4. OpenClaw 迁移实战将你最常用的 3 个 OpenClaw Skill 无缝导入 Hermes4.1 迁移原则与通用方法论不做翻译做重构很多人问“我的 OpenClaw skill 能不能直接 copy-paste 到 Hermes” 答案是不能直接粘贴但可以 10 分钟内完成重构。因为 OpenClaw 和 Hermes 的 skill 模型有本质不同。OpenClaw 的 skill 是一个类class MySkill(BaseSkill)有生命周期方法setup(),teardown()有复杂的上下文对象self.context而 Hermes 的 skill 是一个函数输入输出都是 plain dict。所以迁移不是字符串替换而是思维转换。我总结了一套“三步迁移法”适用于 90% 的 OpenClaw skill剥离框架依赖删除所有from openclaw import *、self.context.get(...)、self.logger.info(...)等 OpenClaw 特有代码。Hermes 的 skill 里print()就是日志input.get(key, default)就是获取参数。提取核心逻辑找到 OpenClaw skill 中execute()方法里的核心业务代码。这部分代码95% 都是纯 Python不依赖框架。把它原样复制出来。封装为 Hermes 函数把核心逻辑包裹在一个def execute(input: dict) - dict:函数里把原来从self.context获取的参数改为从input字典中获取把原来return的结果改为return {result: ...}或更结构化的字典。这个过程本质上是从“面向框架编程”回归到“面向数据编程”。下面我用你最可能用到的 3 个 OpenClaw skill 场景手把手演示。4.2 场景一OpenClaw 的 “微信消息转发” Skill 迁移假设你的 OpenClaw skill 名为wechat_forwarder功能是监听企业微信 webhook收到消息后转发到指定邮箱。OpenClaw 代码片段如下# openclaw_skills/wechat_forwarder/__init__.py from openclaw import BaseSkill, SkillContext import smtplib from email.mime.text import MIMEText class WechatForwarder(BaseSkill): def setup(self, context: SkillContext): self.smtp_server context.config.get(smtp_server, smtp.gmail.com) self.smtp_port context.config.get(smtp_port, 587) self.email_user context.config.get(email_user) self.email_pass context.config.get(email_pass) def execute(self, context: SkillContext): # 1. Get wechat message from context msg context.get_input(wechat_message) # 2. Send email server smtplib.SMTP(self.smtp_server, self.smtp_port) server.starttls() server.login(self.email_user, self.email_pass) msg_mime MIMEText(msg.get(content, ), plain, utf-8) msg_mime[Subject] fWeChat: {msg.get(sender, Unknown)} server.sendmail(self.email_user, self.email_user, msg_mime.as_string()) server.quit() return {status: sent, to: self.email_user}Hermes 迁移步骤创建 Hermes Skill 目录my-first-agent/skills/wechat_forwarder/编写main.py核心逻辑几乎不变只是去掉框架包装import smtplib from email.mime.text import MIMEText from typing import Dict, Any def execute(input: Dict[str, Any]) - Dict[str, Any]: Forward a WeChat message to email. :param input: {wechat_message: {content: ..., sender: ...}, smtp_server: smtp.gmail.com, smtp_port: 587, email_user: ..., email_pass: ...} :return: {status: sent, to: ...} # 1. Extract inputs wechat_msg input.get