harness 与 hermes-agent 源码结构与架构对比

源码规模和语言分布

从文件类型看,两者都很大,但重心完全不同。

Harness

主要文件类型:

  • .go:约 2686 个
  • .tsx:约 1005 个
  • .sql:约 743 个
  • .ts:约 646 个
  • .scss:约 389 个

这说明 Harness 是一个 Go 后端为主、React 前端为辅、数据库 schema/migration 很重的平台型工程。

Hermes Agent

主要文件类型:

  • .py:约 1902 个
  • .md:约 1379 个
  • .ts:约 328 个
  • .tsx:约 88 个
  • .yaml:约 90 个

这说明 Hermes Agent 是 Python agent runtime 为主,Markdown 技能/文档非常多,前端只是 dashboard/TUI 的辅助层。

Harness 顶层架构

Harness 的核心目录:

目录 作用
cmd/gitness 主可执行入口
cli CLI 子命令
app 应用层,包含 API、服务、认证、路由、Pipeline、Gitspace
git Git 操作封装
registry Artifact Registry 子系统
store / app/store 数据访问和数据库实现
types 领域类型、配置、枚举
web React 前端和 OpenAPI 生成客户端
ssh Git SSH 服务
job 后台任务调度
pubsub / stream / lock / cache 平台基础设施抽象
charts Kubernetes Helm 部署

整体架构是典型的服务端平台:

text 复制代码
CLI / HTTP / SSH
      |
app/router + app/api/controller
      |
app/services
      |
store / git / registry / job / event
      |
SQLite/Postgres + filesystem/blob + Docker + Redis(optional)

Hermes Agent 顶层架构

Hermes Agent 的核心目录:

目录 作用
hermes_cli CLI、配置、模型选择、工具配置、Dashboard、Gateway 控制
run_agent.py Agent 主循环入口和 AIAgent
agent 对话循环、压缩、模型适配、错误分类、工具执行、记忆等核心逻辑
tools Agent 可调用工具集合
toolsets.py 工具集定义和组合
model_tools.py 工具注册、schema 输出、同步/异步桥接
gateway 多平台消息网关
cron 定时任务调度
providers 模型 provider profile 抽象和发现
plugins provider、平台、memory、image/web 等插件
skills / optional-skills 技能库和可选技能
web Web dashboard
ui-tui React/Ink TUI
acp_adapter Agent Client Protocol 集成

整体架构是 agent runtime:

text 复制代码
CLI / TUI / Gateway / ACP / Web Dashboard
      |
hermes_cli + gateway
      |
run_agent.AIAgent
      |
agent/* 对话循环 + model adapters + memory + compression
      |
model_tools + tools.registry + toolsets
      |
外部 LLM provider / 浏览器 / 终端 / 文件 / Web / 消息平台 / MCP

核心代码组织差异

Harness

Harness 更强调领域边界和服务端分层:

  • controller 负责 API
  • services 负责业务逻辑
  • store 负责持久化
  • types 负责领域对象
  • router 负责 HTTP 路由
  • wire 负责依赖注入

它的大量复杂性来自平台业务:权限、资源层级、Git 数据、Pipeline 状态、Registry 兼容性。

Hermes Agent

Hermes Agent 更强调运行时组合和动态能力:

  • agent loop 负责多轮对话和工具调用
  • registry 负责工具自注册
  • provider profile 负责不同模型服务差异
  • skills 是 Markdown 形式的可读/可改能力包
  • gateway 把消息平台抽象成统一 agent 会话
  • config/env/profile 让同一程序能多场景运行

它的大量复杂性来自 LLM provider 差异、工具安全、多平台消息、长期状态和自动化任务。

架构粒度对比

维度 Harness Hermes Agent
主架构风格 分层服务端平台 插件化 agent runtime
核心抽象 资源、服务、控制器、存储 会话、工具、模型、技能、记忆
依赖组织 Go module + Wire DI Python 包 + runtime discovery
前端地位 产品 UI 的核心入口 Dashboard/TUI 辅助入口
数据模型 强领域模型、数据库表多 会话状态、配置、工具元数据多
扩展方式 新 controller/service/store/route 新 tool/provider/plugin/skill
相关推荐
jooloo1 小时前
Codex 间歇性 400 之谜:一条对话里,它为什么有时候用 chat/completions,有时候切到 responses?
人工智能
用户5191495848451 小时前
OpenSSL PKCS#12 PBMAC1 堆栈缓冲区溢出漏洞 (CVE-2025-11187) 分析与验证
人工智能·aigc
用户5191495848452 小时前
HP Sound Research SECOMNService 权限提升漏洞利用工具
人工智能·aigc
用户018349301693 小时前
给 AI 智能体能力包一层 BFF,前端只调一个接口
人工智能
这token有力气6 小时前
Function Calling 格式漂移
人工智能
onething3656 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 5 —— SSE 流式输出 + 打字机效果
人工智能·后端·全栈
onething3657 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 6 —— 业务完善 + 会话消息预览
人工智能·后端·全栈
IT_陈寒7 小时前
SpringBoot自动配置的坑,我爬了三天才出来
前端·人工智能·后端
岳小哥AI8 小时前
AI大模型"幻觉"从何而来?解密GPT-4、DeepSeek一本正经胡说八道的真相
ai·ai基础