Appearance
OpenClaw 与 Hermes 的工程哲学对比。从源码架构出发,分析两个最受关注的开源 AI Agent 框架的根本分歧。
背景:一条迁移命令背后的故事
Hermes Agent 的 README 里有这样一条命令:
bash
hermes claw migrate它会从 OpenClaw 的配置目录里导入:
- SOUL.md
- MEMORY.md
- 用户创建的技能
- 命令白名单
- 消息设置
- API Keys
这说明两者的关系不是并行发展,而是直接竞争。
| 项目 | GitHub Stars |
|---|---|
| OpenClaw | 364k |
| Hermes | 118k |
Star 数量反映的是用户规模,不是工程深度。
运行时形态对比
核心差异
| 维度 | OpenClaw | Hermes |
|---|---|---|
| 语言 | Node.js + TypeScript | Python |
| 形态 | Gateway + Pi Agent | Python 单体进程 + SQLite |
| 架构 | 控制平面 + 执行进程 | 单体进程 |
| 配套 | macOS/iOS/Android 原生应用 | 轻量 CLI |
OpenClaw:控制平面架构
核心组件:
- Node.js Gateway:WebSocket 控制平面
- Pi Agent:通过 RPC 连接的子进程
- 原生应用:macOS 菜单栏 / iOS / Android
为什么用 TypeScript:
- Gateway 需要 WebSocket 控制平面
- 实时事件推送
- Canvas 渲染
- npm 生态丰富
- 跨端协作成本低
代价:整个系统更重,需要运行 Gateway 进程。
Hermes:单体进程架构
核心组件:
- Python 单体进程
- SQLite 文件
run_agent.py中的 AIAgent 类(约 3600 行)
为什么用 Python:
- 批量轨迹生成
- Atropos RL 环境集成
- 轨迹压缩
- ML 工具链优势
优势:轻量、部署简单。
工具系统设计对比
六大工程模式
| 模式 | OpenClaw | Hermes | 说明 |
|---|---|---|---|
| 命名空间隔离 | ✅ | ✅ | 防止工具名冲突 |
| Schema 验证 | ✅ | ✅ | 类型安全 |
| 延迟加载 | ✅ | ⚠️ | 按需加载 |
| 版本管理 | ✅ | ❌ | 工具升级 |
| 权限控制 | ✅ | ⚠️ | 细粒度权限 |
| 动态注册 | ✅ | ✅ | 运行时添加 |
工具注册对比
OpenClaw 工具注册:
typescript
// 命名空间 + Schema 验证
{
namespace: 'filesystem',
name: 'read_file',
schema: z.object({
path: z.string(),
encoding: z.string().optional()
})
}Hermes 工具注册:
python
# 装饰器方式
@hermes.tool(namespace='filesystem')
def read_file(path: str, encoding: str = 'utf-8'):
pass记忆系统设计对比
OpenClaw 的记忆系统
| 组件 | 说明 |
|---|---|
| MEMORY.md | 长期记忆 |
| 会话历史 | 短期记忆 |
| 技能库 | 知识沉淀 |
特点:
- Markdown 格式
- 易于编辑和同步
- Git 版本控制友好
Hermes 的记忆系统
| 组件 | 说明 |
|---|---|
| SQLite | 结构化存储 |
| 记忆向量 | 语义检索 |
| 轨迹压缩 | 历史优化 |
特点:
- 结构化查询
- 语义搜索
- 自动压缩历史
上下文压缩对比
Hermes 的上下文压缩四阶段
┌─────────────────────────────────────────────────────────────┐
│ 上下文压缩四阶段 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 阶段 1:识别 │
│ └── 识别可压缩的对话段 │
│ │
│ 阶段 2:提取 │
│ └── 提取核心信息点 │
│ │
│ 阶段 3:压缩 │
│ └── 生成压缩表示 │
│ │
│ 阶段 4:替换 │
│ └── 用压缩表示替换原始对话 │
│ │
└─────────────────────────────────────────────────────────────┘OpenClaw 的上下文管理
| 策略 | 说明 |
|---|---|
| Token 预算 | 设置上下文上限 |
| 摘要生成 | 自动生成对话摘要 |
| 分层存储 | 重要信息 → MEMORY |
安全模型对比
安全机制对比
| 机制 | OpenClaw | Hermes |
|---|---|---|
| 权限模型 | 细粒度 RBAC | 基础 ACL |
| 工具白名单 | ✅ 支持 | ✅ 支持 |
| 操作审计 | ✅ 完整日志 | ⚠️ 基础日志 |
| 沙箱执行 | ✅ 隔离环境 | ❌ 直接执行 |
| 敏感数据保护 | ✅ 加密存储 | ⚠️ 基础保护 |
工具执行安全
OpenClaw:
typescript
// 权限检查
{
tool: 'execute_command',
allowed: true,
constraints: {
allowed_paths: ['/project'],
forbidden_patterns: ['rm -rf', 'sudo']
}
}Hermes:
python
# 基础权限
ALLOWED_COMMANDS = ['git', 'npm', 'python']
FORBIDDEN_PATTERNS = ['rm -rf /', 'sudo']核心哲学差异
OpenClaw 的哲学
| 理念 | 说明 |
|---|---|
| 生态优先 | 丰富的工具和集成 |
| 体验至上 | 原生应用、多端支持 |
| 可扩展性 | 插件系统、灵活配置 |
Hermes 的哲学
| 理念 | 说明 |
|---|---|
| 简单为王 | 单体进程、轻量部署 |
| ML 集成 | Python 原生、AI 优先 |
| 自主学习 | 内置学习能力 |
六大可借鉴工程模式
| 模式 | 说明 | 来源 |
|---|---|---|
| 命名空间隔离 | 防止工具名冲突 | OpenClaw |
| Schema 验证 | 类型安全保证 | OpenClaw |
| 轨迹压缩 | 上下文管理 | Hermes |
| 记忆向量 | 语义检索 | Hermes |
| 权限模型 | 细粒度控制 | OpenClaw |
| 自主学习 | 内置成长能力 | Hermes |
适用场景推荐
| 场景 | 推荐 | 原因 |
|---|---|---|
| 多端应用 | OpenClaw | 原生应用支持 |
| 轻量部署 | Hermes | 单体进程简单 |
| 复杂集成 | OpenClaw | 丰富的工具生态 |
| ML 工作流 | Hermes | Python 原生 |
| 团队协作 | OpenClaw | 完善的权限系统 |
| 个人使用 | Hermes | 轻量易用 |
一句话总结
OpenClaw vs Hermes = 生态优先 vs 简单为王。
OpenClaw:控制平面架构、丰富的工具生态、多端原生应用。适合需要完整解决方案的团队。
Hermes:单体进程、ML 原生集成、自主学习能力。适合追求简洁和 AI 能力的开发者。
核心启示:没有最好的框架,只有最适合场景的选择。
