跳转至

【GitHub】NousResearch/Hermes-Agent 技术解析:自我进化AI Agent的架构与特性

原文地址: https://88box.top 生成时间: 2026-05-21 01:02:38


【GitHub】NousResearch/Hermes-Agent 深度技术解析:自我进化的AI Agent新范式 - hey99 知识搜索引擎

精选文章

【GitHub】NousResearch/Hermes-Agent 深度技术解析:自我进化的AI Agent新范式

(项目地址:https://github.com/NousResearch/hermes-agent)是由团队开发的自我改进型 AI Agent框架。该项目于2025年7月22日创建,短短数月内便积累了近15万 Stars,目前稳居 GitHub 全球排名第47 位,是当下最受关注的开源 AI Agent 项目之一。项目的核心设计理念是特性说明内置学习循环从经验中创建技能、在使用中改进、自动记忆知识跨平台运行支持 $5 VPS、GPU 集群、Serverless 等多种部署方式灵活模型支持。

更新于 2026-05-20 16:37

一、项目概述与背景

1.1 项目简介

Hermes Agent

(项目地址:https://github.com/NousResearch/hermes-agent)是由

Nous Research

团队开发的

自我改进型 AI Agent

框架。该项目于2025年7月22日创建,短短数月内便积累了近

15万 Stars

,目前稳居 GitHub 全球排名第

47 位

,是当下最受关注的开源 AI Agent 项目之一。

项目的核心设计理念是

“The agent that grows with you”

(与你共同成长的AI智能体),强调以下几个关键特性:

特性

说明

内置学习循环

从经验中创建技能、在使用中改进、自动记忆知识

跨平台运行

支持 $5 VPS、GPU 集群、Serverless 等多种部署方式

灵活模型支持

支持 OpenAI、Anthropic、OpenRouter(200+模型)等多种 LLM 提供商

多渠道消息

Telegram、Discord、Slack、WhatsApp、飞书、钉钉等20+平台

1.2 技术栈与项目统计

项目名称: Hermes Agent

开发语言: Python (主要)

许可证: MIT

Stars: 149,500+

Forks: 23,600+

贡献者: 1,100+

版本: v0.2.0 ~ v0.13.0 (共13个正式版本)

主要依赖:

  • Python 3.11+

  • Rich (终端UI)

  • prompt_toolkit (交互式输入)

  • SQLite/FTS5 (会话存储)

  • uv (包管理器)

二、核心架构设计

2.1 整体架构概览

Hermes Agent 采用高度模块化的架构设计,核心组件分布在以下目录中:

hermes-agent/

├── run_agent.py # AIAgent 类 — 核心对话循环 (~12k LOC)

├── model_tools.py # 工具编排与函数调用处理

├── toolsets.py # 工具集定义

├── cli.py # HermesCLI 类 — 交互式CLI编排器 (~11k LOC)

├── hermes_state.py # SessionDB — SQLite会话存储 (FTS5搜索)

├── agent/ # Agent内部核心模块

│ ├── memory_provider.py # 记忆提供者抽象基类

│ ├── memory_manager.py # 多记忆提供者编排器

│ ├── curator.py # 技能生命周期管理系统

│ └── display.py # KawaiiSpinner动画组件

├── hermes_cli/ # CLI子命令与皮肤引擎

├── tools/ # 工具实现(自动发现机制)

│ ├── registry.py # 工具注册表

│ └── environments/ # 终端后端 (local, docker, ssh, modal...)

├── gateway/ # 消息网关

│ └── platforms/ # 20+平台适配器

├── plugins/ # 插件系统

├── skills/ # 内置技能

└── optional-skills/ # 可选技能

2.2 AIAgent 核心类设计

AIAgent

类是整个框架的核心,定义在

run_agent.py

文件中(约12,000行代码)。其构造函数签名如下:

class

AIAgent

:

def

init

(

self

,

base_url

:

str

=

None

,

API基础URL

api_key

:

str

=

None

,

API密钥

provider

:

str

=

None

,

LLM提供商

api_mode

:

str

=

None

,

"chat_completions" | "codex_responses"

model

:

str

=

""

,

模型名称(空值自动解析)

max_iterations

:

int

=

90

,

工具调用最大迭代次数

enabled_toolsets

:

list

=

None

,

启用的工具集

disabled_toolsets

:

list

=

None

,

禁用的工具集

quiet_mode

:

bool

=

False

,

静默模式

save_trajectories

:

bool

=

False

,

保存轨迹

platform

:

str

=

None

,

平台标识 "cli", "telegram"

session_id

:

str

=

None

,

会话ID

skip_context_files

:

bool

=

False

,

跳过上下文文件

skip_memory

:

bool

=

False

,

跳过记忆

credential_pool

=

None

,

凭证池

iteration_budget

=

None

,

迭代预算

fallback_model

=

None

,

回退模型

checkpoints_config

=

None

,

检查点配置

prefill_messages

=

None

,

预填充消息

service_tier

=

None

,

服务层级

reasoning_config

=

None

,

推理配置

callbacks

=

None

,

回调函数

... 更多参数

)

核心接口方法

方法

返回值

说明

chat(message: str)

str

简单接口,返回最终响应字符串

run_conversation(user_message, system_message, conversation_history, task_id)

dict

完整接口,返回包含

final_response

+

messages

的字典

三、Agent 循环深度解析

3.1 核心对话循环机制

Agent 循环位于

run_conversation()

方法内,采用

同步循环

设计,包含以下关键机制:

def

run_conversation

(

self

,

user_message

:

str

,

system_message

:

str

=

None

,

conversation_history

:

list

=

None

,

task_id

:

str

=

None

)

-

dict

:

"""

核心Agent循环:同步执行,支持中断检查和预算跟踪

"""

初始化消息列表

messages

=

self

.

_build_messages

(

user_message

,

system_message

,

conversation_history

)

api_call_count

=

0

主循环:迭代执行直到达到最大迭代次数或被中断

while

(

api_call_count

<

self

.

max_iterations

and

self

.

iteration_budget

.

remaining

0

)

or

self

.

_budget_grace_call

:

检查中断请求

if

self

.

_interrupt_requested

:

break

调用LLM API

response

=

client

.

chat

.

completions

.

create

(

model

=

model

,

messages

=

messages

,

tools

=

tool_schemas

,

stream

=

False

)

处理工具调用

if

response

.

tool_calls

:

for

tool_call

in

response

.

tool_calls

:

执行工具并获取结果

result

=

handle_function_call

(

tool_call

.

name

,

tool_call

.

args

,

task_id

)

将工具结果追加到消息历史

messages

.

append

(

tool_result_message

(

result

)

)

api_call_count

+=

1

else

:

无工具调用,返回最终响应

return

{

"final_response"

:

response

.

content

,

"messages"

:

messages

}

达到最大迭代次数

return

{

"final_response"

:

self

.

_format_max_iterations_response

(

)

,

"messages"

:

messages

}

3.2 循环关键特性

特性

说明

同步执行

Agent循环是同步的,父级等待子Agent完成后才继续

中断检查

每次迭代检查

self._interrupt_requested

,支持Ctrl+C中断

迭代预算

iteration_budget

控制剩余迭代次数,防止无限循环

宽限调用

_budget_grace_call

允许在预算耗尽后进行一次额外调用

消息累积

工具调用结果追加到

messages

列表,保持上下文连贯性

3.3 消息格式规范

Hermes Agent 采用

OpenAI 兼容的消息格式

标准消息格式

message

=

{

"role"

:

"system"

|

"user"

|

"assistant"

|

"tool"

,

"content"

:

str

,

消息内容

"name"

:

str

,

可选:工具名称(tool角色)

"tool_call_id"

:

str

,

可选:工具调用ID

"reasoning"

:

str

,

可选:推理内容

}

示例:用户消息

{

"role"

:

"user"

,

"content"

:

"帮我写一段快速排序算法"

}

示例:助手工具调用

{

"role"

:

"assistant"

,

"tool_calls"

:

[

{

"id"

:

"call_123"

,

"name"

:

"write_file"

,

"args"

:

{

.

.

.

}

}

]

}

示例:工具结果

{

"role"

:

"tool"

,

"tool_call_id"

:

"call_123"

,

"content"

:

'{"success": true}'

}

四、记忆系统架构

4.1 记忆提供者插件架构

Hermes Agent 采用

可插拔的记忆后端架构

,支持多种记忆提供者:

plugins/memory/

├── honcho/ # Honcho记忆提供者

├── mem0/ # Mem0记忆服务

├── supermemory/ # SuperMemory

├── byterover/ # ByteRover

├── hindsight/ # Hindsight

├── holographic/ # Holographic

├── openviking/ # OpenViking

└── retaindb/ # RetainDB

4.2 记忆提供者抽象接口

所有记忆提供者必须实现

MemoryProvider

抽象基类:

agent/memory_provider.py

from

abc

import

ABC

,

abstractmethod

class

MemoryProvider

(

ABC

)

:

"""记忆提供者抽象基类"""

@abstractmethod

def

sync_turn

(

self

,

turn_messages

:

list

)

-

None

:

"""

同步对话轮次

  • turn_messages: 包含 role/content 的消息列表

  • 将当前对话轮次存储到记忆系统

"""

pass

@abstractmethod

def

prefetch

(

self

,

query

:

str

)

-

list

:

"""

预取相关记忆

  • query: 当前用户查询

  • 返回与查询相关的历史记忆列表

"""

pass

@abstractmethod

def

shutdown

(

self

)

-

None

:

"""关闭时清理资源"""

pass

def

post_setup

(

self

,

hermes_home

:

Path

,

config

:

dict

)

-

None

:

"""

可选:设置向导集成

  • 在hermes setup过程中调用

"""

pass

4.3 记忆编排器

agent/memory_manager.py

负责编排多个记忆提供者:

class

MemoryManager

:

"""

记忆管理器:协调多个记忆提供者

"""

def

init

(

self

,

providers

:

list

[

MemoryProvider

]

)

:

self

.

providers

=

providers

def

sync_turn

(

self

,

turn_messages

:

list

)

-

None

:

"""同步到所有活跃的记忆提供者"""

for

provider

in

self

.

providers

:

if

provider

.

is_active

:

provider

.

sync_turn

(

turn_messages

)

def

prefetch

(

self

,

query

:

str

)

-

list

:

"""从所有提供者聚合记忆"""

all_memories

=

[

]

for

provider

in

self

.

providers

:

if

provider

.

is_active

:

memories

=

provider

.

prefetch

(

query

)

all_memories

.

extend

(

memories

)

return

self

.

_deduplicate_and_rank

(

all_memories

)

4.4 重要设计决策(2026年5月政策)

重要

:新内存提供者

不得

添加到

plugins/memory/

目录。

解决方案

:必须作为独立插件仓库发布,用户安装到

~/.hermes/plugins/

目录。

这一设计决策确保了:

内置记忆提供者集合是封闭的

避免核心代码膨胀

促进社区创新和第三方集成

五、工具系统详解

5.1 工具注册机制

Hermes Agent 采用

自动发现的工具注册机制

,文件依赖链如下:

tools/registry.py ← 无依赖,核心注册表

tools/*.py ← 各工具文件,导入时自动注册

model_tools.py ← 导入 registry,触发工具发现

run_agent.py, cli.py, batch_runner.py, environments/

5.2 工具注册表核心实现

tools/registry.py

from

dataclasses

import

dataclass

from

typing

import

Callable

,

Optional

@dataclass

class

ToolDefinition

:

"""工具定义"""

name

:

str

工具名称

toolset

:

str

所属工具集

schema

:

dict

JSON Schema

handler

:

Callable

处理函数

check_fn

:

Optional

[

Callable

]

=

None

可用性检查

requires_env

:

list

=

[

]

必需的环境变量

class

ToolRegistry

:

"""

全局工具注册表

  • Schema 收集与分发

  • 可用性检查

  • 错误包装

"""

def

init

(

self

)

:

self

.

_tools

:

dict

[

str

,

ToolDefinition

]

=

{

}

def

register

(

self

,

name

:

str

,

toolset

:

str

,

schema

:

dict

,

handler

:

Callable

,

check_fn

:

Optional

[

Callable

]

=

None

,

requires_env

:

list

=

[

]

)

-

None

:

"""注册工具到注册表"""

self

.

_tools

[

name

]

=

ToolDefinition

(

name

=

name

,

toolset

=

toolset

,

schema

=

schema

,

handler

=

handler

,

check_fn

=

check_fn

,

requires_env

=

requires_env

)

def

get_tool

(

self

,

name

:

str

)

-

Optional

[

ToolDefinition

]

:

"""获取工具定义"""

return

self

.

_tools

.

get

(

name

)

def

get_tools_by_toolset

(

self

,

toolset

:

str

)

-

list

:

"""获取工具集内的所有工具"""

return

[

t

for

t

in

self

.

_tools

.

values

(

)

if

t

.

toolset

==

toolset

]

def

get_available_tools

(

self

)

-

list

:

"""获取所有可用工具(通过check_fn验证)"""

return

[

t

for

t

in

self

.

_tools

.

values

(

)

if

t

.

check_fn

is

None

or

t

.

check_fn

(

)

]

全局单例

registry

=

ToolRegistry

(

)

5.3 工具实现示例

tools/example_tool.py

import

json

import

os

from

tools

.

registry

import

registry

def

check_requirements

(

)

-

bool

:

"""检查工具依赖是否满足"""

return

bool

(

os

.

getenv

(

"EXAMPLE_API_KEY"

)

)

def

example_tool

(

param

:

str

,

task_id

:

str

=

None

)

-

str

:

"""

示例工具实现

返回值必须是JSON字符串

"""

result

=

{

"success"

:

True

,

"data"

:

f"Processed:

{

param

}

"

,

"task_id"

:

task_id

}

return

json

.

dumps

(

result

)

在模块导入时自动注册

registry

.

register

(

name

=

"example_tool"

,

toolset

=

"example"

,

schema

=

{

"name"

:

"example_tool"

,

"description"

:

"An example tool for demonstration"

,

"parameters"

:

{

"type"

:

"object"

,

"properties"

:

{

"param"

:

{

"type"

:

"string"

,

"description"

:

"The parameter to process"

}

}

,

"required"

:

[

"param"

]

}

}

,

handler

=

lambda

args

,

**

kw

:

example_tool

(

param

=

args

.

get

(

"param"

,

""

)

,

task_id

=

kw

.

get

(

"task_id"

)

)

,

check_fn

=

check_requirements

,

requires_env

=

[

"EXAMPLE_API_KEY"

]

)

5.4 工具调用处理

model_tools.py

def

handle_function_call

(

tool_name

:

str

,

tool_args

:

dict

,

task_id

:

str

)

-

str

:

"""

处理工具函数调用

Args:

tool_name: 工具名称

tool_args: 工具参数

task_id: 任务ID

Returns:

JSON字符串格式的工具执行结果

"""

获取工具定义

tool_def

=

registry

.

get_tool

(

tool_name

)

if

tool_def

is

None

:

return

json

.

dumps

(

{

"error"

:

f"Unknown tool:

{

tool_name

}

"

}

)

检查可用性

if

tool_def

.

check_fn

and

not

tool_def

.

check_fn

(

)

:

missing

=

", "

.

join

(

tool_def

.

requires_env

)

return

json

.

dumps

(

{

"error"

:

f"Tool not available. Missing:

{

missing

}

"

}

)

try

:

执行工具

result

=

tool_def

.

handler

(

tool_args

,

task_id

=

task_id

)

return

result

except

Exception

as

e

:

错误包装

return

json

.

dumps

(

{

"error"

:

str

(

e

)

,

"tool"

:

tool_name

}

)

5.5 工具集(Toolsets)

工具集是工具的逻辑分组,控制哪些工具对Agent可见:

toolsets.py

TOOLSETS

=

{

核心工具集

"browser"

:

[

"browse_url"

,

"extract_content"

,

"search_web"

]

,

"code_execution"

:

[

"execute_code"

,

"run_script"

,

"run_tests"

]

,

"file"

:

[

"read_file"

,

"write_file"

,

"patch"

,

"search_files"

]

,

"terminal"

:

[

"terminal"

,

"run_command"

]

,

"search"

:

[

"search_files"

,

"search_web"

]

,

"vision"

:

[

"vision_analyze"

,

"image_ocr"

]

,

平台工具集

"discord"

:

[

"discord_send_message"

,

"discord_get_messages"

]

,

"telegram"

:

[

"telegram_send_message"

,

"telegram_get_updates"

]

,

功能工具集

"delegation"

:

[

"delegate_task"

,

"clarify"

]

,

"memory"

:

[

"memory_search"

,

"memory_write"

]

,

"skills"

:

[

"skill_create"

,

"skill_execute"

,

"skill_list"

]

,

"cronjob"

:

[

"cron_schedule"

,

"cron_list"

,

"cron_delete"

]

,

"kanban"

:

[

"kanban_create"

,

"kanban_complete"

,

"kanban_show"

]

,

... 更多工具集

}

六、委托与多代理系统

6.1 委托系统概述

Hermes Agent 提供了强大的

委托(Delegation)系统

,允许Agent生成子Agent并行处理任务:

父Agent (Orchestrator)

├── 子Agent 1 (Leaf) → 并行执行

├── 子Agent 2 (Leaf) → 并行执行

└── 子Agent 3 (Leaf) → 并行执行

6.2 委托工具实现

tools/delegate_tool.py

def

delegate_task

(

goal

:

str

=

None

,

单任务目标

tasks

:

list

=

None

,

批量任务列表

context

:

str

=

None

,

共享上下文

toolsets

:

list

=

None

,

工具集配置

role

:

str

=

"leaf"

,

"leaf" | "orchestrator"

task_id

:

str

=

None

)

-

str

:

"""

委托工具:生成子Agent执行任务

两种模式:

  1. Single: 传递 goal 创建单个子Agent

  2. Batch: 传递 tasks 并行创建多个子Agent

"""

if

tasks

:

批量模式:并行执行多个任务

return

_execute_batch_delegation

(

tasks

,

context

,

toolsets

)

elif

goal

:

单任务模式

return

_execute_single_delegation

(

goal

,

context

,

toolsets

,

role

)

else

:

return

json

.

dumps

(

{

"error"

:

"Either goal or tasks must be provided"

}

)

6.3 角色系统

角色

权限

使用场景

leaf

(默认)

delegate_task

clarify

memory

send_message

execute_code

专注的工作者任务

orchestrator

保留

delegate_task

可生成自己的workers,复杂任务分解

6.4 配置参数

config.yaml

delegation

:

max_concurrent_children

:

3

最大并发子Agent数

max_spawn_depth

:

2

最大嵌套深度

child_timeout_seconds

:

300

子Agent超时时间

orchestrator_enabled

:

true

是否允许orchestrator角色

subagent_auto_approve

:

false

子Agent自动审批

inherit_mcp_toolsets

:

true

继承MCP工具集

max_iterations

:

30

子Agent最大迭代次数

6.5 同步性规则

重要

delegate_task

不是

持久的。

对于必须存活于当前轮次之外的长时间运行任务,应使用:

cronjob

— 定时任务

terminal(background=True, notify_on_complete=True)

— 后台终端

七、技能系统(Skills)

7.1 双层技能架构

Hermes Agent 采用

两层并行的技能系统

类型

路径

说明

内置技能

skills/

随仓库发布,默认可加载

可选技能

optional-skills/

较重/专业化技能,默认

不启用

安装可选技能

hermes skills

install

official/

<

category

/

<

skill

示例

hermes skills

install

official/web-development/git-helper

hermes skills

install

official/security/code-scanner

7.2 技能目录结构

skills///

├── SKILL.md # 技能定义文件(必须)

├── scripts/ # 辅助脚本(可选)

├── references/ # 参考文档(可选)

├── templates/ # 模板文件(可选)

└── .env.example # 环境变量示例(可选)

目录结构规则

辅助脚本必须放在

scripts/

目录内

参考文档放在

references/

模板放在

templates/

不要期望模型每次调用时内联编写解析器、XML 解析器或复杂逻辑

7.3 SKILL.md 规范


name

:

git

-

helper

description

:

"Git操作辅助工具集"

version

:

"1.0.0"

author

:

"张三 @zhangsan"

license

:

MIT

platforms

:

[

linux

,

macos

,

windows

]

metadata

:

hermes

:

tags

:

[

git

,

version

-

control

,

development

]

category

:

devops

related_skills

:

[

github

-

cli

,

code

-

review

]

config

:

default_branch

:

"main配置说明"


Git Helper Skill

When to Use

[

何时使用此技能

]

Prerequisites

[

前置条件:API密钥、MCP服务器等

]

How to Run

[

如何使用

]

Quick Reference

[

快速参考

]

Procedure

[

详细步骤

]

Pitfalls

[

已知陷阱

]

Verification

[

验证方法

]

7.4 技能硬性标准(HARDLINE)

标准

说明

1

description

≤ 60字符

避免列表膨胀,一句话描述,以句号结尾

2

使用原生Hermes工具

引用

search_files

而非

grep

read_file

而非

cat

3

平台声明匹配

使用POSIX特有原语的技能必须声明平台

4

作者署名规则

归功于人类贡献者

5

脚本目录规则

辅助脚本必须放在

scripts/

6

测试要求

必须有

tests/skills/test__skill.py

八、技能自改进系统(Curator)

8.1 Curator概述

Curator 是 Hermes Agent 的

后台技能维护系统

,负责跟踪 Agent 创建的技能使用情况,并自动归档陈旧技能。

8.2 核心组件

组件

路径

职责

核心逻辑

agent/curator.py

审查循环、自动转换、LLM审查

备份

agent/curator_backup.py

运行前 tar.gz 快照

CLI

hermes_cli/curator.py

CLI编排

遥测

tools/skill_usage.py

~/.hermes/skills/.usage.json

使用追踪

8.3 技能状态机

┌─────────┐ 长时间未使用 ┌────────┐ 超过归档时间 ┌──────────┐

│ active │ ────────────────→ │ stale │ ────────────────→ │ archived │

└─────────┘ └────────┘ └──────────┘

↑ ↑

│ │

└─────── 再次使用 ────────────────┘

8.4 CLI 命令

hermes curator status

查看状态

hermes curator run

运行审查

hermes curator pause

暂停

hermes curator resume

恢复

hermes curator pin

固定(免于自动转换)

hermes curator unpin

取消固定

hermes curator archive

手动归档

hermes curator restore

恢复

hermes curator prune

清理

hermes curator backup

备份

hermes curator rollback

回滚

8.5 配置参数

config.yaml

curator

:

enabled

:

true

interval_hours

:

24

审查间隔

min_idle_hours

:

168

最小空闲时间(7天)

stale_after_days

:

14

14天未使用标记为stale

archive_after_days

:

30

30天后归档

backup

:

enabled

:

true

path

:

~/.hermes/skills/.archive/

8.6 重要约束

约束

说明

只处理Agent创建的技能

created_by: "agent"

的技能才被处理

永不删除

最大破坏性操作是归档

固定技能例外

固定技能免于所有自动转换

恢复机制

归档目录

~/.hermes/skills/.archive/

,用户可恢复

九、定时任务系统(Cron)

9.1 调度格式

Hermes Agent 支持多种自然语言调度格式:

格式

示例

说明

Duration

"30m"

,

"2h"

,

"1d"

持续时间

“every” 短语

"every 2h"

,

"every monday 9am"

自然语言

5字段 cron

"0 9 * * *"

标准 cron 表达式

ISO 时间戳

"2026-06-01T09:00:00Z"

一次性任务

9.2 作业定义

cron/jobs.py

from

dataclasses

import

dataclass

from

typing

import

Optional

@dataclass

class

CronJob

:

"""定时任务定义"""

id

:

str

任务ID

schedule

:

str

调度表达式

message

:

str

用户消息/指令

skills

:

list

=

[

]

技能列表

model

:

Optional

[

str

]

=

None

模型覆盖

provider

:

Optional

[

str

]

=

None

提供商覆盖

script

:

Optional

[

str

]

=

None

预运行数据收集脚本

context_from

:

Optional

[

str

]

=

None

上下文来源

workdir

:

Optional

[

str

]

=

None

工作目录

platforms

:

list

=

[

]

投递平台

max_retries

:

int

=

3

最大重试次数

9.3 调度器架构

cron/

├── jobs.py # 作业存储

└── scheduler.py # 时钟循环

scheduler.py:

┌─────────────────────────────────────────────────────┐

│ Clock Loop │

├─────────────────────────────────────────────────────┤

│ 1. Acquire file lock (.tick.lock) │

│ 2. Check due jobs │

│ 3. Enforce 3-minute hard interrupt │

│ 4. Catch-up window enforcement │

│ 5. Execute jobs with timeout │

│ 6. Release lock │

└─────────────────────────────────────────────────────┘

9.4 加固机制

机制

说明

3分钟硬中断

失控的Agent循环不能独占调度器

追赶窗口

作业周期的一半,限制在 120s–2h

宽限期

一次性作业错过触发时间时 120s 宽限

文件锁

~/.hermes/cron/.tick.lock

防止重复 tick

默认 skip_memory

Cron会话默认不使用记忆

十、插件系统

10.1 三类插件架构

Hermes Agent 采用

三类插件系统

类型

路径

发现机制

通用插件

plugins//

hermes_cli/plugins.py

内存提供者

plugins/memory//

独立发现系统

模型提供者

plugins/model-providers//

providers/init.py

10.2 通用插件能力

plugins/example_plugin/init.py

from

typing

import

Callable

def

register_plugin

(

ctx

:

"PluginContext"

)

-

None

:

"""

插件注册函数

PluginContext 提供以下能力:

"""

注册生命周期钩子

ctx

.

register_hook

(

"pre_tool_call"

,

my_pre_tool_callback

)

ctx

.

register_hook

(

"post_tool_call"

,

my_post_tool_callback

)

ctx

.

register_hook

(

"pre_llm_call"

,

my_pre_llm_callback

)

ctx

.

register_hook

(

"post_llm_call"

,

my_post_llm_callback

)

ctx

.

register_hook

(

"on_session_start"

,

my_session_start

)

ctx

.

register_hook

(

"on_session_end"

,

my_session_end

)

注册新工具

ctx

.

register_tool

(

name

=

"my_custom_tool"

,

schema

=

{

.

.

.

}

,

handler

=

my_tool_handler

)

注册CLI子命令

ctx

.

register_cli_command

(

name

=

"mycommand"

,

description

=

"My custom command"

,

handler

=

my_command_handler

)

def

my_pre_llm_callback

(

messages

:

list

,

model

:

str

)

-

list

:

"""LLM调用前拦截"""

可以修改messages或model

return

messages

,

model

10.3 新生命周期钩子(v0.13.0)

def

transform_llm_output

(

raw_output

:

str

,

model

:

str

,

session_id

:

str

)

-

str

:

"""

transform_llm_output 钩子(v0.13.0新增)

在LLM输出进入对话前对其进行重塑或过滤

  • 可用于:上下文窗口缩减、内容过滤、敏感信息脱敏

"""

return

raw_output

10.4 模型提供者插件

plugins/model-providers/my-provider/init.py

from

providers

import

ProviderProfile

,

register_provider

class

MyProviderProfile

(

ProviderProfile

)

:

name

=

"my-provider"

models

=

[

"my-model-1"

,

"my-model-2"

]

def

get_client

(

self

,

api_key

:

str

,

base_url

:

str

=

None

)

:

返回兼容的客户端对象

return

MyClient

(

api_key

,

base_url

)

def

get_chat_completion_params

(

self

,

model

:

str

,

messages

:

list

,

**

kwargs

)

:

转换参数格式

return

{

.

.

.

}

注册提供者

register_provider

(

MyProviderProfile

(

)

)

十一、安全特性

11.1 v0.13.0 安全加固

Hermes Agent v0.13.0 修复了

8个P0漏洞

漏洞类型

严重程度

修复措施

密钥泄露

P0

默认开启密钥脱敏

Discord跨公会DM绕过

CVSS 8.1

DISCORD_ALLOWED_ROLES

限定到来源公会

WhatsApp陌生人消息

P0

默认拒绝陌生人,永不响应自聊

MCP OAuth TOCTOU

P0

关闭凭据保存时的竞态窗口

auth.json TOCTOU

P0

关闭凭据写入器的竞态窗口

浏览器SSRF

P0

云元数据SSRF限制底层路由

debug share泄露

P0

上传时脱敏日志内容

Cron提示注入

P0

扫描组装的提示(含技能内容)

11.2 安全配置

config.yaml

security

:

命令审批模式

command_approval

:

enabled

:

true

mode

:

"whitelist"

|

"blacklist"

commands

:

[

"rm"

,

"dd"

,

"mkfs"

]

DM配对

dm_pairing

:

enabled

:

true

require_verification

:

true

容器隔离

container_isolation

:

enabled

:

true

allowed_operations

:

[

"read"

,

"write"

]

network

:

"none"

|

"limited"

|

"full"

11.3 密钥管理

密钥存储位置

~/.hermes/.env

密钥格式

OPENAI_API_KEY

=

sk-xxx

ANTHROPIC_API_KEY

=

sk-ant-xxx

TELEGRAM_BOT_TOKEN

=

xxx

DISCORD_BOT_TOKEN

=

xxx

密钥文件权限(自动设置)

chmod

0600 ~/.hermes/.env

十二、多智能体看板系统(Kanban)

12.1 概述

v0.13.0 新增的

持久化多配置文件协作看板

,实现了真正的多Agent团队协作:

“委托给真正能完成任务的AI团队”

12.2 核心特性

特性

说明

持久化多配置文件协作

一个安装实例,多个看板

心跳机制

工作节点定期汇报存活状态

任务回收

超时任务自动回收重分配

僵尸检测

识别并清理死亡工作节点

重试预算

每个任务可配置

max_retries

幻觉门控

工作节点创建卡片声明需验证

自动阻塞

未完成就退出的工作节点自动阻塞

12.3 CLI 动词

hermes kanban init

初始化看板

hermes kanban create

<

task

创建任务

hermes kanban list

列出任务

hermes kanban assign

<

id

<

worker

分配任务

hermes kanban complete

<

id

完成任务

hermes kanban block

<

id

阻塞任务

hermes kanban heartbeat

工作节点心跳

hermes kanban stats

统计信息

hermes kanban daemon

启动守护进程

12.4 隔离模型

Board (硬边界)

├── Tenant A (软命名空间)

│ ├── Worker 1

│ └── Worker 2

└── Tenant B (软命名空间)

└── Worker 3

Board

是硬边界 — worker 以

HERMES_KANBAN_BOARD

固定在环境变量

Tenant

是 board 内的软命名空间

十三、部署与运维

13.1 安装方式

Linux / macOS / WSL2 / Termux

curl

-fsSL

https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh

|

bash

Windows (WSL2 推荐)

先安装 WSL2,然后运行上述命令

Android / Termux

curl

-fsSL

https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh

|

bash

参考 Termux 指南安装特殊依赖

13.2 开发者安装

克隆仓库

git

clone https://github.com/NousResearch/hermes-agent.git

cd

hermes-agent

运行设置脚本

./setup-hermes.sh

或手动安装

curl

-LsSf

https://astral.sh/uv/install.sh

|

sh

uv venv .venv

--python

3.11

source

.venv/bin/activate

uv pip

install

-e

".[all,dev]"

运行测试

scripts/run_tests.sh

13.3 七种终端后端

后端

说明

适用场景

local

本地执行

开发测试

docker

Docker容器

生产隔离

ssh

SSH远程执行

远程服务器

singularity

Singularity容器

HPC环境

modal

Modal Serverless

Serverless

daytona

Daytona沙箱

云沙箱

vercel

Vercel Functions

边缘计算

13.4 Docker 部署

docker-compose.yml

version:

'3.8'

services:

hermes:

image: nousresearch/hermes-agent:latest

environment:

-

HERMES_DASHBOARD

=

1

volumes:

  • ./config:/root/.hermes

ports:

-

"3000:3000"

Dashboard

13.5 环境变量配置

必需变量

HERMES_HOME

=~

/.hermes

主目录

OPENAI_API_KEY

=

sk-xxx

OpenAI密钥

可选变量

HERMES_PROFILE

=

default

配置文件

HERMES_LOG_LEVEL

=

INFO

日志级别

HERMES_KANBAN_BOARD

=

default

看板名称

HERMES_SESSION_ID

=

xxx

会话ID

十四、消息网关平台支持

14.1 支持的平台

平台

类型

说明

Telegram

即时通讯

需Bot Token

Discord

社区平台

需Bot Token

Slack

企业协作

需Webhook/App

WhatsApp

即时通讯

需WhatsApp Business API

飞书

企业协作

需企业自建应用

钉钉

企业协作

需机器人应用

企业微信

企业协作

需企业应用

QQ

即时通讯

QQBot

Signal

即时通讯

Signal账号

Matrix

去中心化

Matrix协议

Mattermost

企业协作

自托管

Google Chat

企业协作

Google Workspace

Email

邮件

SMTP/IMAP

SMS

短信

Twilio等

Home Assistant

IoT平台

智能家居控制

14.2 网关设置

启动网关设置向导

hermes gateway setup

选择平台并配置

- Telegram: 输入Bot Token

- Discord: 输入Bot Token和服务器ID

- Slack: 输入Webhook URL

启动网关

hermes gateway start

停止网关

hermes gateway stop

十五、最新版本特性(v0.13.0)

15.1 核心更新

类别

特性

说明

架构

提供者插件化

ProviderProfile ABC,第三方无需修改核心

架构

平台插件钩子

env_enablement_fn

cron_deliver_env_var

协作

持久化看板

多Agent团队协作

协作

持久化目标

/goal

锁定Agent到目标,跨回合保持专注

安全

8个P0修复

默认安全策略收紧

多模态

视频理解

video_analyze

工具

语音

xAI Custom Voices

TTS + 声音克隆

i18n

7种语言

中文、日语、德语、西班牙语、法语等

15.2 新支持模型

模型

提供者

deepseek/deepseek-v4-pro

OpenRouter + Nous Portal

x-ai/grok-4.3

OpenRouter + Nous Portal

openrouter/owl-alpha

OpenRouter (免费)

tencent/hy3-preview

OpenRouter (付费)

十六、总结与展望

16.1 项目核心优势

优势

说明

自我进化

内置学习循环和技能创建机制,Agent能从经验中成长

高度模块化

插件化架构,工具、记忆、模型均可扩展

多Agent协作

委托系统和看板系统支持真正的团队协作

安全可靠

默认安全策略,多层防护机制

生态丰富

20+消息平台,七种终端后端

社区活跃

149k Stars,1100+贡献者

16.2 技术亮点

自动发现机制

— 工具、插件、技能的自动注册和发现

同步Agent循环

— 简洁可控的执行模型

可插拔记忆

— 支持多种记忆后端

生命周期钩子

— 灵活的扩展点

持久化状态

— 会话、检查点、看板的可靠存储

16.3 应用场景

场景

使用方式

个人助手

CLI直接对话,Telegram/Discord远程交互

开发伴侣

代码编写、调试、测试、Git操作

团队协作

看板系统多Agent任务分配

自动化运维

Cron定时任务,CI/CD集成

研究辅助

轨迹生成、数据处理、论文写作

16.4 未来展望

Hermes Agent 作为当前最受关注的开源AI Agent项目之一,其发展方向可能包括:

更强的自主学习能力

更丰富的MCP集成

更完善的调试和可观测性

更多垂直领域技能包

与现有开发工具链的深度集成

参考资源

资源

链接

GitHub仓库

https://github.com/NousResearch/hermes-agent

官方文档

https://hermes-agent.nousresearch.com/docs/

Discord社区

https://discord.gg/NousResearch

Skills Hub

https://agentskills.io

Nous Research

https://nousresearch.com

本文档基于 Hermes Agent v0.13.0 版本编写,涵盖了项目的核心架构设计、技术实现和应用场景,旨在帮助开发者深入理解这一强大的自我改进型AI Agent框架。

查看原文


🏷 标签: AI Agent, 自我进化, 多模态工具编排, 轻量级部署, 开源大模型框架