- 将所有环境变量前缀从NANO_改为BEAVER_ - 更新README.md文档内容,包括项目介绍、组件说明和快速开始指南 - 修改.gitignore文件,添加auth-portal运行时路径排除规则 - 更新app-instance镜像标签从nano/app-instance改为beaver/app-instance - 增强技能安全检查器,支持工具前缀白名单功能 - 添加技能草稿重新检查安全性API端点 - 扩展证据选择器,收集工具调用名称用于技能学习 - 改进技能合成器,基于实际调用的工具生成工具提示 - 优化路由超时处理机制,增加重试逻辑 - 更新后端架构文档,添加可视化入口和基础概念说明 - 实现在WebSocket消息中传递工具迭代次数信息
1072 lines
49 KiB
HTML
1072 lines
49 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Agent 项目对比分析</title>
|
||
<style>
|
||
:root {
|
||
color-scheme: light;
|
||
--bg: #f7f8fb;
|
||
--ink: #172033;
|
||
--muted: #5d6b82;
|
||
--line: #d7deea;
|
||
--panel: #ffffff;
|
||
--blue: #2563eb;
|
||
--green: #0f8b6f;
|
||
--amber: #b7791f;
|
||
--rose: #be4266;
|
||
--violet: #6953c6;
|
||
--cyan: #147d96;
|
||
--shadow: 0 14px 36px rgba(23, 32, 51, 0.08);
|
||
--radius: 8px;
|
||
}
|
||
|
||
* { box-sizing: border-box; }
|
||
|
||
body {
|
||
margin: 0;
|
||
background: var(--bg);
|
||
color: var(--ink);
|
||
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||
line-height: 1.45;
|
||
}
|
||
|
||
a { color: var(--blue); text-decoration: none; }
|
||
a:hover { text-decoration: underline; }
|
||
button { font: inherit; }
|
||
|
||
.page {
|
||
width: min(1540px, 100%);
|
||
margin: 0 auto;
|
||
padding: 28px 28px 40px;
|
||
}
|
||
|
||
.topbar {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
gap: 20px;
|
||
align-items: flex-start;
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
h1 {
|
||
margin: 0 0 8px;
|
||
font-size: 30px;
|
||
line-height: 1.14;
|
||
letter-spacing: 0;
|
||
}
|
||
|
||
.subtitle {
|
||
margin: 0;
|
||
max-width: 900px;
|
||
color: var(--muted);
|
||
font-size: 15px;
|
||
}
|
||
|
||
.meta {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
justify-content: flex-end;
|
||
color: var(--muted);
|
||
font-size: 12px;
|
||
}
|
||
|
||
.pill,
|
||
.pill-link {
|
||
border: 1px solid var(--line);
|
||
background: var(--panel);
|
||
border-radius: 999px;
|
||
padding: 6px 10px;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.pill-link {
|
||
color: var(--ink);
|
||
display: inline-flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.canvas {
|
||
background: var(--panel);
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--radius);
|
||
box-shadow: var(--shadow);
|
||
overflow: hidden;
|
||
}
|
||
|
||
.tabs {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
padding: 14px;
|
||
border-bottom: 1px solid var(--line);
|
||
background: #fbfcff;
|
||
}
|
||
|
||
.tab {
|
||
border: 1px solid var(--line);
|
||
border-radius: 999px;
|
||
background: #fff;
|
||
color: var(--ink);
|
||
min-height: 34px;
|
||
padding: 7px 12px;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.tab[aria-selected="true"] {
|
||
color: #fff;
|
||
border-color: var(--blue);
|
||
background: var(--blue);
|
||
}
|
||
|
||
.stage { display: none; padding: 22px; }
|
||
.stage.active { display: block; }
|
||
|
||
.stage-title {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
gap: 16px;
|
||
align-items: flex-start;
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
h2 { margin: 0; font-size: 20px; letter-spacing: 0; }
|
||
.hint { margin: 4px 0 0; color: var(--muted); font-size: 13px; }
|
||
|
||
.cards {
|
||
display: grid;
|
||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||
gap: 14px;
|
||
margin: 14px 0;
|
||
}
|
||
|
||
.card,
|
||
.panel,
|
||
.demo,
|
||
.source-card {
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--radius);
|
||
background: #fff;
|
||
padding: 14px;
|
||
}
|
||
|
||
.card {
|
||
border-top: 5px solid var(--blue);
|
||
min-height: 230px;
|
||
}
|
||
|
||
.card.openharness { border-top-color: var(--green); }
|
||
.card.hermes { border-top-color: var(--violet); }
|
||
.card.openclaw { border-top-color: var(--cyan); }
|
||
.card.beaver { border-top-color: var(--blue); }
|
||
|
||
.card h3,
|
||
.panel h3,
|
||
.demo h3,
|
||
.source-card h3 {
|
||
margin: 0 0 8px;
|
||
font-size: 15px;
|
||
}
|
||
|
||
.card p,
|
||
.panel p,
|
||
.source-card p {
|
||
margin: 0;
|
||
color: var(--muted);
|
||
font-size: 13px;
|
||
}
|
||
|
||
.tag-list {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 6px;
|
||
margin-top: 12px;
|
||
}
|
||
|
||
.tag {
|
||
border: 1px solid #e1e7f2;
|
||
border-radius: 999px;
|
||
background: #f7f9fc;
|
||
color: #39465c;
|
||
font-size: 12px;
|
||
padding: 4px 8px;
|
||
}
|
||
|
||
.grid-2,
|
||
.grid-3,
|
||
.grid-4 {
|
||
display: grid;
|
||
gap: 14px;
|
||
margin-top: 14px;
|
||
}
|
||
|
||
.grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
||
.grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
||
.grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
||
|
||
.table-wrap {
|
||
overflow-x: auto;
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--radius);
|
||
background: #fff;
|
||
margin: 14px 0;
|
||
}
|
||
|
||
table {
|
||
width: 100%;
|
||
min-width: 980px;
|
||
border-collapse: collapse;
|
||
font-size: 13px;
|
||
}
|
||
|
||
th,
|
||
td {
|
||
vertical-align: top;
|
||
text-align: left;
|
||
padding: 11px 12px;
|
||
border-bottom: 1px solid #e7edf7;
|
||
}
|
||
|
||
th {
|
||
position: sticky;
|
||
top: 0;
|
||
background: #f7f9fc;
|
||
color: #374151;
|
||
font-weight: 700;
|
||
z-index: 1;
|
||
}
|
||
|
||
tr:last-child td { border-bottom: 0; }
|
||
|
||
.code {
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
|
||
font-size: 12px;
|
||
color: #24324b;
|
||
background: #f3f6fb;
|
||
border: 1px solid #e5ebf5;
|
||
border-radius: 6px;
|
||
padding: 2px 5px;
|
||
}
|
||
|
||
.diagram {
|
||
border: 1px solid var(--line);
|
||
border-radius: var(--radius);
|
||
background: #fbfcff;
|
||
padding: 14px;
|
||
margin: 14px 0;
|
||
}
|
||
|
||
.diagram-title {
|
||
margin: 0 0 12px;
|
||
font-size: 14px;
|
||
color: #374151;
|
||
}
|
||
|
||
.diagram-row {
|
||
display: grid;
|
||
grid-template-columns: repeat(6, minmax(0, 1fr));
|
||
gap: 10px;
|
||
align-items: stretch;
|
||
}
|
||
|
||
.diagram-row.four { grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
||
.diagram-row.five { grid-template-columns: repeat(5, minmax(0, 1fr)); }
|
||
|
||
.diagram-card {
|
||
position: relative;
|
||
border: 1px solid #dfe6f2;
|
||
border-radius: var(--radius);
|
||
background: #fff;
|
||
padding: 12px;
|
||
min-height: 92px;
|
||
}
|
||
|
||
.diagram-card:not(:last-child)::after {
|
||
content: "→";
|
||
position: absolute;
|
||
right: -10px;
|
||
top: 50%;
|
||
transform: translate(50%, -50%);
|
||
width: 22px;
|
||
height: 22px;
|
||
display: grid;
|
||
place-items: center;
|
||
border: 1px solid var(--line);
|
||
border-radius: 999px;
|
||
background: #fff;
|
||
color: var(--muted);
|
||
font-size: 14px;
|
||
z-index: 1;
|
||
}
|
||
|
||
.diagram-card strong {
|
||
display: block;
|
||
margin-bottom: 5px;
|
||
font-size: 13px;
|
||
color: var(--ink);
|
||
}
|
||
|
||
.diagram-card span {
|
||
display: block;
|
||
color: var(--muted);
|
||
font-size: 12px;
|
||
}
|
||
|
||
.demo {
|
||
margin-top: 16px;
|
||
}
|
||
|
||
.demo p {
|
||
margin: 0 0 12px;
|
||
color: var(--muted);
|
||
font-size: 13px;
|
||
}
|
||
|
||
.demo-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||
gap: 12px;
|
||
}
|
||
|
||
.demo-block { min-width: 0; }
|
||
|
||
.demo-block h4 {
|
||
margin: 0 0 6px;
|
||
font-size: 12px;
|
||
color: #374151;
|
||
}
|
||
|
||
pre {
|
||
margin: 0;
|
||
min-height: 150px;
|
||
overflow: auto;
|
||
border: 1px solid #e5ebf5;
|
||
border-radius: 6px;
|
||
background: #f7f9fc;
|
||
color: #24324b;
|
||
padding: 10px;
|
||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
|
||
font-size: 12px;
|
||
line-height: 1.45;
|
||
white-space: pre-wrap;
|
||
}
|
||
|
||
ul {
|
||
margin: 0;
|
||
padding-left: 18px;
|
||
color: var(--muted);
|
||
font-size: 13px;
|
||
}
|
||
|
||
li + li { margin-top: 6px; }
|
||
|
||
.callout {
|
||
border-left: 5px solid var(--blue);
|
||
background: #f7f9fc;
|
||
border-radius: var(--radius);
|
||
padding: 12px 14px;
|
||
color: var(--muted);
|
||
font-size: 13px;
|
||
margin: 14px 0;
|
||
}
|
||
|
||
.sources {
|
||
display: grid;
|
||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||
gap: 14px;
|
||
margin-top: 14px;
|
||
}
|
||
|
||
.source-card a {
|
||
display: block;
|
||
font-size: 13px;
|
||
margin-top: 6px;
|
||
word-break: break-word;
|
||
}
|
||
|
||
@media (max-width: 1180px) {
|
||
.cards,
|
||
.grid-4,
|
||
.diagram-row,
|
||
.diagram-row.four,
|
||
.diagram-row.five {
|
||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||
}
|
||
|
||
.grid-3,
|
||
.demo-grid,
|
||
.sources {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 760px) {
|
||
.page { padding: 18px; }
|
||
.topbar, .stage-title { display: block; }
|
||
.meta { justify-content: flex-start; margin-top: 14px; }
|
||
.cards,
|
||
.grid-2,
|
||
.grid-3,
|
||
.grid-4,
|
||
.diagram-row,
|
||
.diagram-row.four,
|
||
.diagram-row.five,
|
||
.demo-grid,
|
||
.sources {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
|
||
.diagram-card:not(:last-child)::after {
|
||
content: "↓";
|
||
right: 50%;
|
||
top: auto;
|
||
bottom: -10px;
|
||
transform: translate(50%, 50%);
|
||
}
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<main class="page">
|
||
<header class="topbar">
|
||
<div>
|
||
<h1>Agent 项目对比分析</h1>
|
||
<p class="subtitle">用 OpenHarness、Hermes Agent、OpenClaw 对比 Beaver,面向讲解场景覆盖产品定位、架构结构、Skill、Tool、Session、Channel、权限、安全、自学习和 Agent Team。</p>
|
||
</div>
|
||
<div class="meta">
|
||
<span class="pill">Snapshot: 2026-05-20</span>
|
||
<span class="pill">来源: GitHub README + repo tree + 本地代码</span>
|
||
<a class="pill-link" href="backend-visualization.html">返回 Beaver 架构页</a>
|
||
</div>
|
||
</header>
|
||
|
||
<section class="canvas">
|
||
<nav class="tabs" aria-label="comparison views">
|
||
<button class="tab" type="button" data-view="home" aria-selected="true">首页总览</button>
|
||
<button class="tab" type="button" data-view="positioning">产品定位</button>
|
||
<button class="tab" type="button" data-view="matrix">功能矩阵</button>
|
||
<button class="tab" type="button" data-view="skills">Skill 对比</button>
|
||
<button class="tab" type="button" data-view="tools">Tool 对比</button>
|
||
<button class="tab" type="button" data-view="sessions">Session 对比</button>
|
||
<button class="tab" type="button" data-view="channels">Channel 对比</button>
|
||
<button class="tab" type="button" data-view="security">权限对比</button>
|
||
<button class="tab" type="button" data-view="teams">Team 对比</button>
|
||
<button class="tab" type="button" data-view="conclusion">结论</button>
|
||
<button class="tab" type="button" data-view="sources">来源区</button>
|
||
</nav>
|
||
|
||
<section class="stage active" data-stage="home">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>首页总览</h2>
|
||
<p class="hint">先用四张卡片建立直觉:它们都在做 agent,但产品路线和架构重心不同。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="diagram">
|
||
<h3 class="diagram-title">讲解目标</h3>
|
||
<div class="diagram-row five">
|
||
<div class="diagram-card"><strong>产品定位</strong><span>谁是目标用户,核心体验是什么</span></div>
|
||
<div class="diagram-card"><strong>运行架构</strong><span>入口、服务、agent loop、状态层如何分工</span></div>
|
||
<div class="diagram-card"><strong>能力子系统</strong><span>Skill、Tool、Memory、Channel、Permission</span></div>
|
||
<div class="diagram-card"><strong>差异优劣</strong><span>哪些成熟,哪些值得借鉴</span></div>
|
||
<div class="diagram-card"><strong>Beaver 位置</strong><span>解释你的项目选择的路线</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="cards">
|
||
<article class="card openharness">
|
||
<h3>HKUDS/OpenHarness</h3>
|
||
<p>Agent harness 基础设施 + ohmo personal agent。适合讲“LLM 要变成 agent,需要工具、技能、记忆、权限、MCP 和多 agent 外壳”。</p>
|
||
<div class="tag-list">
|
||
<span class="tag">Python</span><span class="tag">CLI / gateway / harness</span><span class="tag">MIT</span>
|
||
<span class="tag">agent loop</span><span class="tag">43+ tools</span><span class="tag">swarm</span>
|
||
</div>
|
||
</article>
|
||
<article class="card hermes">
|
||
<h3>NousResearch/hermes-agent</h3>
|
||
<p>自学习个人 agent。适合讲“长期助理如何跨会话记忆、从任务中生成技能、用多渠道和 cron 变成常驻助手”。</p>
|
||
<div class="tag-list">
|
||
<span class="tag">Python</span><span class="tag">CLI / TUI / gateway / cron</span><span class="tag">MIT</span>
|
||
<span class="tag">closed learning loop</span><span class="tag">session search</span><span class="tag">subagents</span>
|
||
</div>
|
||
</article>
|
||
<article class="card openclaw">
|
||
<h3>openclaw/openclaw</h3>
|
||
<p>Local-first 多渠道个人助手。适合讲“产品化 gateway、设备节点、消息渠道、WebChat、Canvas 和安全默认值”。</p>
|
||
<div class="tag-list">
|
||
<span class="tag">TypeScript</span><span class="tag">gateway / apps / nodes / canvas</span><span class="tag">MIT</span>
|
||
<span class="tag">multi-channel</span><span class="tag">local-first</span><span class="tag">sandbox</span>
|
||
</div>
|
||
</article>
|
||
<article class="card beaver">
|
||
<h3>Beaver</h3>
|
||
<p>单用户实例化 Web agent 工作台。适合讲“Web 管理面 + Task 工作单 + 审核型 Skill Learning + Agent Team”。</p>
|
||
<div class="tag-list">
|
||
<span class="tag">Python + Next.js</span><span class="tag">Web app + per-user instance</span>
|
||
<span class="tag">Task mode</span><span class="tag">Skill Learning</span><span class="tag">AuthZ</span>
|
||
</div>
|
||
</article>
|
||
</div>
|
||
|
||
<div class="callout">讲解建议:不要先陷入代码目录。先让听众理解四条路线:OpenHarness 是“基础设施”,Hermes 是“自学习长期助理”,OpenClaw 是“本地优先多渠道产品”,Beaver 是“Web 管理 + 可审核任务工作台”。</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="positioning">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>产品定位</h2>
|
||
<p class="hint">这一页回答:谁会用、从哪里进入、产品强弱在哪里。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid-3">
|
||
<div class="panel">
|
||
<h3>适合谁用</h3>
|
||
<ul>
|
||
<li><strong>OpenHarness</strong>:研究者、agent harness builder、CLI agent 集成开发者。</li>
|
||
<li><strong>Hermes</strong>:想要长期个人助理、自学习、多渠道自动化的个人或团队。</li>
|
||
<li><strong>OpenClaw</strong>:想要本地优先、多设备、多消息渠道个人助手的用户。</li>
|
||
<li><strong>Beaver</strong>:想要 Web 化、可部署、可管理、可审核的单用户 agent 工作台。</li>
|
||
</ul>
|
||
</div>
|
||
<div class="panel">
|
||
<h3>主体验入口</h3>
|
||
<ul>
|
||
<li><strong>OpenHarness</strong>:<span class="code">oh</span> / <span class="code">ohmo</span> CLI + gateway。</li>
|
||
<li><strong>Hermes</strong>:<span class="code">hermes</span> TUI、messaging gateway、cron。</li>
|
||
<li><strong>OpenClaw</strong>:<span class="code">openclaw onboard</span>、gateway、apps/nodes、WebChat、Canvas。</li>
|
||
<li><strong>Beaver</strong>:auth portal -> per-user app instance -> Web chat/workbench/settings/skills/tasks。</li>
|
||
</ul>
|
||
</div>
|
||
<div class="panel">
|
||
<h3>产品优劣</h3>
|
||
<ul>
|
||
<li><strong>OpenHarness</strong>:概念清晰、基础设施强,但偏工程/框架导向。</li>
|
||
<li><strong>Hermes</strong>:自学习叙事最强,但系统面广、结构复杂。</li>
|
||
<li><strong>OpenClaw</strong>:产品触点最多,但平台集成复杂、讲架构成本高。</li>
|
||
<li><strong>Beaver</strong>:Web 管理和 Task 工作流清楚,但多渠道和生态成熟度弱。</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="diagram">
|
||
<h3 class="diagram-title">四条路线</h3>
|
||
<div class="diagram-row four">
|
||
<div class="diagram-card"><strong>OpenHarness</strong><span>先做 agent harness,再在其上做 ohmo personal agent</span></div>
|
||
<div class="diagram-card"><strong>Hermes</strong><span>先做长期助理体验,再强调自学习闭环</span></div>
|
||
<div class="diagram-card"><strong>OpenClaw</strong><span>先做 local-first gateway 和多平台触点</span></div>
|
||
<div class="diagram-card"><strong>Beaver</strong><span>先做 Web 管理、Task 工作单和审核型学习</span></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="matrix">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>总功能矩阵</h2>
|
||
<p class="hint">横向扫一遍能力覆盖。重点看 Beaver 的强项和短板分别落在哪些行。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<thead>
|
||
<tr><th>能力</th><th>OpenHarness</th><th>Hermes</th><th>OpenClaw</th><th>Beaver</th></tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr><td>Agent Loop</td><td>有,harness 核心;强调 streaming tool-call cycle 和并行工具执行。</td><td>有,conversation loop 是长期助理运行核心。</td><td>有,agent runtime 嵌入 gateway、apps、nodes 场景。</td><td>有,统一 <span class="code">AgentLoop</span>,主 agent 和 sub-agent 共用。</td></tr>
|
||
<tr><td>Task 工作单</td><td>有 tasks 目录和 autopilot/test 迹象,但不是核心产品叙事。</td><td>有 kanban、goals、cron 等任务形态。</td><td>有 session/agent message task 形态,偏产品会话和路由。</td><td>强核心:<span class="code">TaskRecord</span>、validation、feedback、active task。</td></tr>
|
||
<tr><td>Skill 系统</td><td>bundled/user skills、frontmatter、plugin ecosystem。</td><td>optional skills、Skills Hub、self-improving skills。</td><td>workspace/bundled/managed skills、ClawHub。</td><td>versioned skill、draft/review/publish/rollback、learning candidate。</td></tr>
|
||
<tr><td>Tool 系统</td><td>43+ tools、MCP、parallel tool execution。</td><td>40+ tools、toolsets、terminal backends、RPC。</td><td>first-class tools、browser/canvas/nodes/cron/sessions。</td><td>ToolRegistry、ToolAssembler、ToolExecutor、builtins、MCP wrapper。</td></tr>
|
||
<tr><td>Memory</td><td>MEMORY.md、memdir、session memory。</td><td>agent-curated memory、FTS5 session search、user modeling。</td><td>workspace memory/session model。</td><td>curated memory、run memory、skill learning memory。</td></tr>
|
||
<tr><td>Channel/Gateway</td><td>ohmo channels:Feishu、Slack、Telegram、Discord 等。</td><td>Telegram、Discord、Slack、WhatsApp、Signal、Email gateway。</td><td>超多渠道和 device nodes。</td><td>当前主要 Web/WebSocket,另有 gateway/channels 基础。</td></tr>
|
||
<tr><td>Permissions</td><td>permissions checker、sandbox、hooks。</td><td>tool guardrails、approval、terminal backend isolation。</td><td>DM allowlist、sandbox non-main sessions、security defaults。</td><td>authz integration、permission packages 还较空、MCP authz config。</td></tr>
|
||
<tr><td>Team/Sub-agent</td><td>swarm、subagent、delegation。</td><td>subagents、parallel workstreams。</td><td>multi-agent routing / isolated agents。</td><td>sequence/parallel/DAG <span class="code">ExecutionGraph</span>。</td></tr>
|
||
<tr><td>自学习</td><td>有 memory/skills,但不是最强叙事。</td><td>强:closed learning loop。</td><td>有 skills registry,但自学习不是主线。</td><td>强:candidate -> draft -> safety/eval -> review -> publish。</td></tr>
|
||
<tr><td>Web 管理面</td><td>dashboard/terminal frontend 有,但非主线。</td><td>website/web/TUI/gateway。</td><td>control UI / WebChat / Canvas。</td><td>强:tasks、skills、MCP、settings、files、logs。</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="skills">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>Skill 装载、选择、版本和学习</h2>
|
||
<p class="hint">重点讲 Beaver 的优势:不仅能选 skill,还把 skill 当成可审核、可发布、可回滚的资产。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid-4">
|
||
<div class="panel"><h3>OpenHarness</h3><ul><li>目录迹象:<span class="code">src/openharness/skills</span>、<span class="code">.claude/skills</span>、<span class="code">.agents/skills</span>。</li><li>形态:bundled skills、agent skills、plugin skills。</li><li>优点:兼容 skill 文件生态,轻量易扩展。</li><li>短板:审核/发布工作流不如 Beaver 明确。</li></ul></div>
|
||
<div class="panel"><h3>Hermes</h3><ul><li>目录迹象:<span class="code">skills</span>、<span class="code">optional-skills</span>、<span class="code">agent/skill_*</span>、<span class="code">hermes_cli/skills_*</span>。</li><li>形态:内置技能、可选技能、Skills Hub、迁移 OpenClaw skills。</li><li>优点:技能生态和 self-improving 叙事强。</li><li>短板:入口多,讲清最终选择链路成本高。</li></ul></div>
|
||
<div class="panel"><h3>OpenClaw</h3><ul><li>目录迹象:<span class="code">skills</span>、<span class="code">.agents/skills</span>、docs skills、workspace skills。</li><li>形态:bundled/managed/workspace skills,配合 ClawHub。</li><li>优点:产品化技能注册和分发强。</li><li>短板:技能系统与 gateway/apps/nodes 强绑定。</li></ul></div>
|
||
<div class="panel"><h3>Beaver</h3><ul><li>形态:<span class="code">SkillSpecStore</span>、<span class="code">SkillsLoader</span>、published versions、drafts、reviews。</li><li>优点:上传/安装 -> 版本 -> draft -> review -> publish/disable/rollback 生命周期清楚。</li><li>短板:外部生态和 marketplace 成熟度不如 OpenClaw/Hermes。</li></ul></div>
|
||
</div>
|
||
|
||
<div class="diagram">
|
||
<h3 class="diagram-title">Beaver Skill 装载流程</h3>
|
||
<div class="diagram-row">
|
||
<div class="diagram-card"><strong>workspace skill store</strong><span>技能文件和版本索引</span></div>
|
||
<div class="diagram-card"><strong>SkillsLoader.list</strong><span>读取 published skill</span></div>
|
||
<div class="diagram-card"><strong>selection candidates</strong><span>构建候选摘要</span></div>
|
||
<div class="diagram-card"><strong>SkillAssembler</strong><span>embedding + LLM 选择</span></div>
|
||
<div class="diagram-card"><strong>SkillContext</strong><span>注入本轮上下文</span></div>
|
||
<div class="diagram-card"><strong>ActivationReceipt</strong><span>写入激活审计记录</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<thead><tr><th>阶段</th><th>OpenHarness</th><th>Hermes</th><th>OpenClaw</th><th>Beaver</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>发现 skill</td><td>loader/registry</td><td>skill bundles/config/hub</td><td>workspace/managed registry</td><td><span class="code">SkillsLoader</span></td></tr>
|
||
<tr><td>候选召回</td><td>skill registry / prompt matching</td><td>skill preprocessing / commands</td><td>registry/config</td><td>embedding retriever</td></tr>
|
||
<tr><td>最终选择</td><td>agent/runtime 决策</td><td>agent skill utilities</td><td>agent/tooling runtime</td><td>LLM shortlist + final select</td></tr>
|
||
<tr><td>注入方式</td><td>prompt/context</td><td>prompt/context</td><td>prompt/context</td><td><span class="code">SkillContext</span> + activation messages</td></tr>
|
||
<tr><td>审计记录</td><td>有测试/日志迹象</td><td>有 memory/trajectory</td><td>有 runtime/logs</td><td>explicit activation receipt</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<thead><tr><th>CRUD</th><th>Beaver 讲解重点</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>Create</td><td>upload、marketplace install、learning candidate synthesize draft</td></tr>
|
||
<tr><td>Read</td><td>list/detail/version/file/download</td></tr>
|
||
<tr><td>Update</td><td>regenerate draft、submit、approve、reject、publish、disable、rollback</td></tr>
|
||
<tr><td>Delete</td><td>delete published skill / draft delete 底层能力</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="demo">
|
||
<h3>Demo:Skill 选择</h3>
|
||
<p>这个例子适合讲“skill 不是手动塞进去,而是根据任务语义被选择并记录”。</p>
|
||
<div class="demo-grid">
|
||
<div class="demo-block"><h4>输入</h4><pre>{
|
||
"task_description": "解释后端 Task 机制",
|
||
"available_skills": [
|
||
"backend-explainer",
|
||
"code-review",
|
||
"filesystem"
|
||
]
|
||
}</pre></div>
|
||
<div class="demo-block"><h4>内部选择</h4><pre>{
|
||
"retrieved_candidates": [
|
||
"backend-explainer",
|
||
"filesystem"
|
||
],
|
||
"llm_final_select": [
|
||
"backend-explainer"
|
||
]
|
||
}</pre></div>
|
||
<div class="demo-block"><h4>预期输出</h4><pre>{
|
||
"activated_skills": [
|
||
"backend-explainer"
|
||
],
|
||
"activation_reason": "llm_selected",
|
||
"tool_hints": [
|
||
"search_files",
|
||
"read_file"
|
||
]
|
||
}</pre></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="tools">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>Tool 装载、选择、执行和 MCP</h2>
|
||
<p class="hint">重点讲 Beaver 的 ToolRegistry / ToolAssembler / ToolExecutor 三段式边界。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid-4">
|
||
<div class="panel"><h3>OpenHarness</h3><p>43+ tools,覆盖 file、shell、search、web、MCP,并强调 parallel tool execution。</p></div>
|
||
<div class="panel"><h3>Hermes</h3><p>40+ tools、toolsets、terminal backends、RPC、browser/tools config,工具体系覆盖面广。</p></div>
|
||
<div class="panel"><h3>OpenClaw</h3><p>first-class tools,覆盖 browser、canvas、nodes、cron、sessions 和 channel actions。</p></div>
|
||
<div class="panel"><h3>Beaver</h3><p>built-in tools + MCP tools + registry + assembler + executor,运行链路边界更容易讲清。</p></div>
|
||
</div>
|
||
|
||
<div class="diagram">
|
||
<h3 class="diagram-title">Beaver Tool 装载流程</h3>
|
||
<div class="diagram-row">
|
||
<div class="diagram-card"><strong>EngineLoader</strong><span>创建工具运行时</span></div>
|
||
<div class="diagram-card"><strong>ToolRegistry</strong><span>注册 built-in tools</span></div>
|
||
<div class="diagram-card"><strong>MCP Manager</strong><span>连接外部 MCP server</span></div>
|
||
<div class="diagram-card"><strong>ToolAssembler</strong><span>always + skill hints + embedding</span></div>
|
||
<div class="diagram-card"><strong>Provider Schema</strong><span>导出 function schema</span></div>
|
||
<div class="diagram-card"><strong>ToolExecutor</strong><span>执行 tool call 并写回 session</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<thead><tr><th>阶段</th><th>OpenHarness</th><th>Hermes</th><th>OpenClaw</th><th>Beaver</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>内置注册</td><td>tools package</td><td>tools/toolsets</td><td>packages/extensions/tools</td><td><span class="code">EngineLoader.register_many</span></td></tr>
|
||
<tr><td>外部工具</td><td>MCP client</td><td>MCP serve/config</td><td>plugin/extensions/process tooling</td><td>MCP manager</td></tr>
|
||
<tr><td>工具选择</td><td>harness runtime</td><td>toolsets + config + guardrails</td><td>gateway/runtime tool exposure</td><td>always tools + skill hints + embedding top-k</td></tr>
|
||
<tr><td>执行</td><td>tool call cycle / parallel</td><td>tool executor / terminal backend</td><td>runtime/extensions/actions</td><td><span class="code">ToolExecutor.execute_tool_call</span></td></tr>
|
||
<tr><td>审计</td><td>logs/hooks</td><td>trajectory/tool classification</td><td>logs/security tooling</td><td>session tool_result + run memory</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="callout"><strong>讲解重点:</strong><span class="code">tool_hints</span> 不是直接执行工具。它只告诉工具选择器“这个 skill 常用哪些工具”。最终工具列表仍由 ToolAssembler 汇总 always tools、skill hints 和 embedding top-k。</div>
|
||
|
||
<div class="demo">
|
||
<h3>Demo:Skill 中 tool 字段影响工具选择</h3>
|
||
<div class="demo-grid">
|
||
<div class="demo-block"><h4>Skill frontmatter</h4><pre>---
|
||
name: backend-explainer
|
||
description: Explain backend architecture from source files
|
||
tool_hints:
|
||
- search_files
|
||
- read_file
|
||
- session_search
|
||
---
|
||
先定位入口,再追踪 service、engine、memory、skills。</pre></div>
|
||
<div class="demo-block"><h4>工具选择器输入</h4><pre>{
|
||
"task": "解释后端 Task 机制",
|
||
"activated_skills": [
|
||
"backend-explainer"
|
||
],
|
||
"always_tools": [
|
||
"memory",
|
||
"session_search"
|
||
]
|
||
}</pre></div>
|
||
<div class="demo-block"><h4>预期工具选择</h4><pre>{
|
||
"always_tools": ["memory", "session_search"],
|
||
"from_skill_hints": ["search_files", "read_file"],
|
||
"from_embedding": ["list_directory"],
|
||
"final_tools": [
|
||
"memory",
|
||
"session_search",
|
||
"search_files",
|
||
"read_file",
|
||
"list_directory"
|
||
]
|
||
}</pre></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="sessions">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>Session / Memory 管理</h2>
|
||
<p class="hint">对比谁更擅长跨会话、谁更擅长运行证据、谁更擅长多渠道隔离。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid-4">
|
||
<div class="panel"><h3>OpenHarness</h3><ul><li><span class="code">session_storage</span>、<span class="code">session_backend</span>、<span class="code">channels/bus</span>。</li><li>偏 harness + channel runtime,支持 ohmo 长会话。</li></ul></div>
|
||
<div class="panel"><h3>Hermes</h3><ul><li><span class="code">gateway/session.py</span>、conversation loop、session recap、FTS5 session search。</li><li>强在跨会话检索、recap、conversation continuity。</li></ul></div>
|
||
<div class="panel"><h3>OpenClaw</h3><ul><li>session model 是产品核心之一,gateway route 到 isolated agents/sessions。</li><li>强在多渠道、多设备下 session 和 peer/account 隔离。</li></ul></div>
|
||
<div class="panel"><h3>Beaver</h3><ul><li><span class="code">SessionManager</span> + SQLite/store + Web session API。</li><li>每次 run 记录 system/user/assistant/tool/event payload。</li><li>Task 可通过 session_id 找 active task。</li></ul></div>
|
||
</div>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<thead><tr><th>Memory 类型</th><th>OpenHarness</th><th>Hermes</th><th>OpenClaw</th><th>Beaver</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>用户长期记忆</td><td>MEMORY.md / memdir</td><td>user modeling / curated memory</td><td>workspace memory</td><td>curated memory store</td></tr>
|
||
<tr><td>会话历史</td><td>session storage</td><td>conversation/session history</td><td>gateway sessions</td><td>session manager</td></tr>
|
||
<tr><td>检索</td><td>memory relevance/search</td><td>FTS5 + summarization</td><td>session/tools docs</td><td>session search tool</td></tr>
|
||
<tr><td>run 证据</td><td>harness logs/tests</td><td>trajectories</td><td>logs/sessions</td><td>run memory store</td></tr>
|
||
<tr><td>skill 效果</td><td>部分支持</td><td>自学习闭环强</td><td>skill registry usage</td><td>skill effect records</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="demo">
|
||
<h3>Demo:Beaver Session + Memory</h3>
|
||
<div class="demo-grid">
|
||
<div class="demo-block"><h4>输入</h4><pre>{
|
||
"session_id": "web-demo-001",
|
||
"message": "继续刚才的后端架构讲解"
|
||
}</pre></div>
|
||
<div class="demo-block"><h4>内部数据</h4><pre>{
|
||
"session": {
|
||
"id": "web-demo-001",
|
||
"source": "web",
|
||
"parent_session_id": null
|
||
},
|
||
"message": {
|
||
"role": "user",
|
||
"run_id": "run_002",
|
||
"context_visible": true
|
||
},
|
||
"memory_snapshot": {
|
||
"captured_for_run": "run_002",
|
||
"frozen": true
|
||
},
|
||
"run_memory": {
|
||
"activated_skills": ["backend-explainer"],
|
||
"tool_results": ["read_file", "search_files"],
|
||
"validation_result": {"accepted": true}
|
||
}
|
||
}</pre></div>
|
||
<div class="demo-block"><h4>预期输出</h4><pre>{
|
||
"answer": "继续上次内容...",
|
||
"session_updated": true,
|
||
"run_record_written": true,
|
||
"can_resume_later": true
|
||
}</pre></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="channels">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>Channel / Gateway 管理</h2>
|
||
<p class="hint">这页讲入口生态。Beaver 目前 Web 强,多渠道弱;OpenClaw 和 Hermes 是主要参照。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid-4">
|
||
<div class="panel"><h3>OpenHarness</h3><ul><li>ohmo gateway:Feishu、Slack、Telegram、Discord 等。</li><li>目录:<span class="code">src/openharness/channels/impl/*</span>。</li><li>适合讲 harness + personal agent channel adapters。</li></ul></div>
|
||
<div class="panel"><h3>Hermes</h3><ul><li>Telegram、Discord、Slack、WhatsApp、Signal、Email、Home Assistant 等。</li><li>目录:<span class="code">gateway/platforms/*</span>。</li><li>强在 pairing、delivery、slash access、session context。</li></ul></div>
|
||
<div class="panel"><h3>OpenClaw</h3><ul><li>渠道覆盖最广:WhatsApp、Telegram、Slack、Discord、Google Chat、Signal、iMessage、Matrix、Feishu、LINE、WeChat、QQ、WebChat 等。</li><li>强在 local-first gateway、device nodes、apps/canvas。</li><li>安全重点:DM allowlist、pairing、non-main sandbox。</li></ul></div>
|
||
<div class="panel"><h3>Beaver</h3><ul><li>当前主入口是 Web + WebSocket。</li><li>后端已有 <span class="code">interfaces/gateway</span> 和 <span class="code">interfaces/channels</span> 基础。</li><li>集成侧有 Outlook、MCP servers。</li><li>短板:多渠道连接和 channel-specific 安全策略不成熟。</li></ul></div>
|
||
</div>
|
||
|
||
<div class="diagram">
|
||
<h3 class="diagram-title">四种 Channel 数据流</h3>
|
||
<div class="diagram-row four">
|
||
<div class="diagram-card"><strong>OpenHarness</strong><span>Channel Adapter -> Gateway Runtime -> ohmo session -> OpenHarness engine/tools</span></div>
|
||
<div class="diagram-card"><strong>Hermes</strong><span>Platform webhook/bot -> gateway session context -> agent loop -> delivery</span></div>
|
||
<div class="diagram-card"><strong>OpenClaw</strong><span>External channel -> Gateway -> agent routing -> workspace/session/tools -> channel reply</span></div>
|
||
<div class="diagram-card"><strong>Beaver</strong><span>Browser/WebSocket -> FastAPI web app -> AgentService -> AgentLoop -> Web response</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="panel">
|
||
<h3>对 Beaver 的建议</h3>
|
||
<ul>
|
||
<li>优先借鉴 OpenClaw/Hermes 的 channel adapter 独立化。</li>
|
||
<li>建立 channel identity / allowlist / pairing 概念,而不是只把消息当普通 Web 请求。</li>
|
||
<li>设计 per-channel session mapping,明确 channel、account、peer、session、user 的关系。</li>
|
||
<li>保留当前 Web 管理面优势,先做少量高价值 channel,不直接复制 OpenClaw 的复杂度。</li>
|
||
</ul>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="security">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>权限 / 安全 / 沙箱 / AuthZ</h2>
|
||
<p class="hint">这页要拆成两层讲:平台部署隔离,以及 agent runtime 的工具权限。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<thead><tr><th>维度</th><th>OpenHarness</th><th>Hermes</th><th>OpenClaw</th><th>Beaver</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>Tool approval</td><td>permissions checker / hooks</td><td>guardrails / approvals</td><td>security defaults / tool exposure</td><td>authz integration + permission package scaffold</td></tr>
|
||
<tr><td>Channel trust</td><td>channel impl + security tests</td><td>pairing/slash access/platform rules</td><td>DM allowlist / pairing</td><td>Web auth/session + authz-service</td></tr>
|
||
<tr><td>Sandbox</td><td>Docker sandbox</td><td>terminal backend isolation</td><td>non-main sandbox, Docker/SSH/OpenShell</td><td>Docker per-instance isolation at deployment layer</td></tr>
|
||
<tr><td>MCP security</td><td>MCP config/client</td><td>MCP config/serve</td><td>plugin/process boundary</td><td>MCP server config + authz config</td></tr>
|
||
<tr><td>Audit</td><td>tests/logging/hooks</td><td>trajectories/logs</td><td>logging/security workflows</td><td>session event payload + run memory</td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="grid-2">
|
||
<div class="panel">
|
||
<h3>Beaver 平台部署层</h3>
|
||
<ul>
|
||
<li><span class="code">auth-portal</span>:用户入口、登录注册。</li>
|
||
<li><span class="code">authz-service</span>:授权服务和后端身份。</li>
|
||
<li><span class="code">deploy-control</span>:创建和管理单用户实例。</li>
|
||
<li><span class="code">router-proxy</span>:按 Host 转发到实例。</li>
|
||
<li>每个用户一个 <span class="code">app-instance</span>,Docker 容器隔离 + per-instance workspace。</li>
|
||
</ul>
|
||
</div>
|
||
<div class="panel">
|
||
<h3>Beaver Agent Runtime 层</h3>
|
||
<ul>
|
||
<li><span class="code">permissions</span> package 已有 profiles/guards/policies 结构,但目前偏骨架。</li>
|
||
<li>MCP 和 authz 已在 config / integration 中接入。</li>
|
||
<li>Skill draft safety checker 可用 allowed tool names/prefixes 控制技能草稿风险。</li>
|
||
<li>当前短板是 tool call 前置 permission guard 还不如三方成熟。</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid-3">
|
||
<div class="panel"><h3>当前优势</h3><ul><li>用户实例边界清楚。</li><li>Web API 和 AuthZ 控制链路清楚。</li><li>skill 发布前有 safety/eval/review。</li></ul></div>
|
||
<div class="panel"><h3>当前短板</h3><ul><li>runtime tool permission policy 还不完整。</li><li>channel trust model 还没展开。</li><li>沙箱更多在部署层,不是每次 tool call 的细粒度策略。</li></ul></div>
|
||
<div class="panel"><h3>下一步建议</h3><ul><li>给 ToolSpec 增加 risk level / permission scope 展示。</li><li>给 MCP server 增加 trust profile。</li><li>给 channel/session 增加 source trust metadata。</li><li>将 permission guard 接入 tool executor 前置检查。</li></ul></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="teams">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>Agent Team / Sub-agent 编排</h2>
|
||
<p class="hint">Beaver 的优势是把 team 放进 Task 工作流,并且让主 agent synthesis 最终负责一致性。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid-4">
|
||
<div class="panel"><h3>OpenHarness</h3><p>swarm、subagent spawning、delegation,强调 harness 多 agent 能力。</p></div>
|
||
<div class="panel"><h3>Hermes</h3><p>isolated subagents、parallel workstreams、scripts via RPC。</p></div>
|
||
<div class="panel"><h3>OpenClaw</h3><p>multi-agent routing、isolated agents/workspaces/sessions。</p></div>
|
||
<div class="panel"><h3>Beaver</h3><ul><li>任务规划器生成 plan。</li><li><span class="code">ExecutionGraph</span> 支持 sequence / parallel / DAG。</li><li><span class="code">TaskSkillResolver</span> 绑定 published skill 或 ephemeral guidance。</li><li><span class="code">LocalAgentRunner</span> 让 sub-agent 回到统一 AgentLoop。</li><li>主 Agent synthesis 输出最终答案。</li></ul></div>
|
||
</div>
|
||
|
||
<div class="diagram">
|
||
<h3 class="diagram-title">Beaver Team 流程</h3>
|
||
<div class="diagram-row">
|
||
<div class="diagram-card"><strong>Task</strong><span>复杂工作进入任务模式</span></div>
|
||
<div class="diagram-card"><strong>Planner</strong><span>决定 single / team</span></div>
|
||
<div class="diagram-card"><strong>ExecutionGraph</strong><span>sequence / parallel / DAG</span></div>
|
||
<div class="diagram-card"><strong>Skill Binding</strong><span>published skill 或 ephemeral guidance</span></div>
|
||
<div class="diagram-card"><strong>LocalAgentRunner</strong><span>节点回到统一 AgentLoop</span></div>
|
||
<div class="diagram-card"><strong>Main Synthesis</strong><span>主 agent 综合输出</span></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="demo">
|
||
<h3>Demo:Agent Team DAG</h3>
|
||
<div class="demo-grid">
|
||
<div class="demo-block"><h4>输入</h4><pre>{
|
||
"task_id": "task_arch_002",
|
||
"mode": "team",
|
||
"strategy": "dag"
|
||
}</pre></div>
|
||
<div class="demo-block"><h4>执行图</h4><pre>{
|
||
"nodes": [
|
||
{
|
||
"node_id": "read",
|
||
"task": "阅读三方项目 README",
|
||
"depends_on": []
|
||
},
|
||
{
|
||
"node_id": "compare",
|
||
"task": "对比 skill/tool/session/channel/permission",
|
||
"depends_on": ["read"]
|
||
},
|
||
{
|
||
"node_id": "synthesize",
|
||
"task": "生成讲解页结构",
|
||
"depends_on": ["compare"]
|
||
}
|
||
]
|
||
}</pre></div>
|
||
<div class="demo-block"><h4>预期输出</h4><pre>{
|
||
"team_success": true,
|
||
"node_results": [
|
||
{"node_id": "read", "success": true},
|
||
{"node_id": "compare", "success": true},
|
||
{"node_id": "synthesize", "success": true}
|
||
],
|
||
"main_synthesis": "输出一页完整项目对比讲解。"
|
||
}</pre></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="conclusion">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>结论:Beaver 的位置和下一步</h2>
|
||
<p class="hint">这页适合最后收束:不是说谁更好,而是说明每个项目选择了不同路线。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="grid-4">
|
||
<div class="panel">
|
||
<h3>你的强项</h3>
|
||
<ul>
|
||
<li>Web 管理面清晰。</li>
|
||
<li>Task 工作单、validation、feedback 闭环明确。</li>
|
||
<li>Skill Learning 生命周期比多数项目更可审核。</li>
|
||
<li>Agent Team DAG/parallel/sequence 边界清晰。</li>
|
||
<li>单用户实例化部署方便隔离和商业化实例管理。</li>
|
||
</ul>
|
||
</div>
|
||
<div class="panel">
|
||
<h3>你的短板</h3>
|
||
<ul>
|
||
<li>多渠道能力弱于 Hermes/OpenClaw。</li>
|
||
<li>channel trust、安全、pairing、allowlist 体系还没展开。</li>
|
||
<li>permission guard/tool approval 还没有 OpenHarness/OpenClaw 成熟。</li>
|
||
<li>生态规模、skills hub、插件分发弱于三方项目。</li>
|
||
<li>桌面/移动/Canvas 类体验缺失。</li>
|
||
</ul>
|
||
</div>
|
||
<div class="panel">
|
||
<h3>可借鉴</h3>
|
||
<ul>
|
||
<li>从 OpenHarness 借鉴 harness 概念表达、hook/permission/tool ecosystem。</li>
|
||
<li>从 Hermes 借鉴 self-improving narrative、gateway、cron、session search/user modeling。</li>
|
||
<li>从 OpenClaw 借鉴 local-first gateway、多渠道、device nodes、DM security、Canvas/visual workspace。</li>
|
||
</ul>
|
||
</div>
|
||
<div class="panel">
|
||
<h3>讲解主线</h3>
|
||
<ul>
|
||
<li>先讲三方项目都是“让 LLM 变成 agent 的外壳”。</li>
|
||
<li>再讲你的项目选择了“Web 管理 + Task 工作流 + 审核型 skill learning”路线。</li>
|
||
<li>最后讲未来可吸收 channel、permission、ecosystem 能力。</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="stage" data-stage="sources">
|
||
<div class="stage-title">
|
||
<div>
|
||
<h2>来源区</h2>
|
||
<p class="hint">页面内容是静态快照,不是实时 GitHub 数据。Snapshot: 2026-05-20。</p>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="table-wrap">
|
||
<table>
|
||
<thead><tr><th>项目</th><th>GitHub metadata snapshot</th><th>主要来源</th></tr></thead>
|
||
<tbody>
|
||
<tr><td>HKUDS/OpenHarness</td><td>Python / MIT / stars 12801 / forks 2115 / updated 2026-05-20T06:22:54Z</td><td><a href="https://github.com/HKUDS/OpenHarness">Repo</a> · <a href="https://raw.githubusercontent.com/HKUDS/OpenHarness/main/README.md">README</a></td></tr>
|
||
<tr><td>NousResearch/hermes-agent</td><td>Python / MIT / stars 158414 / forks 25664 / updated 2026-05-20T06:43:46Z</td><td><a href="https://github.com/NousResearch/hermes-agent">Repo</a> · <a href="https://raw.githubusercontent.com/NousResearch/hermes-agent/main/README.md">README</a></td></tr>
|
||
<tr><td>openclaw/openclaw</td><td>TypeScript / MIT / stars 373326 / forks 77490 / updated 2026-05-20T06:42:58Z</td><td><a href="https://github.com/openclaw/openclaw">Repo</a> · <a href="https://raw.githubusercontent.com/openclaw/openclaw/main/README.md">README</a></td></tr>
|
||
<tr><td>Beaver</td><td>本地项目 / Python + Next.js / 单用户实例化 Web agent 工作台</td><td><a href="backend-visualization.html">Beaver 架构可视化</a> · <a href="backend-overview.md">backend overview</a></td></tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="sources">
|
||
<div class="source-card"><h3>OpenHarness 结构证据</h3><p>仓库树显示 <span class="code">src/openharness/skills</span>、<span class="code">tools</span>、<span class="code">memory</span>、<span class="code">channels</span>、<span class="code">permissions</span>、<span class="code">sandbox</span>、<span class="code">swarm</span>、<span class="code">ohmo/gateway</span>。</p><a href="https://github.com/HKUDS/OpenHarness">https://github.com/HKUDS/OpenHarness</a></div>
|
||
<div class="source-card"><h3>Hermes 结构证据</h3><p>仓库树显示 <span class="code">agent/skill_*</span>、<span class="code">tools</span>、<span class="code">toolsets</span>、<span class="code">gateway/platforms</span>、<span class="code">cron</span>、<span class="code">mcp_serve.py</span>、<span class="code">optional-skills</span>。</p><a href="https://github.com/NousResearch/hermes-agent">https://github.com/NousResearch/hermes-agent</a></div>
|
||
<div class="source-card"><h3>OpenClaw 结构证据</h3><p>仓库树显示 <span class="code">apps/android</span>、<span class="code">apps/ios</span>、<span class="code">apps/macos</span>、<span class="code">skills</span>、<span class="code">extensions</span>、<span class="code">docs</span>、大量 channel/security workflows。</p><a href="https://github.com/openclaw/openclaw">https://github.com/openclaw/openclaw</a></div>
|
||
<div class="source-card"><h3>Beaver 结构证据</h3><p>本地代码显示 <span class="code">beaver/engine</span>、<span class="code">tasks</span>、<span class="code">skills</span>、<span class="code">tools</span>、<span class="code">memory</span>、<span class="code">interfaces/web</span>、<span class="code">coordinator</span>、<span class="code">integrations/authz</span>。</p><a href="backend-visualization.html">查看本地 Beaver 架构页</a></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
</main>
|
||
|
||
<script>
|
||
const tabs = Array.from(document.querySelectorAll(".tab"));
|
||
const stages = Array.from(document.querySelectorAll(".stage"));
|
||
tabs.forEach((tab) => {
|
||
tab.addEventListener("click", () => {
|
||
const view = tab.dataset.view;
|
||
tabs.forEach((item) => item.setAttribute("aria-selected", String(item === tab)));
|
||
stages.forEach((stage) => stage.classList.toggle("active", stage.dataset.stage === view));
|
||
});
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|