mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-28 04:30:18 +00:00
7f71d4b177
Light mode fixes:
- Code blocks always use dark background (#0d1117) in both themes.
Previous behavior: setTheme('light') switched hljs to github.min.css
(light theme = near-black text) but kept code-wrap background dark,
producing invisible dark-on-dark text. Fix: always use github-dark
hljs + keep bg dark. Result: consistent readable code in both themes.
- code-header uses fixed dark colors (no longer rgba(255,255,255,0.04)
which was near-invisible on the dark bg it was compositing against).
- copy-btn uses fixed dark-theme colors for the same reason.
Index page updates:
- Comparison cards are now clickable links to deep-dive pages.
Card has onclick, role=link, tabindex=0, keyboard Enter handler,
arrow indicator (→) that animates on hover, and focus ring.
- Added compare-more pills row below the head-to-head cards linking
to all 8 comparison pages.
- CSS for .compare-pill, .compare-more, .card-arrow added.
New pages (compare/):
- compare/openclaw.html
- compare/claude-code.html
- compare/codex.html
- compare/opencode.html
- compare/cursor.html
- compare/copilot.html
- compare/claude-ai.html
- compare/chatgpt.html
Each page has: full CSS (light+dark themes), verdict banner, feature
comparison 2-col grid, 5-section narrative with official docs links,
full comparison table, who-should-choose section, nav pills to all 8
sibling pages, and CTA strip. Content drawn from HERMES.md (with the
/loop and scheduling corrections from PR #261 applied).
368 lines
24 KiB
HTML
368 lines
24 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}
|
|
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}
|
|
.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)}
|
|
@media(max-width:768px){
|
|
.section{padding:48px 16px}
|
|
.hero{padding:48px 16px 36px}
|
|
.feature-compare{grid-template-columns:1fr}
|
|
}
|
|
</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">← All comparisons</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>
|
|
</nav>
|
|
|
|
<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>
|
|
</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'));
|
|
</script>
|
|
</body>
|
|
</html>
|