diff --git a/blog/src/_data/media.json b/blog/src/_data/media.json index cdcb0e231..cab0cfadd 100644 --- a/blog/src/_data/media.json +++ b/blog/src/_data/media.json @@ -4521,5 +4521,28 @@ }, "inline": {}, "youtube": [] + }, + "hermes-agent-vs-openclaw": { + "title": "Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick", + "category": "comparisons", + "hero": { + "file": "assets/media/hermes-agent-vs-openclaw/hero.png", + "alt": "Title card on white. Hermes Agent vs OpenClaw, checked 7 Oct 2026, above two tin cans joined by a string", + "prompt": "Still of the hero scene in assets/media/hermes-agent-vs-openclaw/motion.js.", + "status": "ready" + }, + "inline": {} + }, + "agent-tools-today-2026-10-07": { + "title": "Agent Tools Today, 7 Oct 2026: Mistral Large 4, EmbeddingGemma 2, OpenAI Decisions API", + "category": "news", + "hero": { + "file": "assets/media/agent-tools-today/hero.png", + "alt": "Hand drawn sketch: a front page with five numbered lines, a clock, and a yellow character reading it out", + "prompt": "Series hero for the Agent Tools Today daily brief, drawn in code (media-src/topic-tiles.html?t=news). Reused by every brief.", + "status": "ready" + }, + "inline": {}, + "youtube": [] } } diff --git a/blog/src/assets/media/agent-tools-today-2026-10-07/motion.css b/blog/src/assets/media/agent-tools-today-2026-10-07/motion.css new file mode 100644 index 000000000..2ad867241 --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-07/motion.css @@ -0,0 +1,11 @@ +/* Bright coded scene for "Agent Tools Today, 7 Oct 2026". Pairs with motion.js. */ +.prose figure.mg { margin: 42px 0; } +.prose figure.mg img, .mg .mg-svg { display: block; width: 100%; height: auto; border: 1px solid #1A1320; border-radius: 18px; background: #fff; } +.mg figcaption { font: 500 13px/1.5 "Space Grotesk", system-ui, sans-serif; color: #6B5878; padding-top: 10px; text-align: center; } +.mg .mg-svg { touch-action: manipulation; -webkit-tap-highlight-color: transparent; } +.mg .mg-svg text { -webkit-user-select: none; user-select: none; pointer-events: none; } +.mg .mg-hit { cursor: pointer; outline: none; } +.mg .mg-ring { stroke-opacity: 0; transition: stroke-opacity 0.15s; } +.mg .mg-hit:focus-visible .mg-ring { stroke-opacity: 1; } +@media (hover: hover) { .mg .mg-hit:hover .mg-ring { stroke-opacity: 0.5; } } +@media (prefers-reduced-motion: reduce) { .mg .mg-ring { transition: none; } } diff --git a/blog/src/assets/media/agent-tools-today-2026-10-07/motion.js b/blog/src/assets/media/agent-tools-today-2026-10-07/motion.js new file mode 100644 index 000000000..c22cd6d8b --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-07/motion.js @@ -0,0 +1,125 @@ +/* Bright coded scene for "Agent Tools Today, 7 Oct 2026". Vanilla JS, no library. +
holds a still image; this script swaps in a live SVG. + Plays only in view, honours reduced motion, "?mgstill" freezes each scene on its still frame. */ +(() => { + const NS = "http://www.w3.org/2000/svg"; + const INK = "#1A1320", YEL = "#FFCA54", BLUE = "#6C8EF5", LIL = "#B69CFF", MINT = "#7FD8AE", SKY = "#9AD8FF", SOFT = "#F1ECF9", MUTE = "#7A6A88"; + const SANS = '"Space Grotesk", system-ui, sans-serif'; + const el = (t, a = {}, p) => { const n = document.createElementNS(NS, t); for (const k in a) n.setAttribute(k, a[k]); if (p) p.appendChild(n); return n; }; + const txt = (p, x, y, s, a = {}) => { const n = el("text", Object.assign({ x, y, "font-family": SANS, "font-size": 24, "font-weight": 600, fill: INK }, a), p); n.textContent = s; return n; }; + const cl = (v, a = 0, b = 1) => Math.max(a, Math.min(b, v)); + const seg = (t, a, b) => cl((t - a) / (b - a)); + const oc = (x) => 1 - Math.pow(1 - x, 3); + const ob = (x) => { const c = 1.70158; return 1 + (c + 1) * Math.pow(x - 1, 3) + c * Math.pow(x - 1, 2); }; + const io = (x) => (x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2); + const bo = (x) => { const n = 7.5625, d = 2.75; if (x < 1 / d) return n * x * x; if (x < 2 / d) return n * (x -= 1.5 / d) * x + 0.75; if (x < 2.5 / d) return n * (x -= 2.25 / d) * x + 0.9375; return n * (x -= 2.625 / d) * x + 0.984375; }; + const tf = (n, x, y, s = 1, r = 0) => n.setAttribute("transform", `translate(${x} ${y}) rotate(${r}) scale(${s})`); + const button = (g, label, fn) => { + g.setAttribute("role", "button"); g.setAttribute("tabindex", "0"); g.setAttribute("aria-label", label); g.classList.add("mg-hit"); + g.addEventListener("click", fn); + g.addEventListener("keydown", (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); fn(); } }); + }; + const strip = (svg, y, w = 680) => { + el("rect", { x: (800 - w) / 2, y, width: w, height: 48, rx: 24, fill: SOFT }, svg); + return txt(svg, 400, y + 31, "", { "text-anchor": "middle", "font-size": 20, "font-weight": 500 }); + }; + + const SC = {}; + + /* ---- the day at a glance: five plant pots land on a shelf, largest first, a plant grows in each and a paper tag swings down ---- */ + const LAUNCH = [ + [["Mistral Large 4"], "Public preview: 1 trillion parameters, per Mistral's post", YEL], + [["EmbeddingGemma 2"], "Apache 2.0: 740 million parameters, on Google's figures", BLUE], + [["OpenAI", "Decisions API"], "Public beta: POST /v1/decisions returns typed answers", LIL], + [["Claude Code", "v2.1.292"], "It adds --marketplace to claude plugin install", SKY], + [["Gemini CLI", "v0.63.0"], "The notes list fixes, one for an endless sign in loop", MINT], + ]; + const LEAF = [[[-40, 0.72], [-19, 0.93], [1, 1], [21, 0.88], [41, 0.68]], [[-34, 0.74], [-11, 1], [13, 0.92], [36, 0.7]], [[-28, 0.8], [0, 1], [28, 0.78]], [[-24, 0.85], [4, 1], [30, 0.75]], [[-22, 0.9], [22, 1]]]; + SC.today = { + dur: 12, still: 9.5, + build(svg, api) { + const SY = 318, GAP = 1.5, W = [200, 150, 110, 78, 52], H = [150, 114, 84, 60, 40], CX = [140, 337, 489, 605, 692], LONG = [22, 106, 22, 106, 22]; + txt(svg, 756, 76, "Top 5 launches", { "text-anchor": "end", "font-size": 32, "font-weight": 700 }); + txt(svg, 756, 108, "tap a pot", { "text-anchor": "end", "font-size": 20, fill: MUTE, "font-weight": 500 }); + const tip = strip(svg, 522, 720); + el("rect", { x: 30, y: SY, width: 740, height: 12, rx: 6, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + let pinned = -1; + const ps = LAUNCH.map(([lines, line, col], i) => { + const name = lines.join(" "), w = W[i], h = H[i], rh = Math.max(9, h * 0.17), a = w * 0.43, b = w * 0.31, r = Math.min(8, w * 0.1); + const g = el("g", {}, svg), tag = el("g", { opacity: 0 }, g), pot = el("g", { opacity: 0 }, g), plant = el("g", {}, pot); + // paper tag on a string, hung under the shelf + const len = LONG[i], th = 26 + lines.length * 21; + el("path", { d: `M0 12 V${len + 12}`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, tag); + const paper = el("path", { fill: "#fff", stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, tag); + const dot = el("circle", { cy: len + 22, r: 4, fill: col, stroke: INK, "stroke-width": 2.5 }, tag); + const ts = lines.map((s, k) => txt(tag, 0, len + 47 + k * 21, s, { "text-anchor": "middle", "font-size": 17, "font-weight": 600 })); + const tw = Math.max(...ts.map((n, k) => (n.getComputedTextLength && n.getComputedTextLength()) || lines[k].length * 10)) + 28; + const off = cl(CX[i], 34 + tw / 2, 766 - tw / 2) - CX[i], L = off - tw / 2, R = off + tw / 2, T = len + 12; + paper.setAttribute("d", `M${L + 12} ${T} H${R - 12} L${R} ${T + 12} V${T + th} H${L} V${T + 12} Z`); + ts.forEach((n) => n.setAttribute("x", off)); dot.setAttribute("cx", 0); + // plant, then the pot in front of it + const LL = h * 0.66; + LEAF[i].forEach(([ang, k]) => { const l = LL * k, v = l * 0.17; el("path", { d: `M0 0 C${v} ${-l * 0.3} ${v} ${-l * 0.75} 0 ${-l} C${-v} ${-l * 0.75} ${-v} ${-l * 0.3} 0 0 Z`, fill: MINT, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round", transform: `rotate(${ang})` }, plant); }); + const body = el("g", {}, pot); + el("rect", { x: -w / 2 - 7, y: -h - 7, width: w + 14, height: h + 14, rx: 12, fill: "none", stroke: INK, "stroke-width": 2, class: "mg-ring" }, body); + el("path", { d: `M${-a} ${-h + rh} H${a} L${b} ${-r} Q${b} 0 ${b - r} 0 H${-b + r} Q${-b} 0 ${-b} ${-r} Z`, fill: col, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, body); + el("rect", { x: -w / 2, y: -h, width: w, height: rh, rx: Math.min(5, rh / 2), fill: col, stroke: INK, "stroke-width": 3 }, body); + const fs = cl(h * 0.3, 16, 40); + txt(body, 0, -(h - rh) / 2 + fs * 0.36, String(i + 1), { "text-anchor": "middle", "font-size": fs, "font-weight": 700 }); + button(g, `${name}: ${line}`, () => { pinned = i; api.poke(); }); + return { g, tag, pot, plant, body, h, T: 0.4 + i * GAP }; + }); + return (t, now) => { + let last = -1; + const gone = 1 - seg(t, 11.3, 11.9); + ps.forEach((p, i) => { + const s = t - p.T, x = CX[i]; + if (s < 0) { p.pot.setAttribute("opacity", 0); p.tag.setAttribute("opacity", 0); return; } + const land = s >= 0.3 ? Math.sin(seg(s, 0.3, 0.6) * Math.PI) * 0.09 : 0; + tf(p.pot, x, SY - 80 * (1 - bo(seg(s, 0, 0.55)))); + p.pot.setAttribute("opacity", seg(s, 0, 0.15) * gone); + p.body.setAttribute("transform", `scale(${1 + land} ${1 - land})`); + const grow = ob(seg(s, 0.6, 1.25)); + p.plant.setAttribute("transform", `translate(0 ${-p.h + 4}) rotate(${Math.sin(now * 1.3 + i * 1.7) * 2 * grow}) scale(${Math.max(0.001, grow)})`); + const k = seg(s, 0.95, 1.5), sw = ob(k); + p.tag.setAttribute("transform", `translate(${x} ${SY}) rotate(${-34 * (1 - sw) + (k >= 1 ? Math.sin(now * 1.6 + i) * 1.2 : 0)})`); + p.tag.setAttribute("opacity", seg(s, 0.95, 1.1) * gone); + if (s >= 0.55) last = i; + }); + const show = pinned >= 0 ? pinned : last; + tip.textContent = show < 0 || (pinned < 0 && gone < 1) ? "five launches, in the order of the list below" : LAUNCH[show][1]; + }; + }, + }; + + /* ---- player ---- */ + const q = new URLSearchParams(location.search), frozen = q.has("mgstill"), fixed = parseFloat(q.get("mgstill")); + const calm = matchMedia("(prefers-reduced-motion: reduce)").matches; + const mount = (fig) => { + const sc = SC[fig.dataset.scene], img = fig.querySelector("img"); if (!sc || !img) return; + const W = sc.w || 800, H = sc.h || 600; + const svg = el("svg", { viewBox: `0 0 ${W} ${H}`, class: "mg-svg", role: "group", "aria-label": img.alt || "" }); + svg.style.aspectRatio = `${W} / ${H}`; + el("rect", { width: W, height: H, fill: "#fff" }, svg); + img.replaceWith(svg); + let off = 0, raf = 0, seen = false, held = calm; + const base = performance.now(), clock = () => (performance.now() - base) / 1000; + let draw = () => {}; + const frame = () => { const now = clock(); draw(held ? sc.still : (((now + off) % sc.dur) + sc.dur) % sc.dur, now); }; + const tick = () => { cancelAnimationFrame(raf); frame(); if (seen && !held) raf = requestAnimationFrame(tick); }; + const api = { now: clock, seek: (s) => { off = s - clock(); held = false; tick(); }, poke: () => { held = false; tick(); } }; + draw = sc.build(svg, api); + if (frozen) { draw(isNaN(fixed) ? sc.still : fixed, 0); return; } + new IntersectionObserver(([e]) => { + seen = e.isIntersecting; + if (seen) { tick(); if (!fig.dataset.sent && window.posthog) { fig.dataset.sent = 1; window.posthog.capture("blog_scene_view", { slug: location.pathname.split("/").filter(Boolean).pop(), scene: fig.dataset.scene }); } } + else cancelAnimationFrame(raf); + }, { threshold: 0.25 }).observe(fig); + svg.addEventListener("click", () => { if (!fig.dataset.hit && window.posthog) { fig.dataset.hit = 1; window.posthog.capture("blog_scene_interact", { slug: location.pathname.split("/").filter(Boolean).pop(), scene: fig.dataset.scene }); } }); + frame(); + }; + const go = () => document.querySelectorAll("figure.mg[data-scene]").forEach(mount); + const fonts = document.fonts && document.fonts.load ? Promise.all([document.fonts.load('700 32px "Space Grotesk"'), document.fonts.load('500 20px "Space Grotesk"'), document.fonts.load('600 17px "Space Grotesk"')]).catch(() => {}) : Promise.resolve(); + const start = () => fonts.then(go, go); + if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", start); else start(); +})(); diff --git a/blog/src/assets/media/agent-tools-today-2026-10-07/today.png b/blog/src/assets/media/agent-tools-today-2026-10-07/today.png new file mode 100644 index 000000000..2addee8ed Binary files /dev/null and b/blog/src/assets/media/agent-tools-today-2026-10-07/today.png differ diff --git a/blog/src/assets/media/hermes-agent-vs-openclaw/cubbies.png b/blog/src/assets/media/hermes-agent-vs-openclaw/cubbies.png new file mode 100644 index 000000000..47dcea697 Binary files /dev/null and b/blog/src/assets/media/hermes-agent-vs-openclaw/cubbies.png differ diff --git a/blog/src/assets/media/hermes-agent-vs-openclaw/doors.png b/blog/src/assets/media/hermes-agent-vs-openclaw/doors.png new file mode 100644 index 000000000..bb342bc33 Binary files /dev/null and b/blog/src/assets/media/hermes-agent-vs-openclaw/doors.png differ diff --git a/blog/src/assets/media/hermes-agent-vs-openclaw/drawers.png b/blog/src/assets/media/hermes-agent-vs-openclaw/drawers.png new file mode 100644 index 000000000..191079def Binary files /dev/null and b/blog/src/assets/media/hermes-agent-vs-openclaw/drawers.png differ diff --git a/blog/src/assets/media/hermes-agent-vs-openclaw/hero.png b/blog/src/assets/media/hermes-agent-vs-openclaw/hero.png new file mode 100644 index 000000000..96c861e2f Binary files /dev/null and b/blog/src/assets/media/hermes-agent-vs-openclaw/hero.png differ diff --git a/blog/src/assets/media/hermes-agent-vs-openclaw/jugs.png b/blog/src/assets/media/hermes-agent-vs-openclaw/jugs.png new file mode 100644 index 000000000..34f8df7d1 Binary files /dev/null and b/blog/src/assets/media/hermes-agent-vs-openclaw/jugs.png differ diff --git a/blog/src/assets/media/hermes-agent-vs-openclaw/motion.css b/blog/src/assets/media/hermes-agent-vs-openclaw/motion.css new file mode 100644 index 000000000..91c5973c9 --- /dev/null +++ b/blog/src/assets/media/hermes-agent-vs-openclaw/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Hermes Agent vs OpenClaw". Pairs with motion.js. */ +.prose figure.mg { margin: 42px 0; } +.prose figure.mg img, .mg .mg-svg { display: block; width: 100%; height: auto; border: 1px solid #1A1320; border-radius: 18px; background: #fff; } +.mg figcaption { font: 500 13px/1.5 "Space Grotesk", system-ui, sans-serif; color: #6B5878; padding-top: 10px; text-align: center; } +.mg .mg-svg { touch-action: manipulation; -webkit-tap-highlight-color: transparent; } +.mg .mg-svg text { -webkit-user-select: none; user-select: none; pointer-events: none; } +.mg .mg-hit { cursor: pointer; outline: none; } +.mg [role="slider"] { cursor: grab; touch-action: none; } +.mg .mg-ring { stroke-opacity: 0; transition: stroke-opacity 0.15s; } +.mg .mg-hit:focus-visible .mg-ring { stroke-opacity: 1; } +.mg [role="slider"]:focus-visible circle:nth-child(2) { stroke-width: 5; } +@media (hover: hover) { .mg .mg-hit:hover .mg-ring { stroke-opacity: 0.5; } } +@media (prefers-reduced-motion: reduce) { .mg .mg-ring { transition: none; } } diff --git a/blog/src/assets/media/hermes-agent-vs-openclaw/motion.js b/blog/src/assets/media/hermes-agent-vs-openclaw/motion.js new file mode 100644 index 000000000..01b77a502 --- /dev/null +++ b/blog/src/assets/media/hermes-agent-vs-openclaw/motion.js @@ -0,0 +1,334 @@ +/* Bright coded scenes for "Hermes Agent vs OpenClaw". Vanilla JS, no library. +
holds a still image; this script swaps in a live SVG. + Plays only in view, honours reduced motion, "?mgstill" freezes each scene on its still frame. */ +(() => { + const NS = "http://www.w3.org/2000/svg"; + const INK = "#1A1320", YEL = "#FFCA54", BLUE = "#6C8EF5", LIL = "#B69CFF", MINT = "#7FD8AE", SKY = "#9AD8FF", SOFT = "#F1ECF9", MUTE = "#7A6A88"; + const SANS = '"Space Grotesk", system-ui, sans-serif', MONO = '"JetBrains Mono", ui-monospace, monospace'; + const el = (t, a = {}, p) => { const n = document.createElementNS(NS, t); for (const k in a) n.setAttribute(k, a[k]); if (p) p.appendChild(n); return n; }; + const txt = (p, x, y, s, a = {}) => { const n = el("text", Object.assign({ x, y, "font-family": SANS, "font-size": 24, "font-weight": 600, fill: INK }, a), p); n.textContent = s; return n; }; + const cl = (v, a = 0, b = 1) => Math.max(a, Math.min(b, v)); + const seg = (t, a, b) => cl((t - a) / (b - a)); + const oc = (x) => 1 - Math.pow(1 - x, 3); + const ob = (x) => { const c = 1.70158; return 1 + (c + 1) * Math.pow(x - 1, 3) + c * Math.pow(x - 1, 2); }; + const io = (x) => (x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2); + const tf = (n, x, y, s = 1, r = 0) => n.setAttribute("transform", `translate(${x} ${y}) rotate(${r}) scale(${s})`); + const button = (g, label, fn) => { + g.setAttribute("role", "button"); g.setAttribute("tabindex", "0"); g.setAttribute("aria-label", label); g.classList.add("mg-hit"); + g.addEventListener("click", fn); + g.addEventListener("keydown", (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); fn(); } }); + }; + const strip = (svg, y, w = 680) => { + el("rect", { x: (800 - w) / 2, y, width: w, height: 48, rx: 24, fill: SOFT }, svg); + return txt(svg, 400, y + 31, "", { "text-anchor": "middle", "font-size": 20, "font-weight": 500 }); + }; + + const GREY = "#D9D0E4"; + const num = (n) => String(Math.round(n)).replace(/\B(?=(\d{3})+$)/g, ","); + /* a rounded label sized to its text, centred on 0,0 */ + const chip = (p, s, fill, a = {}) => { + const g = el("g", {}, p), r = el("rect", { y: -20, height: 40, rx: 12, fill, stroke: INK, "stroke-width": 2.5 }, g); + const t = txt(g, 0, 7, s, Object.assign({ "text-anchor": "middle", "font-size": 20, "font-weight": 700 }, a)); + const w = t.getComputedTextLength() + 30; r.setAttribute("x", -w / 2); r.setAttribute("width", w); + return { g, w }; + }; + const show = (n, k) => n.setAttribute("opacity", k <= 0.01 ? 0 : 1); + + const SC = {}; + + /* ---- 1. two measuring jugs fill at the same speed; one stops sooner ---- */ + SC.jugs = { + dur: 10.6, still: 8.2, + build(svg) { + txt(svg, 44, 62, "GitHub stars on 7 Oct 2026", { "font-size": 32, "font-weight": 700 }); + txt(svg, 44, 98, "From the GitHub API. Both are MIT licensed.", { "font-size": 20, "font-weight": 500, fill: MUTE }); + const BASE = 448, FULL = 290, TOP = 450000, RATE = 66; + const body = `M-100 ${-FULL} V-16 Q-100 0 -84 0 H84 Q100 0 100 -16 V${-FULL}`; + const mk = (x, name, stars, col, id) => { + const g = el("g", { transform: `translate(${x} ${BASE})` }, svg); + el("path", { d: body + " Z" }, el("clipPath", { id }, g)); + const liq = el("path", { fill: col, "clip-path": `url(#${id})` }, g); + const bub = [0, 1, 2].map(() => el("circle", { r: 5, fill: "#fff", "fill-opacity": 0.7, "clip-path": `url(#${id})` }, g)); + for (let k = 1; k <= 4; k++) el("path", { d: `M-98 ${-k * 62} h20`, stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, g); + el("path", { d: body, fill: "none", stroke: INK, "stroke-width": 3, "stroke-linejoin": "round", "stroke-linecap": "round" }, g); + el("path", { d: `M-100 ${-FULL} q-14 -2 -20 -14`, fill: "none", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, g); + el("path", { d: `M100 ${-FULL + 36} h26 q22 0 22 22 v96 q0 22 -22 22 h-26`, fill: "none", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, g); + const target = (stars / TOP) * FULL; + const n = txt(g, 6, -target + 46, num(stars), { "text-anchor": "middle", "font-size": 34, "font-weight": 700 }); + const s = txt(g, 6, -target + 72, "stars", { "text-anchor": "middle", "font-size": 20, "font-weight": 500 }); + const mit = chip(g, "MIT", "#fff"); + txt(svg, x, BASE + 40, name, { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); + return { liq, bub, n, s, mit, target, stars, x }; + }; + const J = [mk(214, "Hermes Agent", 251736, LIL, "mgj0"), mk(586, "OpenClaw", 391524, BLUE, "mgj1")]; + const mark = el("path", { d: `M108 ${BASE - J[0].target} H694`, stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "3 9", "stroke-linecap": "round" }, svg); + const cap = strip(svg, 520, 640); + return (t) => { + const out = io(seg(t, 9.7, 10.4)); + J.forEach((j, i) => { + const lv = Math.min(j.target, Math.max(0, t - 0.6) * RATE) * (1 - out), busy = lv < j.target - 0.5 && lv > 2 ? 1 : 0.35; + let d = `M-100 2 V${-lv}`; + for (let x = -100; x <= 100; x += 20) d += ` L${x} ${(-lv + Math.sin(x * 0.06 + t * 5 + i * 2) * 3.5 * busy).toFixed(1)}`; + j.liq.setAttribute("d", d + " V2 Z"); + j.bub.forEach((b, k) => { const p = (t * 0.7 + k / 3 + i * 0.4) % 1; b.setAttribute("cx", -60 + k * 55 + Math.sin(p * 6 + k) * 6); b.setAttribute("cy", -8 - (lv - 16) * p); b.setAttribute("opacity", lv > 30 && busy === 1 ? Math.sin(p * Math.PI) : 0); }); + const txo = oc(seg(lv, j.target - 6, j.target)) * (1 - seg(t, 9.5, 9.8)); + j.n.setAttribute("opacity", txo); j.s.setAttribute("opacity", txo); + j.n.setAttribute("transform", `translate(0 ${10 * (1 - txo)})`); + const p = ob(seg(t, 5.0 + i * 0.35, 5.4 + i * 0.35)) * (1 - seg(t, 9.5, 9.8)); + tf(j.mit.g, 6, -40, cl(p, 0, 1.3), 0); show(j.mit.g, p); + }); + const m = seg(t, 6.1, 6.9) * (1 - seg(t, 9.5, 9.8)); + mark.setAttribute("stroke-dashoffset", 0); mark.setAttribute("opacity", m); + cap.textContent = t < 3 || t > 9.7 ? "Each jug fills at the same speed" : t < 4.5 ? "Hermes Agent stops at 251,736 stars" : t < 6.1 ? "OpenClaw keeps going to 391,524 stars" : "OpenClaw is the larger project by stars. Both are MIT."; + }; + }, + }; + + /* ---- 2. two pigeonhole racks; the same six letters land in both ---- */ + SC.cubbies = { + dur: 11, still: 8.8, + build(svg, api) { + txt(svg, 44, 62, "Six chat apps, both projects", { "font-size": 32, "font-weight": 700 }); + txt(svg, 756, 60, "tap a cubby", { "text-anchor": "end", "font-size": 20, fill: MUTE, "font-weight": 500 }); + const APPS = ["Telegram", "Discord", "Slack", "WhatsApp", "Signal", "Teams"], COL = [SKY, LIL, YEL, MINT, BLUE, LIL]; + const CW = 170, CH = 112, TOPY = 138; + let pinned = -1; + const racks = [[40, "Hermes Agent"], [420, "OpenClaw"]].map(([x0, name]) => { + txt(svg, x0 + CW, 120, name, { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); + el("rect", { x: x0, y: TOPY, width: CW * 2, height: CH * 3 + 8, rx: 22, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + return APPS.map((app, i) => { + const cx = x0 + (i % 2) * CW + CW / 2, cy = TOPY + Math.floor(i / 2) * CH + 46; + const g = el("g", {}, svg); + el("rect", { x: cx - 80, y: cy - 40, width: 160, height: 108, rx: 18, fill: "#fff", "fill-opacity": 0, stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7", class: "mg-ring" }, g); + const hole = el("rect", { x: cx - 68, y: cy - 32, width: 136, height: 64, rx: 14, fill: SOFT, stroke: INK, "stroke-width": 2.5 }, g); + txt(g, cx, cy + 58, app, { "text-anchor": "middle", "font-size": 20, "font-weight": 600 }); + button(g, `${app}: named in both projects' docs`, () => { pinned = i; api.poke(); }); + return { cx, cy, hole, i }; + }); + }); + const letters = racks.map((r) => r.map((c) => { + const g = el("g", { "pointer-events": "none" }, svg); + el("rect", { x: -40, y: -24, width: 80, height: 48, rx: 8, fill: COL[c.i], stroke: INK, "stroke-width": 3 }, g); + el("path", { d: "M-38 -20 L0 6 L38 -20", fill: "none", stroke: INK, "stroke-width": 3, "stroke-linecap": "round", "stroke-linejoin": "round" }, g); + const k = el("g", { "pointer-events": "none" }, svg); + el("circle", { r: 13, fill: MINT, stroke: INK, "stroke-width": 2.5 }, k); + el("path", { d: "M-6 0 L-2 5 L6 -5", stroke: INK, "stroke-width": 3, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, k); + return { g, k, c }; + })); + const cap = strip(svg, 508, 640); + const land = (i) => 1.3 + i * 1.05; + return (t) => { + const out = seg(t, 10.2, 10.8); + let last = -1; + APPS.forEach((_, i) => { if (t >= land(i)) last = i; }); + letters.forEach((r) => r.forEach(({ g, k, c }) => { + const a = land(c.i), p = io(seg(t, a - 0.7, a)), sq = Math.sin(seg(t, a, a + 0.3) * Math.PI) * 0.12; + const x = 400 + (c.cx - 400) * p, y = 112 + (c.cy - 112) * p - 30 * Math.sin(Math.PI * p); + g.setAttribute("transform", `translate(${x} ${y}) rotate(${(1 - p) * -14}) scale(${(0.5 + 0.5 * p) * (1 + sq)} ${(0.5 + 0.5 * p) * (1 - sq)})`); + g.setAttribute("opacity", seg(t, a - 0.7, a - 0.55) * (1 - out)); + const q = ob(seg(t, a + 0.1, a + 0.45)) * (1 - out); + tf(k, c.cx + 60, c.cy - 26, cl(q, 0, 1.3)); show(k, q); + c.hole.setAttribute("fill", pinned === c.i ? YEL : SOFT); + })); + cap.textContent = pinned >= 0 ? `${APPS[pinned]}: named in both projects' docs` : last < 0 || t > 8 ? "Six chat apps both projects' docs name" : `${APPS[last]}: named in both projects' docs`; + }; + }, + }; + + /* ---- 3. two short drawers fill up and stop; a shelf keeps taking dated folders ---- */ + SC.drawers = { + dur: 12, still: 8.8, + build(svg, api) { + txt(svg, 44, 62, "Capped files, or a growing shelf", { "font-size": 32, "font-weight": 700 }); + const HOLD = 8.8, CX = 124; + let user = false, extra = 0, tap = -99; + el("path", { d: "M400 110 V486", stroke: GREY, "stroke-width": 2, "stroke-dasharray": "3 9", "stroke-linecap": "round" }, svg); + + /* left: the chest */ + txt(svg, 40, 128, "Hermes Agent", { "font-size": 24, "font-weight": 700 }); + el("rect", { x: CX, y: 130, width: 270, height: 320 }, el("clipPath", { id: "mgdr" }, svg)); + const tray = (y, len, n, file, chars, t0, col, tries) => { + const g = el("g", { "clip-path": "url(#mgdr)" }, svg), mv = el("g", {}, g); + el("path", { d: `M0 0 V52 H${len} V0`, fill: "#fff", stroke: INK, "stroke-width": 3, "stroke-linejoin": "round", "stroke-linecap": "round" }, mv); + el("path", { d: `M${len} 26 h12`, stroke: INK, "stroke-width": 3 }, mv); + el("circle", { cx: len + 18, cy: 26, r: 7, fill: YEL, stroke: INK, "stroke-width": 2.5 }, mv); + const pitch = (len - 12) / n; + const cards = Array.from({ length: n }, (_, i) => el("rect", { x: -6.5, y: -38, width: 13, height: 38, rx: 4, fill: col, stroke: INK, "stroke-width": 2.5 }, mv)); + txt(svg, CX + 14, y + 80, file, { "font-family": MONO, "font-size": 20, "font-weight": 700 }); + const l2 = txt(svg, CX + 14, y + 108, chars, { "font-size": 20, "font-weight": 500 }); + const full = chip(svg, "full", MINT); + const fx = CX + 14 + l2.getComputedTextLength() + 14 + full.w / 2; + const stray = el("rect", { x: -6.5, y: -19, width: 13, height: 38, rx: 4, fill: "#fff", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "4 4" }, svg); + return (t, w) => { + const open = oc(seg(t, t0, t0 + 0.7)) - io(seg(t, 11.1, 11.7)); + mv.setAttribute("transform", `translate(${CX - len + len * open} ${y})`); + cards.forEach((c, i) => { const a = t0 + 0.9 + i * 0.22, q = seg(t, a, a + 0.25); c.setAttribute("transform", `translate(${12 + pitch * (i + 0.5) - 3} ${47 - 22 * (1 - q * q)})`); c.setAttribute("opacity", q <= 0 ? 0 : 1); }); + const done = t0 + 0.9 + n * 0.22 + 0.2, f = ob(seg(t, done, done + 0.35)) * (1 - seg(t, 11, 11.2)); + tf(full.g, fx, y + 101, cl(f, 0, 1.3)); show(full.g, f); + /* one more card tries, and bounces off */ + const b = !tries ? 0 : w >= 0 && w < 1 ? w : seg(t, done + 0.5, done + 1.5), ex = CX + len - 8, on = b > 0 && b < 1; + const bx = b < 0.4 ? ex + 34 * (1 - b / 0.4) : ex + 40 * ((b - 0.4) / 0.6), by = b < 0.4 ? y - 58 + 50 * (b / 0.4) * (b / 0.4) : y - 8 - 90 * Math.sin(((b - 0.4) / 0.6) * Math.PI) * 0.5 + 60 * ((b - 0.4) / 0.6); + tf(stray, bx, by, 1, b * 200); stray.setAttribute("opacity", on ? 1 - seg(b, 0.7, 1) : 0); + }; + }; + const T1 = tray(160, 220, 11, "MEMORY.md", "2,200 characters", 0.5, LIL, true), T2 = tray(300, 138, 7, "USER.md", "1,375 characters", 1.2, SKY, false); + el("rect", { x: 40, y: 144, width: 84, height: 290, rx: 16, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + [186, 326].forEach((y) => el("rect", { x: 100, y: y - 30, width: 24, height: 60, rx: 0, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg)); + + /* right: the shelf and the binder */ + txt(svg, 420, 128, "OpenClaw", { "font-size": 24, "font-weight": 700 }); + const SH = 404, FX = (i) => 432 + i * 30; + el("path", { d: `M416 ${SH} H764`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg); + el("path", { d: `M440 ${SH} v14 M740 ${SH} v14`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg); + txt(svg, 420, 446, "memory/YYYY-MM-DD.md", { "font-family": MONO, "font-size": 20, "font-weight": 700 }); + txt(svg, 420, 474, "daily notes", { "font-size": 20, "font-weight": 500 }); + const BX = 648, BY = 196; + const path = el("path", { d: `M${FX(2) + 13} 318 Q${FX(2) + 20} 250 ${BX - 96} ${BY + 22}`, fill: "none", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "3 8", "stroke-linecap": "round" }, svg); + const dream = txt(svg, 544, 292, "dreaming", { "font-size": 20, "font-weight": 500, fill: MUTE, "font-style": "italic" }); + const binder = el("g", {}, svg); + el("rect", { x: -92, y: -46, width: 196, height: 92, rx: 14, fill: MINT, stroke: INK, "stroke-width": 3 }, binder); + el("path", { d: "M-70 -46 V46", stroke: INK, "stroke-width": 3 }, binder); + [-22, 22].forEach((y) => el("circle", { cx: -81, cy: y, r: 5, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, binder)); + txt(binder, 17, -6, "MEMORY.md", { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); + txt(binder, 17, 24, "long-term", { "text-anchor": "middle", "font-size": 20, "font-weight": 500 }); + const folders = Array.from({ length: 11 }, (_, i) => { + const g = el("g", {}, svg); + el("path", { d: "M0 -76 h14 l4 8 h8 V0 H0 Z", fill: i < 5 ? SKY : YEL, stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round" }, g); + return g; + }); + const card = el("g", {}, svg); + el("rect", { x: -14, y: -18, width: 28, height: 36, rx: 5, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, card); + el("path", { d: "M-7 -7 H7 M-7 1 H7 M-7 9 H2", stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, card); + + const add = el("g", { transform: "translate(676 54)" }, svg); + el("rect", { x: -86, y: -28, width: 172, height: 56, rx: 28, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7", class: "mg-ring" }, add); + el("rect", { x: -80, y: -22, width: 160, height: 44, rx: 22, fill: YEL, stroke: INK, "stroke-width": 3 }, add); + txt(add, 0, 7, "+ add a day", { "text-anchor": "middle", "font-size": 20, "font-weight": 700 }); + button(add, "Add a day. OpenClaw gains one more dated note; the two Hermes Agent files stay capped.", () => { user = true; extra = extra >= 6 ? 0 : extra + 1; tap = api.now(); api.poke(); }); + const cap = strip(svg, 520, 660); + return (t0, now) => { + const t = user ? HOLD : t0, w = now - tap, out = seg(t, 11, 11.5); + T1(t, w); T2(t, w - 0.12); + folders.forEach((g, i) => { + let k; + if (i < 5) k = ob(seg(t, 2.2 + i * 0.6, 2.55 + i * 0.6)); + else k = i - 5 < extra ? (i - 5 === extra - 1 ? ob(cl(w / 0.35)) : 1) : 0; + g.setAttribute("transform", `translate(${FX(i)} ${SH - 1.5}) scale(1 ${cl(k, 0, 1.25)})`); + g.setAttribute("opacity", (k <= 0.01 ? 0 : 1) * (1 - out)); + }); + const f = io(seg(t, 5.8, 7.3)), x0 = FX(2) + 13, y0 = 318, x1 = BX - 96, y1 = BY + 22, cx = FX(2) + 20, cy = 250; + const px = (1 - f) * (1 - f) * x0 + 2 * (1 - f) * f * cx + f * f * x1, py = (1 - f) * (1 - f) * y0 + 2 * (1 - f) * f * cy + f * f * y1; + tf(card, px, py - 18 * seg(t, 5.4, 5.8) * (1 - f), 1 - 0.25 * seg(f, 0.8, 1), Math.sin(f * 9) * 8); + card.setAttribute("opacity", seg(t, 5.4, 5.6) * (1 - seg(f, 0.9, 1))); + const pk = seg(t, 5.2, 5.7) * (1 - out); + path.setAttribute("opacity", pk); dream.setAttribute("opacity", pk); + tf(binder, BX, BY, 1 + 0.07 * Math.sin(seg(t, 7.2, 7.6) * Math.PI)); + cap.textContent = w >= 0 && w < 4 ? (extra ? "One more day, one more dated note. The two files stay capped." : "Shelf cleared. The two files are still capped.") : t < 2.2 || t > 11 ? "Hermes Agent caps two files" : t < 5.2 ? "OpenClaw adds dated notes" : t < 7.6 ? "Dreaming promotes qualified items into MEMORY.md" : "Hermes Agent caps two files. OpenClaw adds dated notes."; + }; + }, + }; + + /* ---- 4. two doors open on what is behind each; a paper plane carries a setup across ---- */ + SC.doors = { + dur: 12, still: 9.6, + build(svg) { + txt(svg, 44, 62, "Who should pick which?", { "font-size": 32, "font-weight": 700 }); + const DW = 290, Y0 = 130, Y1 = 420, SL = 0.16; + const mk = (x0, hingeRight, name, col, items, t0) => { + const mid = x0 + DW / 2, vis = hingeRight ? x0 + (DW * (1 - SL)) / 2 : x0 + DW * SL + (DW * (1 - SL)) / 2; + txt(svg, mid, 114, name, { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); + el("rect", { x: x0, y: Y0, width: DW, height: Y1 - Y0, rx: 8, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + el("rect", { x: x0 - 16, y: Y1, width: DW + 32, height: 14, rx: 7, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + const lead = txt(svg, vis, Y0 + (items.length === 2 ? 76 : 58), "if you want", { "text-anchor": "middle", "font-size": 20, "font-weight": 500, fill: MUTE }); + const gap = items.length === 2 ? 66 : 60, top = Y0 + (items.length === 2 ? 142 : 116); + const chips = items.map((s, i) => { const c = chip(svg, s, i % 2 ? "#fff" : SOFT); return { g: c.g, y: top + i * gap }; }); + const door = el("rect", { y: Y0, height: Y1 - Y0, rx: 8, fill: col, stroke: INK, "stroke-width": 3 }, svg); + const pan = [0, 1].map(() => el("rect", { rx: 8, fill: "none", stroke: INK, "stroke-width": 2.5 }, svg)); + const knob = el("circle", { cy: (Y0 + Y1) / 2 + 10, r: 9, fill: YEL, stroke: INK, "stroke-width": 3 }, svg); + return (t) => { + const o = io(seg(t, t0, t0 + 1)) - io(seg(t, 10.9, 11.6)), w = DW * (1 - (1 - SL) * o), x = hingeRight ? x0 + DW - w : x0; + door.setAttribute("x", x); door.setAttribute("width", w); + const m = Math.min(26, w * 0.2), pw = w - 2 * m; + pan.forEach((p, i) => { p.setAttribute("x", x + m); p.setAttribute("width", Math.max(pw, 2)); p.setAttribute("y", Y0 + 24 + i * 138); p.setAttribute("height", i ? 104 : 118); p.setAttribute("opacity", pw > 8 ? 1 : 0); }); + knob.setAttribute("cx", hingeRight ? x + Math.min(20, w * 0.4) : x + w - Math.min(20, w * 0.4)); knob.setAttribute("opacity", seg(w, 60, 110)); + lead.setAttribute("opacity", seg(o, 0.7, 1)); + chips.forEach((c, i) => { const a = t0 + 1 + i * 0.4, k = ob(seg(t, a, a + 0.35)) * (1 - seg(t, 10.7, 10.9)); tf(c.g, vis, c.y, cl(k, 0, 1.3)); show(c.g, k); }); + }; + }; + const A = mk(50, false, "Hermes Agent", LIL, ["capped memory", "serverless backends"], 0.8); + const B = mk(460, true, "OpenClaw", BLUE, ["the larger project", "native apps", "ClawHub"], 3.4); + const X0 = 610, X1 = 190, PY = 462; + const trail = el("path", { stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "3 9", "stroke-linecap": "round", fill: "none" }, svg); + const label = txt(svg, 400, 511, "hermes claw migrate", { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); + const plane = el("g", {}, svg); + el("path", { d: "M-30 2 L26 -18 L12 2 L22 16 Z", fill: YEL, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, plane); + el("path", { d: "M-30 2 L12 2", stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, plane); + const cap = strip(svg, 528, 680); + return (t) => { + A(t); B(t); + const p = io(seg(t, 6.6, 8.6)), out = seg(t, 10.7, 11.2), x = X0 + (X1 - X0) * p, y = PY - 6 * Math.sin(p * Math.PI * 3); + tf(plane, x, y, 1, -Math.cos(p * Math.PI * 3) * 9); + plane.setAttribute("opacity", seg(t, 6.4, 6.7) * (1 - out)); + trail.setAttribute("d", `M${X0 + 34} ${PY} H${Math.min(X0 + 34, x + 38)}`); trail.setAttribute("opacity", (p > 0.02 ? 1 : 0) * (1 - out)); + label.setAttribute("opacity", seg(t, 7.2, 7.7) * (1 - out)); + cap.textContent = t < 3.4 || t > 10.9 ? "Hermes Agent: a tight, capped memory or serverless backends" : t < 6.4 ? "OpenClaw: the larger project, native apps, or ClawHub" : "The Hermes docs describe an import from OpenClaw"; + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + txt(svg, 66, 92, "COMPARISON", { "font-family": MONO, "font-size": 22, "font-weight": 700, fill: MUTE, "letter-spacing": 3 }); + txt(svg, 64, 176, "Hermes Agent", { "font-size": 76, "font-weight": 700 }); + txt(svg, 64, 262, "vs OpenClaw", { "font-size": 76, "font-weight": 700 }); + el("path", { d: "M66 290 H520", stroke: YEL, "stroke-width": 14, "stroke-linecap": "round" }, svg); + txt(svg, 64, 346, "Checked 7 Oct 2026", { "font-size": 25, "font-weight": 500, fill: MUTE }); + /* two tin cans on a string */ + el("path", { d: "M222 430 Q480 540 738 430", fill: "none", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg); + const can = (x, col, flip) => { + const g = el("g", { transform: `translate(${x} 430) scale(${flip} 1) rotate(-14)` }, svg); + el("rect", { x: -100, y: -40, width: 100, height: 80, fill: col, stroke: INK, "stroke-width": 3 }, g); + el("ellipse", { cx: 0, cy: 0, rx: 13, ry: 40, fill: col, stroke: INK, "stroke-width": 3 }, g); + el("ellipse", { cx: -100, cy: 0, rx: 13, ry: 40, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + el("path", { d: "M-72 -40 V40 M-28 -40 V40", stroke: INK, "stroke-width": 2.5 }, g); + el("circle", { cx: 6, cy: 0, r: 5, fill: INK }, g); + [0, 1, 2].forEach((i) => el("path", { d: `M${-128 - i * 18} ${-16 - i * 8} Q${-140 - i * 20} 0 ${-128 - i * 18} ${16 + i * 8}`, fill: "none", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, g)); + }; + can(222, LIL, 1); can(738, BLUE, -1); + return () => {}; + }, + }; + + /* ---- player ---- */ + const q = new URLSearchParams(location.search), frozen = q.has("mgstill"), fixed = parseFloat(q.get("mgstill")); + const calm = matchMedia("(prefers-reduced-motion: reduce)").matches; + const mount = (fig) => { + const sc = SC[fig.dataset.scene], img = fig.querySelector("img"); if (!sc || !img) return; + const W = sc.w || 800, H = sc.h || 600; + const svg = el("svg", { viewBox: `0 0 ${W} ${H}`, class: "mg-svg", role: "group", "aria-label": img.alt || "" }); + svg.style.aspectRatio = `${W} / ${H}`; + el("rect", { width: W, height: H, fill: "#fff" }, svg); + img.replaceWith(svg); + let off = 0, raf = 0, seen = false, held = calm; + const base = performance.now(), clock = () => (performance.now() - base) / 1000; + let draw = () => {}; + const frame = () => { const now = clock(); draw(held ? sc.still : (((now + off) % sc.dur) + sc.dur) % sc.dur, now); }; + const tick = () => { cancelAnimationFrame(raf); frame(); if (seen && !held) raf = requestAnimationFrame(tick); }; + const api = { now: clock, seek: (s) => { off = s - clock(); held = false; tick(); }, poke: () => { held = false; tick(); } }; + draw = sc.build(svg, api); + if (frozen) { draw(isNaN(fixed) ? sc.still : fixed, 0); return; } + new IntersectionObserver(([e]) => { + seen = e.isIntersecting; + if (seen) { tick(); if (!fig.dataset.sent && window.posthog) { fig.dataset.sent = 1; window.posthog.capture("blog_scene_view", { slug: location.pathname.split("/").filter(Boolean).pop(), scene: fig.dataset.scene }); } } + else cancelAnimationFrame(raf); + }, { threshold: 0.25 }).observe(fig); + svg.addEventListener("click", () => { if (!fig.dataset.hit && window.posthog) { fig.dataset.hit = 1; window.posthog.capture("blog_scene_interact", { slug: location.pathname.split("/").filter(Boolean).pop(), scene: fig.dataset.scene }); } }); + frame(); + }; + const go = () => document.querySelectorAll("figure.mg[data-scene]").forEach(mount); + const fonts = document.fonts && document.fonts.load ? Promise.all([document.fonts.load('700 32px "Space Grotesk"'), document.fonts.load('500 20px "Space Grotesk"'), document.fonts.load('700 20px "JetBrains Mono"')]).catch(() => {}) : Promise.resolve(); + const start = () => fonts.then(go, go); + if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", start); else start(); +})(); diff --git a/blog/src/posts/agent-tools-today-2026-10-07.md b/blog/src/posts/agent-tools-today-2026-10-07.md new file mode 100644 index 000000000..d00b33da2 --- /dev/null +++ b/blog/src/posts/agent-tools-today-2026-10-07.md @@ -0,0 +1,62 @@ +--- +title: "Agent Tools Today, 7 Oct 2026: Mistral Large 4, EmbeddingGemma 2, OpenAI Decisions API" +seoTitle: "Agent Tools Today (7 Oct 2026): Launches, Skills, MCP Servers" +description: "The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 7 Oct 2026, each with its source." +date: 2026-10-07 +category: news +categoryLabel: News +type: Non-technical +series: agent-tools-today +primaryKeyword: "agent tools today 7 oct 2026" +secondaryKeywords: ["mistral large 4", "embeddinggemma 2", "openai decisions api", "claude code 2.1.292", "html-plan"] +tags: ["Daily Brief", "Claude Code", "Mistral", "Skills", "Open Source"] +--- + +Agent tools today, 7 Oct 2026, in one line: Mistral previewed its largest model, Google released a small embedding model, and OpenAI put its Decisions API into public beta. Every number was checked on 7 Oct, one day after [the 6 Oct edition](/blog/agent-tools-today-2026-10-06/). + +
Animation. Five plant pots of different sizes land in a row on a shelf, numbered 1 to 5, from one very large pot to one very small pot, and a leafy plant grows in each. A paper tag swings down on a string under each pot: Mistral Large 4, EmbeddingGemma 2, OpenAI Decisions API, Claude Code v2.1.292 and Gemini CLI v0.63.0.
The five launches of the day, one pot per launch. Tap a pot for its one line.
+ +## Top 5 launches + +1. **Mistral Large 4.** Mistral opened a public preview on 6 Oct. Its post describes a multimodal model with 1 trillion parameters, 49 billion active, on 6 Oct figures. The preview API is live. The weights are not out: Mistral says it will release them by the end of October. Compare [Reflection's Beam](/blog/reflection-beam/). 1,625 points on Hacker News. [Source](https://mistral.ai/news/mistral-large-4/) +2. **EmbeddingGemma 2.** Google released it on 6 Oct under Apache 2.0. One model with 740 million parameters, on Google's 6 Oct figures, maps text, code, images, audio and video into one embedding space, sized to run on a device. 247 points on Hacker News. [Source](https://blog.google/innovation-and-ai/technology/developers-tools/embeddinggemma-2/) +3. **OpenAI Decisions API.** In public beta, per a changelog entry dated 6 Oct. `POST /v1/decisions` returns typed answers: the probability that a condition is true, one choice from a fixed set, or a score against a rubric. `gpt-6-luna` is the only model so far. OpenAI says it is about 10x faster than the Responses API. 181 points on Hacker News. [Source](https://developers.openai.com/api/docs/guides/decisions) +4. **Claude Code v2.1.292.** Released 6 Oct. It adds `--marketplace ` to `claude plugin install` and an `effort` parameter to the Agent tool. One fix is marked as security: it stops PreToolUse hook approvals and auto mode from bypassing the permission prompt for file reads from network (UNC) paths. [Source](https://github.com/anthropics/claude-code/releases/tag/v2.1.292) +5. **Gemini CLI v0.63.0.** Released 6 Oct. The notes list fixes: one bounds tool output size in long agent loops, one targets an endless sign in loop. [Source](https://github.com/google-gemini/gemini-cli/releases/tag/v0.63.0) + +## Top 4 skills, MCP servers and plugins + +1. **html-plan.** A plugin in Anthropic's community marketplace for Claude Code. `/html-plan` turns a plan into one HTML page: a tree of claims you open one level at a time, with decisions you answer in place. Added 1 Oct, updated twice on 5 Oct. The marketplace repo is Apache 2.0, 4,527 stars on 7 Oct. [Source](https://github.com/anthropics/claude-plugins-community/tree/main/html-plan) +2. **OpenWork v0.18.57.** Released 7 Oct. One prompt asks your agent to bring your Claude Cowork and Claude Code plugins and skills into OpenWork, a desktop app built on OpenCode. 23,920 stars on 7 Oct. [Source](https://github.com/different-ai/openwork/releases/tag/v0.18.57) +3. **pawl 0.4.1.** One plugin for Claude Code, Codex and Antigravity that runs small checks as code before an agent uses a tool. The 6 Oct patch closes bypasses found in review: deletion checks now follow symlinks before deciding whether a command reaches a protected directory. Apache 2.0, 2 stars on 7 Oct, 2 points on Hacker News. [Source](https://github.com/ulukaya/pawl/releases/tag/v0.4.1) +4. **skill-placebo v0.1.1.** A test of nine popular skills against neutral text of the same length. The README reports that 2 of 9 beat the placebo, both on cost at an adjusted p of 0.049, 1 did worse and 6 did no better, across 450 trials with one model in Claude Code. The 6 Oct release recounts two timeouts as failures. MIT, 1 star on 7 Oct. [Source](https://github.com/simonether/skill-placebo) + +## Top 5 moves from multi agent tools + +1. **Orca.** Release v1.4.222 on 7 Oct. A worker started with `orca orchestration worker-start --agent opencode` no longer leaves its task unsent in OpenCode's input box on a busy machine: Orca now waits until OpenCode can submit it. Three other fixes live in the terminal background service and only apply once it restarts. Updating from v1.4.221 keeps the running service. [Source](https://github.com/stablyai/orca/releases/tag/v1.4.222) +2. **[Munder Difflin](https://harnessmd.com/download).** Free and open source: no new release today. The latest is v0.5.5, from 1 Oct. [Source](https://github.com/HarnessMD/munder-difflin/releases) +3. **Herdr GPUI.** Release v20261006.1 on 6 Oct. It runs setup, run and archive scripts per repository for worktrees, and needs a deliberate click before it trusts them. Apache 2.0, 960 stars on 7 Oct. [Source](https://github.com/penso/herdr-gpui/releases/tag/v20261006.1) +4. **OpenCode.** v1.18.35 on 6 Oct, the first release since 30 Sep. xAI tool results now include supported images. [Source](https://github.com/anomalyco/opencode/releases/tag/v1.18.35) +5. **Pi.** No new release since v1.0.4 on 5 Oct. One of its maintainers published "What is Codemode" on 6 Oct. In Pi, Codemode is JavaScript that runs in a sandbox on the harness side, so an agent can chain tool calls without each result passing through the model's context. 25 points on Hacker News. Background: [what is Pi agent](/blog/what-is-pi-agent/). [Source](https://lucumr.pocoo.org/2026/10/6/codemode/) + +## Top 5 rising repos + +1. **openai/math.** Created 6 Oct. Mathematical manuscripts and proof files produced by an internal OpenAI model: 722 manuscripts in 372 families, per the README. Apache 2.0, 3,315 stars on 7 Oct. 72 points on Hacker News for one preprint. [Source](https://github.com/openai/math) +2. **openTPU.** An open source AI accelerator, developed by AI, per its README. The hardware design, instruction set, simulator and compiler sit in one repo. Apache 2.0, 248 stars on 7 Oct, 251 points on Hacker News. [Source](https://github.com/FeSens/openTPU) +3. **OpenChart.** A desktop charting app with AI agents for market analysis and alerts. Created 5 Oct. Modified Apache 2.0 licence, 92 stars on 7 Oct, 38 points on Hacker News. [Source](https://github.com/longsurf-ai/openchart) +4. **Jiti.** Grow a running Common Lisp application through chat. Created 4 Oct. No licence listed. 53 stars on 7 Oct, 29 points on Hacker News. [Source](https://github.com/ghuntley/jiti) +5. **AnyPS5.** Not an agent tool. It ports PS5 executables to Linux and Windows without emulation. GPL 2.0, 6,769 stars on 7 Oct, 134 points on Hacker News. [Source](https://github.com/boykopovar/AnyPS5) + +New repos can gain stars quickly for reasons other than use, so treat these as names to watch, not recommendations. + +## Top 3 things people are arguing about + +1. **Should a model refuse security work?** Mistral's 6 Oct post says several closed models, Claude Opus 5.5 and GPT-6 Astra among them, score near zero on one vulnerability test because they refuse the task, and that Mistral Large 4 scores 82% on it. 974 comments on Hacker News. [Source](https://news.ycombinator.com/item?id=49977979) +2. **Is a proof that nobody checked a result?** The openai/math README says not all manuscripts have Lean formalizations, and that some of the unformalized results could have issues. 534 points and 455 comments on Hacker News. [Source](https://news.ycombinator.com/item?id=49984923) +3. **Is vibecoding less fun?** An essay from 20 Aug 2026 reached Hacker News on 6 Oct. It argues that vibecoding puts the fun at the start, and that refactoring the result is not thrilling. 180 points and 258 comments. [Source](https://www.autodidacts.io/vibecoding-isnt-as-fun-as-writing-code-by-hand/) + +## How this list is built + +Each day our agents read GitHub releases and trending pages, the Hacker News front page, and the top posts on X and Reddit about coding agents. A name only makes a list with a link that was opened and a signal that can be shown: points, stars or a dated release. Repos are checked against the GitHub API before they appear, and a claim that exists only as a social post is left out. New here? Start with the [install guide](/blog/how-to-install-and-use-munder-difflin/). + + diff --git a/blog/src/posts/hermes-agent-vs-openclaw.md b/blog/src/posts/hermes-agent-vs-openclaw.md new file mode 100644 index 000000000..03ae3476f --- /dev/null +++ b/blog/src/posts/hermes-agent-vs-openclaw.md @@ -0,0 +1,124 @@ +--- +title: "Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick" +seoTitle: "Hermes Agent vs OpenClaw: Memory, Channels, Install (Oct 2026)" +description: "Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which." +date: 2026-10-07 +category: comparisons +categoryLabel: Comparisons +type: Non-technical +primaryKeyword: "hermes agent vs openclaw" +secondaryKeywords: ["openclaw vs hermes", "hermes vs openclaw", "is hermes agent better than openclaw", "hermes agent or openclaw", "openclaw vs hermes agent memory"] +tags: ["Comparisons", "Open Source", "CLI Agents"] +faq: + - q: "Is Hermes Agent better than OpenClaw?" + a: "Not across the board. We think Hermes Agent is the better pick if you want a small, capped memory or serverless backends. OpenClaw is the larger project: the GitHub API showed 391,524 stars against 251,736 on 7 Oct 2026, and its README lists native apps for macOS, iOS, Android, Windows and Linux." + - q: "What is the difference between Hermes Agent and OpenClaw memory?" + a: "Hermes Agent keeps two small files, `MEMORY.md` (2,200 characters) and `USER.md` (1,375 characters), and searches past sessions in a SQLite database. OpenClaw writes Markdown files in its workspace, including `MEMORY.md` and dated daily notes, and a background process it calls dreaming promotes items into long-term memory. Both descriptions come from each project's docs on 7 Oct 2026." + - q: "Are Hermes Agent and OpenClaw free?" + a: "Yes. The GitHub API listed both as MIT licensed on 7 Oct 2026, and OpenClaw's README says it has no paid tier, hosted service, or token. You pay for the model you connect, unless you run a local one." + - q: "Can I move from OpenClaw to Hermes Agent?" + a: "Yes. The Hermes docs say `hermes claw migrate` imports your persona file, memory file, skills, command allowlist and messaging settings. Add `--dry-run` to preview. API keys, Telegram's bot token included, need `--migrate-secrets`." + - q: "Who makes Hermes Agent and OpenClaw?" + a: "Hermes Agent is built by Nous Research. OpenClaw's README says it is stewarded by the OpenClaw Foundation, an independent 501(c)(3)." +--- + +Our view: pick OpenClaw if you want the larger project with native apps, and Hermes Agent if you want a small, capped memory and a tool that can import an OpenClaw setup. Both are free, MIT licensed AI assistants you host yourself. Checked 7 Oct 2026. + +This sits in our [Comparisons hub](/blog/topics/comparisons/). For each tool alone, read [what is Hermes Agent](/blog/what-is-hermes-agent/) and [OpenClaw alternatives](/blog/openclaw-alternatives/). + +## What are Hermes Agent and OpenClaw? + +Both are open source AI assistants that you run yourself and message from your chat apps. The [Hermes Agent README](https://github.com/NousResearch/hermes-agent) calls it "the self-improving AI agent built by Nous Research". The [OpenClaw README](https://github.com/openclaw/openclaw) says OpenClaw is "stewarded by the OpenClaw Foundation, an independent 501(c)(3), and has no paid tier, hosted service, or token". + +The GitHub API listed both under the MIT licence on 7 Oct 2026. On the same day it showed 391,524 stars for OpenClaw and 251,736 for Hermes Agent. + +
Animation. Two measuring jugs fill at the same speed. The Hermes Agent jug stops at 251,736 stars and the OpenClaw jug keeps filling to 391,524 stars. A dotted line marks the gap between the two levels, and each jug carries an MIT label.
OpenClaw is the larger project by stars. Both are MIT. GitHub API, 7 Oct 2026.
+ +## What is the latest release of each? + +Hermes Agent's latest release is v0.21.5 (tag v2026.9.24), published 24 Sep 2026, and OpenClaw's is 2026.9.8, published 3 Oct 2026. We read both from the GitHub API (`gh api repos/NousResearch/hermes-agent/releases/latest` and the same call for `openclaw/openclaw`) on 7 Oct 2026, dates in UTC. + +OpenClaw also had a prerelease, v2026.10.1-beta.1, from 5 Oct 2026. None of the six newest Hermes Agent releases was marked a prerelease. + +## Hermes Agent vs OpenClaw at a glance, checked 7 Oct 2026 + +These rows are our selection, from each project's README, docs and the GitHub API on 7 Oct 2026. + +| | Hermes Agent | OpenClaw | +| --- | --- | --- | +| Maker | Nous Research | OpenClaw Foundation | +| Licence | MIT | MIT | +| Latest release | v0.21.5, 24 Sep 2026 | 2026.9.8, 3 Oct 2026 | +| Prerelease | None in the six newest | v2026.10.1-beta.1, 5 Oct 2026 | +| GitHub stars | 251,736 | 391,524 | +| Needs | The install script | Node 24.16+ or 26.1+ | +| Memory | Two capped files, plus session search | Markdown files in the workspace | +| Skills | Written by the agent, or from a hub | Self-learning, or ClawHub | +| Price | Free. You pay for the model. | Free. You pay for the model. | + +## How do you install each, and where does it run? + +Each installs with one script. These come from the two READMEs: + +``` +curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash +curl -fsSL https://openclaw.ai/install.sh | bash +``` + +Both also publish a PowerShell installer for Windows. The Hermes README lists Linux, macOS, WSL2, native Windows and Android through Termux, and seven terminal backends: local, Docker, SSH, Singularity, Modal, Daytona and Vercel Sandbox. + +[OpenClaw's install page](https://docs.openclaw.ai/install) asks for Node 24.16+ or 26.1+ and lists macOS, Linux and Windows (native or WSL2). After that, `openclaw onboard --install-daemon` sets it up. Its README also lists native apps for macOS, iOS, Android, Windows and Linux. + +## Which chat apps does each connect to? + +Both connect to Telegram, Discord, Slack, WhatsApp, Signal and Microsoft Teams, going by their docs. OpenClaw's README names "Discord, iMessage, Slack, Teams, Telegram, WhatsApp, and 20+ more". Its [channels page](https://docs.openclaw.ai/channels) says to start with Telegram, because it "needs a bot token and no plugin install". + +The Hermes [messaging page](https://hermes-agent.nousresearch.com/docs/user-guide/messaging) adds SMS, email, Matrix, Mattermost, LINE and iMessage through BlueBubbles, among others. One command, `hermes gateway`, runs them. + +
Animation. Two racks of pigeonholes stand side by side, one headed Hermes Agent and one headed OpenClaw. Letters drop into matching cubbies in both racks one at a time, labelled Telegram, Discord, Slack, WhatsApp, Signal and Teams, and each cubby gets a tick. Tapping a cubby highlights that app in both racks.
Six chat apps both projects' docs name. Checked 7 Oct 2026.
+ +## Which models does each support? + +Both take hosted and local models, and you bring the key. The Hermes README lists "Nous Portal, OpenRouter, OpenAI, your own endpoint, and many others", switched with `hermes model`. + +[OpenClaw's models page](https://docs.openclaw.ai/concepts/models) mentions OpenAI, Anthropic, OpenRouter, Ollama and LM Studio, among others, set with `openclaw models set `. Its advice: "Set your primary to the strongest latest-generation model available to you." + +## How do memory and skills differ? + +Both can write their own skills, going by their docs. The memory differs: Hermes Agent caps its memory files, while OpenClaw keeps a growing set of Markdown files. + +The [Hermes memory docs](https://hermes-agent.nousresearch.com/docs/user-guide/features/memory) describe two files in `~/.hermes/memories/`: `MEMORY.md` at 2,200 characters and `USER.md` at 1,375. Past sessions sit in SQLite with full-text search. The [skills docs](https://hermes-agent.nousresearch.com/docs/user-guide/features/skills) say the agent creates, patches and deletes skills in `~/.hermes/skills/` itself. + +[OpenClaw's memory docs](https://docs.openclaw.ai/concepts/memory) describe plain Markdown in `~/.openclaw/workspace`: `MEMORY.md` for long-term facts, `memory/YYYY-MM-DD.md` for daily notes, and `DREAMS.md`. A default background process called dreaming promotes qualified items into `MEMORY.md`. Yes, your assistant keeps a dream diary. With an embedding provider configured, search mixes vector and keyword matching. + +
Animation. On the left, under Hermes Agent, two short drawers slide out of a chest, one for the memory file, 2,200 characters, and one for the user file, 1,375 characters. Each fills with cards and is marked full, and one extra card bounces off. On the right, under OpenClaw, a shelf marked daily notes gains one dated folder after another, and a card floats up into a binder marked long-term memory. An add a day button puts one more folder on the shelf.
Hermes Agent caps two files. OpenClaw adds dated notes. Each project's memory docs, 7 Oct 2026.
+ +[OpenClaw skills](https://docs.openclaw.ai/tools/skills) are folders with a `SKILL.md` file. `openclaw skills install @owner/` pulls one from ClawHub, its public registry. Its [self-learning docs](https://docs.openclaw.ai/tools/self-learning) say it "turns corrections and successful work into reusable skills", and that the default mode is `auto`. + +## What do their docs say about security? + +Both docs describe a pairing code for unknown senders, and each lists its own controls. We did not test either tool, so this is each project's own wording. + +The [Hermes security page](https://hermes-agent.nousresearch.com/docs/user-guide/security) lists eight layers, including dangerous command approval and container isolation. The default approval mode is `smart`, which uses a second model to judge risk. Hub skills go through a security scanner. + +OpenClaw's README says "Tools run on the host for the main session unless you configure sandboxing" and "Treat inbound messages as untrusted input". Its [security page](https://docs.openclaw.ai/gateway/security) offers `openclaw security audit`. The skills docs say: "Treat third-party skills as untrusted code." + +## What do they cost? + +Both are free software, and you pay for the model you connect. The Hermes README offers Nous Portal as an optional subscription that covers the model and hosted tools. + +Our view: both are general assistants, not tools for coding work. For that there is [Munder Difflin](https://harnessmd.com/download), free and open source: a desktop app that runs a team of coding agents such as Claude Code, Codex and Gemini CLI on your own computer. It fits coding work, not chat app errands. See [how to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/). + +## Who should pick which? + +Pick by what you want the assistant to become over time. + +
Animation. Two doors stand side by side. The Hermes Agent door swings open on capped memory and serverless backends. The OpenClaw door swings open on the larger project, native apps and ClawHub. A paper plane marked hermes claw migrate flies from the OpenClaw door to the Hermes Agent door.
Two doors, one hallway. The Hermes docs describe an import from OpenClaw, 7 Oct 2026.
+ +- **Hermes Agent** if you want a tight, capped memory or serverless backends. +- **OpenClaw** if you want the larger project, native apps, or ClawHub. +- **Undecided:** we think starting on OpenClaw is low risk. The [Hermes migration guide](https://hermes-agent.nousresearch.com/docs/guides/migrate-from-openclaw) says `hermes claw migrate` imports your persona, memory, skills, allowlist and messaging settings, and `--dry-run` previews it. API keys need `--migrate-secrets`. + +The wider field is in [open source AI agents](/blog/open-source-ai-agents/), and hosted options are in [ChatGPT dots alternatives](/blog/chatgpt-dots-alternatives/). + + diff --git a/blog/src/posts/what-is-hermes-agent.md b/blog/src/posts/what-is-hermes-agent.md index 192f44d94..2d99cfd22 100644 --- a/blog/src/posts/what-is-hermes-agent.md +++ b/blog/src/posts/what-is-hermes-agent.md @@ -94,7 +94,7 @@ Zero assets is expected: the installer pulls from git, so the release is a tag a ## Hermes Agent vs OpenClaw, Munder Difflin, Claude Code and Pi: which should you use? -Hermes or OpenClaw if you want a personal assistant in your chat apps, the other three if the job is code. Our [OpenClaw alternatives](/blog/openclaw-alternatives/) list has more picks. Licences and releases read from each repo through `gh api` on 3 Oct 2026, dates in UTC: +Hermes or OpenClaw if you want a personal assistant in your chat apps, the other three if the job is code. Our [OpenClaw alternatives](/blog/openclaw-alternatives/) list has more picks. Head to head: [Hermes Agent vs OpenClaw](/blog/hermes-agent-vs-openclaw/). Licences and releases read from each repo through `gh api` on 3 Oct 2026, dates in UTC: | | Licence | Where it runs | What it is for | Latest release | | --- | --- | --- | --- | --- | diff --git a/docs/blog/agent-tools-today-2026-10-03/index.html b/docs/blog/agent-tools-today-2026-10-03/index.html index 156c099b5..8034b809d 100644 --- a/docs/blog/agent-tools-today-2026-10-03/index.html +++ b/docs/blog/agent-tools-today-2026-10-03/index.html @@ -249,50 +249,50 @@

How this list is built
- +
- + 5 min
-

Agent Tools Today, 6 Oct 2026: OpenAI Text Watermarks, Reflection Beam, Cloudflare Web Search

-

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 6 Oct 2026, each with its source.

+

Agent Tools Today, 7 Oct 2026: Mistral Large 4, EmbeddingGemma 2, OpenAI Decisions API

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 7 Oct 2026, each with its source.

News - Read → + Read →
- +
- + 5 min
-

Agent Tools Today, 5 Oct 2026: Paperclip Goes Full Auto, Strata's Codex API, Cloudflare's Git Contest

-

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 5 Oct 2026, each with its source.

+

Agent Tools Today, 6 Oct 2026: OpenAI Text Watermarks, Reflection Beam, Cloudflare Web Search

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 6 Oct 2026, each with its source.

News - Read → + Read →
- +
- + 5 min
-

Agent Tools Today, 4 Oct 2026: You should Know, OpenClaw's Android Wait, Codex Wish List

-

The top 5 launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 4 Oct 2026, each with its source.

+

Agent Tools Today, 5 Oct 2026: Paperclip Goes Full Auto, Strata's Codex API, Cloudflare's Git Contest

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 5 Oct 2026, each with its source.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-04/index.html b/docs/blog/agent-tools-today-2026-10-04/index.html index 96803ac4a..eb5acca87 100644 --- a/docs/blog/agent-tools-today-2026-10-04/index.html +++ b/docs/blog/agent-tools-today-2026-10-04/index.html @@ -248,50 +248,50 @@

How this list is built
- +
- + 5 min
-

Agent Tools Today, 6 Oct 2026: OpenAI Text Watermarks, Reflection Beam, Cloudflare Web Search

-

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 6 Oct 2026, each with its source.

+

Agent Tools Today, 7 Oct 2026: Mistral Large 4, EmbeddingGemma 2, OpenAI Decisions API

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 7 Oct 2026, each with its source.

News - Read → + Read →
- +
- + 5 min
-

Agent Tools Today, 5 Oct 2026: Paperclip Goes Full Auto, Strata's Codex API, Cloudflare's Git Contest

-

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 5 Oct 2026, each with its source.

+

Agent Tools Today, 6 Oct 2026: OpenAI Text Watermarks, Reflection Beam, Cloudflare Web Search

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 6 Oct 2026, each with its source.

News - Read → + Read →
- +
- + - 4 min + 5 min
-

Agent Tools Today, 3 Oct 2026: Claude Code Mods, OpenDots, Conductor Mobile

-

The top 5 launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents on 3 Oct 2026, each with its source.

+

Agent Tools Today, 5 Oct 2026: Paperclip Goes Full Auto, Strata's Codex API, Cloudflare's Git Contest

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 5 Oct 2026, each with its source.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-05/index.html b/docs/blog/agent-tools-today-2026-10-05/index.html index 6a612e6ce..96e84e35e 100644 --- a/docs/blog/agent-tools-today-2026-10-05/index.html +++ b/docs/blog/agent-tools-today-2026-10-05/index.html @@ -246,50 +246,50 @@

How this list is built
- +
- + 5 min
-

Agent Tools Today, 6 Oct 2026: OpenAI Text Watermarks, Reflection Beam, Cloudflare Web Search

-

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 6 Oct 2026, each with its source.

+

Agent Tools Today, 7 Oct 2026: Mistral Large 4, EmbeddingGemma 2, OpenAI Decisions API

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 7 Oct 2026, each with its source.

News - Read → + Read →
- +
- + 5 min
-

Agent Tools Today, 4 Oct 2026: You should Know, OpenClaw's Android Wait, Codex Wish List

-

The top 5 launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 4 Oct 2026, each with its source.

+

Agent Tools Today, 6 Oct 2026: OpenAI Text Watermarks, Reflection Beam, Cloudflare Web Search

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 6 Oct 2026, each with its source.

News - Read → + Read →
- +
- + - 4 min + 5 min
-

Agent Tools Today, 3 Oct 2026: Claude Code Mods, OpenDots, Conductor Mobile

-

The top 5 launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents on 3 Oct 2026, each with its source.

+

Agent Tools Today, 4 Oct 2026: You should Know, OpenClaw's Android Wait, Codex Wish List

+

The top 5 launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 4 Oct 2026, each with its source.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-06/index.html b/docs/blog/agent-tools-today-2026-10-06/index.html index 5669ee890..570e89cfa 100644 --- a/docs/blog/agent-tools-today-2026-10-06/index.html +++ b/docs/blog/agent-tools-today-2026-10-06/index.html @@ -241,56 +241,56 @@

How this list is built + + + + + + + +
+
+ - -
-
- - - - - - - -
-
-
+
diff --git a/docs/blog/indian-open-source-ai-projects-vs-big-tech/index.html b/docs/blog/indian-open-source-ai-projects-vs-big-tech/index.html index a50dd7b9e..d1318ba16 100644 --- a/docs/blog/indian-open-source-ai-projects-vs-big-tech/index.html +++ b/docs/blog/indian-open-source-ai-projects-vs-big-tech/index.html @@ -628,50 +628,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/local-first-vs-cloud-agent-sdks/index.html b/docs/blog/local-first-vs-cloud-agent-sdks/index.html index c47f63ef5..7e5f74932 100644 --- a/docs/blog/local-first-vs-cloud-agent-sdks/index.html +++ b/docs/blog/local-first-vs-cloud-agent-sdks/index.html @@ -368,50 +368,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/meta-muse-alternatives/index.html b/docs/blog/meta-muse-alternatives/index.html index ef1c759d6..124d0dc86 100644 --- a/docs/blog/meta-muse-alternatives/index.html +++ b/docs/blog/meta-muse-alternatives/index.html @@ -345,50 +345,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/meta-muse-grok-bot-privacy/index.html b/docs/blog/meta-muse-grok-bot-privacy/index.html index 2cdd71ea1..520f7a630 100644 --- a/docs/blog/meta-muse-grok-bot-privacy/index.html +++ b/docs/blog/meta-muse-grok-bot-privacy/index.html @@ -332,50 +332,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/meta-muse-vs-grok-bot/index.html b/docs/blog/meta-muse-vs-grok-bot/index.html index b05291e2c..58e7e600d 100644 --- a/docs/blog/meta-muse-vs-grok-bot/index.html +++ b/docs/blog/meta-muse-vs-grok-bot/index.html @@ -336,50 +336,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/munder-difflin-vs-chatgpt-dots/index.html b/docs/blog/munder-difflin-vs-chatgpt-dots/index.html index 5fb689aaf..b203966d5 100644 --- a/docs/blog/munder-difflin-vs-chatgpt-dots/index.html +++ b/docs/blog/munder-difflin-vs-chatgpt-dots/index.html @@ -358,50 +358,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/omniagent-alternatives/index.html b/docs/blog/omniagent-alternatives/index.html index 8ef872e22..64c3ef075 100644 --- a/docs/blog/omniagent-alternatives/index.html +++ b/docs/blog/omniagent-alternatives/index.html @@ -307,50 +307,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/open-source-ai-agents/index.html b/docs/blog/open-source-ai-agents/index.html index 3760afdd7..f1706ee21 100644 --- a/docs/blog/open-source-ai-agents/index.html +++ b/docs/blog/open-source-ai-agents/index.html @@ -374,50 +374,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

ChatGPT Dots Alternatives: 7 Always On Agents, Local and Cloud

-

Personal ChatGPT dots need Pro from $100 a month and skip the UK and EU. Seven alternatives, sorted by where they run: your computer or a vendor's cloud.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/openclaw-alternatives/index.html b/docs/blog/openclaw-alternatives/index.html index 1cbf8cd14..b15ad3e21 100644 --- a/docs/blog/openclaw-alternatives/index.html +++ b/docs/blog/openclaw-alternatives/index.html @@ -359,50 +359,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

Claude Code Alternatives: 7 Coding Agents to Switch To

+

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

Comparisons - Read → + Read →
- +
- + 5 min
-

ChatGPT Dots Alternatives: 7 Always On Agents, Local and Cloud

-

Personal ChatGPT dots need Pro from $100 a month and skip the UK and EU. Seven alternatives, sorted by where they run: your computer or a vendor's cloud.

+

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

+

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/orca-vs-munder-difflin/index.html b/docs/blog/orca-vs-munder-difflin/index.html index eb936b4df..ef5a233e9 100644 --- a/docs/blog/orca-vs-munder-difflin/index.html +++ b/docs/blog/orca-vs-munder-difflin/index.html @@ -346,50 +346,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/qm-vs-munder-difflin/index.html b/docs/blog/qm-vs-munder-difflin/index.html index 831b332f7..1c25c26d6 100644 --- a/docs/blog/qm-vs-munder-difflin/index.html +++ b/docs/blog/qm-vs-munder-difflin/index.html @@ -357,50 +357,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/tags/claude-code/index.html b/docs/blog/tags/claude-code/index.html index e062e19e9..c0103c6f1 100644 --- a/docs/blog/tags/claude-code/index.html +++ b/docs/blog/tags/claude-code/index.html @@ -105,11 +105,27 @@

Tag

#Claude Code

-

69 posts tagged Claude Code.

+

70 posts tagged Claude Code.

+
diff --git a/docs/blog/tags/cli-agents/index.html b/docs/blog/tags/cli-agents/index.html index 354b43946..3ed1417b8 100644 --- a/docs/blog/tags/cli-agents/index.html +++ b/docs/blog/tags/cli-agents/index.html @@ -105,11 +105,27 @@

Tag

#CLI Agents

-

14 posts tagged CLI Agents.

+

15 posts tagged CLI Agents.

+
diff --git a/docs/blog/tags/comparisons/index.html b/docs/blog/tags/comparisons/index.html index 8a55f0e99..1ee22073c 100644 --- a/docs/blog/tags/comparisons/index.html +++ b/docs/blog/tags/comparisons/index.html @@ -105,11 +105,27 @@

Tag

#Comparisons

-

34 posts tagged Comparisons.

+

35 posts tagged Comparisons.

+
diff --git a/docs/blog/tags/daily-brief/index.html b/docs/blog/tags/daily-brief/index.html index 06f425016..2e28ac7ad 100644 --- a/docs/blog/tags/daily-brief/index.html +++ b/docs/blog/tags/daily-brief/index.html @@ -105,11 +105,27 @@

Tag

#Daily Brief

-

4 posts tagged Daily Brief.

+

5 posts tagged Daily Brief.

+
diff --git a/docs/blog/tags/mistral/index.html b/docs/blog/tags/mistral/index.html new file mode 100644 index 000000000..c2d617098 --- /dev/null +++ b/docs/blog/tags/mistral/index.html @@ -0,0 +1,184 @@ + + + + + + + + +Mistral — Munder Difflin Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Tag

+

#Mistral

+

1 post tagged Mistral.

+
+
+
+ + +
+
+ + +
+ + + + + + diff --git a/docs/blog/tags/open-source/index.html b/docs/blog/tags/open-source/index.html index 09590b90b..0132d2cc8 100644 --- a/docs/blog/tags/open-source/index.html +++ b/docs/blog/tags/open-source/index.html @@ -105,11 +105,43 @@

Tag

#Open Source

-

49 posts tagged Open Source.

+

51 posts tagged Open Source.

+ +
diff --git a/docs/blog/tags/skills/index.html b/docs/blog/tags/skills/index.html index 78ea052ea..c812d073d 100644 --- a/docs/blog/tags/skills/index.html +++ b/docs/blog/tags/skills/index.html @@ -105,11 +105,27 @@

Tag

#Skills

-

6 posts tagged Skills.

+

7 posts tagged Skills.

+
diff --git a/docs/blog/tmux-and-scripts-vs-an-agent-harness/index.html b/docs/blog/tmux-and-scripts-vs-an-agent-harness/index.html index b505349f6..439b24c9a 100644 --- a/docs/blog/tmux-and-scripts-vs-an-agent-harness/index.html +++ b/docs/blog/tmux-and-scripts-vs-an-agent-harness/index.html @@ -283,50 +283,50 @@

FAQ

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/topics/comparisons/index.html b/docs/blog/topics/comparisons/index.html index 66a7820c2..fa18ac331 100644 --- a/docs/blog/topics/comparisons/index.html +++ b/docs/blog/topics/comparisons/index.html @@ -118,7 +118,7 @@

comparisons

Honest side-by-sides with the other ways to concepts36 - comparisons34 + comparisons35 internals19 @@ -130,7 +130,7 @@

comparisons

Honest side-by-sides with the other ways to memory5 - news4 + news5

@@ -185,6 +185,22 @@

OmniAgent Alternatives: What to Use

+
diff --git a/docs/blog/topics/concepts/index.html b/docs/blog/topics/concepts/index.html index 39e426cc2..32c56da56 100644 --- a/docs/blog/topics/concepts/index.html +++ b/docs/blog/topics/concepts/index.html @@ -118,7 +118,7 @@

concepts

The ideas underneath the product — harnesses, concepts36 - comparisons34 + comparisons35 internals19 @@ -130,7 +130,7 @@

concepts

The ideas underneath the product — harnesses, memory5 - news4 + news5

diff --git a/docs/blog/topics/guides/index.html b/docs/blog/topics/guides/index.html index d4ab2fa02..6c9e346af 100644 --- a/docs/blog/topics/guides/index.html +++ b/docs/blog/topics/guides/index.html @@ -118,7 +118,7 @@

guides

Step-by-step walkthroughs you can follow today concepts36 - comparisons34 + comparisons35 internals19 @@ -130,7 +130,7 @@

guides

Step-by-step walkthroughs you can follow today memory5 - news4 + news5

diff --git a/docs/blog/topics/index.html b/docs/blog/topics/index.html index 98593f4b8..b8f94fc1a 100644 --- a/docs/blog/topics/index.html +++ b/docs/blog/topics/index.html @@ -135,7 +135,7 @@

concepts

comparisons

-

34 posts.

+

35 posts.

View topic →
@@ -189,7 +189,7 @@

memory

news

-

4 posts.

+

5 posts.

View topic →
@@ -202,13 +202,13 @@

news

Multi-Agent88 - Claude Code69 + Claude Code70 - Open Source49 + Open Source51 Guides36 - Comparisons34 + Comparisons35 Concepts33 @@ -228,7 +228,7 @@

news

Automation15 - CLI Agents14 + CLI Agents15 AI Agents14 @@ -250,12 +250,12 @@

news

MCP7 + Skills7 + MemPalace6 Guardrails6 - Skills6 - Hive6 IDE6 @@ -268,6 +268,8 @@

news

Voice5 + Daily Brief5 + Git4 Architecture4 @@ -280,8 +282,6 @@

news

Slack4 - Daily Brief4 - Terminals3 Agentic AI3 @@ -478,6 +478,8 @@

news

OpenAI1 + Mistral1 +
diff --git a/docs/blog/topics/internals/index.html b/docs/blog/topics/internals/index.html index 954721699..0f4116285 100644 --- a/docs/blog/topics/internals/index.html +++ b/docs/blog/topics/internals/index.html @@ -118,7 +118,7 @@

internals

How the machine actually works: postmortems, a concepts36 - comparisons34 + comparisons35 internals19 @@ -130,7 +130,7 @@

internals

How the machine actually works: postmortems, a memory5 - news4 + news5

diff --git a/docs/blog/topics/memory/index.html b/docs/blog/topics/memory/index.html index 03c532708..52c8c9a9c 100644 --- a/docs/blog/topics/memory/index.html +++ b/docs/blog/topics/memory/index.html @@ -118,7 +118,7 @@

memory

How agents remember across sessions — and how a concepts36 - comparisons34 + comparisons35 internals19 @@ -130,7 +130,7 @@

memory

How agents remember across sessions — and how a memory5 - news4 + news5

diff --git a/docs/blog/topics/news/index.html b/docs/blog/topics/news/index.html index 14fd89d3b..847365b16 100644 --- a/docs/blog/topics/news/index.html +++ b/docs/blog/topics/news/index.html @@ -118,7 +118,7 @@

news

Agent Tools Today: a daily brief of the top five la concepts36 - comparisons34 + comparisons35 internals19 @@ -130,7 +130,7 @@

news

Agent Tools Today: a daily brief of the top five la memory5 - news4 + news5

@@ -138,6 +138,22 @@

news

Agent Tools Today: a daily brief of the top five la

+
diff --git a/docs/blog/topics/orchestration/index.html b/docs/blog/topics/orchestration/index.html index 765e09b06..dd8e8a9c0 100644 --- a/docs/blog/topics/orchestration/index.html +++ b/docs/blog/topics/orchestration/index.html @@ -118,7 +118,7 @@

orchestration

Patterns for making one boss agent run a f concepts36 - comparisons34 + comparisons35 internals19 @@ -130,7 +130,7 @@

orchestration

Patterns for making one boss agent run a f memory5 - news4 + news5

diff --git a/docs/blog/topics/story/index.html b/docs/blog/topics/story/index.html index 44aa09086..284e4d8b2 100644 --- a/docs/blog/topics/story/index.html +++ b/docs/blog/topics/story/index.html @@ -118,7 +118,7 @@

story

Launches, releases, and the occasional confession concepts36 - comparisons34 + comparisons35 internals19 @@ -130,7 +130,7 @@

story

Launches, releases, and the occasional confession memory5 - news4 + news5

diff --git a/docs/blog/topics/use-cases/index.html b/docs/blog/topics/use-cases/index.html index 8aa3dea37..cbd950fc7 100644 --- a/docs/blog/topics/use-cases/index.html +++ b/docs/blog/topics/use-cases/index.html @@ -118,7 +118,7 @@

use-cases

Real workflows the hive actually runs — writ concepts36 - comparisons34 + comparisons35 internals19 @@ -130,7 +130,7 @@

use-cases

Real workflows the hive actually runs — writ memory5 - news4 + news5

diff --git a/docs/blog/vibe-kanban-alternative/index.html b/docs/blog/vibe-kanban-alternative/index.html index 365fbe46a..549bd2523 100644 --- a/docs/blog/vibe-kanban-alternative/index.html +++ b/docs/blog/vibe-kanban-alternative/index.html @@ -273,50 +273,50 @@

Board or hive? How to choose

Related in Comparisons

- +
- + 5 min
-

Claude Code Alternatives: 7 Coding Agents to Switch To

-

Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models.

+

Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick

+

Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which.

Comparisons - Read → + Read →
- +
- + 5 min
-

Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026

-

The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026.

+

OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud

+

Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/what-is-hermes-agent/index.html b/docs/blog/what-is-hermes-agent/index.html index 6c173c12b..e8007e5e8 100644 --- a/docs/blog/what-is-hermes-agent/index.html +++ b/docs/blog/what-is-hermes-agent/index.html @@ -277,7 +277,7 @@

What is the lates

Zero assets is expected: the installer pulls from git, so the release is a tag and notes, with no binaries attached. Releases use a date tag and a version name, and the list shows five in September alone. The v0.21.5 notes call it a patch release rolling up about 460 merged pull requests since v0.21.4, and defer the full write up to v0.22.0.

Hermes Agent vs OpenClaw, Munder Difflin, Claude Code and Pi: which should you use?

-

Hermes or OpenClaw if you want a personal assistant in your chat apps, the other three if the job is code. Our OpenClaw alternatives list has more picks. Licences and releases read from each repo through gh api on 3 Oct 2026, dates in UTC:

+

Hermes or OpenClaw if you want a personal assistant in your chat apps, the other three if the job is code. Our OpenClaw alternatives list has more picks. Head to head: Hermes Agent vs OpenClaw. Licences and releases read from each repo through gh api on 3 Oct 2026, dates in UTC:

diff --git a/docs/llms.txt b/docs/llms.txt index 5c6600be2..08714df68 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -43,7 +43,7 @@ ## Blog -182 posts, grouped by topic, newest first in each topic. Topic hubs: https://munderdiffl.in/blog/topics/ +184 posts, grouped by topic, newest first in each topic. Topic hubs: https://munderdiffl.in/blog/topics/ ### guides @@ -139,6 +139,7 @@ - [Grok Bot Alternatives: 9 Picks, Hosted or on Your Computer](https://munderdiffl.in/blog/grok-bot-alternatives/): Grok Bot runs every Bot on one shared cloud computer in the US. Nine alternatives checked on 30 Sep 2026, from ChatGPT dots to open source agents you run. - [Herdr Alternatives: What to Pick and Who Each One Fits](https://munderdiffl.in/blog/herdr-alternatives/): Herdr alternatives checked on 14 Sep 2026: tmux, Munder Difflin, Claude Squad, cmux, Orca, Conductor, Superset and Emdash, and who each fits. - [OmniAgent Alternatives: What to Use Instead of Databricks Omnigent](https://munderdiffl.in/blog/omniagent-alternatives/): OmniAgent is really Omnigent, the open source meta harness from Databricks. Alternatives checked on 14 Sep 2026, and who each one fits. +- [Hermes Agent vs OpenClaw: which self-hosted AI assistant to pick](https://munderdiffl.in/blog/hermes-agent-vs-openclaw/): Hermes Agent vs OpenClaw, checked 7 Oct 2026: licence, latest release, install, channels, models, memory, skills, security notes and who should pick which. - [Claude Code Alternatives: 7 Coding Agents to Switch To](https://munderdiffl.in/blog/claude-code-alternatives/): Seven Claude Code alternatives checked on 5 Oct 2026: Codex CLI, OpenCode, Cursor, Gemini CLI, Cline, Pi and Aider, by licence, starting price and models. - [OpenClaw Alternatives: 7 Picks for Chat, Code and Cloud](https://munderdiffl.in/blog/openclaw-alternatives/): Seven OpenClaw alternatives sorted by job: Hermes Agent, Munder Difflin, NanoClaw, ZeroClaw, nanobot, Goose and Claude. Licences and prices checked 5 Oct 2026. - [Best Open Source AI Agents: 10 Picks by Job, Checked 1 Oct 2026](https://munderdiffl.in/blog/open-source-ai-agents/): The best open source AI agents in 2026, sorted by job: personal assistants, coding agents, agent teams and a framework. Licences checked 1 Oct 2026. @@ -249,6 +250,7 @@ ### news +- [Agent Tools Today, 7 Oct 2026: Mistral Large 4, EmbeddingGemma 2, OpenAI Decisions API](https://munderdiffl.in/blog/agent-tools-today-2026-10-07/): The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 7 Oct 2026, each with its source. - [Agent Tools Today, 6 Oct 2026: OpenAI Text Watermarks, Reflection Beam, Cloudflare Web Search](https://munderdiffl.in/blog/agent-tools-today-2026-10-06/): The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 6 Oct 2026, each with its source. - [Agent Tools Today, 5 Oct 2026: Paperclip Goes Full Auto, Strata's Codex API, Cloudflare's Git Contest](https://munderdiffl.in/blog/agent-tools-today-2026-10-05/): The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 5 Oct 2026, each with its source. - [Agent Tools Today, 4 Oct 2026: You should Know, OpenClaw's Android Wait, Codex Wish List](https://munderdiffl.in/blog/agent-tools-today-2026-10-04/): The top 5 launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 4 Oct 2026, each with its source. diff --git a/docs/sitemap.xml b/docs/sitemap.xml index ad9af76db..e19e55120 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -10,7 +10,7 @@ https://munderdiffl.in/ - 2026-10-06 + 2026-10-07 weekly 1.0 @@ -21,6 +21,18 @@ https://munderdiffl.in/blog/daily0.9 https://munderdiffl.in/blog/topics/weekly0.6 https://munderdiffl.in/blog/about/monthly0.4 + + https://munderdiffl.in/blog/agent-tools-today-2026-10-07/ + 2026-10-07 + monthly + 0.8 + + + https://munderdiffl.in/blog/hermes-agent-vs-openclaw/ + 2026-10-07 + monthly + 0.8 + https://munderdiffl.in/blog/agent-tools-today-2026-10-06/ 2026-10-06