源码规模和语言分布
从文件类型看,两者都很大,但重心完全不同。
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 |