Files
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

421 lines
27 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. OpenCode | Comparison</title>
<meta name="description" content="OpenCode is an open-source TUI coding assistant with 75+ providers, SQLite history, embedded WebUI, and 30+ community plugins. Here's how it compares to Hermes." />
<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{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)}
main{padding-top:var(--nav-height)}
.hero{padding:60px 24px 48px;background:var(--bg-primary);position:relative;overflow:hidden}
.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{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}
.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{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-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-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{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)}
.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-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-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)}
.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)}
/* ── 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">
<div class="breadcrumb">
<a href="../index.html">Hermes</a>
<span class="breadcrumb-sep">/</span>
<a href="../index.html#compare">Comparisons</a>
<span class="breadcrumb-sep">/</span>
<span>vs. OpenCode</span>
</div>
<div class="page-label">Comparison</div>
<h1 class="page-title">Hermes vs. OpenCode</h1>
<p class="page-sub">OpenCode is an open-source TUI coding assistant with 75+ providers, SQLite history, embedded WebUI, and 30+ community plugins. Here's how it compares.</p>
<div class="verdict">
<div class="verdict-icon">🖥️</div>
<div class="verdict-text">
<strong>Different tools.</strong>
<p>OpenCode is a capable coding TUI with excellent provider coverage. Hermes is a persistent server agent. OpenCode has no first-party scheduling, messaging, or automatic cross-session memory.</p>
</div>
</div>
<div class="feature-compare">
<div class="fc-col hermes">
<div class="fc-col-label">You're here</div>
<div class="fc-col-name">Hermes</div>
<div class="fc-row"><span class="fc-key">Persistent memory (automatic)</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 yes">Yes, automatic</span></div>
<div class="fc-row"><span class="fc-key">Scheduled jobs</span><span class="fc-val yes">Yes, self-hosted</span></div>
<div class="fc-row"><span class="fc-key">Messaging (first-party)</span><span class="fc-val yes">Yes, 15+</span></div>
<div class="fc-row"><span class="fc-key">Provider support</span><span class="fc-val yes">Yes, many</span></div>
<div class="fc-row"><span class="fc-key">Web UI</span><span class="fc-val yes">Yes, self-hosted</span></div>
<div class="fc-row"><span class="fc-key">Mobile access</span><span class="fc-val yes">Yes (via messaging)</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">CLAUDE.md support</span><span class="fc-val partial">AGENTS.md</span></div>
<div class="fc-row"><span class="fc-key">GitHub Copilot integration</span><span class="fc-val no">N/A</span></div>
<div class="fc-row"><span class="fc-key">Memory inspectability</span><span class="fc-val yes">Yes, markdown</span></div>
</div>
<div class="fc-col">
<div class="fc-col-label">Comparing</div>
<div class="fc-col-name">OpenCode</div>
<div class="fc-row"><span class="fc-key">Persistent memory (automatic)</span><span class="fc-val partial">Partial (SQLite + AGENTS.md)</span></div>
<div class="fc-row"><span class="fc-key">Self-improving skills</span><span class="fc-val partial">30+ community plugins</span></div>
<div class="fc-row"><span class="fc-key">Scheduled jobs</span><span class="fc-val no">No (community plugin only)</span></div>
<div class="fc-row"><span class="fc-key">Messaging (first-party)</span><span class="fc-val no">Community only (Telegram/Slack/Discord/Teams)</span></div>
<div class="fc-row"><span class="fc-key">Provider support</span><span class="fc-val yes">75+ providers</span></div>
<div class="fc-row"><span class="fc-key">Web UI</span><span class="fc-val yes">Yes (embedded + desktop app)</span></div>
<div class="fc-row"><span class="fc-key">Mobile access</span><span class="fc-val no">No</span></div>
<div class="fc-row"><span class="fc-key">Open source</span><span class="fc-val yes">Yes</span></div>
<div class="fc-row"><span class="fc-key">CLAUDE.md support</span><span class="fc-val yes">Yes (AGENTS.md + CLAUDE.md fallback)</span></div>
<div class="fc-row"><span class="fc-key">GitHub Copilot integration</span><span class="fc-val yes">Yes (official, Jan 2026)</span></div>
<div class="fc-row"><span class="fc-key">Memory inspectability</span><span class="fc-val partial">SQLite history</span></div>
</div>
</div>
<!-- Compare nav pills -->
<div class="compare-nav">
<div class="compare-nav-label">More comparisons</div>
<a href="openclaw.html" class="cpill">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 active">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>
</div>
<!-- Narrative -->
<div class="section section-alt">
<div class="container">
<h2 class="section-title">The details</h2>
<p class="section-body">OpenCode is impressive on provider breadth and extensibility. The gaps are in first-party persistence, scheduling, and messaging.</p>
<div class="narrative">
<h3>What OpenCode is</h3>
<p>OpenCode is a <strong>terminal UI (TUI) coding assistant</strong> with an embedded WebUI and optional desktop application. It stores conversation history in SQLite, supports AGENTS.md and CLAUDE.md for project context, and as of January 2026 integrates directly with <strong>GitHub Copilot</strong> as an official provider. Pricing tiers include OpenCode Go at $10/month and a Zen tier for heavier usage. The 75+ provider count makes it arguably the most provider-agnostic tool in the TUI coding space.</p>
<h3>Community plugins vs. automatic skills</h3>
<p>OpenCode has <strong>30+ community plugins</strong> that can extend its behaviour — including plugins for Telegram, Slack, Discord, and Teams messaging, and at least one community scheduling plugin. These require manual discovery, installation, and configuration. Hermes takes the opposite approach: the agent <strong>automatically writes new skill modules</strong> based on what it encounters, without any manual plugin management. One is an ecosystem you curate; the other is a system that improves itself.</p>
<h3>Scheduling and messaging: the first-party gap</h3>
<p>Neither scheduling nor messaging is first-party in OpenCode — they exist only through community plugins, which means variable quality, maintenance uncertainty, and manual setup. Hermes ships <strong>scheduling and messaging as core features</strong>: 15+ messaging platforms (Slack, Telegram, Discord, WhatsApp, and more) and cron-based scheduling are built in and maintained by the same team that builds the agent. For production deployments where reliability matters, that distinction is significant.</p>
<h3>Provider coverage: a genuine OpenCode win</h3>
<p>75+ providers is genuinely the widest in the space. If your team uses an uncommon provider — regional cloud APIs, niche inference endpoints, internal model servers — OpenCode is more likely to have native support. Hermes supports multiple providers but does not match this breadth. If provider coverage is the primary constraint, OpenCode has an advantage here.</p>
<h3>Mobile access</h3>
<p>OpenCode has no mobile surface. The TUI and embedded WebUI are desktop-only. Hermes is reachable from any messaging app that has a mobile client — Telegram, WhatsApp, Slack, and others — so you can query your agent, trigger jobs, and receive results from a phone without any special setup. For on-call engineers or anyone who needs agent access away from a desk, this is a meaningful difference.</p>
</div>
</div>
</div>
<!-- Full table -->
<div class="section">
<div class="container">
<h2 class="section-title">Full feature comparison</h2>
<div class="table-wrap">
<table>
<thead>
<tr>
<th>Feature</th>
<th>OpenCode</th>
<th>Hermes</th>
</tr>
</thead>
<tbody>
<tr class="hl"><td>Persistent memory</td><td class="c-partial">Partial (SQLite + AGENTS.md)</td><td class="c-yes">Yes, automatic</td></tr>
<tr><td>Self-improving skills</td><td class="c-partial">30+ community plugins</td><td class="c-yes">Yes, automatic</td></tr>
<tr class="hl"><td>Scheduling</td><td class="c-no">Community plugin only</td><td class="c-yes">Yes, self-hosted</td></tr>
<tr class="hl"><td>Messaging</td><td class="c-no">Community only</td><td class="c-yes">Yes, 15+ first-party</td></tr>
<tr><td>Mobile access</td><td class="c-no">No</td><td class="c-yes">Yes (via messaging)</td></tr>
<tr><td>Provider support</td><td class="c-yes">75+ providers</td><td class="c-yes">Yes, many</td></tr>
<tr><td>Web UI</td><td class="c-yes">Yes (embedded + desktop)</td><td class="c-yes">Yes, self-hosted</td></tr>
<tr><td>Desktop app</td><td class="c-yes">Yes</td><td class="c-no">No (web + CLI)</td></tr>
<tr><td>Open source</td><td class="c-yes">Yes</td><td class="c-yes">Yes, MIT</td></tr>
<tr><td>CLAUDE.md support</td><td class="c-yes">Yes (AGENTS.md + CLAUDE.md)</td><td class="c-partial">AGENTS.md</td></tr>
<tr><td>Community plugins</td><td class="c-yes">30+</td><td class="c-no">N/A (built-in)</td></tr>
<tr><td>Always-on process</td><td class="c-no">No (session-based)</td><td class="c-yes">Yes, server daemon</td></tr>
<tr><td>Memory inspectability</td><td class="c-partial">SQLite history</td><td class="c-yes">Yes, markdown</td></tr>
</tbody>
</table>
</div>
<!-- Who section -->
<h2 class="section-title" style="margin-top:48px">Which should you choose?</h2>
<div class="who-grid">
<div class="who-card choose-hermes">
<div class="who-card-label">Choose Hermes if you need</div>
<ul>
<li><strong>Automatic cross-session memory</strong> with no manual management</li>
<li><strong>First-party scheduling and messaging</strong> — reliable, built-in</li>
<li><strong>Mobile access</strong> via messaging apps</li>
<li>An agent that <strong>auto-improves its own skills</strong></li>
<li>A persistent always-on server process</li>
</ul>
</div>
<div class="who-card choose-other">
<div class="who-card-label">Choose OpenCode if you need</div>
<ul>
<li>The <strong>widest provider coverage</strong> — 75+ including niche endpoints</li>
<li>A polished <strong>TUI experience</strong> in the terminal</li>
<li><strong>CLAUDE.md compatibility</strong> for Claude-specific project context</li>
<li>Official <strong>GitHub Copilot integration</strong> (Jan 2026)</li>
<li>Subscription tiers (Go $10/mo, Zen) with managed billing</li>
</ul>
</div>
</div>
</div>
</div>
<!-- CTA -->
<div class="cta-strip">
<div class="container">
<h2>Try Hermes for free</h2>
<p>Self-hosted, open source, and running in minutes. No cloud account required.</p>
<div class="cta-btns">
<a href="https://hermes-agent.nousresearch.com/docs/getting-started/installation" class="btn-primary" target="_blank" rel="noopener">Get started →</a>
<a href="https://github.com/nousresearch/hermes" class="btn-secondary" target="_blank" rel="noopener">View on GitHub</a>
</div>
</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'));
// Hamburger
var cHam = document.getElementById('compare-hamburger');
var cMenu = document.getElementById('compare-mobile-menu');
if (cHam && cMenu) {
cHam.addEventListener('click', function() {
var open = cMenu.classList.toggle('open');
cHam.classList.toggle('open', open);
cHam.setAttribute('aria-expanded', open);
});
document.addEventListener('click', function(e) {
if (!cHam.contains(e.target) && !cMenu.contains(e.target)) {
cMenu.classList.remove('open');
cHam.classList.remove('open');
cHam.setAttribute('aria-expanded', 'false');
}
});
}
</script>
</body>
</html>