diff --git a/blog/src/_data/media.json b/blog/src/_data/media.json index 94a181ce21..1ab33574ce 100644 --- a/blog/src/_data/media.json +++ b/blog/src/_data/media.json @@ -4780,5 +4780,28 @@ "status": "ready" }, "inline": {} + }, + "agent-tools-today-2026-10-13": { + "title": "Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue", + "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": [] + }, + "muse-wonder": { + "title": "Muse Wonder", + "category": "concepts", + "hero": { + "file": "assets/media/muse-wonder/hero.png", + "alt": "Title card on white. Muse Wonder in large ink type over a yellow underline, a kicker reading Meta's new models, prices and scores, a Checked 13 Oct 2026 pill and a pocket compass.", + "prompt": "Still of the hero scene in assets/media/muse-wonder/motion.js.", + "status": "ready" + }, + "inline": {} } } diff --git a/blog/src/assets/media/agent-tools-today-2026-10-13/motion.css b/blog/src/assets/media/agent-tools-today-2026-10-13/motion.css new file mode 100644 index 0000000000..28e045f479 --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-13/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Agent tools today, 13 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 [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/agent-tools-today-2026-10-13/motion.js b/blog/src/assets/media/agent-tools-today-2026-10-13/motion.js new file mode 100644 index 0000000000..5ec04a415e --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-13/motion.js @@ -0,0 +1,159 @@ +/* Bright coded scenes for "Agent tools today, 13 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', 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 SC = {}; + + /* ---- a kite: the model is the kite, and each line of its listing ties on as a paper bow on the tail ---- */ + SC.today = { + dur: 12, still: 9.5, + build(svg, api) { + const KX = 187, KY = 190, TILT = -14, DX = 290, DY = 197, WAVES = 1.5625, S = [0.2, 0.52, 0.84], BOW = [BLUE, MINT, LIL]; + const rot = (x, y, a) => { const r = (a * Math.PI) / 180, c = Math.cos(r), s = Math.sin(r); return [x * c - y * s, x * s + y * c]; }; + const LEN = Math.hypot(DX, DY), NX = DY / LEN, NY = -DX / LEN; + const tip0 = rot(0, 180, TILT), P0 = [KX + tip0[0], KY + tip0[1]]; + /* a point on the tail: s runs from 0 at the kite to 1 at the loose end; the bows sit where the wave crosses zero */ + const tail = (s, bx, by, sx, sy, ph, a) => { + const r = cl(s / 0.34), w = 12 * r * r * (3 - 2 * r) * a * Math.sin(Math.PI * 2 * WAVES * (s - 0.2) - ph), k = 1 - 0.75 * s; + return [bx + sx * k + DX * s + NX * w, by + sy * k + DY * s + NY * w]; + }; + /* soft clouds and a few streaks of wind */ + const clouds = [[652, 306, 1.35], [690, 78, 0.8], [286, 524, 0.95]].map(([x, y, s]) => { + const g = el("g", {}, svg); + [[-38, 2, 24], [-6, -16, 32], [32, -2, 25]].forEach(([cx, cy, r]) => el("circle", { cx, cy, r, fill: SOFT }, g)); + el("rect", { x: -62, y: 2, width: 119, height: 25, rx: 12.5, fill: SOFT }, g); + return { g, x, y, s }; + }); + const wind = [[36, 104, 40], [36, 268, 46], [392, 262, 50], [172, 442, 44]].map(([x, y, w]) => ({ x, y, n: el("path", { d: `M0 0 H${w}`, stroke: SKY, "stroke-width": 3, "stroke-linecap": "round" }, svg) })); + /* the reel at the ground end of the line */ + const reel = el("g", { transform: "translate(96 524) rotate(-18)" }, svg); + el("rect", { x: -20, y: -19, width: 40, height: 38, fill: SKY, stroke: INK, "stroke-width": 3 }, reel); + [-9, 0, 9].forEach((y) => el("path", { d: `M-20 ${y} H20`, stroke: INK, "stroke-width": 2 }, reel)); + el("rect", { x: -31, y: -29, width: 62, height: 11, rx: 5.5, fill: BLUE, stroke: INK, "stroke-width": 3 }, reel); + el("rect", { x: -31, y: 18, width: 62, height: 11, rx: 5.5, fill: BLUE, stroke: INK, "stroke-width": 3 }, reel); + const rp = rot(20, -6, -18), RX = 96 + rp[0], RY = 524 + rp[1]; + /* everything that flies */ + const fly = el("g", {}, svg); + const tailP = el("path", { fill: "none", stroke: INK, "stroke-width": 3, "stroke-linecap": "round", "stroke-linejoin": "round" }, fly); + let t0 = -99; + const kite = el("g", {}, fly); + el("polygon", { points: "0,-164 132,-30 0,198 -132,-30", fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7", "stroke-linejoin": "round", class: "mg-ring" }, kite); + el("polygon", { points: "0,-148 118,-28 0,180 -118,-28", fill: YEL, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, kite); + el("path", { d: "M0 -148 V180 M-118 -28 H118", stroke: INK, "stroke-width": 2, "stroke-linecap": "round" }, kite); + el("circle", { cy: -28, r: 6, fill: INK }, kite); + button(kite, "Send a gust of wind", () => { t0 = api.now(); api.poke(); }); + const line = el("path", { fill: "none", stroke: INK, "stroke-width": 2, "stroke-linecap": "round" }, fly); + const cord = el("path", { fill: "none", stroke: INK, "stroke-width": 2, "stroke-linecap": "round" }, fly); + /* the name tag tied to the kite */ + const tag = el("g", {}, fly); + const tagBody = el("path", { fill: "#fff", stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, tag); + const tagText = txt(tag, 46, 12, "Muse Wonder", { "font-size": 34, "font-weight": 700 }); + const TW = 46 + tagText.getComputedTextLength() + 24; + tagBody.setAttribute("d", `M-8 0 L18 -33 H${TW - 8} a8 8 0 0 1 8 8 V25 a8 8 0 0 1 -8 8 H18 Z`); + el("circle", { cx: 20, r: 5, fill: INK }, tag); + /* three paper bows and the label beside each */ + const bows = S.map((s, i) => { + const g = el("g", {}, fly); + el("path", { d: "M0 0 L-13 -27 Q0 -33 13 -27 Z M0 0 L-13 27 Q0 33 13 27 Z", fill: BOW[i], stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + el("circle", { r: 5.5, fill: INK }, g); + return g; + }); + const labels = ["1M context", "$4.00 input", "$20.00 output"].map((s, i) => { + const b = tail(S[i], P0[0], P0[1], 0, 0, 0, 1); + const g = el("g", {}, fly); + const r = el("rect", { x: 0, y: -23, height: 46, rx: 23, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + const t = txt(g, 18, 10, s, { "font-size": 28, "font-weight": 700 }); + r.setAttribute("width", t.getComputedTextLength() + 36); + return { g, x: b[0] + 46, y: b[1] - 22 }; + }); + return (t, now) => { + const dt = now - t0, gust = dt >= 0 && dt < 2.4 ? Math.sin((Math.PI * dt) / 2.4) : 0; + const k = oc(seg(t, 0, 1.9)), rx = -46 * (1 - k), ry = 165 * (1 - k); + fly.setAttribute("opacity", seg(t, 0, 0.3) * (1 - seg(t, 11.5, 11.95))); + clouds.forEach((c, i) => tf(c.g, c.x + 8 * Math.sin((t * Math.PI) / 6 + i * 2), c.y, c.s)); + wind.forEach((w, i) => { const p = (t / 2 + i * 0.27) % 1; tf(w.n, w.x + 36 * p, w.y); w.n.setAttribute("opacity", Math.sin(Math.PI * p)); }); + /* the kite rises, then sways */ + const ang = TILT + 2 * Math.sin(t * 1.3 + 1) + 3.5 * gust * Math.sin(now * 8); + const cx = KX + rx + 3 * Math.sin(t * 1.1), cy = KY + ry + 4 * Math.sin(t * 1.7) - 10 * gust; + kite.setAttribute("transform", `translate(${cx} ${cy}) rotate(${ang})`); + const tip = rot(0, 180, ang), eye = rot(0, -28, ang), cor = rot(118, -28, ang); + const ex = cx + eye[0], ey = cy + eye[1]; + line.setAttribute("d", `M${ex} ${ey} Q${(ex + RX) / 2 + 24} ${(ey + RY) / 2 + 12} ${RX} ${RY}`); + /* the tail unrolls behind it */ + const bx = P0[0] + rx, by = P0[1] + ry, sx = cx + tip[0] - bx, sy = cy + tip[1] - by; + const ph = 0.45 * Math.sin((Math.PI * 2 * t) / 3.4) + 0.5 * gust * Math.sin(now * 13), a = 1 + 0.25 * gust; + const f = 0.12 + 0.88 * io(seg(t, 0.5, 2.1)); + let d = ""; + for (let i = 0; i <= 44; i++) { const p = tail((f * i) / 44, bx, by, sx, sy, ph, a); d += (i ? "L" : "M") + p[0].toFixed(1) + " " + p[1].toFixed(1); } + tailP.setAttribute("d", d); + /* the tag */ + const hx = cx + cor[0] + 52, hy = cy + cor[1] + 12, kt = seg(t, 1.7, 2.2); + tag.setAttribute("transform", `translate(${hx} ${hy}) rotate(${4 + 2 * Math.sin(t * 1.5) + 4 * gust * Math.sin(now * 9)}) scale(${0.5 + 0.5 * ob(kt)}) translate(-20 0)`); + tag.setAttribute("opacity", kt <= 0 ? 0 : 1); + cord.setAttribute("d", `M${cx + cor[0]} ${cy + cor[1]} Q${hx - 24} ${hy + 10} ${hx} ${hy}`); + cord.setAttribute("opacity", kt <= 0 ? 0 : 1); + /* bows tie on one after another, each label follows its bow */ + bows.forEach((b, i) => { + const tb = 2.6 + i * 1.5, kb = seg(t, tb, tb + 0.45); + const p = tail(S[i], bx, by, sx, sy, ph, a), q = tail(S[i] + 0.02, bx, by, sx, sy, ph, a); + const dir = (Math.atan2(q[1] - p[1], q[0] - p[0]) * 180) / Math.PI; + tf(b, p[0], p[1], ob(kb), dir - 50 * (1 - oc(kb)) + 10 * gust * Math.sin(now * 11 + i)); + b.setAttribute("opacity", kb <= 0 ? 0 : 1); + }); + labels.forEach((c, i) => { + const kl = seg(t, 2.95 + i * 1.5, 3.35 + i * 1.5); + tf(c.g, c.x, c.y, 0.6 + 0.4 * ob(kl)); + c.g.setAttribute("opacity", kl <= 0 ? 0 : 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('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/assets/media/agent-tools-today-2026-10-13/today.png b/blog/src/assets/media/agent-tools-today-2026-10-13/today.png new file mode 100644 index 0000000000..f3a2bcbe7f Binary files /dev/null and b/blog/src/assets/media/agent-tools-today-2026-10-13/today.png differ diff --git a/blog/src/assets/media/muse-wonder/hero.png b/blog/src/assets/media/muse-wonder/hero.png new file mode 100644 index 0000000000..3575d98927 Binary files /dev/null and b/blog/src/assets/media/muse-wonder/hero.png differ diff --git a/blog/src/assets/media/muse-wonder/hooks.png b/blog/src/assets/media/muse-wonder/hooks.png new file mode 100644 index 0000000000..811b1f8280 Binary files /dev/null and b/blog/src/assets/media/muse-wonder/hooks.png differ diff --git a/blog/src/assets/media/muse-wonder/ladder.png b/blog/src/assets/media/muse-wonder/ladder.png new file mode 100644 index 0000000000..52eef4eb5a Binary files /dev/null and b/blog/src/assets/media/muse-wonder/ladder.png differ diff --git a/blog/src/assets/media/muse-wonder/magnifier.png b/blog/src/assets/media/muse-wonder/magnifier.png new file mode 100644 index 0000000000..e0bc47f8c7 Binary files /dev/null and b/blog/src/assets/media/muse-wonder/magnifier.png differ diff --git a/blog/src/assets/media/muse-wonder/motion.css b/blog/src/assets/media/muse-wonder/motion.css new file mode 100644 index 0000000000..8dc53f0a20 --- /dev/null +++ b/blog/src/assets/media/muse-wonder/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Muse Wonder and Muse Code". 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/muse-wonder/motion.js b/blog/src/assets/media/muse-wonder/motion.js new file mode 100644 index 0000000000..f0f10a97b3 --- /dev/null +++ b/blog/src/assets/media/muse-wonder/motion.js @@ -0,0 +1,333 @@ +/* Bright coded scenes for "Muse Wonder and Muse Code". 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 lerp = (a, b, k) => a + (b - a) * k; + /* a rounded label sized to its words, centred on 0,0 of its group */ + const pill = (g, s, fill) => { + const r = el("rect", { y: -20, height: 40, rx: 20, fill, stroke: INK, "stroke-width": 2.5 }, g), t = txt(g, 0, 7, s, { "text-anchor": "middle", "font-size": 20, "font-weight": 700 }); + const w = t.getComputedTextLength() + 28; r.setAttribute("x", -w / 2); r.setAttribute("width", w); + return w; + }; + /* a jacket drawn below its collar at 0,0; ghost is the dashed outline of a jacket that is not there */ + const jacket = (g, fill, ghost) => { + const look = ghost ? { fill: SOFT, stroke: LIL, "stroke-width": 3, "stroke-dasharray": "4 8", "stroke-linecap": "round" } : { fill, stroke: INK, "stroke-width": 3 }; + el("path", Object.assign({ d: "M-28 0 L-58 14 L-80 122 L-58 130 L-48 76 V190 H48 V76 L58 130 L80 122 L58 14 L28 0 Q0 24 -28 0 Z", "stroke-linejoin": "round" }, look), g); + if (ghost) return; + el("path", { d: "M0 12 V190 M-36 124 H-14 M14 124 H36", stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round", fill: "none" }, g); + [48, 84].forEach((y) => el("circle", { cx: 11, cy: y, r: 4, fill: "#fff", stroke: INK, "stroke-width": 2 }, g)); + }; + + const SC = {}; + + /* ---- 1. coat hooks: where each model hangs today, and the hook that stays empty ---- */ + SC.hooks = { + dur: 12, still: 9.6, + build(svg, api) { + txt(svg, 44, 62, "Where can you use Muse Wonder today?", { "font-size": 32, "font-weight": 700 }); + txt(svg, 756, 98, "tap the Muse hook", { "text-anchor": "end", "font-size": 20, fill: MUTE, "font-weight": 500 }); + const HX = [132, 404, 682], HY = 204; + el("rect", { x: 30, y: 116, width: 740, height: 58, rx: 16, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + ["Meta Model API", "Muse Code", "Muse"].forEach((s, i) => { + txt(svg, HX[i], 153, s, { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + el("path", { d: `M${HX[i] - 12} 174 V${HY - 12} a12 12 0 0 0 24 0`, stroke: INK, "stroke-width": 6, fill: "none", "stroke-linecap": "round" }, svg); + }); + const muse = el("g", {}, svg); + el("rect", { x: 596, y: 184, width: 172, height: 256, rx: 20, fill: "#fff", "fill-opacity": 0, stroke: INK, "stroke-width": 2, class: "mg-ring" }, muse); + jacket(el("g", { transform: `translate(${HX[2]} ${HY + 36})` }, muse), SOFT, true); + const tag = el("g", {}, muse); + el("path", { d: "M0 0 V84", stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, tag); + el("rect", { x: -56, y: 78, width: 112, height: 60, rx: 12, fill: MINT, stroke: INK, "stroke-width": 3 }, tag); + el("circle", { cx: 0, cy: 91, r: 5, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, tag); + txt(tag, 0, 127, "soon", { "text-anchor": "middle", "font-size": 26, "font-weight": 700 }); + let poked = -99; + button(muse, "Muse: will roll out first to subscribers, with no date.", () => { poked = api.now(); api.poke(); }); + const JK = [[0, 0, "Muse Wonder", YEL, 1.2, 0], [1, -88, "Muse Wonder", YEL, 2.8, -6], [1, 88, "Muse Wonder Full", LIL, 4.6, 12]].map(([h, dx, s, col, t0, px]) => { + const g = el("g", { "pointer-events": "none" }, svg); + el("path", { d: `M0 0 L${dx} 36`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, g); + jacket(el("g", { transform: `translate(${dx} 36)` }, g), col); + el("path", { d: `M${dx + px} 226 V246`, stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, g); + pill(el("g", { transform: `translate(${dx + px} 264)` }, g), s, "#fff"); + return { g, x: HX[h], t0, amp: dx ? 4 : 9 }; + }); + const cap = strip(svg, 512, 720); + return (t, now) => { + const out = seg(t, 11.2, 11.8); + JK.forEach((j) => { + const q = seg(t, j.t0, j.t0 + 0.45), tt = t - j.t0 - 0.45, sw = tt < 0 ? 0 : j.amp * Math.exp(-2.2 * tt) * Math.sin(7 * tt); + j.g.setAttribute("transform", `translate(${j.x} ${HY - 340 * (1 - q * q)}) rotate(${sw})`); + j.g.setAttribute("opacity", seg(t, j.t0, j.t0 + 0.1) * (1 - out)); + }); + const w = now - poked, tt = t - 6.4, shake = w >= 0 && w < 1.2 ? Math.sin(w * 9) * 22 * (1 - w / 1.2) : 0; + tag.setAttribute("opacity", w >= 0 && w < 4 ? 1 : tt < 0 ? 0 : seg(tt, 0, 0.15) * (1 - out)); + tag.setAttribute("transform", `translate(${HX[2]} ${HY}) rotate(${(tt < 0 ? 0 : -30 * Math.exp(-1.6 * tt) * Math.cos(6 * tt)) + Math.sin(now * 1.6) * 3 + shake})`); + cap.textContent = w >= 0 && w < 4 ? "Muse: “will roll out first to subscribers”, with no date" : t < 1.2 || t >= 11.2 ? "Meta's launch post, 12 October 2026" : t < 4.6 ? "Muse Wonder: Meta Model API and Muse Code" : t < 6.4 ? "Muse Wonder Full: as a Muse Code subscriber" : "Muse itself comes later, with no date"; + }; + }, + }; + + /* ---- 2. a toolbox opens; three tools work one plank side by side while a spirit level checks behind them ---- */ + SC.toolbox = { + dur: 12, still: 8.2, + build(svg) { + txt(svg, 44, 62, "What is Muse Code?", { "font-size": 32, "font-weight": 700 }); + const F = 470, PT = 236, BX = 400, BT = 380; + el("path", { d: `M30 ${F} H770`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg); + [170, 600].forEach((x) => el("path", { d: `M${x - 48} ${F} L${x - 8} ${PT + 28} H${x + 8} L${x + 48} ${F} M${x - 31} ${F - 84} H${x + 31}`, stroke: INK, "stroke-width": 5, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, svg)); + const lev = el("g", {}, svg); + el("rect", { x: -60, y: -32, width: 120, height: 32, rx: 8, fill: MINT, stroke: INK, "stroke-width": 3 }, lev); + el("rect", { x: -26, y: -25, width: 52, height: 18, rx: 9, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, lev); + const bub = el("circle", { cy: -16, r: 6, fill: SKY, stroke: INK, "stroke-width": 2 }, lev); + el("path", { d: "M-9 -25 V-7 M9 -25 V-7", stroke: INK, "stroke-width": 2 }, lev); + [-43, 43].forEach((x) => el("circle", { cx: x, cy: -16, r: 7, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, lev)); + el("rect", { x: 60, y: PT, width: 680, height: 28, rx: 6, fill: YEL, stroke: INK, "stroke-width": 3 }, svg); + el("path", { d: "M92 250 H150 M300 247 H372 M498 252 H560", stroke: INK, "stroke-width": 2, "stroke-linecap": "round" }, svg); + const kerf = el("path", { stroke: INK, "stroke-width": 4, "stroke-linecap": "round" }, svg); + const nail = el("path", { stroke: INK, "stroke-width": 4, "stroke-linecap": "round", fill: "none" }, svg); + const screw = el("path", { stroke: INK, "stroke-width": 4, "stroke-linecap": "round", fill: "none" }, svg); + el("path", { d: `M${BX - 46} ${BT} V${BT - 22} a12 12 0 0 1 12 -12 H${BX + 34} a12 12 0 0 1 12 12 V${BT}`, stroke: INK, "stroke-width": 6, fill: "none", "stroke-linecap": "round" }, svg); + el("rect", { x: BX - 110, y: BT, width: 220, height: F - BT - 2, rx: 12, fill: BLUE, stroke: INK, "stroke-width": 3 }, svg); + el("rect", { x: BX - 86, y: BT + 22, width: 172, height: 46, rx: 10, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, svg); + txt(svg, BX, BT + 54, "Muse Code", { "text-anchor": "middle", "font-size": 26, "font-weight": 700 }); + const flaps = [-1, 1].map((d) => { const g = el("g", {}, svg); el("rect", { x: d < 0 ? 0 : -112, y: -14, width: 112, height: 14, rx: 6, fill: SKY, stroke: INK, "stroke-width": 3 }, g); return { g, d }; }); + const ham = el("g", {}, svg); + el("rect", { x: -8, y: -114, width: 16, height: 120, rx: 8, fill: YEL, stroke: INK, "stroke-width": 3 }, ham); + el("rect", { x: -36, y: -130, width: 62, height: 30, rx: 7, fill: SKY, stroke: INK, "stroke-width": 3 }, ham); + const saw = el("g", {}, svg); + let bd = "M18 -18 L150 -5 L150 6"; + for (let k = 1; k <= 16; k++) bd += ` L${(150 - k * 8.25).toFixed(1)} ${(6 + k + (k % 2 ? 6 : 0)).toFixed(1)}`; + el("path", { d: bd + " Z", fill: SOFT, stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round" }, saw); + el("rect", { x: -28, y: -32, width: 52, height: 64, rx: 14, fill: MINT, stroke: INK, "stroke-width": 3 }, saw); + el("rect", { x: -15, y: -16, width: 26, height: 32, rx: 9, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, saw); + const scr = el("g", {}, svg); + el("path", { d: "M0 0 V-54", stroke: INK, "stroke-width": 5, "stroke-linecap": "round" }, scr); + el("rect", { x: -15, y: -122, width: 30, height: 70, rx: 12, fill: LIL, stroke: INK, "stroke-width": 3 }, scr); + const grip = [0, 1, 2, 3].map(() => el("path", { stroke: INK, "stroke-width": 2, "stroke-linecap": "round" }, scr)); + const LV = [[3.6, 130], [4.6, 325], [5.6, 325], [6.6, 521], [8.8, 521], [9.6, 325], [10.4, 130]]; + const lx = (t) => { for (let i = 1; i < LV.length; i++) if (t < LV[i][0]) return lerp(LV[i - 1][1], LV[i][1], io(seg(t, LV[i - 1][0], LV[i][0]))); return 130; }; + const cap = strip(svg, 506, 740); + return (t) => { + const out = seg(t, 10.9, 11.4), open = io(seg(t, 0.4, 1.1)) - io(seg(t, 11.3, 11.9)); + flaps.forEach((f) => f.g.setAttribute("transform", `translate(${BX + f.d * 110} ${BT}) rotate(${f.d * 118 * open})`)); + const place = (g, a, wx, wy, wr) => { const p = io(seg(t, a, a + 1)); tf(g, lerp(BX, wx, p), lerp(BT + 8, wy, p) - 70 * Math.sin(Math.PI * p), 0.35 + 0.65 * p, wr * p); g.setAttribute("opacity", seg(t, a, a + 0.12) * (1 - out)); return p >= 1; }; + const ph = (t * 2.1) % 1, up = ph < 0.7 ? Math.sin((ph / 0.7) * Math.PI) : 0; + const hOn = t >= 2.2; + place(ham, 1.2, 324, 186, -90 + 40 * (hOn ? up : 1)); + nail.setAttribute("d", `M203 ${222 + (hOn && !up ? 1.5 : 0)} H217 M210 222 V${PT}`); nail.setAttribute("opacity", seg(t, 1.9, 2.2) * (1 - out)); + const sOn = t >= 2.8, kd = 22 * seg(t, 2.8, 10.5), st = sOn ? Math.sin(t * 7) * 16 : 0; + place(saw, 1.8, 620.5 + st * 0.707, 166.7 + st * 0.707 + kd, 45); + kerf.setAttribute("d", `M670 ${PT} V${PT + Math.max(2, kd)}`); kerf.setAttribute("opacity", seg(t, 2.8, 3) * (1 - out)); + const cOn = t >= 3.4, sink = 9 * seg(t, 3.4, 10.5), sy = PT - 13 + sink; + place(scr, 2.4, 440, sy, 0); + screw.setAttribute("d", `M433 ${sy} H447 M440 ${sy} V${PT}`); screw.setAttribute("opacity", seg(t, 3, 3.3) * (1 - out)); + grip.forEach((g, k) => { const a = (cOn ? t * 6 : 0) + (k * Math.PI) / 2 + 0.5, x = 12 * Math.cos(a); g.setAttribute("d", `M${x.toFixed(1)} -110 V-64`); g.setAttribute("opacity", Math.sin(a) > 0 ? 1 : 0); }); + const x = lx(t); + tf(lev, x, PT); lev.setAttribute("opacity", seg(t, 3.1, 3.5) * (1 - out)); + bub.setAttribute("cx", cl((lx(t - 0.18) - x) * 0.3, -14, 14)); + cap.textContent = t < 3.4 || t >= 10.9 ? "Muse Code is Meta's coding agent that runs in your terminal" : "Meta's developer home page: “Multi-agent coding in your terminal”"; + }; + }, + }; + + /* ---- 3. a ladder of four plans; a ribbon ties onto the two rungs that carry Muse Wonder Full ---- */ + SC.ladder = { + dur: 12, still: 9.4, + build(svg, api) { + txt(svg, 44, 62, "Four Muse Code plans", { "font-size": 32, "font-weight": 700 }); + txt(svg, 756, 60, "tap a rung", { "text-anchor": "end", "font-size": 20, fill: MUTE, "font-weight": 500 }); + const PL = [ + ["Everyday Usage", "$5.00/month", ["10 to 50 prompts", "every 5 hours"]], + ["High Usage", "$15.00/month", ["5x more than", "Everyday Usage"]], + ["Power Usage", "$50.00/month", ["20x more than", "Everyday Usage"]], + ["Maximum Usage", "$200.00/month", ["80x more than", "Everyday Usage"]], + ]; + const RY = [416, 332, 248, 164], LX = 236, RX = 492, F = 478, KX = RX + 18; + el("path", { d: `M30 ${F} H770`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg); + const rungs = RY.map((y) => el("rect", { x: LX, y: y - 7, width: RX - LX, height: 14, fill: YEL, stroke: INK, "stroke-width": 3 }, svg)); + [LX, RX].forEach((x) => el("rect", { x: x - 9, y: 112, width: 18, height: F - 112, rx: 9, fill: YEL, stroke: INK, "stroke-width": 3 }, svg)); + let pinned = -1; + const rows = PL.map(([name, price, use], i) => { + const y = RY[i], g = el("g", {}, svg); + el("rect", { x: 34, y: y - 20, width: 474, height: 82, rx: 18, fill: "#fff", "fill-opacity": 0, stroke: INK, "stroke-width": 2, class: "mg-ring" }, g); + txt(g, LX - 24, y + 8, name, { "text-anchor": "end", "font-size": 22, "font-weight": 700 }); + const c = el("g", {}, g); + el("rect", { x: -100, y: 10, width: 200, height: 48, rx: 10, fill: "#fff", stroke: INK, "stroke-width": 3 }, c); + txt(c, 0, 43, price, { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); + el("rect", { x: -17, y: -13, width: 34, height: 27, rx: 6, fill: MINT, stroke: INK, "stroke-width": 2.5 }, c); + button(g, `${name}, ${price}: ${use.join(" ")}`, () => { pinned = i; api.poke(); }); + return { c, y, a: 1 + i * 0.9 }; + }); + const note = el("g", {}, svg); + el("rect", { x: 546, y: 292, width: 222, height: 158, rx: 18, fill: SOFT, stroke: INK, "stroke-width": 3 }, note); + txt(note, 566, 328, "Usage listed", { "font-size": 20, "font-weight": 500, fill: MUTE }); + const n0 = txt(note, 566, 364, "", { "font-size": 22, "font-weight": 700 }), n1 = txt(note, 566, 400, "", { "font-size": 20, "font-weight": 500 }), n2 = txt(note, 566, 428, "", { "font-size": 20, "font-weight": 500 }); + const rib = el("g", { "pointer-events": "none" }, svg); + const band = (d) => [el("path", { d, stroke: INK, "stroke-width": 13, fill: "none", "stroke-linecap": "round" }, rib), el("path", { d, stroke: LIL, "stroke-width": 7, fill: "none", "stroke-linecap": "round" }, rib)]; + const loose = [band(`M${KX} 248 q-14 30 -2 54`), band(`M${KX} 248 q16 24 10 50`), band(`M${KX} 164 Q${KX + 20} 172 546 190`), band(`M${KX} 248 Q${KX + 20} 240 546 222`)].flat(); + const ban = el("g", {}, rib); + el("path", { d: "M544 168 H768 L752 206 L768 244 H544 Z", fill: LIL, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, ban); + txt(ban, 648, 200, "Muse Wonder", { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); + txt(ban, 648, 230, "Full", { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); + const bows = [248, 164].map((y) => { + const g = el("g", {}, rib); + el("path", { d: "M0 0 L-17 -14 Q-26 0 -17 14 Z M0 0 L17 -14 Q26 0 17 14 Z", fill: LIL, stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round" }, g); + el("circle", { r: 6.5, fill: LIL, stroke: INK, "stroke-width": 2.5 }, g); + return { g, y }; + }); + const cap = strip(svg, 508, 740); + return (t) => { + const out = seg(t, 11.2, 11.8); + let last = 0; + rows.forEach((r, i) => { + const k = ob(seg(t, r.a, r.a + 0.45)); + r.c.setAttribute("transform", `translate(${(LX + RX) / 2} ${r.y + 46 * (1 - cl(k, 0, 1.15))})`); + r.c.setAttribute("opacity", seg(t, r.a, r.a + 0.12) * (1 - out)); + if (t >= r.a + 0.2 && !out) last = i; + }); + const show = pinned >= 0 ? pinned : last; + rungs.forEach((r, i) => r.setAttribute("fill", i === show ? SKY : YEL)); + n0.textContent = PL[show][0]; n1.textContent = PL[show][2][0]; n2.textContent = PL[show][2][1]; + bows.forEach((b, i) => { const k = ob(seg(t, 5.4 + i * 0.4, 5.8 + i * 0.4)); tf(b.g, KX, b.y, cl(k, 0, 1.3)); b.g.setAttribute("opacity", (k <= 0.01 ? 0 : 1) * (1 - out)); }); + const lo = seg(t, 6, 6.3) * (1 - out); + loose.forEach((p) => p.setAttribute("opacity", lo)); + const bk = ob(seg(t, 6.3, 6.9)); + ban.setAttribute("transform", `translate(544 206) scale(${cl(bk, 0, 1.1)} 1) translate(-544 -206)`); + ban.setAttribute("opacity", (bk <= 0.01 ? 0 : 1) * (1 - out)); + cap.textContent = t >= 6.3 && t < 11.2 ? "Muse Wonder Full: on the Power Usage and Maximum Usage plans" : "Meta's Muse Code page listed four plans on 13 Oct 2026"; + }; + }, + }; + + /* ---- 4. a magnifying glass slides down a sheet and enlarges the highest number in each row ---- */ + SC.magnifier = { + dur: 12, still: 9.8, + build(svg, api) { + txt(svg, 44, 62, "Meta's own figures", { "font-size": 32, "font-weight": 700 }); + txt(svg, 756, 60, "tap a row", { "text-anchor": "end", "font-size": 20, fill: MUTE, "font-weight": 500 }); + txt(svg, 44, 98, "Four coding rows from Meta's model card. We did not run them.", { "font-size": 20, "font-weight": 500, fill: MUTE }); + const SX = 34, SY = 122, SW = 722, RH = 84, NX = 646, CR = 572; + const ROWS = [ + ["Terminal-Bench 4.0-AA", "59.6", "Claude Opus 5.5", "", LIL, "Terminal-Bench 4.0-AA: 59.6 against 57.1 for Muse Wonder Full"], + ["DeepSWE 1.1", "79.0", "Muse Wonder Full", "", YEL, "DeepSWE 1.1: 79.0 against 74.2 for Claude Opus 5.5"], + ["SWE-Marathon", "57.5", "Muse Wonder Full (xhigh)", "(xhigh)", YEL, "SWE-Marathon: “not a controlled common-harness comparison”"], + ["ProgramBench", "70.5", "Claude Opus 5.5", "", LIL, "ProgramBench: 70.5 against 59.0 for Muse Wonder Full"], + ]; + const RY = (i) => SY + 6 + RH * (i + 0.5), S = [1, 3.2, 5.4, 7.6]; + el("rect", { x: SX + 10, y: SY + 10, width: SW, height: 4 * RH + 12, rx: 20, fill: LIL }, svg); + el("rect", { x: SX, y: SY, width: SW, height: 4 * RH + 12, rx: 20, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + [1, 2, 3].forEach((i) => el("path", { d: `M${SX + 22} ${SY + 6 + RH * i} H${SX + SW - 22}`, stroke: SOFT, "stroke-width": 3, "stroke-linecap": "round" }, svg)); + let user = null, curY = RY(0); + const rows = ROWS.map(([name, num, who, , col, line], i) => { + const y = RY(i), g = el("g", {}, svg); + el("rect", { x: SX + 8, y: y - 36, width: SW - 16, height: 72, rx: 16, fill: "#fff", "fill-opacity": 0, stroke: INK, "stroke-width": 2, class: "mg-ring" }, g); + txt(g, SX + 24, y + 8, name, { "font-size": 23, "font-weight": 700 }); + const res = el("g", {}, g), chip = el("g", {}, res), w = pill(chip, who, col); + chip.setAttribute("transform", `translate(${CR - w / 2} ${y})`); + txt(res, NX, y + 11, num, { "text-anchor": "middle", "font-size": 30, "font-weight": 700 }); + button(g, line, () => { user = { from: curY, to: y, t0: api.now(), i }; api.poke(); }); + return { res, y }; + }); + const lens = el("g", { "pointer-events": "none" }, svg); + el("path", { d: "M48 28 L100 58", stroke: INK, "stroke-width": 15, "stroke-linecap": "round" }, lens); + el("path", { d: "M58 34 L98 57", stroke: YEL, "stroke-width": 7, "stroke-linecap": "round" }, lens); + el("circle", { r: 58, fill: "#fff", stroke: INK, "stroke-width": 5 }, lens); + el("circle", { r: 55, fill: SKY, "fill-opacity": 0.35 }, lens); + el("path", { d: "M-42 -20 A47 47 0 0 1 -16 -44", stroke: "#fff", "stroke-width": 5, fill: "none", "stroke-linecap": "round" }, lens); + const big = txt(lens, 0, 15, "", { "text-anchor": "middle", "font-size": 42, "font-weight": 700 }); + const sm = txt(lens, 0, 38, "", { "text-anchor": "middle", "font-size": 20, "font-weight": 500 }); + const cap = strip(svg, 508, 740); + return (t, now) => { + const out = seg(t, 11.2, 11.7); + let y = RY(0), cur = -1; + S.forEach((s, i) => { y = lerp(y, RY(i), io(seg(t, s, s + 0.6))); if (t >= s + 0.3) cur = i; }); + if (user) y = lerp(user.from, user.to, io(cl((now - user.t0) / 0.5))); + curY = y; + rows.forEach((r, i) => { const k = user ? 1 : seg(t, S[i] + 0.45, S[i] + 0.65) * (1 - out); r.res.setAttribute("opacity", k); }); + let near = 0; ROWS.forEach((_, i) => { if (Math.abs(RY(i) - y) < Math.abs(RY(near) - y)) near = i; }); + const q = ROWS[near][3], on = 1 - cl(Math.abs(RY(near) - y) / 26); + big.textContent = ROWS[near][1]; big.setAttribute("y", q ? 6 : 15); big.setAttribute("opacity", on); + sm.textContent = q; sm.setAttribute("opacity", on); + tf(lens, NX, y, user ? 1 : 0.6 + 0.4 * ob(seg(t, 0.8, 1.3))); lens.setAttribute("opacity", user ? 1 : seg(t, 0.8, 1) * (1 - out)); + cap.textContent = user ? ROWS[user.i][5] : cur < 0 || t >= 11.2 ? "Each number is Meta's own figure" : t > 9.5 ? "Muse Wonder Full leads two rows, Claude Opus 5.5 the other two" : ROWS[cur][5]; + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + txt(svg, 66, 118, "Meta's new models, prices and scores", { "font-size": 25, "font-weight": 500, fill: MUTE }); + txt(svg, 62, 220, "Muse Wonder", { "font-size": 82, "font-weight": 700 }); + el("path", { d: "M68 252 H594", stroke: YEL, "stroke-width": 14, "stroke-linecap": "round" }, svg); + el("rect", { x: 62, y: 296, width: 312, height: 56, rx: 28, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + txt(svg, 218, 333, "Checked 13 Oct 2026", { "text-anchor": "middle", "font-size": 25, "font-weight": 700 }); + el("path", { d: "M70 452 C190 396 300 492 420 436 S560 400 612 372", stroke: LIL, "stroke-width": 5, fill: "none", "stroke-linecap": "round", "stroke-dasharray": "1 16" }, svg); + el("circle", { cx: 70, cy: 452, r: 11, fill: MINT, stroke: INK, "stroke-width": 3 }, svg); + const c = el("g", { transform: "translate(758 300)" }, svg); + el("circle", { cy: -152, r: 15, fill: "none", stroke: INK, "stroke-width": 5 }, c); + el("rect", { x: -13, y: -146, width: 26, height: 18, rx: 5, fill: YEL, stroke: INK, "stroke-width": 3 }, c); + el("circle", { r: 134, fill: YEL, stroke: INK, "stroke-width": 3 }, c); + el("circle", { r: 110, fill: "#fff", stroke: INK, "stroke-width": 3 }, c); + for (let i = 0; i < 16; i++) { const a = (i / 16) * 6.2832, r0 = i % 4 ? 92 : 82; el("path", { d: `M${(Math.cos(a) * r0).toFixed(1)} ${(Math.sin(a) * r0).toFixed(1)} L${(Math.cos(a) * 101).toFixed(1)} ${(Math.sin(a) * 101).toFixed(1)}`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, c); } + const n = el("g", { transform: "rotate(38)" }, c); + el("path", { d: "M0 -76 L17 0 H-17 Z", fill: BLUE, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, n); + el("path", { d: "M0 76 L17 0 H-17 Z", fill: LIL, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, n); + el("circle", { r: 8, fill: "#fff", stroke: INK, "stroke-width": 3 }, n); + [[640, 146, 15, SKY], [878, 470, 18, MINT], [540, 474, 12, YEL]].forEach(([x, y, r, col]) => el("path", { d: `M0 ${-r} Q0 0 ${r} 0 Q0 0 0 ${r} Q0 0 ${-r} 0 Q0 0 0 ${-r} Z`, fill: col, stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round", transform: `translate(${x} ${y})` }, svg)); + 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/assets/media/muse-wonder/toolbox.png b/blog/src/assets/media/muse-wonder/toolbox.png new file mode 100644 index 0000000000..a35c942fd5 Binary files /dev/null and b/blog/src/assets/media/muse-wonder/toolbox.png differ diff --git a/blog/src/posts/agent-tools-today-2026-10-13.md b/blog/src/posts/agent-tools-today-2026-10-13.md new file mode 100644 index 0000000000..b788c9a1df --- /dev/null +++ b/blog/src/posts/agent-tools-today-2026-10-13.md @@ -0,0 +1,59 @@ +--- +title: "Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue" +seoTitle: "Agent Tools Today (13 Oct 2026): Launches, Skills, MCP Servers" +description: "The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 13 Oct 2026, each with its source." +date: 2026-10-13 +category: news +categoryLabel: News +type: Non-technical +series: agent-tools-today +primaryKeyword: "agent tools today 13 oct 2026" +secondaryKeywords: ["glm-legal", "agent37", "codex daemon issue", "skills hub 1.0.0", "qgis ai policy"] +tags: ["Daily Brief", "Claude Code", "Codex", "Skills", "Open Source"] +--- + +Agent tools today, 13 Oct 2026, in one line: Meta launched Muse Wonder and Muse Wonder Full, GLM-Legal arrived as a model for legal agents, and an issue about a background daemon in Codex CLI started the day's argument. Every number was checked on 13 Oct. The edition before this one on the site is [12 Oct](/blog/agent-tools-today-2026-10-12/). + +[Munder Difflin](https://harnessmd.com/download) is 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 shipped no release in the last 24 hours, so it is not in the lists below. + +
Animation. A yellow kite rises on a white background, its line running down to a reel. A tag tied to the kite reads Muse Wonder. Three paper bows tie onto its tail one after another, and a label appears beside each bow: 1M context, $4.00 input, $20.00 output.
Meta's model page on 13 Oct 2026 lists Muse Wonder with a 1M context window at $4.00 input and $20.00 output per Mtok. The drawing shows the listing as bows on a kite's tail. Tap the kite for a gust of wind.
+ +## Top 3 launches + +1. **Muse Wonder and Muse Wonder Full.** Meta announced the two models on 12 Oct, and its launch post calls them "our most capable models". Meta's [model page](https://dev.meta.ai/models/muse-wonder), read on 13 Oct, lists Muse Wonder at $4.00 input and $20.00 output per Mtok with a 1M context window. The model page prints no token price for Muse Wonder Full, which is "Included with a Muse Code subscription". More than 600 points on Hacker News on 13 Oct. Full page: [Muse Wonder](/blog/muse-wonder/). [Source](https://research.meta.ai/blog/muse-wonder) +2. **GLM-Legal.** The GLM-Legal launch post, dated 12 Oct, describes a model for legal work built on "the lightweight GLM-5.3-Flash foundation". The 12 Oct post reports "a 19.2% all-pass rate on Harvey LAB" and gives a link to apply for API access. More than 530 points on Hacker News on 13 Oct. [Source](https://z.ai/blog/glm-legal) +3. **Agent37.** Sandboxes for running AI agents, from a Launch HN post on 12 Oct. The post, read on 13 Oct, puts average customer spend at $0.37 a month per sandbox. The post says its gVisor sandboxes do not support Docker-in-Docker or Android emulators. More than 120 points on Hacker News on 13 Oct. Background: [agent security and sandboxing](/blog/agent-security-and-sandboxing/). [Source](https://news.ycombinator.com/item?id=50059096) + +## Top 3 skills, MCP servers and plugins + +1. **Skills Hub v1.0.0.** Released 11 Oct. A desktop app that syncs agent skills to your coding tools. The README says it "supports 48 AI coding tools, including Claude Code, Codex, Cursor, and OpenCode". MIT, 1,788 stars on 13 Oct. [Source](https://github.com/qufei1993/skills-hub) +2. **SolidCraft v0.7.0.** Released 13 Oct. Parametric 3D CAD in Rust. The README says you can "let AI agents model through the built-in MCP server". Created 7 Oct. Apache 2.0, more than 1,250 stars on 13 Oct. [Source](https://github.com/bherbruck/solidcraft) +3. **Pensieve.** v0.6.7 on 13 Oct. Local search on a Mac, with an MCP server. The README says agents "get the few most relevant files and passages instead of grepping your disk". Created 8 Oct. MIT, 59 stars on 13 Oct. [Source](https://github.com/TedHaley/pensieve) + +## Top 4 moves from multi agent tools + +1. **OpenHands.** v1.27.0 and v1.27.1, both on 12 Oct. The v1.27.0 notes add OpenCode and Pi as built-in ACP agents on local backends. MIT, 90,770 stars on 13 Oct. [Source](https://github.com/OpenHands/OpenHands/releases/tag/v1.27.0) +2. **Hermes Agent.** v0.21.7, published 12 Oct. The notes say "Updates now follow tagged releases" for source installs, in place of every commit on main. MIT, 253,253 stars on 13 Oct. See [what is Hermes Agent](/blog/what-is-hermes-agent/). [Source](https://github.com/NousResearch/hermes-agent/releases/tag/v0.21.7) +3. **OpenClaw.** v2026.10.2 on 12 Oct. API key routes for OpenAI and Anthropic now default to provider-native compaction. MIT, 391,825 stars on 13 Oct. See [Hermes Agent vs OpenClaw](/blog/hermes-agent-vs-openclaw/). [Source](https://github.com/openclaw/openclaw/releases/tag/v2026.10.2) +4. **Herdr GPUI.** v20261013.1 on 13 Oct. It can remove a worktree once its pull request is merged, and the sidebar shows Meta's mark for Muse Code agents. Apache 2.0, 1,182 stars on 13 Oct. See [Herdr alternatives](/blog/herdr-alternatives/). [Source](https://github.com/penso/herdr-gpui/releases/tag/v20261013.1) + +## Top 3 rising repos + +1. **Janas.** It runs mixture-of-experts models larger than your RAM by streaming the experts each token needs from an NVMe SSD. The README reports 24 tok/s without drafts from a 48 GB model on a laptop with 32 GB of memory, where llama.cpp manages 2.8. Created 20 Sep. GPL 3.0, more than 160 stars on 13 Oct. More than 110 points on Hacker News on 13 Oct. [Source](https://github.com/prabanta-dev/janas) +2. **Atticus.** v1.0 on 13 Oct. A voice assistant for the Mac. The README says it "runs on the Claude Pro or Max plan you already have, through Claude Code". Created 10 Oct. MIT, more than 110 stars on 13 Oct. More than 95 points on Hacker News on 13 Oct. [Source](https://github.com/SaarthurR/atticus-mac) +3. **Doory.** Not an agent tool. The repo description reads "Open source canva alternative". The README gives the licence as the Attribution Assurance License. Created 10 Oct. More than 900 stars on 13 Oct. More than 210 points on Hacker News on 13 Oct. [Source](https://github.com/shaongitbd/doory) + +New repos can gain stars quickly for reasons other than use, so treat these as names to watch, not recommendations. + +## Top 4 things people are arguing about + +1. **A background daemon in Codex CLI.** A GitHub issue opened on 25 Sep reports that, since version 0.157.0, an interactive `codex` session starts a daemon that keeps running after every Codex window is closed. The issue title says "a persistent, self-updating background daemon shouldn't be the default". On 13 Oct the issue was open, and none of its 16 comments came from an account GitHub marks as a project member. More than 540 points and more than 270 comments on Hacker News on 13 Oct. See [Codex CLI vs Claude Code](/blog/codex-cli-vs-claude-code/). [Source](https://github.com/openai/codex/issues/48195) +2. **QGIS says no to AI code.** A pull request merged on 7 Oct rewrites the QGIS AI tool policy. The new policy text reads "No LLM, AI or agent assisted code contributions are allowed" in the main QGIS repository. More than 370 points and more than 400 comments on Hacker News on 13 Oct. [Source](https://github.com/qgis/QGIS-Enhancement-Proposals/pull/387) +3. **Is AI a tool?** Huahai's blog post, dated 12 Oct, answers an 11 Oct article by Rich Hickey titled "'AI' is Not a Tool". Huahai's post argues "A tool does not stop being a tool because it is difficult to control". More than 370 points on Hacker News on 13 Oct. [Source](https://yyhh.org/blog/2026/10/ai-is-a-tool/) +4. **Capabilities an audit cannot find.** An arXiv paper submitted on 9 Oct builds backdoors that "embed encrypted neural networks within host model weights" and run them only on a secret trigger. The abstract says the results "reveal a limit of elicitation-based capability audits". More than 180 points on Hacker News on 13 Oct. [Source](https://arxiv.org/abs/2610.13928) + +## 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/meta-muse-alternatives.md b/blog/src/posts/meta-muse-alternatives.md index c486ac1104..ddfc5b1a01 100644 --- a/blog/src/posts/meta-muse-alternatives.md +++ b/blog/src/posts/meta-muse-alternatives.md @@ -33,7 +33,7 @@ Plenty of people still can't use it, or don't want to. There are three common re - **You live outside the US.** Muse launched for US users aged 18 and over only. - **You don't want Meta holding your inbox, calendar and bank data.** Muse trains on your chats by default unless you switch it off, according to [Meta's own help page](https://www.meta.com/help/artificial-intelligence/1047255454427887/). A WIRED reporter also found it [kept asking for more personal data](https://techbriefly.com/2026/09/21/meta-muse-ai-data-collection-scrutiny/). -- **You want agents for your work, not your errands.** Muse is built for bookings, forms and shopping, not for writing code or running projects. +- **You want agents for your work, not your errands.** Muse is built for bookings, forms and shopping, not for writing code or running projects. For Meta's coding agent, see [Muse Code and Muse Wonder](/blog/muse-wonder/). Here are seven alternatives, and which reason each one solves. diff --git a/blog/src/posts/muse-wonder.md b/blog/src/posts/muse-wonder.md new file mode 100644 index 0000000000..044bc7cccc --- /dev/null +++ b/blog/src/posts/muse-wonder.md @@ -0,0 +1,123 @@ +--- +title: "Muse Wonder and Muse Code: Meta's new models, prices and scores" +description: "Meta's Muse Wonder and Muse Wonder Full: API price, Muse Code plans, context window and Meta's own coding scores, checked 13 Oct 2026." +date: 2026-10-13 +category: concepts +categoryLabel: Concepts +type: Non-technical +primaryKeyword: "muse wonder" +secondaryKeywords: ["meta muse wonder", "muse wonder full", "muse code", "muse wonder pricing", "muse wonder api", "muse wonder benchmarks", "muse wonder vs muse spark"] +tags: ["Concepts", "AI Agents"] +faq: + - q: "What is Muse Wonder?" + a: "Muse Wonder is a series of two AI models from Meta, Muse Wonder and Muse Wonder Full. Meta's launch post of 12 October 2026 calls them its most capable models, for personal and professional agentic tasks and coding. Meta's model card lists text, image, video and audio input, text output and a context length of 1M tokens at inference." + - q: "What is Muse Code?" + a: "Muse Code is Meta's coding agent that runs in your terminal. Meta's Muse Code page, read on 13 Oct 2026, prints an install command and says it is available for MacOS and Windows. Meta's launch post says Muse Wonder is available today in Muse Code, and Muse Wonder Full is available today for Muse Code subscribers." + - q: "How much does Muse Wonder cost?" + a: "Meta's model page listed Muse Wonder at $4.00 input, $0.20 cached input and $20.00 output per Mtok on 13 Oct 2026. The model page prints no token price for Muse Wonder Full. The model page says Muse Wonder Full is included with a Muse Code subscription, with access on the Power Usage and Maximum Usage plans, which the Muse Code page listed at $50.00/month and $200.00/month." + - q: "What is the difference between Muse Wonder and Muse Wonder Full?" + a: "Meta's model card calls Muse Wonder Full its most capable variant. On 13 Oct 2026 Meta's model page listed Muse Wonder as available in the Model API and Muse Code with a token price, and Muse Wonder Full as available by subscription in Muse Code. Both were listed with a 1M context window." + - q: "Is Muse Wonder better than Claude Opus 5.5 at coding?" + a: "It depends on the test, on the figures Meta published. Meta's table has Muse Wonder Full ahead on DeepSWE 1.1 (79.0 against 74.2) and SWE-Marathon (57.5 at xhigh effort against 46.3), and Claude Opus 5.5 ahead on Terminal-Bench 4.0-AA (59.6 against 57.1) and ProgramBench (70.5 against 59.0). Meta's model card says the SWE-Marathon row is not a controlled common-harness comparison." +--- + +Our view: Muse Wonder is a real contender for coding agents, not a clear winner. Meta announced Muse Wonder and Muse Wonder Full on 12 October 2026. In Meta's own coding table, Muse Wonder Full tops two of four rows and Claude Opus 5.5 tops the other two. Checked 13 Oct 2026. + +New coding models drive coding agents. [Munder Difflin](https://harnessmd.com/download) is 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. We have not tried Muse Wonder. The [install guide](/blog/how-to-install-and-use-munder-difflin/) covers setup, and the [Concepts hub](/blog/topics/concepts/) explains the terms. + +## What is Muse Wonder? + +Muse Wonder is a pair of AI models from Meta, Muse Wonder and Muse Wonder Full, aimed at agent work and coding. Meta's [launch post](https://research.meta.ai/blog/muse-wonder), dated October 12, 2026, calls them "our most capable models". Meta's [model card](https://research.meta.ai/static/muse-wonder-model-card) lists text, image, video and audio input, text output and a context length of "1M tokens at inference". + +The [Hacker News thread](https://news.ycombinator.com/item?id=50059115) had more than 600 points on 13 Oct 2026. + +## What is the difference between Muse Wonder and Muse Wonder Full? + +Muse Wonder Full is the more capable of the two by Meta's description, and it comes by subscription with no token price. Meta's model card calls Muse Wonder Full "our most capable variant". The rows are our selection from Meta's [model page](https://dev.meta.ai/models/muse-wonder), read on 13 Oct 2026. + +| | Muse Wonder | Muse Wonder Full | +| --- | --- | --- | +| Model ID | muse-wonder-1.0 | muse-wonder-full-1.0 | +| Context window | 1M | 1M | +| Listed in | Model API and Muse Code | Muse Code, by subscription | +| Token price | Listed | None listed | + +## Where can you use Muse Wonder today? + +Meta's launch post says you can use Muse Wonder today through the Meta Model API and Muse Code, and Muse Wonder Full as a Muse Code subscriber. Meta's model page narrows Muse Wonder Full to "Access on the Power Usage and Maximum Usage plans". + +Muse itself comes later. Meta's launch post says Muse Wonder "will soon power experiences in Muse, and will roll out first to subscribers", with no date. Our [Meta Muse alternatives](/blog/meta-muse-alternatives/) list covers the Muse app. + +
Animation. A row of coat hooks on a wall is labelled Meta Model API, Muse Code and Muse. A jacket tagged Muse Wonder drops onto the Meta Model API hook and another onto the Muse Code hook. A jacket tagged Muse Wonder Full drops onto the Muse Code hook. The Muse hook stays empty, with only a dashed outline of a jacket, while a tag reading soon swings on it.
Availability in Meta's launch post of 12 October 2026. The drawing shows hooks and jackets.
+ +## What is Muse Code? + +Muse Code is Meta's coding agent that runs in your terminal. Meta's [Muse Code page](https://dev.meta.ai/products/muse-code) calls it "A coding agent for your most complex coding workstreams". + +The Muse Code page prints its install command with and without flags, the fuller being `curl -fsSL https://dev.meta.ai/install.sh | bash`, and says "Available for MacOS and Windows". The Muse Code page does not mention Linux. + +Meta's [developer home page](https://dev.meta.ai/) says "Multi-agent coding in your terminal". On 13 Oct 2026 the Muse Code page still said "powered by Muse Spark", and its model table had no Muse Wonder row. + +
Animation. A toolbox labelled Muse Code opens. A hammer, a saw and a screwdriver lift out and work side by side on one plank, while a spirit level slides along behind them checking the work.
Meta's Muse Code page, read 13 Oct 2026, says "Workers in parallel, reviewers in the background". The drawing shows tools.
+ +## What does Muse Wonder cost? + +Through the API, Muse Wonder costs $4.00 input, $0.20 cached input and $20.00 output per Mtok, on Meta's model page as read on 13 Oct 2026. We read Mtok as a million tokens. Muse Wonder Full has no token price: Meta's model page says it is "Included with a Muse Code subscription". Meta's Muse Code page listed four plans on 13 Oct 2026. + +| Muse Code plan | Price | Usage listed | +| --- | --- | --- | +| Everyday Usage | $5.00/month | 10 to 50 prompts every 5 hours | +| High Usage | $15.00/month | 5x more than Everyday Usage | +| Power Usage | $50.00/month | 20x more than Everyday Usage | +| Maximum Usage | $200.00/month | 80x more than Everyday Usage | + +The Muse Code page lists no token allowance for any plan, as of 13 Oct 2026. + +For comparison, the Muse Code page listed muse-spark-1.3 at $1.25 input and $4.25 output per Mtok on 13 Oct 2026. + +
Animation. A ladder with four rungs labelled Everyday Usage, High Usage, Power Usage and Maximum Usage. Cards reading $5.00/month, $15.00/month, $50.00/month and $200.00/month clip onto the rungs from the bottom up. Then a ribbon reading Muse Wonder Full ties onto the Power Usage and Maximum Usage rungs. A note beside the ladder gives the usage listed for one plan at a time.
Plans from Meta's Muse Code page, read 13 Oct 2026. The drawing shows a ribbon on the two plans Meta's model page names for Muse Wonder Full.
+ +## What are Active Memory and Active Focus? + +They are Meta's names for two behaviours: remembering what matters across conversations, and sticking with a hard task. Meta's launch post defines Active Memory as "carrying important context about you across conversations", and says Active Focus "describes how Muse Wonder continues working toward a challenging goal". + +Meta's launch post names no setting that turns either one on. Our view: wait for outside tests before you rely on either. + +## How good is Muse Wonder at coding? + +On Meta's own figures, Muse Wonder Full leads two of the four coding rows and Claude Opus 5.5 leads the other two. The table holds the four coding rows from Meta's model card, our selection from its 14 rows. Each number is Meta's own figure, and Meta's model page labels every column "(max)". We did not run them. + +| Benchmark | Muse Wonder Full | Muse Wonder | Claude Fable 5.1 | GPT-6 Astra | Claude Opus 5.5 | +| --- | --- | --- | --- | --- | --- | +| Terminal-Bench 4.0-AA | 57.1 | 52.0 | 52.0 | 59.1 | 59.6 | +| DeepSWE 1.1 | 79.0 | 78.8 | 67.4 | 74.1 | 74.2 | +| SWE-Marathon | 57.5 (xhigh) | 53.1 | 45.6 | 42.5 | 46.3 | +| ProgramBench | 59.0 | 50.0 | 55.5 | 52.5 | 70.5 | + +Claude Opus 5.5 scores higher than both Muse Wonder models on Terminal-Bench 4.0-AA and ProgramBench. Muse Wonder, the model with an API price, is lowest of the five on ProgramBench. + +Meta's model card says the SWE-Marathon row "is not a controlled common-harness comparison" and that Muse Wonder Full "was reported with xhigh reasoning effort" there. The model card names outside result sources: Artificial Analysis for Terminal-Bench 4.0, Abundant AI for SWE-Marathon, and Datacurve for three of the five DeepSWE scores. + +
Animation. A magnifying glass slides down a sheet with four rows: Terminal-Bench 4.0-AA, DeepSWE 1.1, SWE-Marathon and ProgramBench. It stops on each row and enlarges the highest number: 59.6 for Claude Opus 5.5, 79.0 for Muse Wonder Full, 57.5 (xhigh) for Muse Wonder Full, then 70.5 for Claude Opus 5.5.
Meta's own figures from its model card, read 13 Oct 2026. Our selection of rows. The drawing shows the highest score in each.
+ +## What did Meta say about safety? + +Meta's launch post says Muse Wonder "offers our strongest safeguards to date" against CBRN and cyber misuse, and that a fuller safety report "will be available soon". + +Meta's model card says that without mitigations Meta does "not rule out" Muse Wonder Full reaching the high risk threshold in the Chemical & Biological domain. With mitigations, the model card puts it at "moderate or lower" across all domains. For agent builders, the model card recommends "human-in-the-loop confirmation for irreversible actions". + +## What does it mean if you run coding agents locally? + +It means one more hosted model your agents can call, not a model you can download. None of the five Meta pages we read offers Muse Wonder's weights. Meta's developer home page lists a different model, Muse Glimmer, as "available on Hugging Face". + +Our view: the agent can still run on your machine, but its prompts go to Meta. Our comparison of [local-first and cloud agent SDKs](/blog/local-first-vs-cloud-agent-sdks/) covers that trade-off. + +## What should you do now? + +Try Muse Wonder on one real task before you move work to it. + +1. Read Meta's [model page](https://dev.meta.ai/models/muse-wonder) again before you budget. +2. For Muse Wonder Full, check your Muse Code plan. +3. Compare with [Claude Haiku 5.5](/blog/claude-haiku-5-5/) and [Mistral Large 4](/blog/mistral-large-4/). + + 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 72ecabb241..c5fd1aba00 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, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

-

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

+

Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue

+

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

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

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

-

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

+

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

+

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

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

Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1

-

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

+

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 11 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 43efed1a08..7b61ba9cb8 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, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

-

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

+

Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue

+

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

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

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

-

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

+

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

+

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

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

Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1

-

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

+

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 11 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 b67b3c8257..6d72f50b77 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, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

-

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

+

Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue

+

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

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

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

-

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

+

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

+

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

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

Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1

-

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

+

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

+

The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 11 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 f1f8ab4910..a4b26d7dfc 100644 --- a/docs/blog/agent-tools-today-2026-10-06/index.html +++ b/docs/blog/agent-tools-today-2026-10-06/index.html @@ -247,50 +247,50 @@

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

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

-

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

+

Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue

+

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

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

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

-

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

+

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

+

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

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

Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1

-

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

+

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

+

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

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-07/index.html b/docs/blog/agent-tools-today-2026-10-07/index.html index 71b38bc1d9..02d86760bd 100644 --- a/docs/blog/agent-tools-today-2026-10-07/index.html +++ b/docs/blog/agent-tools-today-2026-10-07/index.html @@ -247,50 +247,50 @@

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

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

-

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

+

Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue

+

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

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

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

-

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

+

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

+

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

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

Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1

-

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

+

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

+

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

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-08/index.html b/docs/blog/agent-tools-today-2026-10-08/index.html index 2e7b4c2e87..d3a1459013 100644 --- a/docs/blog/agent-tools-today-2026-10-08/index.html +++ b/docs/blog/agent-tools-today-2026-10-08/index.html @@ -246,50 +246,50 @@

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

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

-

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

+

Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue

+

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

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

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

-

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

+

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

+

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

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

Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1

-

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

+

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

+

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

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-09/index.html b/docs/blog/agent-tools-today-2026-10-09/index.html index 0211eb7c5f..68dd122f6d 100644 --- a/docs/blog/agent-tools-today-2026-10-09/index.html +++ b/docs/blog/agent-tools-today-2026-10-09/index.html @@ -247,50 +247,50 @@

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

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

-

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

+

Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue

+

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

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

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

-

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

+

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

+

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

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

Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1

-

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

+

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

+

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

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-10/index.html b/docs/blog/agent-tools-today-2026-10-10/index.html index 10cd8929f2..b8efe9ca63 100644 --- a/docs/blog/agent-tools-today-2026-10-10/index.html +++ b/docs/blog/agent-tools-today-2026-10-10/index.html @@ -247,50 +247,50 @@

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

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

-

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

+

Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue

+

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

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

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

-

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

+

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

+

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

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

Agent Tools Today, 9 Oct 2026: Gemini Agent, Codex CLI 0.162.0, Step 5 Preview

-

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

+

Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0

+

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

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-11/index.html b/docs/blog/agent-tools-today-2026-10-11/index.html index 4cd284497d..ada86e6ec6 100644 --- a/docs/blog/agent-tools-today-2026-10-11/index.html +++ b/docs/blog/agent-tools-today-2026-10-11/index.html @@ -245,50 +245,50 @@

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

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

-

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

+

Agent Tools Today, 13 Oct 2026: Muse Wonder, GLM-Legal, the Codex Daemon Issue

+

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

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

Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1

-

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

+

Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens

+

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

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

Agent Tools Today, 9 Oct 2026: Gemini Agent, Codex CLI 0.162.0, Step 5 Preview

-

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

+

Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1

+

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

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-12/index.html b/docs/blog/agent-tools-today-2026-10-12/index.html index bd54d4886d..df559b9a01 100644 --- a/docs/blog/agent-tools-today-2026-10-12/index.html +++ b/docs/blog/agent-tools-today-2026-10-12/index.html @@ -237,56 +237,56 @@

How this list is built + + + + + + + +
+
+ - -
-
- - - - - - - -
-
-
+
diff --git a/docs/blog/is-claude-code-max-worth-it/index.html b/docs/blog/is-claude-code-max-worth-it/index.html index 975de3ae20..c78746be44 100644 --- a/docs/blog/is-claude-code-max-worth-it/index.html +++ b/docs/blog/is-claude-code-max-worth-it/index.html @@ -411,50 +411,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/is-claude-code-open-source/index.html b/docs/blog/is-claude-code-open-source/index.html index 5b3f108867..b8fff35114 100644 --- a/docs/blog/is-claude-code-open-source/index.html +++ b/docs/blog/is-claude-code-open-source/index.html @@ -292,50 +292,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/is-ollama-good-for-coding/index.html b/docs/blog/is-ollama-good-for-coding/index.html index 657517f8ca..78109c2f81 100644 --- a/docs/blog/is-ollama-good-for-coding/index.html +++ b/docs/blog/is-ollama-good-for-coding/index.html @@ -332,50 +332,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/long-running-agents-the-2026-shift/index.html b/docs/blog/long-running-agents-the-2026-shift/index.html index 068f1873f6..1c497697f1 100644 --- a/docs/blog/long-running-agents-the-2026-shift/index.html +++ b/docs/blog/long-running-agents-the-2026-shift/index.html @@ -350,50 +350,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/loop-engineering-for-ai-agents/index.html b/docs/blog/loop-engineering-for-ai-agents/index.html index 6d1f7e729e..800677e19d 100644 --- a/docs/blog/loop-engineering-for-ai-agents/index.html +++ b/docs/blog/loop-engineering-for-ai-agents/index.html @@ -291,50 +291,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/meta-muse-alternatives/index.html b/docs/blog/meta-muse-alternatives/index.html index 0e405ff664..4831137293 100644 --- a/docs/blog/meta-muse-alternatives/index.html +++ b/docs/blog/meta-muse-alternatives/index.html @@ -188,7 +188,7 @@

Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use
  • You live outside the US. Muse launched for US users aged 18 and over only.
  • You don’t want Meta holding your inbox, calendar and bank data. Muse trains on your chats by default unless you switch it off, according to Meta’s own help page. A WIRED reporter also found it kept asking for more personal data.
  • -
  • You want agents for your work, not your errands. Muse is built for bookings, forms and shopping, not for writing code or running projects.
  • +
  • You want agents for your work, not your errands. Muse is built for bookings, forms and shopping, not for writing code or running projects. For Meta’s coding agent, see Muse Code and Muse Wonder.

Here are seven alternatives, and which reason each one solves.

Muse is US only for now. Three of the seven alternatives run on your own computer.
diff --git a/docs/blog/mistral-large-4/index.html b/docs/blog/mistral-large-4/index.html index a8d0f1b11c..32fb3d7c10 100644 --- a/docs/blog/mistral-large-4/index.html +++ b/docs/blog/mistral-large-4/index.html @@ -346,50 +346,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/munder-difflin-faq/index.html b/docs/blog/munder-difflin-faq/index.html index 3e502f4979..626c77c9f0 100644 --- a/docs/blog/munder-difflin-faq/index.html +++ b/docs/blog/munder-difflin-faq/index.html @@ -320,50 +320,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/muse-wonder/index.html b/docs/blog/muse-wonder/index.html new file mode 100644 index 0000000000..10eed850fc --- /dev/null +++ b/docs/blog/muse-wonder/index.html @@ -0,0 +1,511 @@ + + + + + + + + +Muse Wonder and Muse Code: Meta's new models, prices and scores — Munder Difflin Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +

Muse Wonder and Muse Code: Meta's new models, prices and scores

+

Meta's Muse Wonder and Muse Wonder Full: API price, Muse Code plans, context window and Meta's own coding scores, checked 13 Oct 2026.

+ +
+ +
Title card on white. Muse Wonder in large ink type over a yellow underline, a kicker reading Meta's new models, prices and scores, a Checked 13 Oct 2026 pill and a pocket compass.
+ +
+
+

Our view: Muse Wonder is a real contender for coding agents, not a clear winner. Meta announced Muse Wonder and Muse Wonder Full on 12 October 2026. In Meta’s own coding table, Muse Wonder Full tops two of four rows and Claude Opus 5.5 tops the other two. Checked 13 Oct 2026.

+

New coding models drive coding agents. Munder Difflin is 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. We have not tried Muse Wonder. The install guide covers setup, and the Concepts hub explains the terms.

+

What is Muse Wonder?

+

Muse Wonder is a pair of AI models from Meta, Muse Wonder and Muse Wonder Full, aimed at agent work and coding. Meta’s launch post, dated October 12, 2026, calls them “our most capable models”. Meta’s model card lists text, image, video and audio input, text output and a context length of “1M tokens at inference”.

+

The Hacker News thread had more than 600 points on 13 Oct 2026.

+

What is the difference between Muse Wonder and Muse Wonder Full?

+

Muse Wonder Full is the more capable of the two by Meta’s description, and it comes by subscription with no token price. Meta’s model card calls Muse Wonder Full “our most capable variant”. The rows are our selection from Meta’s model page, read on 13 Oct 2026.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Muse WonderMuse Wonder Full
Model IDmuse-wonder-1.0muse-wonder-full-1.0
Context window1M1M
Listed inModel API and Muse CodeMuse Code, by subscription
Token priceListedNone listed
+
+

Where can you use Muse Wonder today?

+

Meta’s launch post says you can use Muse Wonder today through the Meta Model API and Muse Code, and Muse Wonder Full as a Muse Code subscriber. Meta’s model page narrows Muse Wonder Full to “Access on the Power Usage and Maximum Usage plans”.

+

Muse itself comes later. Meta’s launch post says Muse Wonder “will soon power experiences in Muse, and will roll out first to subscribers”, with no date. Our Meta Muse alternatives list covers the Muse app.

+
Animation. A row of coat hooks on a wall is labelled Meta Model API, Muse Code and Muse. A jacket tagged Muse Wonder drops onto the Meta Model API hook and another onto the Muse Code hook. A jacket tagged Muse Wonder Full drops onto the Muse Code hook. The Muse hook stays empty, with only a dashed outline of a jacket, while a tag reading soon swings on it.
Availability in Meta's launch post of 12 October 2026. The drawing shows hooks and jackets.
+

What is Muse Code?

+

Muse Code is Meta’s coding agent that runs in your terminal. Meta’s Muse Code page calls it “A coding agent for your most complex coding workstreams”.

+

The Muse Code page prints its install command with and without flags, the fuller being curl -fsSL https://dev.meta.ai/install.sh | bash, and says “Available for MacOS and Windows”. The Muse Code page does not mention Linux.

+

Meta’s developer home page says “Multi-agent coding in your terminal”. On 13 Oct 2026 the Muse Code page still said “powered by Muse Spark”, and its model table had no Muse Wonder row.

+
Animation. A toolbox labelled Muse Code opens. A hammer, a saw and a screwdriver lift out and work side by side on one plank, while a spirit level slides along behind them checking the work.
Meta's Muse Code page, read 13 Oct 2026, says "Workers in parallel, reviewers in the background". The drawing shows tools.
+

What does Muse Wonder cost?

+

Through the API, Muse Wonder costs $4.00 input, $0.20 cached input and $20.00 output per Mtok, on Meta’s model page as read on 13 Oct 2026. We read Mtok as a million tokens. Muse Wonder Full has no token price: Meta’s model page says it is “Included with a Muse Code subscription”. Meta’s Muse Code page listed four plans on 13 Oct 2026.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Muse Code planPriceUsage listed
Everyday Usage$5.00/month10 to 50 prompts every 5 hours
High Usage$15.00/month5x more than Everyday Usage
Power Usage$50.00/month20x more than Everyday Usage
Maximum Usage$200.00/month80x more than Everyday Usage
+
+

The Muse Code page lists no token allowance for any plan, as of 13 Oct 2026.

+

For comparison, the Muse Code page listed muse-spark-1.3 at $1.25 input and $4.25 output per Mtok on 13 Oct 2026.

+
Animation. A ladder with four rungs labelled Everyday Usage, High Usage, Power Usage and Maximum Usage. Cards reading $5.00/month, $15.00/month, $50.00/month and $200.00/month clip onto the rungs from the bottom up. Then a ribbon reading Muse Wonder Full ties onto the Power Usage and Maximum Usage rungs. A note beside the ladder gives the usage listed for one plan at a time.
Plans from Meta's Muse Code page, read 13 Oct 2026. The drawing shows a ribbon on the two plans Meta's model page names for Muse Wonder Full.
+

What are Active Memory and Active Focus?

+

They are Meta’s names for two behaviours: remembering what matters across conversations, and sticking with a hard task. Meta’s launch post defines Active Memory as “carrying important context about you across conversations”, and says Active Focus “describes how Muse Wonder continues working toward a challenging goal”.

+

Meta’s launch post names no setting that turns either one on. Our view: wait for outside tests before you rely on either.

+

How good is Muse Wonder at coding?

+

On Meta’s own figures, Muse Wonder Full leads two of the four coding rows and Claude Opus 5.5 leads the other two. The table holds the four coding rows from Meta’s model card, our selection from its 14 rows. Each number is Meta’s own figure, and Meta’s model page labels every column “(max)”. We did not run them.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BenchmarkMuse Wonder FullMuse WonderClaude Fable 5.1GPT-6 AstraClaude Opus 5.5
Terminal-Bench 4.0-AA57.152.052.059.159.6
DeepSWE 1.179.078.867.474.174.2
SWE-Marathon57.5 (xhigh)53.145.642.546.3
ProgramBench59.050.055.552.570.5
+
+

Claude Opus 5.5 scores higher than both Muse Wonder models on Terminal-Bench 4.0-AA and ProgramBench. Muse Wonder, the model with an API price, is lowest of the five on ProgramBench.

+

Meta’s model card says the SWE-Marathon row “is not a controlled common-harness comparison” and that Muse Wonder Full “was reported with xhigh reasoning effort” there. The model card names outside result sources: Artificial Analysis for Terminal-Bench 4.0, Abundant AI for SWE-Marathon, and Datacurve for three of the five DeepSWE scores.

+
Animation. A magnifying glass slides down a sheet with four rows: Terminal-Bench 4.0-AA, DeepSWE 1.1, SWE-Marathon and ProgramBench. It stops on each row and enlarges the highest number: 59.6 for Claude Opus 5.5, 79.0 for Muse Wonder Full, 57.5 (xhigh) for Muse Wonder Full, then 70.5 for Claude Opus 5.5.
Meta's own figures from its model card, read 13 Oct 2026. Our selection of rows. The drawing shows the highest score in each.
+

What did Meta say about safety?

+

Meta’s launch post says Muse Wonder “offers our strongest safeguards to date” against CBRN and cyber misuse, and that a fuller safety report “will be available soon”.

+

Meta’s model card says that without mitigations Meta does “not rule out” Muse Wonder Full reaching the high risk threshold in the Chemical & Biological domain. With mitigations, the model card puts it at “moderate or lower” across all domains. For agent builders, the model card recommends “human-in-the-loop confirmation for irreversible actions”.

+

What does it mean if you run coding agents locally?

+

It means one more hosted model your agents can call, not a model you can download. None of the five Meta pages we read offers Muse Wonder’s weights. Meta’s developer home page lists a different model, Muse Glimmer, as “available on Hugging Face”.

+

Our view: the agent can still run on your machine, but its prompts go to Meta. Our comparison of local-first and cloud agent SDKs covers that trade-off.

+

What should you do now?

+

Try Muse Wonder on one real task before you move work to it.

+
    +
  1. Read Meta’s model page again before you budget.
  2. +
  3. For Muse Wonder Full, check your Muse Code plan.
  4. +
  5. Compare with Claude Haiku 5.5 and Mistral Large 4.
  6. +
+ + + + +
+

FAQ

+ +
+

What is Muse Wonder?

+

Muse Wonder is a series of two AI models from Meta, Muse Wonder and Muse Wonder Full. Meta's launch post of 12 October 2026 calls them its most capable models, for personal and professional agentic tasks and coding. Meta's model card lists text, image, video and audio input, text output and a context length of 1M tokens at inference.

+
+ +
+

What is Muse Code?

+

Muse Code is Meta's coding agent that runs in your terminal. Meta's Muse Code page, read on 13 Oct 2026, prints an install command and says it is available for MacOS and Windows. Meta's launch post says Muse Wonder is available today in Muse Code, and Muse Wonder Full is available today for Muse Code subscribers.

+
+ +
+

How much does Muse Wonder cost?

+

Meta's model page listed Muse Wonder at $4.00 input, $0.20 cached input and $20.00 output per Mtok on 13 Oct 2026. The model page prints no token price for Muse Wonder Full. The model page says Muse Wonder Full is included with a Muse Code subscription, with access on the Power Usage and Maximum Usage plans, which the Muse Code page listed at $50.00/month and $200.00/month.

+
+ +
+

What is the difference between Muse Wonder and Muse Wonder Full?

+

Meta's model card calls Muse Wonder Full its most capable variant. On 13 Oct 2026 Meta's model page listed Muse Wonder as available in the Model API and Muse Code with a token price, and Muse Wonder Full as available by subscription in Muse Code. Both were listed with a 1M context window.

+
+ +
+

Is Muse Wonder better than Claude Opus 5.5 at coding?

+

It depends on the test, on the figures Meta published. Meta's table has Muse Wonder Full ahead on DeepSWE 1.1 (79.0 against 74.2) and SWE-Marathon (57.5 at xhigh effort against 46.3), and Claude Opus 5.5 ahead on Terminal-Bench 4.0-AA (59.6 against 57.1) and ProgramBench (70.5 against 59.0). Meta's model card says the SWE-Marathon row is not a controlled common-harness comparison.

+
+ +
+ + + +
+ + +
+ + + + +
+ + +
+ +
+ + + + + + diff --git a/docs/blog/open-source-ai-tools-on-purpose/index.html b/docs/blog/open-source-ai-tools-on-purpose/index.html index 082ccf5fca..d4098a89e4 100644 --- a/docs/blog/open-source-ai-tools-on-purpose/index.html +++ b/docs/blog/open-source-ai-tools-on-purpose/index.html @@ -322,50 +322,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/openai-decisions-api/index.html b/docs/blog/openai-decisions-api/index.html index 27424fd45b..5f7263745a 100644 --- a/docs/blog/openai-decisions-api/index.html +++ b/docs/blog/openai-decisions-api/index.html @@ -361,50 +361,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/openai-text-watermarking/index.html b/docs/blog/openai-text-watermarking/index.html index bd0bdcd8ca..2ac76429c3 100644 --- a/docs/blog/openai-text-watermarking/index.html +++ b/docs/blog/openai-text-watermarking/index.html @@ -372,50 +372,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/reflection-beam/index.html b/docs/blog/reflection-beam/index.html index b8617802af..7bdba30e08 100644 --- a/docs/blog/reflection-beam/index.html +++ b/docs/blog/reflection-beam/index.html @@ -351,50 +351,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/review-agent-work-where-it-happens/index.html b/docs/blog/review-agent-work-where-it-happens/index.html index 1480791408..d9f6241a09 100644 --- a/docs/blog/review-agent-work-where-it-happens/index.html +++ b/docs/blog/review-agent-work-where-it-happens/index.html @@ -282,50 +282,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/shareable-agent-roles/index.html b/docs/blog/shareable-agent-roles/index.html index 2ab3078380..397e923b2a 100644 --- a/docs/blog/shareable-agent-roles/index.html +++ b/docs/blog/shareable-agent-roles/index.html @@ -324,50 +324,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/tags/ai-agents/index.html b/docs/blog/tags/ai-agents/index.html index a1edaab769..9e4afea512 100644 --- a/docs/blog/tags/ai-agents/index.html +++ b/docs/blog/tags/ai-agents/index.html @@ -105,11 +105,27 @@

Tag

#AI Agents

-

23 posts tagged AI Agents.

+

24 posts tagged AI Agents.

+
diff --git a/docs/blog/tags/claude-code/index.html b/docs/blog/tags/claude-code/index.html index a581754c99..244c18e47a 100644 --- a/docs/blog/tags/claude-code/index.html +++ b/docs/blog/tags/claude-code/index.html @@ -105,11 +105,27 @@

Tag

#Claude Code

-

85 posts tagged Claude Code.

+

86 posts tagged Claude Code.

+
diff --git a/docs/blog/tags/codex/index.html b/docs/blog/tags/codex/index.html index 31fc3e3929..54ba5f0c5d 100644 --- a/docs/blog/tags/codex/index.html +++ b/docs/blog/tags/codex/index.html @@ -105,11 +105,27 @@

Tag

#Codex

-

18 posts tagged Codex.

+

19 posts tagged Codex.

+
diff --git a/docs/blog/tags/concepts/index.html b/docs/blog/tags/concepts/index.html index 17c8a7453d..ea5531c83f 100644 --- a/docs/blog/tags/concepts/index.html +++ b/docs/blog/tags/concepts/index.html @@ -105,11 +105,27 @@

Tag

#Concepts

-

43 posts tagged Concepts.

+

44 posts tagged Concepts.

+
diff --git a/docs/blog/tags/daily-brief/index.html b/docs/blog/tags/daily-brief/index.html index b93a89dbb4..04a16f8b97 100644 --- a/docs/blog/tags/daily-brief/index.html +++ b/docs/blog/tags/daily-brief/index.html @@ -105,11 +105,27 @@

Tag

#Daily Brief

-

10 posts tagged Daily Brief.

+

11 posts tagged Daily Brief.

+
diff --git a/docs/blog/tags/open-source/index.html b/docs/blog/tags/open-source/index.html index e5b091d710..bb48879513 100644 --- a/docs/blog/tags/open-source/index.html +++ b/docs/blog/tags/open-source/index.html @@ -105,11 +105,27 @@

Tag

#Open Source

-

60 posts tagged Open Source.

+

61 posts tagged Open Source.

+
diff --git a/docs/blog/tags/skills/index.html b/docs/blog/tags/skills/index.html index 0d4628aef9..3bb7fd907b 100644 --- a/docs/blog/tags/skills/index.html +++ b/docs/blog/tags/skills/index.html @@ -105,11 +105,27 @@

Tag

#Skills

-

12 posts tagged Skills.

+

13 posts tagged Skills.

+
diff --git a/docs/blog/the-clone-army-trap-mixed-swarm-vs-identical-agents/index.html b/docs/blog/the-clone-army-trap-mixed-swarm-vs-identical-agents/index.html index 373ec19dd9..5ffd9668a7 100644 --- a/docs/blog/the-clone-army-trap-mixed-swarm-vs-identical-agents/index.html +++ b/docs/blog/the-clone-army-trap-mixed-swarm-vs-identical-agents/index.html @@ -358,50 +358,50 @@

FAQ

Related in Concepts

diff --git a/docs/blog/topics/comparisons/index.html b/docs/blog/topics/comparisons/index.html index 6d44607f60..7f5306b6f4 100644 --- a/docs/blog/topics/comparisons/index.html +++ b/docs/blog/topics/comparisons/index.html @@ -114,9 +114,9 @@

comparisons

Honest side-by-sides with the other ways to