mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-27 12:10:40 +00:00
0b0671a3e3
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.
423 lines
27 KiB
HTML
423 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. Codex CLI | Comparison</title>
|
|
<meta name="description" content="Codex was rewritten in Rust, now spans CLI, IDE extension, desktop app with Automations, and Codex Cloud. 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. Codex CLI</span>
|
|
</div>
|
|
<div class="page-label">Comparison</div>
|
|
<h1 class="page-title">Hermes vs. Codex CLI</h1>
|
|
<p class="page-sub">Codex was rewritten in Rust, now spans CLI, IDE extension, desktop app with Automations, and Codex Cloud. Here's how it compares to Hermes.</p>
|
|
|
|
<div class="verdict">
|
|
<div class="verdict-icon">🖥️</div>
|
|
<div class="verdict-text">
|
|
<strong>Different scope.</strong>
|
|
<p>Codex CLI is a capable multi-provider coding agent. Hermes is a persistent server agent with self-hosted scheduling, messaging, and automatic memory. Complementary tools.</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</span><span class="fc-val yes">Yes, layered</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">Self-hosted CLI scheduling</span><span class="fc-val yes">Yes</span></div>
|
|
<div class="fc-row"><span class="fc-key">Desktop app scheduling</span><span class="fc-val partial">N/A</span></div>
|
|
<div class="fc-row"><span class="fc-key">Cloud execution</span><span class="fc-val partial">N/A</span></div>
|
|
<div class="fc-row"><span class="fc-key">Messaging integration</span><span class="fc-val yes">Yes, 15+ first-party</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">Provider support</span><span class="fc-val yes">Yes, many</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">Language/runtime</span><span class="fc-val yes">Python</span></div>
|
|
<div class="fc-row"><span class="fc-key">AGENTS.md support</span><span class="fc-val yes">Yes</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">Codex CLI</div>
|
|
<div class="fc-row"><span class="fc-key">Persistent memory</span><span class="fc-val partial">Partial (session history + AGENTS.md)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Self-improving skills</span><span class="fc-val no">No</span></div>
|
|
<div class="fc-row"><span class="fc-key">Self-hosted CLI scheduling</span><span class="fc-val no">No (CLI has none)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Desktop app scheduling</span><span class="fc-val partial">Yes (Automations feature)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Cloud execution</span><span class="fc-val yes">Yes (Codex Cloud)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Messaging integration</span><span class="fc-val no">None first-party</span></div>
|
|
<div class="fc-row"><span class="fc-key">Web UI</span><span class="fc-val no">No (CLI + desktop app)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Provider support</span><span class="fc-val yes">Yes, 12+ providers</span></div>
|
|
<div class="fc-row"><span class="fc-key">Open source</span><span class="fc-val yes">Yes, Apache 2.0</span></div>
|
|
<div class="fc-row"><span class="fc-key">Language/runtime</span><span class="fc-val partial">Rust (rewritten 2025)</span></div>
|
|
<div class="fc-row"><span class="fc-key">AGENTS.md support</span><span class="fc-val yes">Yes</span></div>
|
|
<div class="fc-row"><span class="fc-key">Memory inspectability</span><span class="fc-val partial">Partial (session 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 active">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>
|
|
</div>
|
|
|
|
<!-- Narrative -->
|
|
<div class="section section-alt">
|
|
<div class="container">
|
|
<h2 class="section-title">The details</h2>
|
|
<p class="section-body">Both tools are open source and coding-focused. But they serve different runtime contexts.</p>
|
|
<div class="narrative">
|
|
|
|
<h3>What Codex is now</h3>
|
|
<p>Codex CLI was rewritten in <strong>Rust in 2025</strong>, giving it a zero-dependency install and a noticeably faster startup. It now spans multiple surfaces: the command-line tool, an IDE extension, a desktop application, and <strong>Codex Cloud</strong> for managed execution. Provider support is genuinely broad — 12+ providers including Groq, Ollama, LM Studio, DeepSeek, xAI, and Azure OpenAI. If you want a coding agent that runs everywhere and touches every provider, Codex has made serious progress.</p>
|
|
|
|
<h3>Scheduling: Automations vs. cron</h3>
|
|
<p>The Codex <strong>desktop app includes an Automations feature</strong> that can run recurring tasks — but this is not the same as a headless server cron. The CLI itself has no scheduling capability. Hermes runs as a persistent server process and integrates directly with system-level scheduling, meaning jobs keep firing whether or not any GUI is open. For unattended background automation on a server, Hermes is designed for that; Codex's desktop Automations are designed for interactive desktop use.</p>
|
|
|
|
<h3>Memory model</h3>
|
|
<p>Codex supports <strong>session resumption and AGENTS.md</strong> — both genuinely useful for continuity within a project. But memory resets between separate sessions unless you explicitly resume. Hermes builds a <strong>living cross-project knowledge graph</strong>: facts, preferences, and learned context accumulate automatically across every project and conversation, and the agent can write new skill modules to extend its own capabilities. The difference is between remembering a conversation and permanently learning from it.</p>
|
|
|
|
<h3>Provider support: a genuine Codex advantage</h3>
|
|
<p>Codex's 12+ provider list — including Groq for speed, Ollama for local inference, LM Studio, DeepSeek, xAI, and Azure — is one of the widest in the CLI agent space. Hermes also supports multiple providers but the breadth here genuinely favors Codex for teams with complex provider requirements or budget constraints that push toward faster/cheaper models.</p>
|
|
|
|
<h3>Using Hermes and Codex together</h3>
|
|
<p>Because Hermes can spawn arbitrary subprocesses, it can orchestrate Codex as a sub-agent. A Hermes scheduled job can invoke <code>codex</code> for a specific coding subtask, collect the output, and incorporate results into Hermes's memory. This makes the two tools genuinely complementary rather than mutually exclusive: Hermes handles persistence, scheduling, and messaging; Codex handles the coding task with its provider of choice.</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>Codex CLI</th>
|
|
<th>Hermes</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="hl"><td>Persistent memory</td><td class="c-partial">Partial (session history + AGENTS.md)</td><td class="c-yes">Yes, layered</td></tr>
|
|
<tr><td>Self-improving skills</td><td class="c-no">No</td><td class="c-yes">Yes, automatic</td></tr>
|
|
<tr><td>CLI scheduling</td><td class="c-no">No</td><td class="c-yes">Yes, self-hosted cron</td></tr>
|
|
<tr><td>Desktop app Automations</td><td class="c-partial">Yes (desktop app)</td><td class="c-no">N/A</td></tr>
|
|
<tr><td>Cloud execution (Codex Cloud)</td><td class="c-yes">Yes</td><td class="c-no">N/A</td></tr>
|
|
<tr class="hl"><td>Messaging</td><td class="c-no">None first-party</td><td class="c-yes">Yes, 15+ platforms</td></tr>
|
|
<tr><td>Web UI</td><td class="c-no">No (CLI + desktop)</td><td class="c-yes">Yes, self-hosted</td></tr>
|
|
<tr><td>Provider support</td><td class="c-yes">12+ providers</td><td class="c-yes">Yes, many</td></tr>
|
|
<tr><td>Open source</td><td class="c-yes">Yes, Apache 2.0</td><td class="c-yes">Yes, MIT</td></tr>
|
|
<tr><td>AGENTS.md</td><td class="c-yes">Yes</td><td class="c-yes">Yes</td></tr>
|
|
<tr><td>Memory inspectability</td><td class="c-partial">Partial (session history)</td><td class="c-yes">Yes, markdown</td></tr>
|
|
<tr><td>Runtime</td><td class="c-partial">Rust (rewritten 2025)</td><td class="c-yes">Python</td></tr>
|
|
<tr class="hl"><td>Orchestratable from Hermes</td><td class="c-yes">Yes</td><td class="c-no">N/A</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>Persistent cross-session memory</strong> that accumulates automatically</li>
|
|
<li><strong>Self-hosted scheduling</strong> with headless cron jobs</li>
|
|
<li><strong>Messaging integrations</strong> — Slack, Telegram, Discord, and 12+ more</li>
|
|
<li>Python and ML-ecosystem compatibility</li>
|
|
<li>An agent that <strong>improves its own skills</strong> over time</li>
|
|
</ul>
|
|
</div>
|
|
<div class="who-card choose-other">
|
|
<div class="who-card-label">Choose Codex if you need</div>
|
|
<ul>
|
|
<li>The <strong>widest provider coverage</strong> (12+ including Groq, Ollama, xAI)</li>
|
|
<li>A <strong>zero-dependency Rust CLI</strong> with no Node.js or Python required</li>
|
|
<li><strong>Codex Cloud</strong> for managed remote execution</li>
|
|
<li>Desktop Automations for recurring tasks in a GUI workflow</li>
|
|
<li>OpenAI-primary workflows with broad fallback options</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>
|