mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-05-27 20:20:20 +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.
424 lines
28 KiB
HTML
424 lines
28 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. GitHub Copilot | Comparison</title>
|
|
<meta name="description" content="Copilot now has Agentic Memory (repo-scoped, default enabled March 2026), a Coding Agent that opens PRs autonomously, and deep GitHub integration across IDE, CLI, and github.com." />
|
|
<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. GitHub Copilot</span>
|
|
</div>
|
|
<div class="page-label">Comparison</div>
|
|
<h1 class="page-title">Hermes vs. GitHub Copilot</h1>
|
|
<p class="page-sub">Copilot now has Agentic Memory (repo-scoped, default enabled March 2026), a Coding Agent that opens PRs autonomously, and deep GitHub integration across IDE, CLI, and github.com.</p>
|
|
|
|
<div class="verdict">
|
|
<div class="verdict-icon">🐙</div>
|
|
<div class="verdict-text">
|
|
<strong>Different contexts.</strong>
|
|
<p>Copilot excels at GitHub-native workflows and in-editor completions. Hermes is a self-hosted persistent agent across all your tools and surfaces, not just GitHub.</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">In-editor autocomplete</span><span class="fc-val no">No</span></div>
|
|
<div class="fc-row"><span class="fc-key">Agentic memory</span><span class="fc-val yes">Yes, permanent, all projects</span></div>
|
|
<div class="fc-row"><span class="fc-key">Memory expiry</span><span class="fc-val yes">None</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">Coding Agent (autonomous PRs)</span><span class="fc-val no">N/A</span></div>
|
|
<div class="fc-row"><span class="fc-key">Self-hosted</span><span class="fc-val yes">Yes</span></div>
|
|
<div class="fc-row"><span class="fc-key">Messaging/multi-surface</span><span class="fc-val yes">Yes, 15+</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">GitHub-native integration</span><span class="fc-val partial">Via tools</span></div>
|
|
<div class="fc-row"><span class="fc-key">Data sovereignty</span><span class="fc-val yes">Yes, your hardware</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">GitHub Copilot</div>
|
|
<div class="fc-row"><span class="fc-key">In-editor autocomplete</span><span class="fc-val yes">Excellent</span></div>
|
|
<div class="fc-row"><span class="fc-key">Agentic memory</span><span class="fc-val partial">Yes, repo-scoped, 28-day expiry (since Mar 2026)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Memory expiry</span><span class="fc-val no">28 days</span></div>
|
|
<div class="fc-row"><span class="fc-key">Scheduled jobs</span><span class="fc-val no">No (issue-driven only, not time-based)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Coding Agent (autonomous PRs)</span><span class="fc-val yes">Yes, GA March 2026</span></div>
|
|
<div class="fc-row"><span class="fc-key">Self-hosted</span><span class="fc-val no">No (GitHub infrastructure)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Messaging/multi-surface</span><span class="fc-val partial">Via Copilot CLI/extensions</span></div>
|
|
<div class="fc-row"><span class="fc-key">Provider-agnostic</span><span class="fc-val no">No (GitHub models only)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Open source</span><span class="fc-val no">No</span></div>
|
|
<div class="fc-row"><span class="fc-key">GitHub-native integration</span><span class="fc-val yes">Native (issues, PRs, repos)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Data sovereignty</span><span class="fc-val no">No (GitHub servers)</span></div>
|
|
<div class="fc-row"><span class="fc-key">Memory inspectability</span><span class="fc-val no">Limited</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">vs. OpenCode</a>
|
|
<a href="cursor.html" class="cpill">vs. Cursor</a>
|
|
<a href="copilot.html" class="cpill active">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">Copilot has grown from an autocomplete tool into a GitHub-native agent platform. The gaps are in scheduling, provider flexibility, and anything outside the GitHub ecosystem.</p>
|
|
<div class="narrative">
|
|
|
|
<h3>Copilot in 2026</h3>
|
|
<p>GitHub Copilot has evolved significantly. <strong>Agentic Memory</strong> entered public preview on January 15, 2026, and became default for all users on March 4, 2026 — giving Copilot per-repository context memory that persists across conversations. The <strong>Coding Agent</strong> reached GA in March 2026, enabling autonomous issue-to-PR workflows without a developer in the loop. Copilot now spans the IDE (VS Code, JetBrains, Neovim), the GitHub CLI, github.com, and Copilot Chat, making it a genuine multi-surface platform.</p>
|
|
|
|
<h3>Memory: repo-scoped with expiry vs. permanent and cross-project</h3>
|
|
<p>Copilot's Agentic Memory is <strong>scoped to individual repositories</strong> and has a <strong>28-day expiry</strong> — facts learned in one repo don't carry over to another, and context fades over time. Hermes builds permanent memory that <strong>accumulates indefinitely across every project</strong>. If your agent learns something about your infrastructure, your preferred testing patterns, or your team's conventions, that knowledge stays and deepens — it doesn't expire after a month or reset when you switch repos.</p>
|
|
|
|
<h3>The GitHub-native advantage: where Copilot is genuinely stronger</h3>
|
|
<p>Copilot's Coding Agent is a real competitive advantage for GitHub-centric workflows. It can read an issue, understand the codebase, implement a fix, open a PR, and respond to code review comments — all without a developer manually driving the process. It has <strong>deep integration with GitHub Actions</strong> for CI/CD context, native access to issue metadata, PR diffs, and repository history. If your team lives in GitHub and you want an agent that works natively in that environment, Copilot has built-in context that external tools can only approximate through APIs.</p>
|
|
|
|
<h3>Scheduling: no time-based triggers</h3>
|
|
<p>Copilot's Coding Agent is <strong>issue-driven</strong>, not time-driven. You can't tell Copilot to run a task every morning at 6am, generate a weekly report, or monitor a metric and trigger an action when a threshold is crossed. Hermes has full <strong>cron-based scheduling</strong>: jobs run on whatever time-based schedule you define, with no manual trigger required. For monitoring, reporting, data pipelines, and any automation that needs to run on a clock, Hermes covers ground that Copilot cannot.</p>
|
|
|
|
<h3>Provider lock-in and cost</h3>
|
|
<p>Copilot routes all requests through <strong>GitHub's model infrastructure</strong> — you can choose between Claude Sonnet 4.6, GPT-5.4, Gemini, and others, but only through GitHub's proxied endpoints. You cannot point Copilot at a local Ollama instance, a custom OpenAI-compatible endpoint, or a regional cloud API. Hermes is <strong>fully provider-agnostic</strong>: local models, hosted APIs, any OpenAI-compatible endpoint, or provider-specific SDKs all work. For teams with cost constraints, data residency requirements, or a preference for specific model providers, this flexibility matters.</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>GitHub Copilot</th>
|
|
<th>Hermes</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr><td>In-editor autocomplete</td><td class="c-yes">Excellent</td><td class="c-no">No</td></tr>
|
|
<tr class="hl"><td>Agentic Memory</td><td class="c-partial">Yes, repo-scoped, 28-day expiry</td><td class="c-yes">Yes, permanent, all projects</td></tr>
|
|
<tr class="hl"><td>Memory expiry</td><td class="c-no">28 days</td><td class="c-yes">None</td></tr>
|
|
<tr class="hl"><td>Memory scope</td><td class="c-partial">Per repository</td><td class="c-yes">Cross-project</td></tr>
|
|
<tr><td>Coding Agent (autonomous PRs)</td><td class="c-yes">Yes, GA March 2026</td><td class="c-no">N/A</td></tr>
|
|
<tr class="hl"><td>Time-based scheduling</td><td class="c-no">No (issue-driven only)</td><td class="c-yes">Yes, self-hosted cron</td></tr>
|
|
<tr><td>Messaging</td><td class="c-partial">Via Copilot CLI/extensions</td><td class="c-yes">Yes, 15+ first-party</td></tr>
|
|
<tr><td>Self-hosted</td><td class="c-no">No (GitHub infra)</td><td class="c-yes">Yes</td></tr>
|
|
<tr><td>Provider-agnostic</td><td class="c-no">No (GitHub models only)</td><td class="c-yes">Yes</td></tr>
|
|
<tr><td>GitHub-native</td><td class="c-yes">Native (issues, PRs, repos)</td><td class="c-partial">Via API tools</td></tr>
|
|
<tr><td>Open source</td><td class="c-no">No</td><td class="c-yes">Yes, MIT</td></tr>
|
|
<tr class="hl"><td>Data sovereignty</td><td class="c-no">No (GitHub servers)</td><td class="c-yes">Yes, your hardware</td></tr>
|
|
<tr><td>Memory inspectability</td><td class="c-no">Limited</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>Permanent cross-project memory</strong> that never expires</li>
|
|
<li><strong>Time-based scheduling</strong> — cron jobs, daily reports, monitoring</li>
|
|
<li><strong>Messaging integrations</strong> on 15+ platforms</li>
|
|
<li><strong>Provider flexibility</strong> — local models, custom endpoints, any API</li>
|
|
<li><strong>Self-hosted execution</strong> and full data sovereignty</li>
|
|
<li>Open source, MIT licensed, no GitHub dependency</li>
|
|
</ul>
|
|
</div>
|
|
<div class="who-card choose-other">
|
|
<div class="who-card-label">Choose Copilot (or both) for</div>
|
|
<ul>
|
|
<li><strong>GitHub-native workflows</strong>: issues → autonomous PRs</li>
|
|
<li><strong>Code review context</strong> with deep repo and PR history</li>
|
|
<li><strong>GitHub Actions integration</strong> for CI/CD-aware agents</li>
|
|
<li>Managed infrastructure — no setup, no server to maintain</li>
|
|
<li>Best-in-class <strong>in-editor autocomplete</strong></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>
|