| 1 | <!DOCTYPE html> |
| 2 | <html lang="zh-CN"> |
| 3 | <head> |
| 4 | <meta charset="UTF-8"> |
| 5 | <meta name="viewport" content="width=device-width, initial-scale=1"> |
| 6 | <title>Hermes Cyber Terminal</title> |
| 7 | <link rel="stylesheet" href="../../../assets/fonts.css"> |
| 8 | <link rel="stylesheet" href="../../../assets/base.css"> |
| 9 | <link rel="stylesheet" href="style.css"> |
| 10 | </head> |
| 11 | <body class="tpl-hermes-cyber-terminal"> |
| 12 | <div class="deck"> |
| 13 | |
| 14 | <!-- 1. COVER --> |
| 15 | <section class="slide is-active"> |
| 16 | <div class="hc-grid"></div> |
| 17 | <div class="hc-vignette"></div> |
| 18 | <div class="hc-scanlines"></div> |
| 19 | <div class="hc-chrome"><div class="dots"><span></span><span></span><span></span></div><div>~/hermes · zsh · 118x42 · 01:37:04</div></div> |
| 20 | <div style="margin:auto 0"> |
| 21 | <p class="hc-prompt">whoami --hermes</p> |
| 22 | <h1 class="hc-h1">HERMES<br>AGENT / v0.9.2<span class="hc-cursor"></span></h1> |
| 23 | <p class="hc-lede">一个号称能「自主跑完整软件工程任务」的命令行 agent。<br>真的好用?还是又一轮营销?—— 我连续跑了 72 小时,告诉你答案。</p> |
| 24 | <div style="margin-top:26px"> |
| 25 | <span class="hc-tag">rust-core</span> |
| 26 | <span class="hc-tag">mcp-native</span> |
| 27 | <span class="hc-tag amber">72h-benchmark</span> |
| 28 | <span class="hc-tag red">honest-review</span> |
| 29 | </div> |
| 30 | </div> |
| 31 | <div class="hc-footer"><span>hermes-review · lewis · 2026</span><span>01 / 08</span></div> |
| 32 | </section> |
| 33 | |
| 34 | <!-- 2. SECTION DIVIDER --> |
| 35 | <section class="slide"> |
| 36 | <div class="hc-grid"></div> |
| 37 | <div class="hc-scanlines"></div> |
| 38 | <div class="hc-chrome"><div class="dots"><span></span><span></span><span></span></div><div>section · 01/04</div></div> |
| 39 | <div style="margin:auto 0"> |
| 40 | <p class="hc-prompt">cat chapter_01.md</p> |
| 41 | <h1 class="hc-h1" style="font-size:110px">// Setup</h1> |
| 42 | <p class="hc-lede">从 <code style="color:var(--hc-amber)">brew install hermes</code> 到第一次 prompt —— 一共 4 分 22 秒。</p> |
| 43 | </div> |
| 44 | <div class="hc-footer"><span>section · setup</span><span>02 / 08</span></div> |
| 45 | </section> |
| 46 | |
| 47 | <!-- 3. CONTENT — spec cards --> |
| 48 | <section class="slide"> |
| 49 | <div class="hc-grid"></div> |
| 50 | <div class="hc-scanlines"></div> |
| 51 | <div class="hc-chrome"><div class="dots"><span></span><span></span><span></span></div><div>benchmark · cold-start</div></div> |
| 52 | <h2 class="hc-h2">开箱数据</h2> |
| 53 | <p class="hc-lede">cold start → first-successful-task 三次平均</p> |
| 54 | <div class="hc-grid-3"> |
| 55 | <div class="hc-card"><div class="lbl">install time</div><div class="val">42s</div><div class="desc">单 binary,无 docker,无 python env。</div></div> |
| 56 | <div class="hc-card"><div class="lbl">first token</div><div class="val">1.8s</div><div class="desc">接入 claude-opus-4-6,无预热。</div></div> |
| 57 | <div class="hc-card"><div class="lbl">first PR merged</div><div class="val">4m22s</div><div class="desc">跑的是 fix-a-typo 级别的低难度任务。</div></div> |
| 58 | </div> |
| 59 | <div class="hc-grid-2"> |
| 60 | <div class="hc-card"><div class="lbl">// verdict +</div><div class="val" style="color:var(--hc-green);font-size:18px">冷启动是真的快</div><div class="desc">和 OpenClaw 的 docker + pip 流程比,快不止一个数量级。</div></div> |
| 61 | <div class="hc-card"><div class="lbl">// verdict -</div><div class="val" style="color:var(--hc-red);font-size:18px">MCP 服务器配置不够友好</div><div class="desc">env 变量需要手动塞进 ~/.hermes/env,文档几乎没写。</div></div> |
| 62 | </div> |
| 63 | <div class="hc-footer"><span>data · verified 3 runs</span><span>03 / 08</span></div> |
| 64 | </section> |
| 65 | |
| 66 | <!-- 4. CODE --> |
| 67 | <section class="slide"> |
| 68 | <div class="hc-grid"></div> |
| 69 | <div class="hc-scanlines"></div> |
| 70 | <div class="hc-chrome"><div class="dots"><span></span><span></span><span></span></div><div>trace · hermes run</div></div> |
| 71 | <p class="hc-prompt">hermes run "refactor auth module to use pkce"</p> |
| 72 | <h3 class="hc-h3" style="margin-top:12px">↓ 真实 trace (节选)</h3> |
| 73 | <pre class="hc-codebox" style="margin-top:10px"><span class="cm"># hermes v0.9.2 · session 42a1</span> |
| 74 | [<span class="fn">plan</span>] <span class="st">"分析 src/auth/*.ts → 找 oauth flow → 抽成 pkce"</span> |
| 75 | [<span class="fn">read</span>] src/auth/oauth.ts <span class="cm">// 214 lines</span> |
| 76 | [<span class="fn">read</span>] src/auth/token.ts <span class="cm">// 88 lines</span> |
| 77 | [<span class="kw">think</span>] <span class="st">"发现 implicit flow,改为 code+pkce,需新 state param"</span> |
| 78 | [<span class="fn">edit</span>] src/auth/oauth.ts <span class="hl">+43 -17</span> |
| 79 | [<span class="fn">edit</span>] src/auth/token.ts <span class="hl">+12 -4</span> |
| 80 | [<span class="fn">test</span>] pnpm vitest auth <span class="st">PASS 18/18</span> |
| 81 | [<span class="fn">commit</span>] <span class="var">"feat(auth): migrate to oauth2 code+pkce"</span> |
| 82 | [<span class="fn">push</span>] origin feat/pkce-auth <span class="st">ok</span> |
| 83 | |
| 84 | <span class="cm"># 总耗时 3m 14s · 14k tokens · $0.21</span></pre> |
| 85 | <div class="hc-footer"><span>trace · live</span><span>04 / 08</span></div> |
| 86 | </section> |
| 87 | |
| 88 | <!-- 5. CHART --> |
| 89 | <section class="slide"> |
| 90 | <div class="hc-grid"></div> |
| 91 | <div class="hc-scanlines"></div> |
| 92 | <div class="hc-chrome"><div class="dots"><span></span><span></span><span></span></div><div>benchmark · hermes vs openclaw</div></div> |
| 93 | <h2 class="hc-h2">72 小时对比</h2> |
| 94 | <p class="hc-lede">同一组 48 个 GitHub issue,两个 agent 各跑一遍</p> |
| 95 | <svg viewBox="0 0 1000 380" style="width:100%;max-width:1040px;margin-top:24px" xmlns="http://www.w3.org/2000/svg"> |
| 96 | <g font-family="JetBrains Mono, monospace" font-size="13" fill="#8a8892"> |
| 97 | <!-- axis --> |
| 98 | <line x1="80" y1="40" x2="80" y2="320" stroke="rgba(126,211,164,.2)"/> |
| 99 | <line x1="80" y1="320" x2="960" y2="320" stroke="rgba(126,211,164,.2)"/> |
| 100 | <!-- y labels --> |
| 101 | <text x="70" y="46" text-anchor="end">100%</text> |
| 102 | <text x="70" y="116" text-anchor="end">75%</text> |
| 103 | <text x="70" y="186" text-anchor="end">50%</text> |
| 104 | <text x="70" y="256" text-anchor="end">25%</text> |
| 105 | <text x="70" y="324" text-anchor="end">0</text> |
| 106 | <!-- bars: hermes --> |
| 107 | <g> |
| 108 | <rect x="130" y="80" width="80" height="240" fill="rgba(126,211,164,.15)" stroke="#7ed3a4" stroke-width="1.5"/> |
| 109 | <text x="170" y="76" text-anchor="middle" fill="#7ed3a4" font-weight="700">82%</text> |
| 110 | <text x="170" y="345" text-anchor="middle">resolved</text> |
| 111 | <rect x="240" y="146" width="80" height="174" fill="rgba(126,211,164,.15)" stroke="#7ed3a4" stroke-width="1.5"/> |
| 112 | <text x="280" y="142" text-anchor="middle" fill="#7ed3a4" font-weight="700">58%</text> |
| 113 | <text x="280" y="345" text-anchor="middle">one-shot</text> |
| 114 | <rect x="350" y="60" width="80" height="260" fill="rgba(126,211,164,.15)" stroke="#7ed3a4" stroke-width="1.5"/> |
| 115 | <text x="390" y="56" text-anchor="middle" fill="#7ed3a4" font-weight="700">89%</text> |
| 116 | <text x="390" y="345" text-anchor="middle">test-pass</text> |
| 117 | <rect x="460" y="110" width="80" height="210" fill="rgba(126,211,164,.15)" stroke="#7ed3a4" stroke-width="1.5"/> |
| 118 | <text x="500" y="106" text-anchor="middle" fill="#7ed3a4" font-weight="700">71%</text> |
| 119 | <text x="500" y="345" text-anchor="middle">pr-merged</text> |
| 120 | </g> |
| 121 | <!-- bars: openclaw --> |
| 122 | <g> |
| 123 | <rect x="570" y="150" width="80" height="170" fill="rgba(233,197,138,.12)" stroke="#e9c58a" stroke-width="1.5"/> |
| 124 | <text x="610" y="146" text-anchor="middle" fill="#e9c58a" font-weight="700">60%</text> |
| 125 | <text x="610" y="345" text-anchor="middle">resolved</text> |
| 126 | <rect x="680" y="212" width="80" height="108" fill="rgba(233,197,138,.12)" stroke="#e9c58a" stroke-width="1.5"/> |
| 127 | <text x="720" y="208" text-anchor="middle" fill="#e9c58a" font-weight="700">38%</text> |
| 128 | <text x="720" y="345" text-anchor="middle">one-shot</text> |
| 129 | <rect x="790" y="130" width="80" height="190" fill="rgba(233,197,138,.12)" stroke="#e9c58a" stroke-width="1.5"/> |
| 130 | <text x="830" y="126" text-anchor="middle" fill="#e9c58a" font-weight="700">67%</text> |
| 131 | <text x="830" y="345" text-anchor="middle">test-pass</text> |
| 132 | </g> |
| 133 | <!-- legend --> |
| 134 | <g transform="translate(820,50)"> |
| 135 | <rect x="0" y="0" width="14" height="14" fill="rgba(126,211,164,.15)" stroke="#7ed3a4"/> |
| 136 | <text x="22" y="12" fill="#7ed3a4">hermes 0.9.2</text> |
| 137 | <rect x="0" y="22" width="14" height="14" fill="rgba(233,197,138,.12)" stroke="#e9c58a"/> |
| 138 | <text x="22" y="34" fill="#e9c58a">openclaw 2.1</text> |
| 139 | </g> |
| 140 | </g> |
| 141 | </svg> |
| 142 | <div class="hc-footer"><span>benchmark · n=48</span><span>05 / 08</span></div> |
| 143 | </section> |
| 144 | |
| 145 | <!-- 6. STATS --> |
| 146 | <section class="slide"> |
| 147 | <div class="hc-grid"></div> |
| 148 | <div class="hc-scanlines"></div> |
| 149 | <div class="hc-chrome"><div class="dots"><span></span><span></span><span></span></div><div>tldr</div></div> |
| 150 | <p class="hc-prompt">echo $VERDICT</p> |
| 151 | <div class="hc-big">7.8<span style="font-size:60px;color:var(--hc-ink2)">/ 10</span></div> |
| 152 | <p class="hc-lede" style="margin-top:14px">值得装,还不值得完全依赖。</p> |
| 153 | <div class="hc-grid-2" style="margin-top:24px"> |
| 154 | <div class="hc-card"><div class="lbl">+ strong points</div><div class="desc">• rust 本体冷启快<br>• trace 可读性极强<br>• diff 审核友好,commit message 也写得合格</div></div> |
| 155 | <div class="hc-card"><div class="lbl">- weak points</div><div class="desc">• plan 阶段偶尔跳步<br>• 超 50k LoC 仓库会 OOM<br>• MCP 配置需要手动塞 env</div></div> |
| 156 | </div> |
| 157 | <div class="hc-footer"><span>verdict · honest</span><span>06 / 08</span></div> |
| 158 | </section> |
| 159 | |
| 160 | <!-- 7. CTA --> |
| 161 | <section class="slide"> |
| 162 | <div class="hc-grid"></div> |
| 163 | <div class="hc-scanlines"></div> |
| 164 | <div class="hc-chrome"><div class="dots"><span></span><span></span><span></span></div><div>install</div></div> |
| 165 | <h2 class="hc-h2">想自己跑一遍?</h2> |
| 166 | <p class="hc-lede">三条命令,不到 5 分钟就能看见它干第一件事。</p> |
| 167 | <pre class="hc-codebox" style="margin-top:22px"><span class="cm"># 1. install</span> |
| 168 | <span class="kw">$</span> brew install hermes-agent/tap/hermes |
| 169 | |
| 170 | <span class="cm"># 2. auth (先准备好 anthropic api key)</span> |
| 171 | <span class="kw">$</span> hermes auth login |
| 172 | |
| 173 | <span class="cm"># 3. first task</span> |
| 174 | <span class="kw">$</span> cd ~/your-repo && hermes run <span class="st">"add a CHANGELOG.md from git log"</span></pre> |
| 175 | <div style="margin-top:26px"> |
| 176 | <span class="hc-tag">brew-ready</span> |
| 177 | <span class="hc-tag">opus-4.6</span> |
| 178 | <span class="hc-tag amber">needs-api-key</span> |
| 179 | </div> |
| 180 | <div class="hc-footer"><span>try-it-now</span><span>07 / 08</span></div> |
| 181 | </section> |
| 182 | |
| 183 | <!-- 8. THANKS --> |
| 184 | <section class="slide"> |
| 185 | <div class="hc-grid"></div> |
| 186 | <div class="hc-scanlines"></div> |
| 187 | <div class="hc-chrome"><div class="dots"><span></span><span></span><span></span></div><div>EOF</div></div> |
| 188 | <div style="margin:auto 0"> |
| 189 | <p class="hc-prompt">exit 0</p> |
| 190 | <h1 class="hc-h1" style="font-size:120px">// thanks<span class="hc-cursor"></span></h1> |
| 191 | <p class="hc-lede">完整 trace、48 个任务的 PR 列表、benchmark 脚本都在 <span style="color:var(--hc-amber)">github.com/lewis/hermes-review</span></p> |
| 192 | </div> |
| 193 | <div class="hc-footer"><span>session closed</span><span>08 / 08</span></div> |
| 194 | </section> |
| 195 | |
| 196 | </div> |
| 197 | <script src="../../../assets/runtime.js"></script> |
| 198 | </body> |
| 199 | </html> |
| 200 |