Files
hermes-webui/compare/openclaw.html
T
Hermes Agent 0b0671a3e3 fix(mobile): hide .nav-back entirely on mobile instead of hiding just spans
On mobile (≤640px), .nav-back span{display:none} hid both spans inside
the back link, leaving an empty bordered pill shape visible next to the
logo — the 'broken little thing' users reported seeing to the right of  Hermes.

Fix: hide .nav-back itself. The hamburger menu provides the back navigation
link, so no information is lost.

Applies to all 13 sub-pages: memory, models, eli5, community, and all 9 compare pages.
2026-04-16 04:27:08 +00:00

489 lines
32 KiB
HTML

<!DOCTYPE html>
<html lang="en" data-theme="dark">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Hermes vs. OpenClaw | Comparison</title>
<meta name="description" content="Both are open-source, self-hosted, always-on agents with persistent memory, cron scheduling, and messaging. The honest breakdown." />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
<style>
:root {
--bg-primary: #0d1117;
--bg-secondary: #161b22;
--bg-tertiary: #21262d;
--bg-card: #161b22;
--bg-card-hover: #1c2128;
--border: #30363d;
--border-hover: #484f58;
--text-primary: #e6edf3;
--text-secondary: #8b949e;
--text-muted: #6e7681;
--accent: #f0a500;
--accent-dim: #c88800;
--accent-glow: rgba(240,165,0,0.15);
--accent-subtle: rgba(240,165,0,0.08);
--green: #3fb950;
--red: #f85149;
--blue: #58a6ff;
--purple: #bc8cff;
--nav-height: 64px;
--radius: 8px;
--radius-lg: 12px;
--shadow: 0 1px 3px rgba(0,0,0,0.4),0 4px 16px rgba(0,0,0,0.3);
}
[data-theme="light"] {
--bg-primary: #ffffff;
--bg-secondary: #f6f8fa;
--bg-tertiary: #eaeef2;
--bg-card: #ffffff;
--bg-card-hover: #f6f8fa;
--border: #d0d7de;
--border-hover: #9198a1;
--text-primary: #1f2328;
--text-secondary: #656d76;
--text-muted: #9198a1;
--accent: #c07800;
--accent-dim: #a06000;
--accent-glow: rgba(192,120,0,0.12);
--accent-subtle: rgba(192,120,0,0.06);
--green: #1a7f37;
--red: #cf222e;
--blue: #0969da;
--purple: #7c3aed;
--shadow: 0 1px 3px rgba(0,0,0,0.1),0 4px 16px rgba(0,0,0,0.06);
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;font-size:16px;overflow-x:hidden}
body{font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;background:var(--bg-primary);color:var(--text-primary);line-height:1.6;transition:background 0.2s,color 0.2s;-webkit-font-smoothing:antialiased}
a{color:var(--accent);text-decoration:none;transition:color 0.15s}
a:hover{color:var(--accent-dim)}
img{max-width:100%}
::-webkit-scrollbar{width:6px;height:6px}
::-webkit-scrollbar-track{background:var(--bg-secondary)}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
/* Nav */
#nav{position:fixed;top:0;left:0;right:0;height:var(--nav-height);background:rgba(13,17,23,0.92);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border);z-index:1000}
[data-theme="light"] #nav{background:rgba(255,255,255,0.92)}
.nav-inner{max-width:1100px;margin:0 auto;padding:0 24px;height:100%;display:flex;align-items:center;justify-content:space-between;gap:16px}
.nav-logo{display:flex;align-items:center;gap:10px;font-weight:700;font-size:1.1rem;color:var(--text-primary);text-decoration:none;flex-shrink:0}
.nav-logo-icon{width:32px;height:32px;background:linear-gradient(135deg,var(--accent),var(--accent-dim));border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:18px;line-height:1}
.nav-back{display:flex;align-items:center;gap:6px;color:var(--text-secondary);font-size:0.875rem;font-weight:500;padding:6px 12px;border-radius:6px;transition:color 0.15s,background 0.15s;text-decoration:none}
.nav-back:hover{color:var(--text-primary);background:var(--bg-tertiary)}
.btn-theme{background:none;border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;padding:7px 10px;border-radius:6px;font-size:15px;line-height:1;transition:border-color 0.15s,color 0.15s,background 0.15s}
.btn-theme:hover{border-color:var(--border-hover);color:var(--text-primary);background:var(--bg-tertiary)}
.btn-cta{background:var(--accent);color:#000;font-size:0.8rem;font-weight:600;padding:7px 14px;border-radius:6px;border:none;cursor:pointer;text-decoration:none;display:inline-block;transition:background 0.15s,transform 0.1s;white-space:nowrap}
.btn-cta:hover{background:var(--accent-dim);color:#000;transform:translateY(-1px)}
/* Layout */
main{padding-top:var(--nav-height)}
.hero{padding:60px 24px 48px;background:var(--bg-primary)}
.hero::before{content:'';position:absolute;top:-200px;left:50%;transform:translateX(-50%);width:800px;height:400px;background:radial-gradient(ellipse at center,var(--accent-glow) 0%,transparent 70%);pointer-events:none}
.container{max-width:1100px;margin:0 auto;position:relative}
.section{padding:64px 24px}
.section-alt{background:var(--bg-secondary)}
/* Breadcrumb */
.breadcrumb{display:flex;align-items:center;gap:8px;font-size:0.8rem;color:var(--text-muted);margin-bottom:24px;flex-wrap:wrap}
.breadcrumb a{color:var(--text-muted)}
.breadcrumb a:hover{color:var(--accent)}
.breadcrumb-sep{opacity:0.4}
/* Hero content */
.page-label{font-size:0.75rem;font-weight:600;letter-spacing:0.1em;text-transform:uppercase;color:var(--accent);margin-bottom:12px}
.page-title{font-size:clamp(2rem,5vw,3.2rem);font-weight:800;line-height:1.1;letter-spacing:-0.02em;margin-bottom:16px}
.page-sub{font-size:1.05rem;color:var(--text-secondary);max-width:680px;line-height:1.7;margin-bottom:32px}
/* Verdict banner */
.verdict{display:flex;align-items:flex-start;gap:16px;background:var(--accent-subtle);border:1px solid rgba(240,165,0,0.2);border-radius:var(--radius-lg);padding:20px 24px;margin-bottom:48px}
[data-theme="light"] .verdict{border-color:rgba(192,120,0,0.2)}
.verdict-icon{font-size:1.6rem;flex-shrink:0;line-height:1}
.verdict-text strong{color:var(--text-primary);display:block;margin-bottom:4px;font-size:1rem}
.verdict-text p{color:var(--text-secondary);font-size:0.9rem;line-height:1.6;margin:0}
/* Section titles */
.section-title{font-size:clamp(1.4rem,3vw,1.9rem);font-weight:700;margin-bottom:8px;color:var(--text-primary)}
.section-body{font-size:1rem;color:var(--text-secondary);max-width:720px;line-height:1.7;margin-bottom:32px}
/* Feature comparison grid */
.feature-compare{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:40px}
@media(max-width:700px){.feature-compare{grid-template-columns:1fr}}
.fc-col{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px}
.fc-col.hermes{border-color:var(--accent);border-width:2px}
.fc-col-label{font-size:0.75rem;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;margin-bottom:16px;color:var(--text-muted)}
.fc-col.hermes .fc-col-label{color:var(--accent)}
.fc-col-name{font-size:1.1rem;font-weight:700;color:var(--text-primary);margin-bottom:20px}
.fc-row{display:flex;align-items:flex-start;gap:10px;padding:9px 0;border-bottom:1px solid var(--border)}
.fc-row:last-child{border-bottom:none}
.fc-key{flex:1;font-size:0.875rem;color:var(--text-secondary)}
.fc-val{font-size:0.875rem;font-weight:500;text-align:right;min-width:60px}
.fc-val.yes{color:var(--green)}
.fc-val.no{color:var(--text-muted)}
.fc-val.partial{color:var(--accent)}
.fc-val.preview{color:var(--purple)}
.fc-val.cloud{color:var(--blue)}
/* Narrative sections */
.narrative{max-width:780px;min-width:0;word-break:break-word}
.narrative h3{font-size:1.1rem;font-weight:700;color:var(--text-primary);margin:32px 0 10px}
.narrative h3:first-child{margin-top:0}
.narrative p{font-size:0.975rem;color:var(--text-secondary);line-height:1.75;margin-bottom:16px}
.narrative ul{padding-left:20px;margin-bottom:16px}
.narrative li{font-size:0.975rem;color:var(--text-secondary);line-height:1.7;margin-bottom:6px}
.narrative strong{color:var(--text-primary)}
.narrative a{color:var(--accent)}
/* Full comparison table */
.table-wrap{overflow-x:auto;border-radius:var(--radius-lg);border:1px solid var(--border);margin:24px 0 40px}
table{width:100%;border-collapse:collapse;font-size:0.875rem}
thead th{background:var(--bg-tertiary);color:var(--text-secondary);font-weight:600;font-size:0.78rem;letter-spacing:0.04em;text-transform:uppercase;padding:12px 16px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}
thead th:first-child{color:var(--text-primary)}
tbody tr{border-bottom:1px solid var(--border);transition:background 0.1s}
tbody tr:last-child{border-bottom:none}
tbody tr:hover{background:var(--bg-card-hover)}
tbody tr.hl{background:var(--accent-subtle)}
tbody tr.hl:hover{background:rgba(240,165,0,0.12)}
tbody td{padding:12px 16px;color:var(--text-secondary);vertical-align:middle}
tbody td:first-child{font-weight:600;color:var(--text-primary);white-space:nowrap}
.c-yes{color:var(--green);font-weight:600}
.c-no{color:var(--text-muted);font-size:0.82rem}
.c-partial{color:var(--accent);font-size:0.82rem}
.c-cloud{color:var(--blue);font-size:0.82rem}
.c-prev{color:var(--purple);font-size:0.82rem}
/* Who section */
.who-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:8px}
@media(max-width:600px){.who-grid{grid-template-columns:1fr}}
.who-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px}
.who-card.choose-hermes{border-color:var(--green)}
.who-card.choose-other{border-color:var(--border)}
.who-card-label{font-size:0.72rem;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;margin-bottom:10px;color:var(--text-muted)}
.who-card.choose-hermes .who-card-label{color:var(--green)}
.who-card ul{padding-left:18px}
.who-card li{font-size:0.9rem;color:var(--text-secondary);line-height:1.65;margin-bottom:6px}
.who-card strong{color:var(--text-primary)}
/* CTA footer */
.cta-strip{background:var(--bg-secondary);border-top:1px solid var(--border);padding:40px 24px;text-align:center}
.cta-strip h2{font-size:1.4rem;font-weight:700;margin-bottom:8px}
.cta-strip p{color:var(--text-secondary);margin-bottom:24px;font-size:0.975rem}
.cta-btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.btn-primary{display:inline-flex;align-items:center;gap:6px;background:var(--accent);color:#000;font-weight:600;font-size:0.95rem;padding:12px 22px;border-radius:8px;transition:background 0.15s,transform 0.1s}
.btn-primary:hover{background:var(--accent-dim);color:#000;transform:translateY(-1px)}
.btn-secondary{display:inline-flex;align-items:center;gap:6px;background:var(--bg-card);border:1px solid var(--border);color:var(--text-primary);font-weight:500;font-size:0.95rem;padding:12px 22px;border-radius:8px;transition:border-color 0.15s,background 0.15s}
.btn-secondary:hover{border-color:var(--border-hover);background:var(--bg-card-hover);color:var(--text-primary)}
/* Nav between compare pages */
.compare-nav{display:flex;flex-wrap:wrap;gap:8px;margin-top:40px;padding-top:32px;border-top:1px solid var(--border)}
.compare-nav-label{width:100%;font-size:0.75rem;font-weight:600;letter-spacing:0.1em;text-transform:uppercase;color:var(--text-muted);margin-bottom:4px}
.cpill{display:inline-block;padding:6px 14px;border:1px solid var(--border);border-radius:100px;font-size:0.82rem;font-weight:500;color:var(--text-secondary);transition:border-color 0.15s,color 0.15s,background 0.15s}
.cpill:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-subtle)}
.cpill.active{border-color:var(--accent);color:var(--accent);background:var(--accent-subtle)}
/* Responsive */
/* ── Mobile nav: prevent 3-item nav overflow ── */
@media(max-width:640px){
.nav-back{display:none}
.btn-cta{display:none}
.nav-inner{gap:8px}
}
@media(max-width:768px){
.section{padding:48px 16px}
.hero{padding:48px 16px 36px}
.feature-compare{grid-template-columns:1fr}
}
/* HAMBURGER */
.hamburger{display:none;flex-direction:column;gap:5px;cursor:pointer;padding:6px;border:1px solid var(--border);border-radius:6px;background:none;transition:border-color 0.15s;flex-shrink:0}
.hamburger:hover{border-color:var(--accent)}
.hamburger span{display:block;width:20px;height:2px;background:var(--text-secondary);border-radius:2px;transition:transform 0.2s,opacity 0.2s}
.hamburger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.hamburger.open span:nth-child(2){opacity:0}
.hamburger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
#compare-mobile-menu{display:none;position:fixed;top:var(--nav-height,64px);left:0;right:0;background:var(--bg-secondary,#161b22);border-bottom:1px solid var(--border,#30363d);padding:16px 24px;z-index:999;flex-direction:column;gap:4px}
#compare-mobile-menu.open{display:flex}
#compare-mobile-menu a{color:var(--text-secondary,#8b949e);font-size:0.95rem;font-weight:500;padding:10px 12px;border-radius:6px;text-decoration:none;transition:color 0.15s,background 0.15s}
#compare-mobile-menu a:hover{color:var(--text-primary,#e6edf3);background:var(--bg-tertiary,#21262d)}
#compare-mobile-menu a.accent{color:var(--accent,#f0a500)}
#compare-mobile-menu .menu-divider{height:1px;background:var(--border,#30363d);margin:4px 0}
@media(max-width:640px){
.hamburger{display:flex}
.btn-cta{display:none}
.nav-back{display:none}
}
</style>
</head>
<body>
<nav id="nav">
<div class="nav-inner">
<a href="../index.html" class="nav-logo">
<div class="nav-logo-icon"></div>
Hermes
</a>
<a href="../index.html#compare" class="nav-back"><span>← All comparisons</span></a>
<div style="display:flex;align-items:center;gap:8px;flex-shrink:0">
<button class="btn-theme" id="theme-toggle" aria-label="Toggle theme">🌙</button>
<a href="https://hermes-agent.nousresearch.com/docs/getting-started/installation" class="btn-cta" target="_blank" rel="noopener">Get started →</a>
</div>
</div>
<button class="hamburger" id="compare-hamburger" aria-label="Open menu" aria-expanded="false"><span></span><span></span><span></span></button>
</nav>
<div id="compare-mobile-menu">
<a href="../index.html">⚡ Hermes Home</a>
<a href="../index.html#compare">← All comparisons</a>
<div class="menu-divider"></div>
<a href="../eli5/" class="accent">🧠 ELI5</a>
<a href="../models/" class="accent">🤖 Best Models</a>
<a href="../community/" class="accent">🌎 Community</a>
<a href="https://hermes-agent.nousresearch.com/docs/getting-started/installation" target="_blank" rel="noopener" class="accent">Get started →</a>
</div>
<main>
<div class="hero">
<div class="container">
<nav class="breadcrumb" aria-label="Breadcrumb">
<a href="../index.html">Hermes</a>
<span class="breadcrumb-sep">/</span>
<a href="../index.html#compare">Compare</a>
<span class="breadcrumb-sep">/</span>
<span>OpenClaw</span>
</nav>
<div class="page-label">Head-to-head comparison</div>
<h1 class="page-title">Hermes vs. OpenClaw</h1>
<p class="page-sub">Both are open-source, self-hosted, always-on agents with persistent memory, cron scheduling, and messaging. The honest breakdown.</p>
<div class="verdict">
<div class="verdict-icon">⚖️</div>
<div class="verdict-text">
<strong>Verdict</strong>
<p>Both are solid choices depending on priorities. OpenClaw has broader messaging and a larger community. Hermes has better stability, automatic self-improving skills, and the Python/ML ecosystem.</p>
</div>
</div>
<div class="feature-compare">
<div class="fc-col hermes">
<div class="fc-col-label">You are here</div>
<div class="fc-col-name">Hermes</div>
<div class="fc-row"><span class="fc-key">Persistent memory</span><span class="fc-val yes">Yes, automatic</span></div>
<div class="fc-row"><span class="fc-key">Self-improving skills</span><span class="fc-val yes">Yes, auto-written</span></div>
<div class="fc-row"><span class="fc-key">Scheduled jobs</span><span class="fc-val yes">Yes, self-hosted cron</span></div>
<div class="fc-row"><span class="fc-key">Messaging platforms</span><span class="fc-val yes">15+ platforms</span></div>
<div class="fc-row"><span class="fc-key">Browser/computer control</span><span class="fc-val partial">Via shell</span></div>
<div class="fc-row"><span class="fc-key">Voice wake words</span><span class="fc-val no">No</span></div>
<div class="fc-row"><span class="fc-key">Python/ML ecosystem</span><span class="fc-val yes">Yes</span></div>
<div class="fc-row"><span class="fc-key">Provider-agnostic</span><span class="fc-val yes">Yes</span></div>
<div class="fc-row"><span class="fc-key">Open source</span><span class="fc-val yes">Yes, MIT</span></div>
<div class="fc-row"><span class="fc-key">Multi-profile support</span><span class="fc-val yes">Yes, first-class</span></div>
<div class="fc-row"><span class="fc-key">Update reliability</span><span class="fc-val yes">High</span></div>
<div class="fc-row"><span class="fc-key">Orchestrates coding agents</span><span class="fc-val yes">Yes (Claude Code, Codex)</span></div>
</div>
<div class="fc-col">
<div class="fc-col-label">Comparing against</div>
<div class="fc-col-name">OpenClaw</div>
<div class="fc-row"><span class="fc-key">Persistent memory</span><span class="fc-val yes">Yes</span></div>
<div class="fc-row"><span class="fc-key">Self-improving skills</span><span class="fc-val partial">Partial (AI can generate; not default)</span></div>
<div class="fc-row"><span class="fc-key">Scheduled jobs</span><span class="fc-val yes">Yes, self-hosted cron</span></div>
<div class="fc-row"><span class="fc-key">Messaging platforms</span><span class="fc-val yes">24+ (incl. iMessage, LINE, WeChat)</span></div>
<div class="fc-row"><span class="fc-key">Browser/computer control</span><span class="fc-val yes">Yes, native Chrome CDP</span></div>
<div class="fc-row"><span class="fc-key">Voice wake words</span><span class="fc-val yes">Yes (macOS/iOS)</span></div>
<div class="fc-row"><span class="fc-key">Python/ML ecosystem</span><span class="fc-val no">No (Node.js)</span></div>
<div class="fc-row"><span class="fc-key">Provider-agnostic</span><span class="fc-val yes">Yes</span></div>
<div class="fc-row"><span class="fc-key">Open source</span><span class="fc-val yes">Yes, MIT</span></div>
<div class="fc-row"><span class="fc-key">Multi-profile support</span><span class="fc-val partial">Via binding-rule routing</span></div>
<div class="fc-row"><span class="fc-key">Update reliability</span><span class="fc-val partial">Moderate (documented regressions)</span></div>
<div class="fc-row"><span class="fc-key">Orchestrates coding agents</span><span class="fc-val no">No</span></div>
</div>
</div>
</div>
</div>
<!-- Narrative -->
<section class="section">
<div class="container">
<h2 class="section-title">Deep dive</h2>
<p class="section-body">Hermes and OpenClaw share more DNA than any other two agents in this space. Both are fully self-hosted, both run persistent memory, both offer cron scheduling, and both aim to be always-on personal agents rather than one-shot CLI tools. The differences are real but nuanced.</p>
<div class="narrative">
<h3>The closest comparison in the space</h3>
<p>Of all the tools Hermes is compared against, OpenClaw is the most functionally similar. Both projects started from the same premise: a local agent that remembers you, runs on your own hardware, and connects to your messaging apps so you can interact naturally. Both support multiple LLM providers, both expose a web UI for memory inspection, and both ship with cron-based job scheduling that doesn't require a cloud subscription or an open browser tab.</p>
<p>This overlap means the decision between them is genuinely a close call. If you're evaluating both, the right choice comes down to which specific gaps matter most to your workflow — messaging breadth, ecosystem language, or long-term stability under updates. This page attempts to be honest about both sides.</p>
<h3>Skills: two fundamentally different approaches</h3>
<p>OpenClaw has <strong>ClawHub</strong>, a marketplace of over 10,700 human-authored skill packages. It's a rich ecosystem where the community has pre-built integrations, automations, and agent behaviors you can install with a single command. The breadth is impressive and for many use cases you can find an existing skill rather than building from scratch.</p>
<p>Hermes takes a fundamentally different approach: there is no marketplace. Instead, Hermes <strong>automatically writes its own skills</strong> as you work with it. When you accomplish something novel, Hermes encodes that behavior as a reusable skill stored locally. Over time, your agent becomes specifically tuned to how you work, without you needing to browse, install, vet, or maintain third-party packages. There is no dependency on an external ecosystem staying healthy or well-maintained — your skills live in your repo.</p>
<p>The tradeoff is clear: ClawHub gives you immediate breadth from day one; Hermes gives you compounding personalization that accumulates automatically. If you want an out-of-the-box library of pre-built automations, OpenClaw has the edge. If you want an agent that gets incrementally better at your specific workflows with no manual curation, Hermes wins.</p>
<h3>Messaging coverage</h3>
<p>This is an area where <strong>OpenClaw has a clear lead</strong>. Its Gateway architecture supports 24+ messaging platforms including iMessage, LINE, WeChat, Microsoft Teams, Google Chat, Feishu, IRC, and Nextcloud Talk — platforms that cover both Western and East Asian markets comprehensively. If iMessage on macOS/iOS is a hard requirement, OpenClaw is currently the stronger option.</p>
<p>Hermes covers the major platforms used in most professional and personal contexts — Telegram, WhatsApp, Slack, Discord, and others — reaching 15+ integrations. The gap isn't in core coverage but in the long tail: regional platforms like LINE, WeChat, and Feishu, plus enterprise chat like Teams and Google Chat where OpenClaw has existing connectors. Hermes development is active and messaging integrations are expanding, but as of today OpenClaw's messaging breadth is broader.</p>
<h3>Stability and security</h3>
<p>Three independent security audits in 2026 raised concerns specifically about the ClawHub ecosystem. <strong>Koi Security</strong> identified 335 packages linked to the ClawHavoc malware campaign. <strong>Bitdefender</strong> found approximately 900 malicious packages in the ecosystem — roughly 20% of those scanned. <strong>Snyk's ToxicSkills</strong> report scanned around 4,000 packages and flagged a significant subset for vulnerabilities or supply-chain risks. OpenClaw's core maintainers have been responsive, but the marketplace model inherently creates a larger attack surface that individual audits can only partially address.</p>
<p>Beyond security, OpenClaw has had documented functional regressions, particularly in Telegram message handling that persisted through April 2026. These weren't permanent breakage, but they required manual workarounds for active users on those channels during affected versions.</p>
<p>Hermes has no third-party skill marketplace, which eliminates the supply-chain attack surface entirely. Skills are written and stored locally by the agent itself. There is no package registry to compromise. Update stability has been high; regressions in core functionality have not been a recurring issue.</p>
<h3>Architecture and ecosystem</h3>
<p>OpenClaw is built on <strong>Node.js and TypeScript</strong>. Its Gateway architecture uses an event-driven message bus that makes adding new connectors straightforward for JavaScript developers. The TypeScript ecosystem gives it strong typing for skill development and a large pool of existing npm packages to draw from for integrations. If your existing infrastructure and team are JavaScript-native, OpenClaw fits naturally.</p>
<p>Hermes is written in <strong>Python</strong> and its self-improving agent loop is designed to work natively with the Python/ML ecosystem. Integration with tools like LangChain, PyTorch, NumPy, Pandas, and the broader scientific Python stack is first-class. If you're doing any machine learning work, data analysis, or scientific computing and want your agent to interact with those workflows directly, Hermes has a significant ecosystem advantage. Python's dominance in AI research also means Hermes benefits from the latest model APIs, toolkits, and libraries as soon as they ship.</p>
</div>
</div>
</section>
<!-- Full table -->
<section class="section section-alt">
<div class="container">
<h2 class="section-title">Full feature comparison</h2>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>Feature</th>
<th>OpenClaw</th>
<th>Hermes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Persistent memory</td>
<td><span class="c-yes">Yes</span></td>
<td class="hl"><span class="c-yes">Yes, automatic</span></td>
</tr>
<tr class="hl">
<td>Self-improving skills</td>
<td><span class="c-partial">Partial — AI can generate; not default</span></td>
<td><span class="c-yes">Yes, auto-written from experience</span></td>
</tr>
<tr>
<td>Cron scheduling</td>
<td><span class="c-yes">Yes, self-hosted</span></td>
<td><span class="c-yes">Yes, self-hosted</span></td>
</tr>
<tr class="hl">
<td>Messaging platforms</td>
<td><span class="c-yes">24+ (iMessage, LINE, WeChat, Teams, Google Chat, Feishu, IRC, Nextcloud…)</span></td>
<td><span class="c-yes">15+ (Telegram, Slack, WhatsApp, Discord…)</span></td>
</tr>
<tr>
<td>Web UI</td>
<td><span class="c-yes">Yes</span></td>
<td><span class="c-yes">Yes</span></td>
</tr>
<tr class="hl">
<td>Browser control (native)</td>
<td><span class="c-yes">Yes, Chrome CDP</span></td>
<td><span class="c-partial">Via shell / scripting</span></td>
</tr>
<tr>
<td>Voice wake words</td>
<td><span class="c-yes">Yes (macOS/iOS)</span></td>
<td><span class="c-no">No</span></td>
</tr>
<tr class="hl">
<td>Python/ML ecosystem</td>
<td><span class="c-no">No (Node.js)</span></td>
<td><span class="c-yes">Yes, first-class</span></td>
</tr>
<tr>
<td>Provider-agnostic</td>
<td><span class="c-yes">Yes</span></td>
<td><span class="c-yes">Yes</span></td>
</tr>
<tr class="hl">
<td>Self-hosted</td>
<td><span class="c-yes">Yes</span></td>
<td><span class="c-yes">Yes</span></td>
</tr>
<tr>
<td>Open source</td>
<td><span class="c-yes">Yes, MIT</span></td>
<td><span class="c-yes">Yes, MIT</span></td>
</tr>
<tr class="hl">
<td>Memory inspectability</td>
<td><span class="c-partial">Partial</span></td>
<td><span class="c-yes">Yes, readable markdown files</span></td>
</tr>
<tr>
<td>Update reliability</td>
<td><span class="c-partial">Moderate (documented regressions)</span></td>
<td><span class="c-yes">High</span></td>
</tr>
<tr class="hl">
<td>Multi-profile support</td>
<td><span class="c-partial">Via binding-rule routing</span></td>
<td><span class="c-yes">Yes, first-class</span></td>
</tr>
<tr>
<td>Orchestrates coding agents</td>
<td><span class="c-no">No</span></td>
<td><span class="c-yes">Yes (Claude Code, Codex)</span></td>
</tr>
</tbody>
</table>
</div>
<!-- Who section -->
<h2 class="section-title" style="margin-top:40px">Who should choose what</h2>
<div class="who-grid">
<div class="who-card choose-hermes">
<div class="who-card-label">Choose Hermes if…</div>
<ul>
<li><strong>You want skills that accumulate automatically</strong> — no marketplace browsing, no installs, no maintenance</li>
<li><strong>Your work involves Python or ML</strong> — data science, model fine-tuning, scientific computing</li>
<li><strong>Deployment stability matters</strong> — you need a reliable daemon without surprise regressions</li>
<li><strong>Memory as readable files</strong> is important — inspect and edit memory in plain markdown</li>
<li><strong>You want to orchestrate Claude Code or Codex</strong> as sub-agents for coding tasks</li>
</ul>
</div>
<div class="who-card choose-other">
<div class="who-card-label">Choose OpenClaw if…</div>
<ul>
<li><strong>You need iMessage, LINE, WeChat, or Teams</strong> — OpenClaw's 24+ connectors cover platforms Hermes doesn't yet</li>
<li><strong>Native Chrome CDP browser control</strong> is a hard requirement for your automations</li>
<li><strong>Voice wake words on macOS/iOS</strong> are important to your workflow</li>
<li><strong>You want an immediate skill library</strong> from the ClawHub marketplace</li>
<li><strong>Node.js is your primary ecosystem</strong> and you prefer TypeScript development</li>
</ul>
</div>
</div>
<!-- Compare nav pills -->
<div class="compare-nav">
<div class="compare-nav-label">More comparisons</div>
<a href="openclaw.html" class="cpill active">vs. OpenClaw</a>
<a href="claude-code.html" class="cpill">vs. Claude Code</a>
<a href="codex.html" class="cpill">vs. Codex</a>
<a href="opencode.html" class="cpill">vs. OpenCode</a>
<a href="cursor.html" class="cpill">vs. Cursor</a>
<a href="copilot.html" class="cpill">vs. Copilot</a>
<a href="claude-ai.html" class="cpill">vs. Claude.ai</a>
<a href="chatgpt.html" class="cpill">vs. ChatGPT</a>
<a href="perplexity-computer.html" class="cpill">vs. Perplexity Computer</a>
</div>
</div>
</section>
<!-- CTA strip -->
<div class="cta-strip">
<h2>Ready to try Hermes?</h2>
<p>Self-hosted, open source, and yours to keep. Get running in minutes.</p>
<div class="cta-btns">
<a href="https://hermes-agent.nousresearch.com/docs/getting-started/installation" class="btn-primary" target="_blank" rel="noopener">Read the docs →</a>
<a href="../index.html#compare" class="btn-secondary">← Back to comparisons</a>
</div>
</div>
</main>
<script>
const html = document.documentElement;
const toggle = document.getElementById('theme-toggle');
function setTheme(t) {
html.setAttribute('data-theme', t);
localStorage.setItem('theme', t);
toggle.textContent = t === 'light' ? '🌙' : '☀️';
}
const saved = localStorage.getItem('theme');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (saved) setTheme(saved);
else if (!prefersDark) setTheme('light');
else setTheme('dark');
toggle.addEventListener('click', () => setTheme(html.getAttribute('data-theme') === 'dark' ? 'light' : 'dark'));
</script>
</body>
</html>