diff --git a/blog/src/_data/media.json b/blog/src/_data/media.json index 1f77259780..b6bf63c461 100644 --- a/blog/src/_data/media.json +++ b/blog/src/_data/media.json @@ -3070,6 +3070,176 @@ }, "youtube": [] }, + "claude-cowork-alternatives": { + "title": "Claude Cowork Alternatives: 6 AI Agents for Office Work, Free Picks Included", + "category": "comparisons", + "hero": { + "file": "assets/media/claude-cowork-alternatives/hero.png", + "alt": "Title card on white. A pill reading Comparisons, the title Claude Cowork alternatives, the line Six agents for office work and a Checked 27 Oct 2026 line. Beside them a white card labelled Claude Cowork with a small arrow to a fan of six small cards, the first two tinted yellow and lilac.", + "prompt": "Title card: the hero scene in assets/media/claude-cowork-alternatives/motion.js, shot at 1600 by 900.", + "status": "ready" + }, + "inline": {} + }, + "agent-tools-today-2026-10-27": { + "title": "Agent Tools Today, 27 Oct 2026: GPT-6.1 Terra, Hob, Anthropic's S-1", + "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": [] + }, + "pi-vs-claude-code": { + "title": "Pi vs Claude Code: Price, Models and Permissions Compared (Oct 2026)", + "category": "comparisons", + "hero": { + "file": "assets/media/pi-vs-claude-code/hero.png", + "alt": "Title card on white. A pill reading Comparisons, the title Pi vs Claude Code, the line Free harness or built in features? and a Checked 27 Oct 2026 line. Beside them two simple cards labelled Pi, tinted lilac, and Claude Code, tinted yellow, with a small vs chip between them.", + "prompt": "Title card: the hero scene in assets/media/pi-vs-claude-code/motion.js, shot at 1600 by 900.", + "status": "ready" + }, + "inline": {} + }, + "agent-tools-today-2026-10-28": { + "title": "Agent Tools Today, 28 Oct 2026: OpenCode 2.2, Entire, Hallmark", + "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": [] + }, + "chatgpt-dots-vs-claude-cowork": { + "title": "ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)", + "category": "comparisons", + "hero": { + "file": "assets/media/chatgpt-dots-vs-claude-cowork/hero.png", + "alt": "Title card on white. A pill reading Comparisons, the title ChatGPT Dots vs Claude Cowork, the line Ongoing jobs or finished files? and a Checked 28 Oct 2026 line, beside a lilac ribbon bookmark and a yellow index card with a small vs chip between them.", + "prompt": "Title card: the hero scene in assets/media/chatgpt-dots-vs-claude-cowork/motion.js, shot at 1600 by 900.", + "status": "ready" + }, + "inline": {} + }, + "codex-vs-chatgpt": { + "title": "Codex vs ChatGPT: What Is the Difference? (Oct 2026)", + "category": "comparisons", + "hero": { + "file": "assets/media/codex-vs-chatgpt/hero.png", + "alt": "Title card on white. A pill reading Comparisons, the title Codex vs ChatGPT, the line Coding agent or assistant? and a Checked 28 Oct 2026 line, beside two stacked trays labelled ChatGPT and Codex with a small vs chip.", + "prompt": "Title card: the hero scene in assets/media/codex-vs-chatgpt/motion.js, shot at 1600 by 900.", + "status": "ready" + }, + "inline": {} + }, + "agent-tools-today-2026-10-29": { + "title": "Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals", + "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": [] + }, + "gemini-4-carbon": { + "title": "Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)", + "category": "concepts", + "hero": { + "file": "assets/media/gemini-4-carbon/hero.png", + "alt": "Title card on white. Gemini 4 Carbon in large ink type, a Concepts pill, the line Early access, Argon's price, Checked 29 Oct 2026, and two blocks labelled Argon and Carbon on a two step podium", + "prompt": "Still of the hero scene in assets/media/gemini-4-carbon/motion.js.", + "status": "ready" + }, + "inline": {} + }, + "how-to-run-mistral-large-4": { + "title": "How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)", + "category": "guides", + "hero": { + "file": "assets/media/how-to-run-mistral-large-4/hero.png", + "alt": "Title card on white. Run Mistral Large 4 in large ink type with the line From 256 GB of memory, three suitcases tagged 233 GB, 378 GB and 605 GB, and Checked 29 Oct 2026", + "prompt": "Still of the hero scene in assets/media/how-to-run-mistral-large-4/motion.js.", + "status": "ready" + }, + "inline": {} + }, + "mistral-large-4-vs-claude-opus-5-5": { + "title": "Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)", + "category": "comparisons", + "hero": { + "file": "assets/media/mistral-large-4-vs-claude-opus-5-5/hero.png", + "alt": "Title card on white. Mistral Large 4 vs Claude Opus 5.5 in large ink type with the line Open weights or top scores, two taxi meters reading $2.10 and $20, and Checked 29 Oct 2026", + "prompt": "Still of the hero scene in assets/media/mistral-large-4-vs-claude-opus-5-5/motion.js.", + "status": "ready" + }, + "inline": {} + }, + "what-is-kimi-k3-1-pro": { + "title": "What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)", + "category": "concepts", + "hero": { + "file": "assets/media/what-is-kimi-k3-1-pro/hero.png", + "alt": "Title card on white. Kimi K3.1 Pro in large ink type with the line 1M context, weights by 4 Nov, three high jump bars, and Checked 29 Oct 2026", + "prompt": "Still of the hero scene in assets/media/what-is-kimi-k3-1-pro/motion.js.", + "status": "ready" + }, + "inline": {} + }, + "agent-tools-today-2026-10-30": { + "title": "Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App", + "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": [] + }, + "what-is-instinct-ai": { + "title": "What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)", + "category": "concepts", + "hero": { + "file": "assets/media/what-is-instinct-ai/hero.png", + "alt": "Title card on white. What is Instinct AI? in large ink type, a Concepts pill, the line Private beta, plus 6 alternatives, Checked 30 Oct 2026, and three small chat bubbles", + "prompt": "Still of the hero scene in assets/media/what-is-instinct-ai/motion.js.", + "status": "ready" + }, + "inline": {} + }, + "meta-muse-alternatives": { + "title": "Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)", + "category": "comparisons", + "hero": { + "file": "assets/media/meta-muse-alternatives/hero.png", + "alt": "Title card on white. Meta Muse alternatives in large ink type, a Comparisons pill, the line 7 picks, open source and hosted, Checked 30 Oct 2026, and a small compass", + "prompt": "Still of the hero scene in assets/media/meta-muse-alternatives/motion.js.", + "status": "ready" + }, + "inline": {} + }, + "agent-tools-today-2026-10-31": { + "title": "Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5", + "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": [] + }, "the-hook-shim-pattern": { "title": "The Hook Shim Pattern: Wiring Agent Hooks to a Live Process", "category": "internals", @@ -4561,7 +4731,7 @@ "category": "concepts", "hero": { "file": "assets/media/mistral-large-4/hero.png", - "alt": "Title card on white. Mistral Large 4 in large ink type with a lilac kettlebell labelled Le Chonk and the line Checked 6 Oct 2026", + "alt": "Title card on white. Mistral Large 4 in large ink type with a lilac kettlebell labelled Le Chonk and the line Checked 29 Oct 2026", "prompt": "Still of the hero scene in assets/media/mistral-large-4/motion.js.", "status": "ready" }, diff --git a/blog/src/assets/media/agent-tools-today-2026-10-27/motion.css b/blog/src/assets/media/agent-tools-today-2026-10-27/motion.css new file mode 100644 index 0000000000..8cfca96d6b --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-27/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scene for "Agent tools today, 27 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-27/motion.js b/blog/src/assets/media/agent-tools-today-2026-10-27/motion.js new file mode 100644 index 0000000000..9e4bd8f159 --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-27/motion.js @@ -0,0 +1,188 @@ +/* Bright coded scene for "Agent tools today, 27 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 laptop runs an open weight model on its own: Files go in, a Chart comes out, and the Web search switch cuts the dotted line to Online ---- */ + SC.today = { + w: 1600, h: 1200, dur: 11, still: 9.6, + build(svg, api) { + const A = (o) => Object.assign({ stroke: INK, "stroke-width": 4, "stroke-linejoin": "round", "stroke-linecap": "round" }, o); + const lp = (a, b, p) => a + (b - a) * p; + /* geometry */ + const LX = 440, LW = 720, LT = 480, HINGE = 860, CX = 800, CHX = 900, CHY = 670, FY = 670; + const SWX = 850, SWY = 338, SWW = 132, SWH = 66; + const LINE_TOP = 272, LINE_BOT = LT - 10; + /* beats, in seconds */ + const T_LINE = 0.7, T_SW = 0.9, T_FOLD = 1.4, T_SLIDE = 2.4, T_PULSE = 3.8, T_OUT = 4.6, T_BARS = 5.5, T_OFF = 7.0; + + /* the whole picture sits 50 lower so it is centred top to bottom */ + const inner = el("g", { transform: "translate(0 50)" }, svg); + const defs = el("defs", {}, svg); + + /* the dotted line from the cloud down to the laptop; it grows in, then dots flow down it */ + const lclip = el("clipPath", { id: "mg-today-line" }, defs); + const lrect = el("rect", { x: CX - 20, y: LINE_TOP - 10, width: 40, height: 0 }, lclip); + const lineG = el("g", { "clip-path": "url(#mg-today-line)" }, inner); + const line = el("path", { d: `M ${CX} ${LINE_TOP} V ${LINE_BOT}`, fill: "none", stroke: BLUE, "stroke-width": 10, "stroke-linecap": "round", "stroke-dasharray": "1 19" }, lineG); + + /* the cloud, labelled Online */ + const cloud = el("g", {}, inner); + el("path", A({ d: "M640 270 A70 70 0 0 1 620 140 A95 95 0 0 1 790 80 A110 110 0 0 1 960 130 A80 80 0 0 1 980 270 Z", fill: SKY }), cloud); + txt(cloud, CX, 214, "Online", { "text-anchor": "middle", "font-size": 46, "font-weight": 700 }); + + /* the Chart sheet waits behind the screen, so it is drawn before the laptop */ + const sheet = el("g", {}, inner); + el("rect", A({ x: -100, y: -125, width: 200, height: 250, rx: 16, fill: "#fff" }), sheet); + txt(sheet, 0, -74, "Chart", { "text-anchor": "middle", "font-size": 36, "font-weight": 700 }); + const BARS = [[-66, 60, BLUE], [-28, 100, MINT], [10, 76, YEL], [48, 130, LIL]]; + const bars = BARS.map(([x, h, f]) => ({ h, n: el("rect", A({ x, y: 95, width: 28, height: 0, rx: 5, fill: f, "stroke-width": 3 }), sheet) })); + el("path", A({ d: "M-78 95 H80", fill: "none", "stroke-width": 3.5 }), sheet); + + /* the laptop, labelled Your computer */ + const laptop = el("g", {}, inner); + el("path", A({ d: `M${LX - 40} ${HINGE} H${LX + LW + 40} L${LX + LW + 74} ${HINGE + 46} Q${LX + LW + 78} ${HINGE + 56} ${LX + LW + 66} ${HINGE + 56} H${LX - 66} Q${LX - 78} ${HINGE + 56} ${LX - 74} ${HINGE + 46} Z`, fill: SOFT }), laptop); + txt(laptop, CX, HINGE + 128, "Your computer", { "text-anchor": "middle", "font-size": 46, "font-weight": 700 }); + el("rect", A({ x: LX, y: LT, width: LW, height: HINGE - LT, rx: 24, fill: BLUE }), laptop); + el("rect", A({ x: LX + 22, y: LT + 22, width: LW - 44, height: HINGE - LT - 44, rx: 12, fill: "#fff", "stroke-width": 3 }), laptop); + + /* the chip, labelled Open weight model, with pins that light up while it works */ + const chip = el("g", {}, laptop); + const pinsInk = el("g", {}, chip), pinsLit = el("g", { opacity: 0 }, chip); + for (let i = 0; i < 8; i++) { + const x = -160 + i * 44 - 7; + [[-83, pinsInk, INK], [65, pinsInk, INK], [-83, pinsLit, YEL], [65, pinsLit, YEL]].forEach(([y, g, f]) => el("rect", A({ x, y, width: 14, height: 18, rx: 3, fill: f, "stroke-width": 2.5 }), g)); + } + el("rect", A({ x: -190, y: -65, width: 380, height: 130, rx: 18, fill: LIL }), chip); + txt(chip, 0, 12, "Open weight model", { "text-anchor": "middle", "font-size": 33, "font-weight": 700 }); + + /* the folder, labelled Files; it slides over the frame into the screen, so it is drawn after the laptop */ + const folder = el("g", {}, inner); + el("path", A({ d: "M-95 68 V-78 Q-95 -85 -88 -85 H-30 L-14 -68 H88 Q95 -68 95 -61 V68 Q95 75 88 75 H-88 Q-95 75 -95 68 Z", fill: YEL }), folder); + el("rect", A({ x: -74, y: -60, width: 148, height: 40, rx: 6, fill: "#fff", "stroke-width": 3 }), folder); + el("rect", A({ x: -95, y: -46, width: 190, height: 121, rx: 10, fill: YEL }), folder); + txt(folder, 0, 32, "Files", { "text-anchor": "middle", "font-size": 38, "font-weight": 700 }); + + /* the Web search switch beside the line: mint and knob right when on, soft and knob left when off */ + const sw = el("g", {}, inner), swFace = el("g", {}, sw); + el("rect", { x: SWX - 12, y: SWY - 12, width: SWW + 24 + 250, height: SWH + 24, rx: (SWH + 24) / 2, fill: "none", stroke: INK, "stroke-width": 3, "stroke-dasharray": "10 8", class: "mg-ring" }, swFace); + el("rect", { x: SWX - 12, y: SWY - 12, width: SWW + 24 + 250, height: SWH + 24, rx: (SWH + 24) / 2, fill: "#fff", opacity: 0 }, swFace); + el("rect", A({ x: SWX, y: SWY, width: SWW, height: SWH, rx: SWH / 2, fill: SOFT, "stroke-width": 3.5 }), swFace); + const swOn = el("rect", A({ x: SWX, y: SWY, width: SWW, height: SWH, rx: SWH / 2, fill: MINT, "stroke-width": 3.5 }), swFace); + const knob = el("circle", A({ cx: SWX + SWW - SWH / 2, cy: SWY + SWH / 2, r: 24, fill: "#fff", "stroke-width": 3.5 }), swFace); + txt(swFace, SWX + SWW + 26, SWY + SWH / 2 + 13, "Web search", { "font-size": 38, "font-weight": 600 }); + + /* tap the switch, or Enter or Space on it: Web search flips, and the dotted line follows */ + let user = false, from = 1, to = 1, at = -99, kv = 1, last = 0; + button(sw, "Web search", () => { + from = kv; to = kv < 0.5 ? 1 : 0; user = true; + at = calm || frozen ? -99 : api.now(); + sw.setAttribute("aria-checked", to ? "true" : "false"); + if (calm || frozen) D(last, api.now()); + }); + sw.setAttribute("role", "switch"); + sw.setAttribute("aria-checked", "true"); + + const pop = (n, p, x, y, s = 1) => { tf(n, x, y, (s * ob(p)).toFixed(3)); n.setAttribute("opacity", p > 0 ? 1 : 0); }; + const D = (t, now = 0) => { + last = t; + inner.setAttribute("opacity", (oc(seg(t, 0, 0.3)) * (1 - io(seg(t, 10.4, 10.9)))).toFixed(3)); + laptop.setAttribute("opacity", io(seg(t, 0.1, 0.5)).toFixed(3)); + cloud.setAttribute("opacity", io(seg(t, 0.2, 0.6)).toFixed(3)); + sw.setAttribute("opacity", io(seg(t, T_SW, T_SW + 0.4)).toFixed(3)); + + /* switch value: the timeline flips it off once; after a tap it is the reader's */ + let lv; + if (user) { + const d = now - at; + kv = lp(from, to, io(seg(d, 0, 0.35))); + lv = lp(from, to, io(seg(d, 0.05, 0.6))); + } else { + kv = 1 - io(seg(t, T_OFF, T_OFF + 0.4)); + lv = 1 - io(seg(t, T_OFF + 0.1, T_OFF + 0.9)); + } + knob.setAttribute("cx", lp(SWX + SWH / 2, SWX + SWW - SWH / 2, kv).toFixed(1)); + swOn.setAttribute("opacity", kv.toFixed(3)); + sw.setAttribute("aria-checked", kv >= 0.5 ? "true" : "false"); + + /* the dotted line grows down to the laptop, dots flow while it is on, and it fades when Web search is off */ + lrect.setAttribute("height", ((LINE_BOT - LINE_TOP + 20) * io(seg(t, T_LINE, T_LINE + 0.7))).toFixed(1)); + line.setAttribute("stroke-dashoffset", (-(t * 40) % 20).toFixed(2)); + lineG.setAttribute("opacity", lp(0.22, 1, lv).toFixed(3)); + + /* the folder pops in on the left, then slides into the screen */ + const sp = io(seg(t, T_SLIDE, T_SLIDE + 1.2)); + pop(folder, seg(t, T_FOLD, T_FOLD + 0.45), lp(240, 585, sp), FY, lp(1, 0.8, sp)); + + /* the chip works: a small bump and lit pins */ + const cp = seg(t, T_PULSE, T_PULSE + 0.8), bump = Math.sin(Math.PI * cp); + tf(chip, CHX, CHY, (1 + 0.06 * bump).toFixed(3)); + pinsLit.setAttribute("opacity", bump.toFixed(3)); + + /* the Chart sheet slides out of the right side, then its bars grow */ + const op = io(seg(t, T_OUT, T_OUT + 1.2)); + sheet.setAttribute("opacity", t >= T_OUT ? 1 : 0); + tf(sheet, lp(1000, 1340, op).toFixed(1), CHY, 1, 4 * Math.sin(Math.PI * op)); + bars.forEach((b, i) => { + const h = b.h * oc(seg(t, T_BARS + i * 0.18, T_BARS + i * 0.18 + 0.5)); + b.n.setAttribute("y", (95 - h).toFixed(1)); + b.n.setAttribute("height", h.toFixed(1)); + b.n.setAttribute("opacity", h > 0.5 ? 1 : 0); + }); + + swFace.setAttribute("transform", `translate(${SWX + SWW / 2} ${SWY + SWH / 2}) scale(${(1 - 0.05 * Math.sin(Math.PI * seg(now - at, 0, 0.2))).toFixed(3)}) translate(${-(SWX + SWW / 2)} ${-(SWY + SWH / 2)})`); + }; + return D; + }, + }; + + /* ---- 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, once = false; + const base = performance.now(), clock = () => (performance.now() - base) / 1000; + let draw = () => {}; + /* "once": a replay asked for under reduced motion plays through one time, then holds on the still */ + const frame = () => { const now = clock(); if (once && now + off >= sc.still) { once = false; held = true; } 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, hold) => { off = s - clock(); held = false; once = !!hold; tick(); }, poke: () => { held = false; tick(); }, redraw: () => frame() }; + 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-27/today.png b/blog/src/assets/media/agent-tools-today-2026-10-27/today.png new file mode 100644 index 0000000000..0e37b10242 Binary files /dev/null and b/blog/src/assets/media/agent-tools-today-2026-10-27/today.png differ diff --git a/blog/src/assets/media/agent-tools-today-2026-10-28/motion.css b/blog/src/assets/media/agent-tools-today-2026-10-28/motion.css new file mode 100644 index 0000000000..e388e721d3 --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-28/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scene for "Agent Tools Today, 28 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-28/motion.js b/blog/src/assets/media/agent-tools-today-2026-10-28/motion.js new file mode 100644 index 0000000000..f02e7abcb5 --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-28/motion.js @@ -0,0 +1,109 @@ +/* Bright coded scene for "Agent Tools Today, 28 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(); } }); + }; + /* each loop opens on the final frame and eases back to the start in R0 seconds, so the loop has no jump */ + const R0 = 0.6; + const pv = (t, a, b, e = oc) => (t < R0 ? 1 - io(t / R0) : e(seg(t, a, b))); + const hint = (svg, s) => txt(svg, 756, 52, s, { "text-anchor": "end", "font-size": 16, fill: MUTE, "font-weight": 500 }); + const hitbox = (g, a) => el("rect", Object.assign({ fill: "#fff", "fill-opacity": 0 }, a), g); + const ring = (g, a) => el("rect", Object.assign({ fill: "none", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "6 6", class: "mg-ring" }, a), g); + /* a tap toggles one thing between 0 and 1; under reduced motion it jumps */ + const flipper = (api, D = 0.6) => { + let m = null, last = 0; + return { + v(auto, now) { last = m ? m.f + (m.to - m.f) * io(seg(now, m.at, m.at + (calm ? 1e-3 : D))) : auto; return last; }, + flip() { m = { f: last, to: last > 0.5 ? 0 : 1, at: api.now() }; api.nudge(); }, + }; + }; + let uid = 0; + + const SC = {}; + + /* ---- a three drawer cabinet, seen from the side; each drawer opens on a card and its tag ---- */ + SC.today = { + dur: 7.4, still: 7.4, + build(svg, api) { + hint(svg, "tap a drawer"); + const CX = 60, CW = 320, TOP = 84, ROW = 150, EXT = 306, defs = el("defs", {}, svg); + el("path", { d: "M40 562 H760", stroke: SOFT, "stroke-width": 12, "stroke-linecap": "round" }, svg); + el("rect", { x: CX + 24, y: 546, width: 34, height: 14, rx: 4, fill: INK }, svg); + el("rect", { x: CX + CW - 58, y: 546, width: 34, height: 14, rx: 4, fill: INK }, svg); + el("rect", { x: CX, y: TOP - 8, width: CW, height: 3 * ROW + 20, rx: 12, fill: YEL, stroke: INK, "stroke-width": 3 }, svg); + el("rect", { x: CX - 12, y: TOP - 20, width: CW + 24, height: 18, rx: 7, fill: YEL, stroke: INK, "stroke-width": 3 }, svg); + const items = [["OpenCode 2.2.0", "Desktop plugins", LIL], ["Entire", "Trails", MINT], ["Hallmark", "Design skill", SKY]]; + const rows = items.map(([name, tag, col], i) => { + const y0 = TOP + 6 + i * ROW, id = `mgclip${++uid}`; + el("rect", { x: CX + 18, y: y0 + 6, width: CW - 36, height: 126, rx: 9, fill: "none", stroke: INK, "stroke-width": 2 }, svg); + el("rect", { x: CX + CW + 1, y: 0, width: 800, height: y0 + 138 }, el("clipPath", { id }, defs)); + const g = el("g", {}, svg); + hitbox(g, { x: CX, y: y0 - 4, width: CW + EXT + 54, height: 146 }); + ring(g, { x: CX - 8, y: y0 - 8, width: CW + EXT + 64, height: 154, rx: 14 }); + const body = el("g", {}, el("g", { "clip-path": `url(#${id})` }, g)), card = el("g", {}, body); + el("rect", { x: CX + 30, y: y0 + 6, width: 270, height: 120, rx: 10, fill: "#fff", stroke: INK, "stroke-width": 3 }, card); + txt(card, CX + 48, y0 + 42, name, { "font-family": MONO, "font-size": 24, "font-weight": 700 }); + const chip = el("rect", { x: CX + 48, y: y0 + 52, height: 28, rx: 14, fill: col, stroke: INK, "stroke-width": 2 }, card); + const ct = txt(card, 0, y0 + 71.5, tag, { "text-anchor": "middle", "font-size": 16 }); + const w = ct.getComputedTextLength() + 30; chip.setAttribute("width", w); ct.setAttribute("x", CX + 48 + w / 2); + el("rect", { x: CX + 14, y: y0 + 88, width: CW - 16, height: 50, rx: 6, fill: SOFT, stroke: INK, "stroke-width": 3 }, body); + const front = el("g", {}, g); + el("rect", { x: CX + CW - 4, y: y0, width: 20, height: 138, rx: 6, fill: BLUE, stroke: INK, "stroke-width": 3 }, front); + el("rect", { x: CX + CW + 16, y: y0 + 54, width: 14, height: 30, rx: 6, fill: YEL, stroke: INK, "stroke-width": 3 }, front); + const f = flipper(api, 0.8); + button(g, `Drawer: ${name}, ${tag}`, () => f.flip()); + return { body, card, front, f, a: 1.0 + i * 1.7 }; + }); + return (t, now) => rows.forEach((r) => { + const o = r.f.v(pv(t, r.a, r.a + 1.0, ob), now), k = ob(cl((o - 0.5) / 0.5)); + tf(r.body, EXT * o, 0); tf(r.front, EXT * o, 0); tf(r.card, 0, 90 * (1 - cl(k, 0, 1.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(); }, nudge: () => { if (held) frame(); else 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-28/today.png b/blog/src/assets/media/agent-tools-today-2026-10-28/today.png new file mode 100644 index 0000000000..7ec0fa263c Binary files /dev/null and b/blog/src/assets/media/agent-tools-today-2026-10-28/today.png differ diff --git a/blog/src/assets/media/agent-tools-today-2026-10-29/motion.css b/blog/src/assets/media/agent-tools-today-2026-10-29/motion.css new file mode 100644 index 0000000000..268927dd39 --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-29/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Agent Tools Today, 29 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-29/motion.js b/blog/src/assets/media/agent-tools-today-2026-10-29/motion.js new file mode 100644 index 0000000000..37049aa4ef --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-29/motion.js @@ -0,0 +1,119 @@ +/* Bright coded scenes for "Agent Tools Today, 29 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"; + 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 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 = {}; + + /* ---- today: three cards pinned to a cork board, one at a time ---- */ + SC.today = { + dur: 7, still: 7, + build(svg, api) { + el("rect", { x: 28, y: 28, width: 744, height: 544, rx: 28, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + el("rect", { x: 52, y: 52, width: 696, height: 496, rx: 16, fill: YEL, stroke: INK, "stroke-width": 2.5 }, svg); + let seed = 11; const rnd = () => (seed = (seed * 9301 + 49297) % 233280) / 233280; + for (let i = 0; i < 120; i++) el("circle", { cx: 68 + rnd() * 664, cy: 68 + rnd() * 464, r: 1.4 + rnd() * 1.8, fill: "#fff" }, svg); + const CARDS = [ + ["Gemini 4", "Carbon", "Early access", SKY, BLUE, -3], + ["Copilot", "connectors", "26 services", LIL, MINT, 2], + ["OpenCode", "2.2.1", "Goal mode", MINT, LIL, -2], + ]; + const X = [186, 400, 614], Y = 306, A = (i) => 0.5 + i * 1.15; + let touched = false; + const cards = CARDS.map(([a, b, tag, chip, pc, r0], i) => { + const slot = el("g", { opacity: 0, transform: `translate(${X[i]} ${Y}) rotate(${r0})` }, svg); + el("rect", { x: -98, y: -118, width: 196, height: 236, rx: 14, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "6 8" }, slot); + el("circle", { cx: 0, cy: -92, r: 3, fill: INK }, slot); + const g = el("g", {}, svg); + const sh = el("rect", { x: -98, y: -118, width: 196, height: 236, rx: 14, fill: LIL, stroke: INK, "stroke-width": 3 }, g); + el("rect", { x: -98, y: -118, width: 196, height: 236, rx: 14, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + el("rect", { x: -108, y: -128, width: 216, height: 256, rx: 20, fill: "none", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "4 6", class: "mg-ring" }, g); + txt(g, 0, -12, a, { "text-anchor": "middle", "font-family": MONO, "font-size": 25, "font-weight": 700 }); + txt(g, 0, 22, b, { "text-anchor": "middle", "font-family": MONO, "font-size": 25, "font-weight": 700 }); + el("rect", { x: -76, y: 54, width: 152, height: 40, rx: 20, fill: chip, stroke: INK, "stroke-width": 2.5 }, g); + txt(g, 0, 81, tag, { "text-anchor": "middle", "font-size": 19, "font-weight": 600 }); + const pin = el("g", {}, g); + const needle = el("path", { d: "M0 4 V28", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, pin); + el("circle", { r: 14, fill: pc, stroke: INK, "stroke-width": 3 }, pin); + el("circle", { cx: -4, cy: -4, r: 4, fill: "#fff" }, pin); + const st = { up: false, at: -99, from: 0, k: 0 }; + button(g, `${a} ${b}, ${tag}`, () => { + st.from = st.k; st.up = !st.up; st.at = api.now(); touched = true; + g.setAttribute("aria-pressed", String(st.up)); + if (st.up) svg.appendChild(g); + if (api.calm) api.redraw(); else api.poke(); + }); + g.setAttribute("aria-pressed", "false"); + return { slot, g, sh, pin, needle, st, r0, x: X[i] }; + }); + return (t, now) => { + if (touched) t = SC.today.dur; + cards.forEach((c, i) => { + const a0 = A(i), d = oc(seg(t, a0, a0 + 0.45)), p = seg(t, a0 + 0.4, a0 + 0.8); + c.g.setAttribute("visibility", t >= a0 ? "visible" : "hidden"); + const s = c.st, u = api.calm ? 1 : seg(now - s.at, 0, 0.4); + s.k = s.up ? s.from + (1 - s.from) * oc(u) : s.from * (1 - ob(u)); + const k = s.k, kk = cl(k), bump = Math.sin(seg(t, a0 + 0.72, a0 + 0.95) * Math.PI) * 0.02; + tf(c.g, c.x, Y - 50 * (1 - d) - 30 * k, 1 + 0.05 * (1 - d) + 0.04 * k - bump, c.r0 * (1 - kk)); + c.sh.setAttribute("transform", `translate(${6 * kk} ${10 * kk})`); + c.slot.setAttribute("opacity", kk > 0.35 ? 1 : 0); + const fall = 1 - ob(p); + c.pin.setAttribute("transform", `translate(0 ${-92 - 56 * fall - 64 * kk}) rotate(${22 * kk})`); + c.pin.setAttribute("opacity", p > 0 ? 1 : 0); + c.needle.setAttribute("opacity", kk > 0.05 || p < 1 ? 1 : 0); + }); + }; + }, + }; + + /* ---- 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, calm: calm || frozen, + seek: (s) => { off = s - clock(); held = false; tick(); }, + poke: () => { held = false; tick(); }, + redraw: () => { if (frozen) draw(isNaN(fixed) ? sc.still : fixed, clock()); else 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-29/today.png b/blog/src/assets/media/agent-tools-today-2026-10-29/today.png new file mode 100644 index 0000000000..59e75fa5ed Binary files /dev/null and b/blog/src/assets/media/agent-tools-today-2026-10-29/today.png differ diff --git a/blog/src/assets/media/agent-tools-today-2026-10-30/motion.css b/blog/src/assets/media/agent-tools-today-2026-10-30/motion.css new file mode 100644 index 0000000000..2c898d64a9 --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-30/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scene for "Agent tools today, 30 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-30/motion.js b/blog/src/assets/media/agent-tools-today-2026-10-30/motion.js new file mode 100644 index 0000000000..99ba30c86c --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-30/motion.js @@ -0,0 +1,115 @@ +/* Bright coded scene for "Agent tools today, 30 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 strip = (svg, y, w = 680) => { + el("rect", { x: (800 - w) / 2, y, width: w, height: 48, rx: 24, fill: SOFT }, svg); + return txt(svg, 400, y + 31, "", { "text-anchor": "middle", "font-size": 20, "font-weight": 500 }); + }; + + const SC = {}; + + /* ---- three envelopes drop into a mail sorting rack ---- */ + SC.sorter = { + dur: 8.5, still: 7, + build(svg, api) { + const X0 = 48, DW = 16, S = (704 - 4 * DW) / 3, EW = 196, EH = 250, TOP = 270, OUT = 180; + const MAIL = [ + ["Mistral", "Large 4", "Weights out", SKY], + ["Claude Code", "2.1.314", "Write guard", LIL], + ["Herdr", "", "Desktop app", MINT], + ]; + const root = el("g", { transform: "translate(0 -64)" }, svg); + const grain = (d, p) => el("path", { d, stroke: "#fff", "stroke-opacity": 0.6, "stroke-width": 2.5, fill: "none", "stroke-linecap": "round" }, p); + el("ellipse", { cx: 400, cy: 560, rx: 370, ry: 10, fill: SOFT }, root); + el("rect", { x: X0 + 8, y: 216, width: 688, height: 316, rx: 10, fill: SOFT, stroke: INK, "stroke-width": 3 }, root); + for (let i = 0; i < 4; i++) { + const x = X0 + i * (S + DW); + el("rect", { x, y: 196, width: DW, height: 336, rx: 8, fill: YEL, stroke: INK, "stroke-width": 3 }, root); + grain(`M${x + 8} 214 V300 M${x + 8} 330 V440`, root); + } + const layer = el("g", {}, root); + el("rect", { x: 40, y: 454, width: 720, height: 78, rx: 12, fill: YEL, stroke: INK, "stroke-width": 3 }, root); + grain("M72 476 C200 468 330 486 460 476 S660 468 728 478", root); + grain("M120 506 C260 498 380 514 520 506 S640 500 690 506", root); + el("ellipse", { cx: 600, cy: 492, rx: 14, ry: 5, fill: "none", stroke: "#fff", "stroke-opacity": 0.6, "stroke-width": 2.5 }, root); + el("rect", { x: 28, y: 526, width: 744, height: 20, rx: 10, fill: YEL, stroke: INK, "stroke-width": 3 }, root); + const env = MAIL.map(([a, b, tag, col], i) => { + const g = el("g", {}, layer); + el("rect", { x: -8, y: -8, width: EW + 16, height: EH + 16, rx: 16, fill: "none", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "6 6", class: "mg-ring" }, g); + el("rect", { width: EW, height: EH, rx: 10, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + el("path", { d: `M4 5 L${EW / 2} 52 L${EW - 4} 5`, stroke: MUTE, "stroke-width": 2.5, fill: "none", "stroke-linejoin": "round", "stroke-linecap": "round" }, g); + const name = { "text-anchor": "middle", "font-family": MONO, "font-size": 24, "font-weight": 700 }; + if (b) { txt(g, EW / 2, 92, a, name); txt(g, EW / 2, 120, b, name); } else txt(g, EW / 2, 106, a, name); + const chip = el("rect", { y: 138, height: 34, rx: 17, fill: col, stroke: INK, "stroke-width": 2.5 }, g); + const tt = txt(g, EW / 2, 161, tag, { "text-anchor": "middle", "font-size": 19, "font-weight": 600 }); + const w = (tt.getComputedTextLength() || 110) + 32; + chip.setAttribute("x", EW / 2 - w / 2); chip.setAttribute("width", w); + const st = { out: false, at: -99 }; + button(g, `${b ? a + " " + b : a}, ${tag}`, () => { + st.out = !st.out; st.at = api.calm ? -99 : api.now(); g.setAttribute("aria-pressed", st.out); + if (api.calm) api.redraw(); else api.poke(); + }); + g.setAttribute("aria-pressed", "false"); + return { g, st, x: X0 + DW + i * (S + DW) + (S - EW) / 2, d: 0.5 + i * 1.4, r: [-7, 6, -5][i] }; + }); + return (t, now) => { + const fade = 1 - seg(t, 7.6, 8.2); + env.forEach((e) => { + const k = seg(t, e.d, e.d + 0.75), bump = Math.sin(seg(t, e.d + 0.75, e.d + 1.05) * Math.PI); + const p = io(seg(now - e.st.at, 0, 0.55)), slide = e.st.out ? -OUT * p : -OUT * (1 - p); + const y = TOP - 620 * (1 - k * k) - 14 * bump + slide, r = e.r * (1 - k) + e.r * 0.25 * bump; + e.g.setAttribute("transform", `translate(${e.x + EW / 2} ${y + EH / 2}) rotate(${r}) translate(${-EW / 2} ${-EH / 2})`); + e.g.setAttribute("opacity", t < e.d ? 0 : fade); + }); + }; + }, + }; + + /* ---- 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 = { calm, redraw: () => frame(), 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-30/sorter.png b/blog/src/assets/media/agent-tools-today-2026-10-30/sorter.png new file mode 100644 index 0000000000..a53b116cfa Binary files /dev/null and b/blog/src/assets/media/agent-tools-today-2026-10-30/sorter.png differ diff --git a/blog/src/assets/media/agent-tools-today-2026-10-31/motion.css b/blog/src/assets/media/agent-tools-today-2026-10-31/motion.css new file mode 100644 index 0000000000..8b812ac40e --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-31/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Agent tools today, 31 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-31/motion.js b/blog/src/assets/media/agent-tools-today-2026-10-31/motion.js new file mode 100644 index 0000000000..8c03a018ee --- /dev/null +++ b/blog/src/assets/media/agent-tools-today-2026-10-31/motion.js @@ -0,0 +1,131 @@ +/* Bright coded scenes for "Agent tools today, 31 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"; + 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 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 small shopfront whose three roller shutters roll up one at a time ---- */ + SC.shutters = { + dur: 8.5, still: 6.5, + build(svg, api) { + const BAYS = [ + { x: 76, fill: LIL, name: ["Claude Code", "extension"], tag: "Check Cursor", at: [0.6, 1.8] }, + { x: 297, fill: SKY, name: ["Claude Code", "2.1.316"], tag: "Subagent effort", at: [2.0, 3.2] }, + { x: 518, fill: MINT, name: ["OpenCode", "2.2.3"], tag: "Claude Agent", at: [3.4, 4.6] }, + ]; + const W = 206, TOP = 180, H = 330, SLAT = 22, TRAVEL = H - 16; + + /* the shop: wall, roof edge, striped awning, pavement */ + el("rect", { x: 60, y: 36, width: 680, height: 504, fill: YEL, stroke: INK, "stroke-width": 3 }, svg); + el("rect", { x: 44, y: 24, width: 712, height: 14, rx: 7, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + for (let i = 0; i < 14; i++) el("path", { d: `M${50 + i * 50} 38 H${100 + i * 50} V108 a25 25 0 0 1 -50 0 Z`, fill: i % 2 ? "#fff" : BLUE, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, svg); + el("rect", { x: 24, y: 540, width: 752, height: 26, rx: 13, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + + const cur = [0, 0, 0]; + const bays = BAYS.map((b, i) => { + const g = el("g", {}, svg), cx = b.x + W / 2; + el("rect", { x: b.x, y: 146, width: W, height: 364, fill: "#fff", "fill-opacity": 0 }, g); + el("rect", { x: b.x, y: TOP, width: W, height: H, fill: SOFT }, g); + + /* the card behind the shutter, hung on two strings */ + el("path", { d: `M${cx - 58} ${TOP} V280 M${cx + 58} ${TOP} V280`, stroke: INK, "stroke-width": 2.5 }, g); + const card = el("g", {}, g); + el("rect", { x: b.x + 8, y: 250, width: W - 16, height: 190, rx: 14, fill: "#fff", stroke: INK, "stroke-width": 3 }, card); + b.name.forEach((s, j) => txt(card, cx, 305 + j * 36, s, { "text-anchor": "middle", "font-family": MONO, "font-size": 25, "font-weight": 700 })); + const tag = el("g", {}, card); + el("rect", { x: -85, y: -20, width: 170, height: 40, rx: 20, fill: b.fill, stroke: INK, "stroke-width": 2.5 }, tag); + txt(tag, 0, 6.5, b.tag, { "text-anchor": "middle", "font-size": 18, "font-weight": 700 }); + + /* the shutter, slats clipped to the opening */ + const clip = el("clipPath", { id: `shutter-clip-${i}` }, svg); + el("rect", { x: b.x, y: TOP, width: W, height: H }, clip); + const clipped = el("g", { "clip-path": `url(#shutter-clip-${i})` }, g), shutter = el("g", {}, clipped); + for (let s = 0; s < H / SLAT; s++) el("rect", { x: b.x, y: TOP + s * SLAT, width: W, height: SLAT, fill: b.fill, stroke: INK, "stroke-width": 2 }, shutter); + el("rect", { x: cx - 28, y: TOP + H - 12, width: 56, height: 8, rx: 4, fill: "#fff", stroke: INK, "stroke-width": 2 }, shutter); + + /* the frame and the box the shutter rolls into */ + el("rect", { x: b.x, y: TOP, width: W, height: H, fill: "none", stroke: INK, "stroke-width": 3 }, g); + el("rect", { x: b.x, y: 146, width: W, height: 34, rx: 6, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + const hub = el("g", {}, g); + el("circle", { r: 9, fill: b.fill, stroke: INK, "stroke-width": 2.5 }, hub); + el("path", { d: "M-5 0 H5", stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, hub); + el("rect", { x: b.x - 6, y: 140, width: W + 12, height: 376, rx: 12, fill: "none", stroke: INK, "stroke-width": 3, "stroke-dasharray": "6 6", class: "mg-ring" }, g); + + button(g, `Roller shutter over ${b.name.join(" ")}, tag ${b.tag}`, () => tap(i)); + return { g, card, tag, shutter, hub, cx, at: b.at }; + }); + + /* before any tap the timeline drives; after one, each shutter keeps the state it was given */ + let man = null, last = [6.5, 0]; + const auto = (t, i) => io(seg(t, bays[i].at[0], bays[i].at[1])) * (1 - io(seg(t, 7.6, 8.4))); + const pos = (t, now, i) => (man ? man[i].from + (man[i].to - man[i].from) * io(seg(now, man[i].at, man[i].at + 0.7)) : auto(t, i)); + const paint = (t, now) => { + last = [t, now]; + bays.forEach((b, i) => { + const k = pos(t, now, i); + cur[i] = k; + b.shutter.setAttribute("transform", `translate(0 ${-TRAVEL * k})`); + tf(b.hub, b.cx, 163, 1, k * 900); + b.card.setAttribute("transform", `translate(0 ${14 * (1 - k)})`); + tf(b.tag, b.cx, 386, cl(ob(seg(k, 0.55, 1)), 0, 1.06)); + b.g.setAttribute("aria-pressed", k >= 0.5 ? "true" : "false"); + }); + }; + function tap(i) { + const now = api.now(), snap = calm || frozen; + if (!man) man = cur.map((k) => ({ from: k, to: k >= 0.5 ? 1 : 0, at: now })); + man[i] = { from: cur[i], to: man[i].to >= 0.5 ? 0 : 1, at: now }; + if (snap) { man.forEach((m) => { m.from = m.to; }); paint(last[0], now); } + else api.poke(); + } + return paint; + }, + }; + + /* ---- 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-31/shutters.png b/blog/src/assets/media/agent-tools-today-2026-10-31/shutters.png new file mode 100644 index 0000000000..f1c1c75eef Binary files /dev/null and b/blog/src/assets/media/agent-tools-today-2026-10-31/shutters.png differ diff --git a/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/bookmark.png b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/bookmark.png new file mode 100644 index 0000000000..3ce9457d8b Binary files /dev/null and b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/bookmark.png differ diff --git a/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/hero.png b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/hero.png new file mode 100644 index 0000000000..35ed7df8a9 Binary files /dev/null and b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/hero.png differ diff --git a/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/keys.png b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/keys.png new file mode 100644 index 0000000000..26f65cb7e5 Binary files /dev/null and b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/keys.png differ diff --git a/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/lunchbox.png b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/lunchbox.png new file mode 100644 index 0000000000..ca7fc42f76 Binary files /dev/null and b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/lunchbox.png differ diff --git a/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/motion.css b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/motion.css new file mode 100644 index 0000000000..cf78c952d2 --- /dev/null +++ b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "ChatGPT Dots vs Claude Cowork". 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/chatgpt-dots-vs-claude-cowork/motion.js b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/motion.js new file mode 100644 index 0000000000..5234c75962 --- /dev/null +++ b/blog/src/assets/media/chatgpt-dots-vs-claude-cowork/motion.js @@ -0,0 +1,298 @@ +/* Bright coded scenes for "ChatGPT Dots vs Claude Cowork". 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(); } }); + }; + /* each loop opens on the final frame and eases back to the start in R0 seconds, so the loop has no jump */ + const R0 = 0.6; + const pv = (t, a, b, e = oc) => (t < R0 ? 1 - io(t / R0) : e(seg(t, a, b))); + const hint = (svg, s) => txt(svg, 756, 52, s, { "text-anchor": "end", "font-size": 16, fill: MUTE, "font-weight": 500 }); + const hitbox = (g, a) => el("rect", Object.assign({ fill: "#fff", "fill-opacity": 0 }, a), g); + const ring = (g, a) => el("rect", Object.assign({ fill: "none", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "6 6", class: "mg-ring" }, a), g); + /* a tap toggles one thing between 0 and 1; under reduced motion it jumps */ + const flipper = (api, D = 0.6) => { + let m = null, last = 0; + return { + v(auto, now) { last = m ? m.f + (m.to - m.f) * io(seg(now, m.at, m.at + (calm ? 1e-3 : D))) : auto; return last; }, + flip() { m = { f: last, to: last > 0.5 ? 0 : 1, at: api.now() }; api.nudge(); }, + }; + }; + let uid = 0; + + const SC = {}; + const CAP = "#6B5878"; + /* shrink a line of text until it fits a width */ + const fit = (n, w) => { const l = n.getComputedTextLength(); if (l > w) n.setAttribute("font-size", (parseFloat(n.getAttribute("font-size")) * w) / l); return n; }; + + /* ---- 1. a book turns its own pages under a ribbon; an index card fills and drops into a finished tray ---- */ + SC.bookmark = { + dur: 7.4, still: 7.4, + build(svg, api) { + hint(svg, "tap the book"); + const SX = 230, PT = 150, PB = 380, PW = 160, F = 0.9, FLIPS = [1.0, 2.5, 4.0]; + const book = el("g", {}, svg); + hitbox(book, { x: SX - PW - 30, y: PT - 34, width: 2 * PW + 60, height: 380 }); + ring(book, { x: SX - PW - 34, y: PT - 38, width: 2 * PW + 68, height: 388, rx: 18 }); + el("rect", { x: SX - PW - 14, y: PT - 10, width: 2 * PW + 28, height: PB - PT + 62, rx: 12, fill: BLUE, stroke: INK, "stroke-width": 3 }, book); + const edges = [-1, 1].map((s) => [7, 6, 5, 4, 3, 2, 1].map((j) => ({ j, n: el("rect", { x: s < 0 ? SX - PW : SX, y: PT + j * 6, width: PW, height: PB - PT, rx: 4, fill: "#fff", stroke: INK, "stroke-width": 2 }, book) }))); + [SX - PW, SX].forEach((x) => el("rect", { x, y: PT, width: PW, height: PB - PT, rx: 4, fill: "#fff", stroke: INK, "stroke-width": 3 }, book)); + el("rect", { x: SX - PW + 24, y: PT + 26, width: 76, height: 12, rx: 6, fill: LIL }, book); + [112, 96, 118, 88, 108, 70].forEach((w, i) => el("rect", { x: SX - PW + 24, y: PT + 62 + i * 26, width: w, height: 6, rx: 3, fill: SKY }, book)); + [104, 118, 92, 114, 100, 116, 64].forEach((w, i) => el("rect", { x: SX + 26, y: PT + 30 + i * 26, width: w, height: 6, rx: 3, fill: SKY }, book)); + el("path", { d: `M${SX} ${PT} V${PB}`, stroke: INK, "stroke-width": 3 }, book); + const turn = el("path", { fill: "#fff", stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, book); + const ribI = el("path", { stroke: INK, "stroke-width": 22, fill: "none" }, book), ribO = el("path", { stroke: LIL, "stroke-width": 15, fill: "none" }, book); + const tag = el("g", {}, book), tagR = el("rect", { y: 0, height: 42, rx: 12, fill: "#fff", stroke: INK, "stroke-width": 3 }, tag); + const tagT = txt(tag, 0, 27, "ChatGPT Dots", { "text-anchor": "middle", "font-family": MONO, "font-size": 18, "font-weight": 700 }); + const tw = tagT.getComputedTextLength() + 32; tagR.setAttribute("x", -tw / 2); tagR.setAttribute("width", tw); + const taps = []; + button(book, "Turn a page", () => { taps.push(api.now()); if (taps.length > 12) taps.shift(); api.nudge(); }); + /* the card and the tray */ + el("rect", { x: 488, y: 424, width: 264, height: 30, rx: 8, fill: MINT, stroke: INK, "stroke-width": 3 }, svg); + const card = el("g", {}, svg); + el("rect", { x: 510, y: 150, width: 220, height: 186, rx: 12, fill: YEL, stroke: INK, "stroke-width": 3 }, card); + fit(txt(card, 530, 192, "Claude Cowork", { "font-size": 24, "font-weight": 700 }), 180); + el("path", { d: "M530 208 H710", stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, card); + const LW = [150, 128, 164, 116, 140]; + const lines = LW.map((w, i) => el("rect", { x: 530, y: 228 + i * 20, width: w, height: 8, rx: 4, fill: "#fff", stroke: INK, "stroke-width": 1.5 }, card)); + el("path", { d: "M470 450 H770 L756 522 H484 Z", fill: MINT, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, svg); + txt(svg, 620, 494, "finished", { "text-anchor": "middle", "font-size": 20 }); + return (t, now) => { + /* pages turned so far: three chapters on the timeline, plus taps */ + const auto = t < R0 ? Math.round(3 * (1 - io(t / R0))) : FLIPS.filter((s) => t >= s + F / 2).length; + const D = calm ? 1e-3 : F, man = taps.filter((s) => now >= s + D / 2).length; + const n = Math.round(1.5 * Math.min(4, auto + man)); + edges[0].forEach((e) => e.n.setAttribute("display", e.j <= 1 + n ? "inline" : "none")); + edges[1].forEach((e) => e.n.setAttribute("display", e.j <= 7 - n ? "inline" : "none")); + let k = -1, sw = 0; + const kick = (u) => { if (u >= 0 && u <= 1) { k = u; sw -= 30 * Math.sin(Math.PI * u); } else if (u > 1) { const v = (u - 1) * F; sw += 9 * Math.exp(-3 * v) * Math.sin(9 * v); } }; + if (t >= R0) FLIPS.forEach((s) => kick((t - s) / F)); + if (!calm) taps.forEach((s) => kick((now - s) / F)); + if (k >= 0) { + const xe = SX + PW * Math.cos(Math.PI * k), lift = 22 * Math.sin(Math.PI * k), mx = (SX + xe) / 2; + turn.setAttribute("d", `M${SX} ${PT} Q${mx} ${PT - lift * 1.6} ${xe} ${PT - lift} L${xe} ${PB - lift} Q${mx} ${PB - lift * 0.6} ${SX} ${PB} Z`); + turn.setAttribute("display", "inline"); + } else turn.setAttribute("display", "none"); + const ex = SX + 12 + sw, ey = PB + 82, d = `M${SX + 12} ${PT - 18} C${SX + 12} ${PB - 40} ${SX + 12 + sw * 0.3} ${PB + 30} ${ex} ${ey}`; + ribI.setAttribute("d", d); ribO.setAttribute("d", d); tf(tag, ex, ey - 2, 1, -sw * 0.25); + /* the card: appears, fills line by line, slides into the tray */ + let op = 1, sc = 1, dy = 150; + if (t < R0) { op = 1 - seg(t, 0, 0.35); lines.forEach((l, i) => { l.setAttribute("width", LW[i]); l.setAttribute("display", "inline"); }); } + else { + const a = seg(t, 0.7, 1.1); op = a > 0 ? 1 : 0; sc = 0.6 + 0.4 * ob(a); dy = 150 * io(seg(t, 5.2, 6.0)); + lines.forEach((l, i) => { const w = LW[i] * oc(seg(t, 1.3 + i * 0.7, 1.8 + i * 0.7)); l.setAttribute("width", w); l.setAttribute("display", w > 1 ? "inline" : "none"); }); + } + card.setAttribute("opacity", op); + card.setAttribute("transform", `translate(620 ${243 + dy}) scale(${sc}) translate(-620 -243)`); + }; + }, + }; + + /* ---- 2. two lunchboxes pop open one after the other ---- */ + const sandwich = (g, tag) => { + g = el("g", { transform: "translate(0 -8)" }, g); + el("path", { d: "M-78 0 L0 -92 L78 0 Z", fill: LIL, stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round", transform: "translate(11 -9)" }, g); + el("path", { d: "M-78 0 L0 -92 L78 0 Z", fill: MINT, stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round", transform: "translate(5 -4)" }, g); + el("path", { d: "M-70 0 Q-76 0 -72 -6 L-6 -84 Q0 -90 6 -84 L72 -6 Q76 0 70 0 Z", fill: YEL, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + el("path", { d: "M-46 -12 L0 -66 L46 -12 Z", fill: "#fff", stroke: INK, "stroke-width": 2, "stroke-linejoin": "round" }, g); + el("path", { d: "M0 -84 V-112", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, g); + const r = el("rect", { x: 0, y: -134, height: 30, rx: 7, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, g); + const n = txt(g, 0, -113, tag, { "font-family": MONO, "font-size": 17, "font-weight": 700 }); + const w = n.getComputedTextLength() + 22; r.setAttribute("width", w); n.setAttribute("x", 11); + return 144; + }; + const snack = (g, tag) => { + const s = el("g", { transform: "rotate(-8 0 -62)" }, g); + el("circle", { cx: 0, cy: -62, r: 58, fill: YEL, stroke: INK, "stroke-width": 3 }, s); + for (let i = 0; i < 10; i++) { const a = (i / 10) * 6.283 + 0.3; el("circle", { cx: Math.cos(a) * 44, cy: -62 + Math.sin(a) * 44, r: 5, fill: BLUE }, s); } + txt(s, 0, -53, tag, { "text-anchor": "middle", "font-family": MONO, "font-size": 26, "font-weight": 700 }); + return 124; + }; + SC.lunchbox = { + dur: 6.4, still: 6.4, + build(svg, api) { + hint(svg, "tap a lunchbox"); + el("path", { d: "M40 534 H760", stroke: SOFT, "stroke-width": 12, "stroke-linecap": "round" }, svg); + const B = [ + { x: 70, w: 260, h: 160, col: SKY, name: "Claude Pro", price: "$20", food: sandwich, tag: "Cowork", at: 1.0, ph: 132 }, + { x: 390, w: 340, h: 220, col: MINT, name: "ChatGPT Pro", price: "from $100", food: snack, tag: "Dots", at: 2.3, ph: 146 }, + ]; + const boxes = B.map((b) => { + const rim = 528 - b.h, cx = b.x + b.w / 2, g = el("g", {}, svg); + hitbox(g, { x: b.x - 10, y: rim - 196, width: b.w + 20, height: b.h + 204 }); + ring(g, { x: b.x - 14, y: rim - 200, width: b.w + 28, height: b.h + 212, rx: 18 }); + const handle = (y) => `M${cx - 40} ${y} V${y - 16} Q${cx - 40} ${y - 32} ${cx - 24} ${y - 32} H${cx + 24} Q${cx + 40} ${y - 32} ${cx + 40} ${y - 16} V${y}`; + const pH = el("path", { stroke: INK, "stroke-width": 10, fill: "none", "stroke-linecap": "round" }, g), pH2 = el("path", { stroke: YEL, "stroke-width": 4, fill: "none", "stroke-linecap": "round" }, g); + const panel = el("rect", { x: b.x + 10, width: b.w - 20, rx: 14, fill: b.col, stroke: INK, "stroke-width": 3 }, g); + el("rect", { x: b.x + 14, y: rim - 9, width: b.w - 28, height: 18, rx: 9, fill: SOFT, stroke: INK, "stroke-width": 2.5 }, g); + const food = el("g", {}, g), fh = b.food(el("g", {}, food), b.tag); + el("rect", { x: b.x, y: rim, width: b.w, height: b.h, rx: 20, fill: b.col, stroke: INK, "stroke-width": 3 }, g); + const sr = el("rect", { y: rim + b.h / 2 - 42, height: 84, rx: 12, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, g); + const t1 = txt(g, cx, rim + b.h / 2 - 8, b.name, { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + const t2 = txt(g, cx, rim + b.h / 2 + 26, b.price, { "text-anchor": "middle", "font-family": MONO, "font-size": 22, "font-weight": 700 }); + const sw = Math.max(t1.getComputedTextLength(), t2.getComputedTextLength()) + 44; sr.setAttribute("x", cx - sw / 2); sr.setAttribute("width", sw); + const cap = el("g", {}, g); + el("path", { d: handle(rim - 28), stroke: INK, "stroke-width": 10, fill: "none", "stroke-linecap": "round" }, cap); + el("path", { d: handle(rim - 28), stroke: YEL, "stroke-width": 4, fill: "none", "stroke-linecap": "round" }, cap); + el("rect", { x: b.x - 6, y: rim - 30, width: b.w + 12, height: 40, rx: 14, fill: b.col, stroke: INK, "stroke-width": 3 }, cap); + const f = flipper(api, 0.9); + button(g, `Lunchbox: ${b.name}, ${b.price}`, () => f.flip()); + return { b, rim, cx, pH, pH2, panel, food, cap, f, sink: fh - 4, handle }; + }); + return (t, now) => boxes.forEach((x) => { + const o = x.f.v(pv(t, x.b.at, x.b.at + 1.0), now); + const ck = cl(o / 0.45), pk = cl((o - 0.4) / 0.6), fk = ob(cl((o - 0.45) / 0.55)); + x.cap.setAttribute("display", o < 0.45 ? "inline" : "none"); + x.cap.setAttribute("transform", `translate(0 ${x.rim - 40 * ck}) scale(1 ${1 - 0.7 * ck}) translate(0 ${-x.rim})`); + const show = pk > 0.01 ? "inline" : "none", top = x.rim - 6 - x.b.ph * pk; + [x.panel, x.pH, x.pH2].forEach((n) => n.setAttribute("display", show)); + x.panel.setAttribute("y", top); x.panel.setAttribute("height", x.b.ph * pk + 6); + x.pH.setAttribute("d", x.handle(top + 2)); x.pH2.setAttribute("d", x.handle(top + 2)); + tf(x.food, x.cx, x.rim + 12 + x.sink * (1 - fk)); + }); + }, + }; + + /* ---- 3. a key rack: the second key swings on once the tag flips ---- */ + SC.keys = { + dur: 7.2, still: 7.2, + build(svg, api) { + hint(svg, "tap the Allow access tag"); + el("rect", { x: 70, y: 100, width: 700, height: 60, rx: 14, fill: YEL, stroke: INK, "stroke-width": 3 }, svg); + el("path", { d: "M130 120 H300 M350 142 H520 M560 120 H700", stroke: INK, "stroke-width": 2, "stroke-linecap": "round" }, svg); + [100, 740].forEach((x) => { el("circle", { cx: x, cy: 130, r: 9, fill: SOFT, stroke: INK, "stroke-width": 2.5 }, svg); el("path", { d: `M${x - 5} 130 H${x + 5}`, stroke: INK, "stroke-width": 2.5 }, svg); }); + const key = (g, col, label) => { + el("path", { d: "M8 26 L40 48", stroke: INK, "stroke-width": 3 }, g); + const fob = el("rect", { x: 34, y: 40, height: 46, rx: 12, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + const ft = txt(g, 0, 70, label, { "text-anchor": "middle", "font-size": 19 }); + const w = ft.getComputedTextLength() + 32; fob.setAttribute("width", w); ft.setAttribute("x", 34 + w / 2); + el("circle", { cx: 0, cy: 16, r: 15, fill: "none", stroke: INK, "stroke-width": 5 }, g); + el("rect", { x: -8, y: 76, width: 16, height: 120, rx: 4, fill: col, stroke: INK, "stroke-width": 3 }, g); + el("path", { d: "M8 150 H22 V162 H8 Z M8 172 H26 V186 H8 Z", fill: col, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + el("circle", { cx: 0, cy: 58, r: 26, fill: col, stroke: INK, "stroke-width": 3 }, g); + el("circle", { cx: 0, cy: 52, r: 7, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, g); + }; + const k1 = el("g", {}, svg); key(k1, SKY, "Cloud computer"); tf(k1, 140, 196); + const k2 = el("g", {}, svg); key(k2, LIL, "Your computer"); + [130, 370].forEach((hx) => el("path", { d: `M${hx} 158 V186 Q${hx} 200 ${hx + 12} 200 Q${hx + 24} 200 ${hx + 24} 188`, stroke: INK, "stroke-width": 6, fill: "none", "stroke-linecap": "round" }, svg)); + /* the tag hangs on a string; front reads Allow access, back is a mint tick */ + el("path", { d: "M690 158 V212", stroke: INK, "stroke-width": 2.5 }, svg); + const tg = el("g", {}, svg); + const fr = el("g", {}, tg), bk = el("g", {}, tg); + const face = (g, fill, ticked) => { + const r = el("rect", { y: 0, height: 56, rx: 12, fill, stroke: INK, "stroke-width": 3 }, g); + const tt = txt(g, 0, 39, "Allow access", { "font-size": 18 }), w = tt.getComputedTextLength() + 74; + r.setAttribute("x", -w / 2); r.setAttribute("width", w); tt.setAttribute("x", -w / 2 + 52); + el("circle", { cx: 0, cy: 9, r: 4, fill: "#fff", stroke: INK, "stroke-width": 2 }, g); + el("rect", { x: -w / 2 + 16, y: 18, width: 24, height: 24, rx: 6, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, g); + if (ticked) { + const d = `M${-w / 2 + 21} 30 L${-w / 2 + 27} 36 L${-w / 2 + 37} 23`; + el("path", { d, stroke: INK, "stroke-width": 8, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, g); + el("path", { d, stroke: MINT, "stroke-width": 4, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, g); + } + return w; + }; + const TW = face(fr, LIL, false); face(bk, "#fff", true); + const hit = el("g", {}, svg); + hitbox(hit, { x: 690 - TW / 2 - 8, y: 196, width: TW + 16, height: 80 }); + ring(hit, { x: 690 - TW / 2 - 10, y: 194, width: TW + 20, height: 84, rx: 16 }); + /* the card that sways below */ + el("circle", { cx: 260, cy: 436, r: 6, fill: SOFT, stroke: INK, "stroke-width": 2.5 }, svg); + const dc = el("g", {}, svg); + el("path", { d: "M0 0 L-50 34 M0 0 L50 34", stroke: INK, "stroke-width": 2.5, fill: "none" }, dc); + el("rect", { x: -78, y: 34, width: 156, height: 86, rx: 12, fill: SKY, stroke: INK, "stroke-width": 3 }, dc); + txt(dc, 0, 70, "Delete?", { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); + txt(dc, 0, 101, "Ask first", { "text-anchor": "middle", "font-size": 20, "font-weight": 500 }); + el("circle", { cx: 0, cy: 0, r: 6, fill: SOFT, stroke: INK, "stroke-width": 2.5 }, dc); + let m = null, lastF = 0, lastK = 0; + const D = (x) => (calm ? 1e-3 : x); + button(hit, "Allow access tag", () => { m = { to: lastF > 0.5 ? 0 : 1, at: api.now(), f0: lastF, k0: lastK }; api.nudge(); }); + return (t, now) => { + let F, K, s; + if (m) { + const u = now - m.at; F = m.f0 + (m.to - m.f0) * io(seg(u, 0, D(0.7))); + if (m.to) { const a = D(0.8), b = D(1.7); K = m.k0 > 0.99 ? 1 : m.k0 + (1 - m.k0) * io(seg(u, a, b)); s = m.k0 > 0.99 ? 99 : u - b; } + else { K = m.k0 * (1 - io(seg(u, 0, D(0.6)))); s = 99; } + } else { F = pv(t, 1.4, 2.1, io); K = pv(t, 2.4, 3.3, io); s = t < R0 ? 99 : t - 3.3; } + lastF = F; lastK = K; + const c = Math.cos(Math.PI * F); + fr.setAttribute("display", c >= 0 ? "inline" : "none"); bk.setAttribute("display", c >= 0 ? "none" : "inline"); + tg.setAttribute("transform", `translate(690 210) scale(${Math.max(0.001, Math.abs(c))} 1)`); + const sway = s > 0 && !calm ? 16 * Math.exp(-2.4 * s) * Math.sin(6 * s) : 0; + k2.setAttribute("display", K > 0.002 ? "inline" : "none"); + tf(k2, 380 + 380 * (1 - K), 196 + 70 * (1 - K) - 90 * Math.sin(Math.PI * K), 1, -35 * (1 - K) + sway); + tf(dc, 260, 436, 1, calm ? 0 : 4 * Math.sin((2 * Math.PI * t) / 2.4)); + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + const pr = el("rect", { x: 64, y: 64, height: 40, rx: 20, fill: SOFT, stroke: INK, "stroke-width": 2 }, svg); + const pt = txt(svg, 84, 91, "Comparisons", { "font-size": 18, "font-weight": 700 }); + pr.setAttribute("width", pt.getComputedTextLength() + 40); + fit(txt(svg, 64, 196, "ChatGPT Dots vs", { "font-size": 62, "font-weight": 700 }), 520); + fit(txt(svg, 64, 270, "Claude Cowork", { "font-size": 62, "font-weight": 700 }), 520); + el("path", { d: "M66 296 H400", stroke: YEL, "stroke-width": 12, "stroke-linecap": "round" }, svg); + txt(svg, 64, 352, "Ongoing jobs or finished files?", { "font-size": 26, "font-weight": 500, fill: MUTE }); + txt(svg, 64, 470, "Checked 28 Oct 2026", { "font-size": 18, "font-weight": 500, fill: CAP }); + el("path", { d: "M628 120 H688 V410 L658 382 L628 410 Z", fill: LIL, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, svg); + el("path", { d: "M640 132 V376 M676 132 V376", stroke: INK, "stroke-width": 1.5, "stroke-dasharray": "5 7" }, svg); + el("circle", { cx: 742, cy: 266, r: 28, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + txt(svg, 742, 274, "vs", { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + const c = el("g", { transform: "rotate(-4 860 266)" }, svg); + el("rect", { x: 790, y: 212, width: 144, height: 108, rx: 10, fill: YEL, stroke: INK, "stroke-width": 3 }, c); + el("path", { d: "M806 240 H918", stroke: BLUE, "stroke-width": 3, "stroke-linecap": "round" }, c); + el("path", { d: "M806 262 H906 M806 282 H916 M806 302 H884", stroke: INK, "stroke-width": 2, "stroke-linecap": "round" }, c); + 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(); }, nudge: () => { if (held) frame(); else 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/claude-cowork-alternatives/hero.png b/blog/src/assets/media/claude-cowork-alternatives/hero.png new file mode 100644 index 0000000000..fc51d25f2d Binary files /dev/null and b/blog/src/assets/media/claude-cowork-alternatives/hero.png differ diff --git a/blog/src/assets/media/claude-cowork-alternatives/lineup.png b/blog/src/assets/media/claude-cowork-alternatives/lineup.png new file mode 100644 index 0000000000..2b3cb18945 Binary files /dev/null and b/blog/src/assets/media/claude-cowork-alternatives/lineup.png differ diff --git a/blog/src/assets/media/claude-cowork-alternatives/motion.css b/blog/src/assets/media/claude-cowork-alternatives/motion.css new file mode 100644 index 0000000000..a684cd92ff --- /dev/null +++ b/blog/src/assets/media/claude-cowork-alternatives/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Claude Cowork alternatives". 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/claude-cowork-alternatives/motion.js b/blog/src/assets/media/claude-cowork-alternatives/motion.js new file mode 100644 index 0000000000..cfa1a07cd1 --- /dev/null +++ b/blog/src/assets/media/claude-cowork-alternatives/motion.js @@ -0,0 +1,267 @@ +/* Bright coded scenes for "Claude Cowork alternatives". 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 CAP = "#6B5878"; + const name = (p, x, y, s, a = {}) => txt(p, x, y, s, Object.assign({ "font-family": MONO, "font-weight": 700 }, a)); + const fit = (n, w) => { const L = n.getComputedTextLength(); if (L > w) n.setAttribute("font-size", parseFloat(n.getAttribute("font-size")) * w / L); }; + const pill = (p, x, y, s, fill, fs = 18, h = 40) => { + const g = el("g", {}, p); + const r = el("rect", { x, y, height: h, rx: h / 2, fill, stroke: INK, "stroke-width": 2.5 }, g); + const t = name(g, x + 16, y + h / 2 + fs * 0.36, s, { "font-size": fs }); + const w = t.getComputedTextLength() + 32; r.setAttribute("width", w); + return { g, w }; + }; + const lines = (p, cx, y, s, fs, w, gap) => { const ws = s.split(" "), y0 = ws.length > 1 ? y - gap / 2 : y; ws.forEach((wd, i) => fit(name(p, cx, y0 + i * gap, wd, { "text-anchor": "middle", "font-size": fs }), w)); }; + let uid = 0; + + /* ---- small icons, each drawn around 0,0 in about 64 by 56 ---- */ + const ART = { + laptop(g) { + el("rect", { x: -24, y: -24, width: 48, height: 34, rx: 4, fill: SKY, stroke: INK, "stroke-width": 3 }, g); + el("path", { d: "M-32 12 H32 L27 21 H-27 Z", fill: "#fff", stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + }, + desks(g) { + [[-28, -14], [4, -14], [-28, 14], [4, 14]].forEach(([x, y]) => { + el("rect", { x: x + 7, y: y - 10, width: 10, height: 7, rx: 1.5, fill: "#fff", stroke: INK, "stroke-width": 2 }, g); + el("rect", { x, y: y - 2, width: 24, height: 12, rx: 2.5, fill: YEL, stroke: INK, "stroke-width": 2.5 }, g); + }); + }, + cloud(g) { + el("path", { d: "M-20 18 H22 A14 14 0 0 0 24 -10 A18 18 0 0 0 -10 -14 A13 13 0 0 0 -22 -2 A10 10 0 0 0 -20 18 Z", fill: SKY, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + }, + terminal(g) { + el("rect", { x: -30, y: -24, width: 60, height: 46, rx: 6, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + el("path", { d: "M-30 -12 H30", stroke: INK, "stroke-width": 2.5 }, g); + [[-22, MINT], [-14, YEL], [-6, SKY]].forEach(([x, c]) => el("circle", { cx: x, cy: -18, r: 2.6, fill: c, stroke: INK, "stroke-width": 1.5 }, g)); + el("path", { d: "M-20 -2 L-11 5 L-20 12 M-4 13 H12", stroke: INK, "stroke-width": 3, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, g); + }, + bubble(g) { + el("path", { d: "M-26 -22 H26 Q32 -22 32 -16 V6 Q32 12 26 12 H-4 L-16 24 V12 H-26 Q-32 12 -32 6 V-16 Q-32 -22 -26 -22 Z", fill: LIL, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + [-12, 0, 12].forEach((x) => el("circle", { cx: x, cy: -5, r: 3.2, fill: INK }, g)); + }, + server(g) { + el("rect", { x: -22, y: -26, width: 44, height: 52, rx: 5, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + [-9, 8].forEach((y) => el("path", { d: `M-22 ${y} H22`, stroke: INK, "stroke-width": 2.5 }, g)); + [-17, 0, 17].forEach((y) => { el("path", { d: `M-14 ${y} H2`, stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, g); el("circle", { cx: 12, cy: y, r: 3, fill: MINT, stroke: INK, "stroke-width": 1.5 }, g); }); + }, + }; + + const SC = {}; + + /* ---- 1. six cards drop onto a shelf; Claude Cowork stands apart ---- */ + SC.lineup = { + dur: 7, still: 7, + build(svg, api) { + const NAMES = ["Hob", "Munder Difflin", "ChatGPT Work", "Goose", "OpenClaw", "Hermes Agent"]; + const DRAW = [ART.laptop, ART.desks, ART.cloud, ART.terminal, ART.bubble, ART.server]; + const CW = 90, CH = 196, GAP = 7, X0 = 194, SY = 386, TOP = SY - CH; + el("rect", { x: 28, y: SY, width: 128, height: 16, rx: 8, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + el("rect", { x: 36, y: TOP, width: 112, height: CH, rx: 14, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + lines(svg, 92, TOP + 104, "Claude Cowork", 17, 96, 24); + el("path", { d: `M172 ${TOP - 14} V${SY + 54}`, stroke: INK, "stroke-width": 2, "stroke-dasharray": "2 10", "stroke-linecap": "round" }, svg); + const shelf = el("g", {}, svg); + el("rect", { x: 184, y: TOP - 40, width: 604, height: CH + 116, rx: 20, fill: "#fff", "fill-opacity": 0, class: "mg-ring", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7" }, shelf); + [250, 712].forEach((x) => el("path", { d: `M${x} ${SY + 16} V${SY + 58} L${x + 34} ${SY + 16}`, stroke: INK, "stroke-width": 3, fill: "none", "stroke-linejoin": "round", "stroke-linecap": "round" }, shelf)); + const cards = NAMES.map((n, i) => { + const x = X0 + i * (CW + GAP), g = el("g", {}, shelf); + el("rect", { x, y: TOP, width: CW, height: CH, rx: 14, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + const ic = el("g", {}, g); DRAW[i](ic); + lines(g, x + CW / 2, TOP + 152, n, 16, CW - 12, 22); + return { g, ic, cx: x + CW / 2, d: 0.4 + i * 0.5 }; + }); + el("rect", { x: 182, y: SY, width: 600, height: 16, rx: 8, fill: YEL, stroke: INK, "stroke-width": 3 }, shelf); + button(shelf, "Replay the drop", () => api.seek(0)); + return (t) => { + cards.forEach((c) => { + const p = seg(t, c.d, c.d + 0.45), land = Math.sin(seg(t, c.d + 0.45, c.d + 0.75) * Math.PI); + c.g.setAttribute("opacity", t < c.d ? 0 : 1); + c.g.setAttribute("transform", `translate(0 ${-460 * (1 - p * p) - 12 * land})`); + const k = seg(t, c.d + 0.45, c.d + 0.85); + tf(c.ic, c.cx, TOP + 64, k <= 0 ? 0.001 : ob(k)); + }); + }; + }, + }; + + /* ---- 2. where the work runs: vendor cloud or your hardware ---- */ + SC.where = { + dur: 10, still: 10, + build(svg, api) { + const id = `mgc${++uid}`, TX = 62, TW = 676, SEG = 150; + el("rect", { x: 30, y: 30, width: 740, height: 540, rx: 26, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + el("path", { d: "M54 266 H746", stroke: INK, "stroke-width": 2, "stroke-dasharray": "2 10", "stroke-linecap": "round" }, svg); + txt(svg, TX, 82, "Vendor cloud", { "font-size": 24, "font-weight": 700 }); + txt(svg, TX, 318, "Your hardware", { "font-size": 24, "font-weight": 700 }); + const big = el("g", {}, svg); ART.cloud(big); tf(big, 640, 128, 1.9); + const clip = el("clipPath", { id }, el("defs", {}, svg)); + [208, 520].forEach((y) => el("rect", { x: TX, y, width: TW, height: 18, rx: 9 }, clip)); + const bar = (y, col) => { + el("rect", { x: TX, y, width: TW, height: 18, rx: 9, fill: SOFT }, svg); + const g = el("g", { "clip-path": `url(#${id})` }, svg); + const s = el("rect", { y, width: SEG, height: 18, rx: 9, fill: col }, g); + el("rect", { x: TX, y, width: TW, height: 18, rx: 9, fill: "none", stroke: INK, "stroke-width": 2.5 }, svg); + return { g, s }; + }; + const pos = (t) => TX - SEG + (((t * 260) % (TW + SEG)) + TW + SEG) % (TW + SEG); + const cloudBar = bar(208, BLUE), hwBar = bar(520, MINT); + const tags = []; + const slide = (p, x, y, s, fill, d, dy) => { const g = el("g", {}, svg), tg = pill(g, x, y, s, fill); tags.push({ g, d, dy }); return tg.w; }; + const w1 = slide(svg, TX, 116, "Claude Cowork", SKY, 0.4, -36); + slide(svg, TX + w1 + 16, 116, "ChatGPT Work", SKY, 0.65, -36); + const lap = el("g", {}, svg); tf(lap, 142, 444); + el("rect", { x: -86, y: -102, width: 172, height: 134, rx: 18, fill: "#fff", "fill-opacity": 0, class: "mg-ring", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7" }, lap); + const lid = el("g", {}, lap); + el("rect", { x: -62, y: -86, width: 124, height: 86, rx: 8, fill: LIL, stroke: INK, "stroke-width": 3 }, lid); + const screen = el("rect", { x: -52, y: -76, width: 104, height: 66, rx: 4, fill: SKY, stroke: INK, "stroke-width": 2 }, lid); + el("path", { d: "M-76 0 H76 L68 16 H-68 Z", fill: "#fff", stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, lap); + const hx = 252, wa = slide(svg, hx, 352, "Hob", YEL, 1.1, 36), wb = slide(svg, hx, 406, "Goose", YEL, 1.6, 36); + const c2 = hx + Math.max(wa, wb) + 16; + slide(svg, c2, 352, "Munder Difflin", YEL, 1.35, 36); slide(svg, c2 + 0, 406, "OpenClaw", YEL, 1.85, 36); + const srv = el("g", {}, svg); ART.server(srv); tf(srv, 652, 372, 1.25); + const hm = el("g", {}, svg); const hw = pill(hm, 0, 0, "Hermes Agent", YEL).w; hm.remove(); + slide(svg, 652 - hw / 2, 420, "Hermes Agent", YEL, 2.2, 36); + const shut = el("g", {}, svg); + el("rect", { x: 82, y: 474, width: 120, height: 30, rx: 15, fill: SOFT, stroke: INK, "stroke-width": 2 }, shut); + txt(shut, 142, 494, "Laptop closed", { "text-anchor": "middle", "font-size": 15, "font-weight": 600, fill: CAP }); + let user = null, at = 0, hold = pos(4.6); + const shutAmt = (t, now) => user == null ? io(seg(t, 4.6, 5.3)) : user ? io(seg(now - at, 0, 0.6)) : 1 - io(seg(now - at, 0, 0.6)); + let last = 0; + button(lap, "Open or close the laptop lid", () => { user = !(last > 0.5); at = api.now(); api.poke(); }); + return (t, now) => { + tags.forEach((g) => { const k = oc(seg(t, g.d, g.d + 0.5)); g.g.setAttribute("opacity", k); g.g.setAttribute("transform", `translate(0 ${g.dy * (1 - k)})`); }); + const k = shutAmt(t, now); last = k; + lid.setAttribute("transform", `scale(1 ${1 - 0.9 * k})`); screen.setAttribute("opacity", k < 0.5 ? 1 : 0); + const clock = user == null ? t : now; + cloudBar.s.setAttribute("x", pos(t)); cloudBar.g.setAttribute("opacity", seg(t, 0.4, 0.8)); + if (k < 0.5) { if (user != null || t < 4.6) hold = pos(clock); } + else if (user == null) hold = pos(4.6); + hwBar.s.setAttribute("x", hold); hwBar.g.setAttribute("opacity", k < 0.5 ? seg(t, 1.1, 1.5) : 0); + const s = seg(k, 0.75, 1); shut.setAttribute("opacity", s); shut.setAttribute("transform", `translate(142 489) scale(${0.6 + 0.4 * ob(s)}) translate(-142 -489)`); + }; + }, + }; + + /* ---- 3. price tags on a rail ---- */ + SC.tags = { + dur: 7, still: 7, + build(svg, api) { + const RY = 176; + el("path", { d: `M28 ${RY} H772`, stroke: INK, "stroke-width": 6, "stroke-linecap": "round" }, svg); + [28, 772].forEach((x) => el("circle", { cx: x, cy: RY, r: 9, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg)); + const shape = (x, y, w, h) => `M${x + 22} ${y} H${x + w - 22} L${x + w} ${y + 22} V${y + h - 14} Q${x + w} ${y + h} ${x + w - 14} ${y + h} H${x + 14} Q${x} ${y + h} ${x} ${y + h - 14} V${y + 22} Z`; + const all = []; + const tag = (x, w, h, fill, label, draw, d, amp) => { + const cx = x + w / 2, y = RY + 44, g = el("g", {}, svg); + el("path", { d: `M${cx} ${RY} V${y + 15}`, stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, g); + el("path", { d: shape(x - 6, y - 6, w + 12, h + 12), fill: "#fff", "fill-opacity": 0, class: "mg-ring", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7" }, g); + el("path", { d: shape(x, y, w, h), fill, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + el("circle", { cx, cy: y + 22, r: 7, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, g); + draw(g, cx, y); + const o = { g, cx, d, amp, tap: -99 }; + button(g, label, () => { o.tap = api.now(); api.poke(); }); + all.push(o); + }; + const BIG = 136, SM = 76; + [["Claude Pro", LIL], ["ChatGPT Plus", SKY]].forEach(([n, c], i) => tag(34 + i * (BIG + 14), BIG, 230, c, `${n}, $20 a month`, (g, cx, y) => { + lines(g, cx, y + 92, n, 22, BIG - 16, 28); + el("path", { d: `M${cx - 48} ${y + 140} H${cx + 48}`, stroke: INK, "stroke-width": 2, "stroke-dasharray": "2 8", "stroke-linecap": "round" }, g); + fit(name(g, cx, y + 184, "$20 a month", { "text-anchor": "middle", "font-size": 17 }), BIG - 16); + }, 0.15, 12)); + const FREE = ["Hob", "Munder Difflin", "Goose", "OpenClaw", "Hermes Agent"], FX = 346; + FREE.forEach((n, i) => tag(FX + i * (SM + 7), SM, 160, YEL, `${n}, Free`, (g, cx, y) => { + lines(g, cx, y + 66, n, 14, SM - 10, 19); + name(g, cx, y + 132, "Free", { "text-anchor": "middle", "font-size": 22 }); + }, 1.2 + i * 0.35, 40)); + const lab = el("g", {}, svg), LX = FX + (5 * SM + 28) / 2; + const lr = el("rect", { y: 418, height: 42, rx: 21, fill: MINT, stroke: INK, "stroke-width": 2.5 }, lab); + const lt = txt(lab, LX, 446, "Bring a model", { "text-anchor": "middle", "font-size": 20, "font-weight": 700 }); + const lw = lt.getComputedTextLength() + 40; lr.setAttribute("x", LX - lw / 2); lr.setAttribute("width", lw); + return (t, now) => { + all.forEach((o) => { + const s = t - o.d, u = now - o.tap; + let a = s < 0 ? o.amp : o.amp * Math.exp(-3.2 * s) * Math.cos(7 * s); + if (u >= 0 && u < 4) a += 20 * Math.exp(-2.4 * u) * Math.sin(7.5 * u); + o.g.setAttribute("opacity", o.amp > 20 ? seg(t, o.d - 0.05, o.d + 0.12) : 1); + o.g.setAttribute("transform", `rotate(${a} ${o.cx} ${RY})`); + }); + const k = seg(t, 3.4, 3.8); + lab.setAttribute("opacity", k > 0 ? 1 : 0); + lab.setAttribute("transform", `translate(${LX} 439) scale(${k <= 0 ? 0.001 : ob(k)}) translate(${-LX} -439)`); + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + const pr = el("rect", { x: 64, y: 78, height: 42, rx: 21, fill: SOFT, stroke: INK, "stroke-width": 2.5 }, svg); + const pt = txt(svg, 86, 106, "Comparisons", { "font-size": 20, "font-weight": 700 }); + pr.setAttribute("width", pt.getComputedTextLength() + 44); + txt(svg, 62, 212, "Claude Cowork", { "font-size": 62, "font-weight": 700 }); + txt(svg, 62, 292, "alternatives", { "font-size": 62, "font-weight": 700 }); + el("path", { d: "M66 316 H430", stroke: YEL, "stroke-width": 14, "stroke-linecap": "round" }, svg); + txt(svg, 64, 378, "Six agents for office work", { "font-size": 28, "font-weight": 500, fill: MUTE }); + txt(svg, 64, 446, "Checked 27 Oct 2026", { "font-size": 20, "font-weight": 600, fill: CAP }); + const CX = 562, CY = 258; + el("rect", { x: CX, y: CY - 52, width: 100, height: 100, rx: 14, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + lines(svg, CX + 50, CY + 6, "Claude Cowork", 18, 86, 26); + el("path", { d: `M${CX + 110} ${CY} H${CX + 136} M${CX + 126} ${CY - 10} L${CX + 138} ${CY} L${CX + 126} ${CY + 10}`, stroke: INK, "stroke-width": 3.5, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, svg); + const PX = 828, PY = 408, fills = [YEL, LIL, "#fff", "#fff", "#fff", "#fff"]; + fills.forEach((f, i) => { + const a = -30 + i * 12, g = el("g", { transform: `rotate(${a} ${PX} ${PY})` }, svg); + el("rect", { x: PX - 26, y: PY - 187, width: 52, height: 74, rx: 9, fill: f, stroke: INK, "stroke-width": 3 }, g); + }); + 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/claude-cowork-alternatives/tags.png b/blog/src/assets/media/claude-cowork-alternatives/tags.png new file mode 100644 index 0000000000..f3e54d5326 Binary files /dev/null and b/blog/src/assets/media/claude-cowork-alternatives/tags.png differ diff --git a/blog/src/assets/media/claude-cowork-alternatives/where.png b/blog/src/assets/media/claude-cowork-alternatives/where.png new file mode 100644 index 0000000000..c16d98de71 Binary files /dev/null and b/blog/src/assets/media/claude-cowork-alternatives/where.png differ diff --git a/blog/src/assets/media/codex-vs-chatgpt/hero.png b/blog/src/assets/media/codex-vs-chatgpt/hero.png new file mode 100644 index 0000000000..48c1c7ebb7 Binary files /dev/null and b/blog/src/assets/media/codex-vs-chatgpt/hero.png differ diff --git a/blog/src/assets/media/codex-vs-chatgpt/ladder.png b/blog/src/assets/media/codex-vs-chatgpt/ladder.png new file mode 100644 index 0000000000..822a04490b Binary files /dev/null and b/blog/src/assets/media/codex-vs-chatgpt/ladder.png differ diff --git a/blog/src/assets/media/codex-vs-chatgpt/motion.css b/blog/src/assets/media/codex-vs-chatgpt/motion.css new file mode 100644 index 0000000000..c5d40b40b4 --- /dev/null +++ b/blog/src/assets/media/codex-vs-chatgpt/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Codex vs ChatGPT". 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/codex-vs-chatgpt/motion.js b/blog/src/assets/media/codex-vs-chatgpt/motion.js new file mode 100644 index 0000000000..f33f1661c5 --- /dev/null +++ b/blog/src/assets/media/codex-vs-chatgpt/motion.js @@ -0,0 +1,260 @@ +/* Bright coded scenes for "Codex vs ChatGPT". 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(); } }); + }; + /* each loop opens on the final frame and eases back to the start in R0 seconds, so the loop has no jump */ + const R0 = 0.6; + const pv = (t, a, b, e = oc) => (t < R0 ? 1 - io(t / R0) : e(seg(t, a, b))); + const hint = (svg, s) => txt(svg, 756, 52, s, { "text-anchor": "end", "font-size": 16, fill: MUTE, "font-weight": 500 }); + const hitbox = (g, a) => el("rect", Object.assign({ fill: "#fff", "fill-opacity": 0 }, a), g); + const ring = (g, a) => el("rect", Object.assign({ fill: "none", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "6 6", class: "mg-ring" }, a), g); + /* a tap toggles one thing between 0 and 1; under reduced motion it jumps */ + const flipper = (api, D = 0.6) => { + let m = null, last = 0; + return { + v(auto, now) { last = m ? m.f + (m.to - m.f) * io(seg(now, m.at, m.at + (calm ? 1e-3 : D))) : auto; return last; }, + flip() { m = { f: last, to: last > 0.5 ? 0 : 1, at: api.now() }; api.nudge(); }, + }; + }; + let uid = 0; + + const SC = {}; + const CAP = "#6B5878"; + /* shrink a line of text until it fits a width */ + const fit = (n, w) => { const l = n.getComputedTextLength(); if (l > w) n.setAttribute("font-size", (parseFloat(n.getAttribute("font-size")) * w) / l); return n; }; + + /* a toolbox tray, 290 by 70, drawn from its top left; what it holds sits in `held`, clipped at the tray floor */ + const tray = (p, col, label, kind, card = true) => { + const g = el("g", {}, p), id = `mgclip${++uid}`; + el("rect", { x: -80, y: -240, width: 450, height: 310 }, el("clipPath", { id }, el("defs", {}, g))); + el("rect", { x: 8, y: -10, width: 274, height: 18, rx: 7, fill: col, stroke: INK, "stroke-width": 2.5 }, g); + const held = el("g", {}, el("g", { "clip-path": `url(#${id})` }, g)); + if (kind === "chat") { + const pad = el("g", { transform: "translate(46 -80) rotate(-6)" }, held); + el("rect", { x: 0, y: 0, width: 86, height: 104, rx: 6, fill: "#fff", stroke: INK, "stroke-width": 3 }, pad); + [0, 1, 2, 3].forEach((i) => el("rect", { x: 14, y: 26 + i * 15, width: [58, 50, 60, 40][i], height: 5, rx: 2.5, fill: SKY }, pad)); + [14, 30, 46, 62, 78].forEach((x) => el("circle", { cx: x, cy: 2, r: 4.5, fill: SOFT, stroke: INK, "stroke-width": 2 }, pad)); + const pen = el("g", { transform: "translate(196 -92) rotate(18)" }, held); + el("rect", { x: -9, y: -16, width: 18, height: 18, rx: 4, fill: LIL, stroke: INK, "stroke-width": 3 }, pen); + el("rect", { x: -9, y: 0, width: 18, height: 100, fill: YEL, stroke: INK, "stroke-width": 3 }, pen); + el("path", { d: "M-9 100 L0 124 L9 100 Z", fill: SOFT, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, pen); + el("path", { d: "M-3.5 115 L0 124 L3.5 115 Z", fill: INK }, pen); + } else { + const w = el("g", { transform: card ? "translate(72 -50) rotate(-30)" : "translate(140 -50) rotate(-60)" }, held); + el("rect", { x: -9, y: 0, width: 18, height: 112, rx: 9, fill: LIL, stroke: INK, "stroke-width": 3 }, w); + el("circle", { cx: 0, cy: -10, r: 24, fill: LIL, stroke: INK, "stroke-width": 3 }, w); + el("rect", { x: -8, y: -38, width: 16, height: 26, rx: 3, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, w); + el("rect", { x: -12, y: -40, width: 24, height: 6, fill: "#fff" }, w); + if (card) { + const c = el("g", { transform: "translate(148 -62)" }, held); + el("rect", { x: 0, y: 0, width: 120, height: 80, rx: 8, fill: "#fff", stroke: INK, "stroke-width": 3 }, c); + txt(c, 60, 32, "terminal", { "text-anchor": "middle", "font-family": MONO, "font-size": 18, "font-weight": 700 }); + } + } + el("rect", { x: 0, y: 0, width: 290, height: 70, rx: 12, fill: col, stroke: INK, "stroke-width": 3 }, g); + txt(g, 145, 45, label, { "text-anchor": "middle", "font-size": 26, "font-weight": 700 }); + return { g, held }; + }; + + /* ---- 1. a cantilever toolbox: the ChatGPT tray slides out, the Codex tray rises ---- */ + SC.toolbox = { + dur: 6.2, still: 6.2, + build(svg, api) { + hint(svg, "tap the toolbox"); + el("path", { d: "M60 534 H740", stroke: SOFT, "stroke-width": 12, "stroke-linecap": "round" }, svg); + const box = el("g", {}, svg); + hitbox(box, { x: 80, y: 60, width: 600, height: 470 }); + ring(box, { x: 76, y: 56, width: 608, height: 478, rx: 20 }); + const arm = () => [el("path", { stroke: INK, "stroke-width": 9, "stroke-linecap": "round" }, box), el("path", { stroke: BLUE, "stroke-width": 3, "stroke-linecap": "round" }, box)]; + const setArm = (a, x1, y1, x2, y2) => a.forEach((n) => n.setAttribute("d", `M${x1} ${y1} L${x2} ${y2}`)); + const cA = [arm(), arm()], gA = [arm(), arm()], codex = tray(box, YEL, "Codex", "codex"); + el("rect", { x: 250, y: 400, width: 310, height: 124, rx: 14, fill: BLUE, stroke: INK, "stroke-width": 3 }, box); + [292, 486].forEach((x) => el("rect", { x, y: 404, width: 32, height: 22, rx: 5, fill: YEL, stroke: INK, "stroke-width": 2.5 }, box)); + const chat = tray(box, SKY, "ChatGPT", "chat"); + const f = flipper(api, 1.4); + button(box, "Toolbox: open or close the trays", () => f.flip()); + return (t, now) => { + const o = f.v(pv(t, 1.0, 3.0, (x) => x), now); + const k1 = io(cl(o / 0.6)), k2 = io(cl((o - 0.4) / 0.6)); + const x1 = 260 - 160 * k1, y1 = 330 - 150 * k1 - 40 * Math.sin(Math.PI * k1); + const x2 = 260 + 100 * k2, y2 = 412 - 102 * k2 - 20 * Math.sin(Math.PI * k2); + tf(chat.g, x1, y1); tf(codex.g, x2, y2); + tf(chat.held, 0, 112 * (1 - ob(cl((k1 - 0.45) / 0.55)))); + tf(codex.held, 0, 112 * (1 - ob(cl((k2 - 0.45) / 0.55)))); + setArm(gA[0], 280, 420, x1 + 30, y1 + 60); setArm(gA[1], 400, 420, x1 + 150, y1 + 60); + setArm(cA[0], 430, 470, x2 + 70, y2 + 60); setArm(cA[1], 540, 470, x2 + 180, y2 + 60); + }; + }, + }; + + /* ---- 2. a ladder of plans; the CLI card climbs and settles on Plus ---- */ + SC.ladder = { + dur: 6.4, still: 6.4, + build(svg, api) { + hint(svg, "tap the ladder"); + el("rect", { x: 568, y: -10, width: 250, height: 570, fill: SOFT }, svg); + el("path", { d: "M568 0 V560", stroke: INK, "stroke-width": 3 }, svg); + el("path", { d: "M30 560 H800", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg); + const LX = (y) => 430 - 0.44 * (y - 70), RW = 130, YS = [480, 380, 280, 180]; + const lad = el("g", {}, svg); + hitbox(lad, { x: 60, y: 56, width: 512, height: 508 }); + ring(lad, { x: 56, y: 52, width: 520, height: 516, rx: 20 }); + YS.forEach((y) => { const d = `M${LX(y)} ${y} H${LX(y) + RW}`; el("path", { d, stroke: INK, "stroke-width": 14 }, lad); el("path", { d, stroke: YEL, "stroke-width": 8 }, lad); }); + [0, RW].forEach((dx) => { const d = `M${LX(560) + dx} 560 L${LX(70) + dx} 70`; el("path", { d, stroke: INK, "stroke-width": 18, "stroke-linecap": "round" }, lad); el("path", { d, stroke: YEL, "stroke-width": 12, "stroke-linecap": "round" }, lad); }); + const chips = ["Free $0", "Go $8", "Plus $20", "Pro from $100"].map((s, i) => { + const y = YS[i], r = el("rect", { y: y - 19, height: 38, rx: 19, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, lad); + const n = txt(lad, 0, y + 7, s, { "text-anchor": "middle", "font-size": 19 }), w = n.getComputedTextLength() + 34, right = LX(y) - 22; + r.setAttribute("x", right - w); r.setAttribute("width", w); n.setAttribute("x", right - w / 2); + return r; + }); + button(lad, "Ladder: replay the climb", () => api.seek(R0)); + const card = el("g", {}, svg); + el("rect", { x: -38, y: -46, width: 76, height: 46, rx: 9, fill: MINT, stroke: INK, "stroke-width": 3 }, card); + txt(card, 0, -15, "CLI", { "text-anchor": "middle", "font-family": MONO, "font-size": 22, "font-weight": 700 }); + const spot = [[LX(560) + RW / 2, 558], ...YS.slice(0, 3).map((y) => [LX(y) + RW / 2 + 12, y - 7])], HOPS = [1.0, 2.0, 3.0], H = 0.62; + return (t) => { + let x, y, s = 1, r = 0, op = 1; + if (t < R0) { const top = t < 0.3; [x, y] = spot[top ? 3 : 0]; op = top ? 1 - seg(t, 0, 0.3) : seg(t, 0.3, 0.6); } + else { + let j = 0; HOPS.forEach((h) => { if (t >= h + H) j++; }); + [x, y] = spot[j]; + const h = HOPS[j]; + if (j < 3 && t >= h) { + const u = seg(t, h, h + H), [ax, ay] = spot[j], [bx, by] = spot[j + 1], e = io(u); + x = ax + (bx - ax) * e; y = ay + (by - ay) * e - 60 * Math.sin(Math.PI * u); r = 10 * Math.sin(2 * Math.PI * u); + } else if (j > 0) { const v = t - (HOPS[j - 1] + H); s = 1 + 0.12 * Math.exp(-6 * v) * Math.sin(14 * v); } + } + card.setAttribute("transform", `translate(${x} ${y}) rotate(${r}) scale(${2 - s} ${s})`); + card.setAttribute("opacity", op); + const on = t < 0.3 || t >= HOPS[2] + H; + chips.forEach((c, i) => c.setAttribute("fill", i === 2 && on ? YEL : "#fff")); + }; + }, + }; + + /* ---- 3. a tram map: Codex runs four stops, ChatGPT three, both share Desktop app ---- */ + SC.tram = { + dur: 8, still: 8, + build(svg, api) { + hint(svg, "tap a tram line"); + const along = (P, d) => { for (let i = 1; i < P.length; i++) { const [ax, ay] = P[i - 1], [bx, by] = P[i], L = Math.hypot(bx - ax, by - ay); if (d <= L || i === P.length - 1) { const u = cl(d / L); return [ax + (bx - ax) * u, ay + (by - ay) * u]; } d -= L; } }; + const cum = (P) => P.map((p, i) => P.slice(1, i + 1).reduce((s, q, j) => s + Math.hypot(q[0] - P[j][0], q[1] - P[j][1]), 0)); + const LINES = [ + { name: "Codex", col: YEL, P: [[100, 170], [280, 170], [430, 320], [690, 320]], stops: [0, 1, 2, 3], dr: [0.6, 1.8], show: 2.2, moves: [[2.8, 3.4, 0, 1], [3.8, 4.6, 1, 2], [5.0, 5.8, 2, 3]] }, + { name: "ChatGPT", col: SKY, P: [[180, 470], [280, 470], [430, 320], [580, 170]], stops: [0, 2, 3], dr: [1.1, 2.2], show: 2.3, moves: [[2.6, 3.2, 0, 2], [3.5, 4.1, 2, 3]] }, + ]; + let sel = -1; + LINES.forEach((l, i) => { + l.C = cum(l.P); l.L = l.C[l.C.length - 1]; + const d = "M" + l.P.map((p) => p.join(" ")).join(" L"), g = el("g", {}, svg), lj = { fill: "none", "stroke-linejoin": "round", "stroke-linecap": "round", d }; + el("path", Object.assign({ stroke: "#fff", "stroke-opacity": 0, "stroke-width": 44 }, lj), g); + el("path", Object.assign({ stroke: INK, "stroke-width": 42, class: "mg-ring" }, lj), g); + el("path", Object.assign({ stroke: "#fff", "stroke-width": 37, class: "mg-ring" }, lj), g); + l.halo = el("path", Object.assign({ stroke: LIL, "stroke-width": 32 }, lj), g); + l.ink = el("path", Object.assign({ stroke: INK, "stroke-width": 18, "stroke-dasharray": `${l.L + 2} ${l.L + 2}` }, lj), g); + l.fill = el("path", Object.assign({ stroke: l.col, "stroke-width": 11, "stroke-dasharray": `${l.L + 2} ${l.L + 2}` }, lj), g); + button(g, `${l.name} line`, () => { sel = sel === i ? -1 : i; api.nudge(); }); + }); + /* stops and their names, above both lines */ + const NAMES = [["Terminal", 100, 126, "middle"], ["Editor", 280, 126, "middle"], ["Desktop app", 452, 374, "start"], ["Cloud", 690, 364, "middle"], ["Web", 180, 514, "middle"], ["Mobile", 580, 126, "middle"]]; + const STOPS = [[0, 0, 0], [0, 1, 1], [-1, 2, 2], [0, 3, 3], [1, 0, 4], [1, 3, 5]].map(([li, v, ni]) => { + const [x, y] = li < 0 ? [430, 320] : LINES[li].P[v], g = el("g", {}, svg); + el("circle", { cx: 0, cy: 0, r: li < 0 ? 16 : 10, fill: "#fff", stroke: INK, "stroke-width": li < 0 ? 4 : 3 }, g); + const [s, lx, ly, an] = NAMES[ni], n = txt(svg, lx, ly, s, { "text-anchor": an, "font-size": 20 }); + const at = li < 0 ? Math.min(...LINES.map((l) => l.dr[0] + (l.C[2] / l.L) * (l.dr[1] - l.dr[0]))) : LINES[li].dr[0] + (LINES[li].C[v] / LINES[li].L) * (LINES[li].dr[1] - LINES[li].dr[0]); + return { g, n, x, y, at }; + }); + const trams = LINES.map((l) => { + const g = el("g", {}, svg); + el("path", { d: "M-14 -20 L0 -32 L14 -20", stroke: INK, "stroke-width": 2.5, fill: "none", "stroke-linejoin": "round" }, g); + el("rect", { x: -54, y: -20, width: 108, height: 40, rx: 12, fill: l.col, stroke: INK, "stroke-width": 3 }, g); + txt(g, 0, 6, l.name, { "text-anchor": "middle", "font-family": MONO, "font-size": 17, "font-weight": 700 }); + return g; + }); + return (t) => { + LINES.forEach((l, i) => { + const k = t < R0 ? 1 - io(t / R0) : io(seg(t, l.dr[0], l.dr[1])); + [l.ink, l.fill].forEach((n) => n.setAttribute("stroke-dashoffset", (l.L + 2) * (1 - k))); + l.halo.setAttribute("display", sel === i ? "inline" : "none"); + let d = l.C[l.moves[l.moves.length - 1][3]]; + if (t >= R0) { d = 0; l.moves.forEach(([a, b, p, q]) => { if (t >= a) d = l.C[p] + (l.C[q] - l.C[p]) * io(seg(t, a, b)); }); } + const [x, y] = along(l.P, d), pop = t < R0 ? 1 : ob(seg(t, l.show, l.show + 0.4)); + trams[i].setAttribute("transform", `translate(${x} ${y}) scale(${Math.max(0.001, pop)})`); + trams[i].setAttribute("opacity", t < R0 ? 1 - seg(t, 0, 0.3) : t >= l.show ? 1 : 0); + }); + STOPS.forEach((s) => { + const k = t < R0 ? 1 - seg(t, 0, R0) : ob(seg(t, s.at, s.at + 0.35)); + s.g.setAttribute("transform", `translate(${s.x} ${s.y}) scale(${Math.max(0.001, k)})`); + s.n.setAttribute("opacity", cl(k)); + }); + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + const pr = el("rect", { x: 64, y: 64, height: 40, rx: 20, fill: SOFT, stroke: INK, "stroke-width": 2 }, svg); + const pt = txt(svg, 84, 91, "Comparisons", { "font-size": 18, "font-weight": 700 }); + pr.setAttribute("width", pt.getComputedTextLength() + 40); + fit(txt(svg, 64, 200, "Codex vs", { "font-size": 76, "font-weight": 700 }), 440); + fit(txt(svg, 64, 284, "ChatGPT", { "font-size": 76, "font-weight": 700 }), 440); + el("path", { d: "M66 310 H380", stroke: YEL, "stroke-width": 12, "stroke-linecap": "round" }, svg); + txt(svg, 64, 366, "Coding agent or assistant?", { "font-size": 26, "font-weight": 500, fill: MUTE }); + txt(svg, 64, 470, "Checked 28 Oct 2026", { "font-size": 18, "font-weight": 500, fill: CAP }); + const top = tray(svg, SKY, "ChatGPT", "chat"), bot = tray(svg, YEL, "Codex", "codex", false); + tf(top.g, 548, 186); tf(bot.g, 572, 372); + el("circle", { cx: 904, cy: 320, r: 26, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + txt(svg, 904, 328, "vs", { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + 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(); }, nudge: () => { if (held) frame(); else 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/codex-vs-chatgpt/toolbox.png b/blog/src/assets/media/codex-vs-chatgpt/toolbox.png new file mode 100644 index 0000000000..8caf422cac Binary files /dev/null and b/blog/src/assets/media/codex-vs-chatgpt/toolbox.png differ diff --git a/blog/src/assets/media/codex-vs-chatgpt/tram.png b/blog/src/assets/media/codex-vs-chatgpt/tram.png new file mode 100644 index 0000000000..33614ce84c Binary files /dev/null and b/blog/src/assets/media/codex-vs-chatgpt/tram.png differ diff --git a/blog/src/assets/media/gemini-4-carbon/hero.png b/blog/src/assets/media/gemini-4-carbon/hero.png new file mode 100644 index 0000000000..19e0ab7cb3 Binary files /dev/null and b/blog/src/assets/media/gemini-4-carbon/hero.png differ diff --git a/blog/src/assets/media/gemini-4-carbon/motion.css b/blog/src/assets/media/gemini-4-carbon/motion.css new file mode 100644 index 0000000000..117928abec --- /dev/null +++ b/blog/src/assets/media/gemini-4-carbon/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Gemini 4 Carbon". 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/gemini-4-carbon/motion.js b/blog/src/assets/media/gemini-4-carbon/motion.js new file mode 100644 index 0000000000..a63fd8babc --- /dev/null +++ b/blog/src/assets/media/gemini-4-carbon/motion.js @@ -0,0 +1,218 @@ +/* Bright coded scenes for "Gemini 4 Carbon". 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(); } }); + }; + // a transparent hit area plus a dashed focus ring, both the same box + const hitbox = (g, x, y, w, h, r = 20) => { + el("rect", { x, y, width: w, height: h, rx: r, fill: "#fff", "fill-opacity": 0 }, g); + el("rect", { x, y, width: w, height: h, rx: r, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 7", class: "mg-ring" }, g); + }; + const chip = (p, label, fill, w) => { + const g = el("g", {}, p); + el("rect", { x: -w / 2, y: -21, width: w, height: 42, rx: 21, fill, stroke: INK, "stroke-width": 2.5 }, g); + txt(g, 0, 8, label, { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + return g; + }; + + const SC = {}; + + /* ---- 1. two blocks drop onto a two step podium ---- */ + SC.podium = { + dur: 8, still: 5, + build(svg, api) { + const stage = el("g", {}, svg); + el("path", { d: "M80 500 H720", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, stage); + el("rect", { x: 130, y: 380, width: 260, height: 120, fill: SOFT, stroke: INK, "stroke-width": 3 }, stage); + el("rect", { x: 390, y: 260, width: 260, height: 240, fill: SOFT, stroke: INK, "stroke-width": 3 }, stage); + const blocks = [ + { x: 160, top: 270, fill: SKY, name: "Argon", tag: "Open now", tagFill: MINT, tagW: 150, fall: 0.6 }, + { x: 420, top: 150, fill: LIL, name: "Carbon", tag: "Early access", tagFill: YEL, tagW: 190, fall: 2.2 }, + ].map((b) => { + const g = el("g", {}, stage); + el("rect", { x: b.x, y: b.top, width: 200, height: 110, rx: 14, fill: b.fill, stroke: INK, "stroke-width": 3 }, g); + txt(g, b.x + 100, b.top + 67, b.name, { "text-anchor": "middle", "font-family": MONO, "font-size": 34, "font-weight": 700 }); + const tag = chip(stage, b.tag, b.tagFill, b.tagW); + return Object.assign(b, { g, tag }); + }); + const hit = el("g", {}, svg); + hitbox(hit, 70, 70, 660, 450); + button(hit, "Replay the blocks dropping onto the podium", () => api.seek(0)); + return (t) => { + const out = 1 - seg(t, 7.4, 8); + blocks.forEach((b) => { + const k = seg(t, b.fall, b.fall + 0.6), land = Math.sin(Math.PI * seg(t, b.fall + 0.6, b.fall + 0.9)); + const dy = -(b.top + 140) * (1 - k * k), cx = b.x + 100, by = b.top + 110; + b.g.setAttribute("transform", `translate(0 ${dy}) translate(${cx} ${by}) scale(${1 + 0.08 * land} ${1 - 0.12 * land}) translate(${-cx} ${-by})`); + b.g.setAttribute("opacity", t < b.fall ? 0 : out); + const p = seg(t, b.fall + 0.9, b.fall + 1.3); + tf(b.tag, cx, b.top - 44, 0.4 + 0.6 * ob(p)); + b.tag.setAttribute("opacity", p <= 0 ? 0 : Math.min(cl(p * 3), out)); + }); + }; + }, + }; + + /* ---- 2. three ticket stubs tear off in rollout order ---- */ + SC.ticket = { + dur: 8, still: 5.5, + build(svg, api) { + el("rect", { x: 40, y: 112, width: 720, height: 40, rx: 12, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + const stubs = [ + { lines: ["Cyber", "defenders"], fill: YEL, tick: true }, + { lines: ["Trusted", "partners"], fill: SKY }, + { lines: ["Developers"], fill: LIL }, + ].map((s, i) => { + const x = 65 + i * 240, g = el("g", {}, svg); + el("path", { d: `M${x + 30} 156 V164 M${x + 160} 156 V164`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg); + const card = el("g", {}, g); + el("path", { d: "M0 0 H190 V136 A16 16 0 0 0 190 168 V290 H0 V168 A16 16 0 0 0 0 136 Z", fill: s.fill, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, card); + el("path", { d: "M14 14 H176", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "6 7", "stroke-linecap": "round" }, card); + el("path", { d: "M18 152 H172", stroke: INK, "stroke-width": 2, "stroke-dasharray": "2 9", "stroke-linecap": "round" }, card); + s.lines.forEach((l, j) => txt(card, 95, (s.lines.length === 1 ? 92 : 74) + j * 36, l, { "text-anchor": "middle", "font-size": 28, "font-weight": 700 })); + const stamp = el("g", {}, card); + if (s.tick) { + el("circle", { r: 44, fill: MINT, stroke: INK, "stroke-width": 3 }, stamp); + el("path", { d: "M-20 2 L-6 16 L20 -14", stroke: INK, "stroke-width": 7, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, stamp); + } else { + el("rect", { x: -64, y: -26, width: 128, height: 52, rx: 14, fill: "#fff", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "6 5" }, stamp); + txt(stamp, 0, 9, "Later", { "text-anchor": "middle", "font-size": 26, "font-weight": 700 }); + } + hitbox(g, x - 14, 160, 218, 400); + const st = { x, card, stamp, at: 0.8 + i * 1.2, ov: null, k: 0, rot: i === 1 ? 2 : i === 0 ? -3 : 4 }; + button(g, `${s.lines.join(" ")}: tear off or put back`, () => { + const now = api.now(); st.ov = { from: st.k, to: st.k < 0.5 ? 1 : 0, at: now }; api.poke(); + }); + return st; + }); + return (t, now) => { + stubs.forEach((s) => { + let k; + if (s.ov) k = s.ov.from + (s.ov.to - s.ov.from) * (api.calm ? 1 : oc(seg(now - s.ov.at, 0, 0.55))); + else k = oc(seg(t, s.at, s.at + 0.7)) * (1 - io(seg(t, 7.3, 7.9))); + s.k = k; + s.card.setAttribute("transform", `translate(${s.x} ${166 + 70 * k}) rotate(${s.rot * k} 95 0)`); + const p = seg(k, 0.55, 1); + tf(s.stamp, 95, 222, p <= 0 ? 0.001 : 0.3 + 0.7 * ob(p), -8); + s.stamp.setAttribute("opacity", cl(p * 3)); + }); + }; + }, + }; + + /* ---- 3. a balance scale tips as two weights land ---- */ + SC.scale = { + dur: 8, still: 5.5, + build(svg, api) { + const P = [400, 120], HALF = 210, HANG = 190; + const g = el("g", {}, svg); + el("path", { d: "M394 120 H406 V440 H394 Z", fill: SOFT, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + el("path", { d: "M330 470 L350 440 H450 L470 470 Z", fill: BLUE, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + const beam = el("g", {}, g); + el("rect", { x: -HALF - 6, y: -7, width: 2 * HALF + 12, height: 14, rx: 7, fill: BLUE, stroke: INK, "stroke-width": 3 }, beam); + const pans = [ + { name: "Argon", pct: "0.7%", fill: SKY, side: -1, land: 1.1 }, + { name: "Carbon", pct: "0.0%", fill: LIL, side: 1, land: 2.5 }, + ].map((w) => { + const pan = el("g", {}, g); + el("path", { d: `M0 ${-HANG} L-110 0 M0 ${-HANG} L110 0`, stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, pan); + el("circle", { cx: 0, cy: -HANG, r: 6, fill: YEL, stroke: INK, "stroke-width": 2.5 }, pan); + const wt = el("g", {}, pan); + el("path", { d: "M-14 -96 A14 14 0 0 1 14 -96", fill: "none", stroke: INK, "stroke-width": 5, "stroke-linecap": "round" }, wt); + el("path", { d: "M-45 -96 H45 L65 -8 Q66 0 58 0 H-58 Q-66 0 -65 -8 Z", fill: w.fill, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, wt); + txt(wt, 0, -60, w.name, { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); + txt(wt, 0, -20, w.pct, { "text-anchor": "middle", "font-size": 30, "font-weight": 700 }); + el("path", { d: "M-110 0 Q0 34 110 0 Z", fill: SOFT, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, pan); + return Object.assign(w, { pan, wt }); + }); + el("circle", { cx: P[0], cy: P[1], r: 14, fill: YEL, stroke: INK, "stroke-width": 3 }, g); + const card = el("g", {}, svg); + el("rect", { x: 230, y: 500, width: 340, height: 60, rx: 16, fill: YEL, stroke: INK, "stroke-width": 3 }, card); + txt(card, 400, 539, "Prompt injection", { "text-anchor": "middle", "font-size": 26, "font-weight": 700 }); + hitbox(g, 60, 24, 680, 462); + button(g, "Drop the weights onto the scale again", () => api.seek(0)); + const sp = (x) => (x <= 0 ? 0 : 1 - Math.exp(-3.5 * x) * Math.cos(8 * x)); + return (t) => { + const out = io(seg(t, 7.3, 7.9)); + const a = (-13 * sp(t - pans[0].land) + 3 * sp(t - pans[1].land)) * (1 - out), r = (a * Math.PI) / 180; + beam.setAttribute("transform", `translate(${P[0]} ${P[1]}) rotate(${a})`); + pans.forEach((w) => { + const ex = P[0] + w.side * HALF * Math.cos(r), ey = P[1] + w.side * HALF * Math.sin(r); + w.pan.setAttribute("transform", `translate(${ex} ${ey + HANG})`); + const k = seg(t, w.land - 0.5, w.land); + w.wt.setAttribute("transform", `translate(0 ${-420 * (1 - k * k) - 40 * out})`); + w.wt.setAttribute("opacity", t < w.land - 0.5 ? 0 : 1 - out); + }); + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + el("rect", { x: 64, y: 64, width: 150, height: 44, rx: 22, fill: YEL, stroke: INK, "stroke-width": 2.5 }, svg); + txt(svg, 139, 93, "Concepts", { "text-anchor": "middle", "font-size": 21, "font-weight": 700 }); + txt(svg, 64, 214, "Gemini 4", { "font-size": 88, "font-weight": 700 }); + txt(svg, 64, 306, "Carbon", { "font-size": 88, "font-weight": 700 }); + el("path", { d: "M66 334 H330", stroke: LIL, "stroke-width": 14, "stroke-linecap": "round" }, svg); + txt(svg, 64, 392, "Early access, Argon's price", { "font-size": 30, "font-weight": 500, fill: MUTE }); + txt(svg, 64, 452, "Checked 29 Oct 2026", { "font-size": 20, "font-weight": 500, fill: MUTE }); + el("path", { d: "M540 470 H910", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg); + el("rect", { x: 560, y: 380, width: 160, height: 90, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + el("rect", { x: 720, y: 270, width: 160, height: 200, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + [[575, 300, SKY, "Argon"], [735, 190, LIL, "Carbon"]].forEach(([x, y, f, n]) => { + el("rect", { x, y, width: 130, height: 80, rx: 12, fill: f, stroke: INK, "stroke-width": 3 }, svg); + txt(svg, x + 65, y + 50, n, { "text-anchor": "middle", "font-family": MONO, "font-size": 26, "font-weight": 700 }); + }); + 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, started = 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); }; + // reduced motion: replays keep the still frame, toggles snap instead of easing + const api = { calm, now: clock, seek: (s) => { off = s - clock(); if (!calm) held = false; tick(); }, poke: () => { if (calm) { frame(); setTimeout(frame, 0); return; } 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) { if (!started) { started = true; off = -clock(); } 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/gemini-4-carbon/podium.png b/blog/src/assets/media/gemini-4-carbon/podium.png new file mode 100644 index 0000000000..55e6a9f6d3 Binary files /dev/null and b/blog/src/assets/media/gemini-4-carbon/podium.png differ diff --git a/blog/src/assets/media/gemini-4-carbon/scale.png b/blog/src/assets/media/gemini-4-carbon/scale.png new file mode 100644 index 0000000000..6780395aa2 Binary files /dev/null and b/blog/src/assets/media/gemini-4-carbon/scale.png differ diff --git a/blog/src/assets/media/gemini-4-carbon/ticket.png b/blog/src/assets/media/gemini-4-carbon/ticket.png new file mode 100644 index 0000000000..dd17d1cee9 Binary files /dev/null and b/blog/src/assets/media/gemini-4-carbon/ticket.png differ diff --git a/blog/src/assets/media/how-to-run-mistral-large-4/hero.png b/blog/src/assets/media/how-to-run-mistral-large-4/hero.png new file mode 100644 index 0000000000..1bbb950be3 Binary files /dev/null and b/blog/src/assets/media/how-to-run-mistral-large-4/hero.png differ diff --git a/blog/src/assets/media/how-to-run-mistral-large-4/luggage.png b/blog/src/assets/media/how-to-run-mistral-large-4/luggage.png new file mode 100644 index 0000000000..c300712392 Binary files /dev/null and b/blog/src/assets/media/how-to-run-mistral-large-4/luggage.png differ diff --git a/blog/src/assets/media/how-to-run-mistral-large-4/motion.css b/blog/src/assets/media/how-to-run-mistral-large-4/motion.css new file mode 100644 index 0000000000..05f29fc464 --- /dev/null +++ b/blog/src/assets/media/how-to-run-mistral-large-4/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "How to run Mistral Large 4". 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/how-to-run-mistral-large-4/motion.js b/blog/src/assets/media/how-to-run-mistral-large-4/motion.js new file mode 100644 index 0000000000..a7e5f402d2 --- /dev/null +++ b/blog/src/assets/media/how-to-run-mistral-large-4/motion.js @@ -0,0 +1,238 @@ +/* Bright coded scenes for "How to run Mistral Large 4". 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 SC = {}; + + /* ---- shared suitcase, drawn with its bottom centre at 0,0 ---- */ + const suitcase = (g, w, h, col, tag) => { + el("path", { d: `M-14 ${-h} V${-h - 10} H14 V${-h}`, stroke: INK, "stroke-width": 3, fill: "none", "stroke-linejoin": "round" }, g); + el("rect", { x: -w / 2, y: -h, width: w, height: h, rx: 10, fill: col, stroke: INK, "stroke-width": 3 }, g); + [-0.27, 0.27].forEach((f) => el("path", { d: `M${w * f} ${-h + 3} V-3`, stroke: INK, "stroke-width": 2 }, g)); + const tw = tag.length * 8.4 + 18; + el("path", { d: `M0 ${-h - 10} V${-h - 32}`, stroke: INK, "stroke-width": 2 }, g); + const tg = el("rect", { x: -tw / 2, y: -h - 58, width: tw, height: 26, rx: 6, fill: "#fff", stroke: INK, "stroke-width": 2 }, g); + txt(g, 0, -h - 40, tag, { "text-anchor": "middle", "font-family": MONO, "font-size": 14, "font-weight": 700 }); + return { tg, tw }; + }; + + /* ---- 1. five suitcases on a carousel, one shelf of memory ---- */ + SC.luggage = { + dur: 10, still: 10, + build(svg, api) { + const TAG = ["233 GB 1 bit", "378 GB 2 bit", "605 GB 4 bit", "1.1 TB 8 bit", "2.1 TB full"]; + const SZ = ["233 GB", "378 GB", "605 GB", "1.1 TB", "2.1 TB"]; + const W = [64, 80, 100, 128, 160], H = [46, 58, 72, 90, 110], X = [715, 592, 455, 300, 125], COL = [YEL, SKY, LIL, BLUE, YEL]; + const BY = 470, SX = 400, SY = 230; + /* shelf: two side posts 76 apart, so only the smallest case fits between them */ + const glow = el("rect", { x: SX - 38, y: SY - 72, width: 76, height: 72, fill: MINT, opacity: 0 }, svg); + [-40, 40].forEach((d) => el("rect", { x: SX + d - 4, y: SY - 76, width: 8, height: 76, rx: 3, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, svg)); + el("rect", { x: SX - 80, y: SY, width: 160, height: 12, rx: 4, fill: BLUE, stroke: INK, "stroke-width": 3 }, svg); + txt(svg, SX, SY + 40, "256 GB memory", { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); + /* the carousel */ + el("rect", { x: 30, y: BY, width: 740, height: 24, rx: 12, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + const slats = el("path", { d: `M44 ${BY + 12} H756`, stroke: MUTE, "stroke-width": 12, "stroke-dasharray": "2 38" }, svg); + for (let x = 70; x <= 730; x += 110) el("circle", { cx: x, cy: BY + 34, r: 8, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, svg); + let pinned = -1; + const cases = W.map((w, i) => { + const g = el("g", {}, svg), rw = Math.max(w, TAG[i].length * 8.4 + 18) + 16; + el("rect", { x: -rw / 2, y: -H[i] - 66, width: rw, height: H[i] + 74, rx: 14, fill: "#fff", "fill-opacity": 0, class: "mg-ring", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 6" }, g); + const s = suitcase(g, w, H[i], COL[i], TAG[i]); + button(g, `${TAG[i]}: Needs more than ${SZ[i]} of memory`, () => { pinned = i; api.poke(); }); + return Object.assign({ g }, s); + }); + const bar = el("g", {}, svg); + el("rect", { x: 160, y: 532, width: 480, height: 48, rx: 24, fill: SOFT }, bar); + const line = txt(bar, 400, 563, "", { "text-anchor": "middle", "font-size": 21, "font-weight": 600 }); + const LIFT = [2.6, 3.8], HOP = (i) => 4.3 + (i - 1) * 0.8; + return (t) => { + const ride = io(seg(t, 0.3, 2.4)), back = 900 * (1 - ride); + slats.setAttribute("stroke-dashoffset", -900 * ride); + let auto = -1; + cases.forEach((c, i) => { + let x = X[i] - back, y = BY, r = 0; + if (i === 0) { + const k = io(seg(t, LIFT[0], LIFT[1])); + x = X[0] + (SX - X[0]) * k; y = BY + (SY - BY) * k - Math.sin(k * Math.PI) * 60; + if (t >= LIFT[0]) auto = 0; + } else { + const h = seg(t, HOP(i), HOP(i) + 0.7), up = Math.sin(h * Math.PI); + x += (SX - X[i]) * 0.18 * up; y -= 44 * up; r = Math.sin(h * Math.PI * 4) * 5 * up; + if (h > 0 && h < 1) auto = i; + } + tf(c.g, x, y, 1, r); + }); + if (t >= 7.6) auto = 0; + glow.setAttribute("opacity", seg(t, LIFT[1] - 0.2, LIFT[1] + 0.2)); + const show = pinned >= 0 ? pinned : auto; + cases.forEach((c, i) => c.tg.setAttribute("fill", i === show ? YEL : "#fff")); + line.textContent = show < 0 ? "" : `Needs more than ${SZ[show]} of memory`; + bar.setAttribute("opacity", show < 0 ? 0 : 1); + }; + }, + }; + + /* ---- 2. one loaf, eight cups ---- */ + SC.tin = { + dur: 9, still: 9, + build(svg, api) { + const LY = 96, LH = 84, CY = 330, CH = 100, cx = (i) => 68 + i * 84, FULL = 84, SMALL = 84 * 76 / 128; + txt(svg, 400, 74, "Mistral Large 4", { "text-anchor": "middle", "font-family": MONO, "font-size": 26, "font-weight": 700 }); + el("rect", { x: 66, y: LY - 2, width: 668, height: LH + 4, rx: 38, fill: "none", stroke: MUTE, "stroke-width": 2, "stroke-dasharray": "4 8" }, svg); + const loaf = el("rect", { x: 68, y: LY, width: 664, height: LH, rx: 36, fill: YEL, stroke: INK, "stroke-width": 3 }, svg); + const cuts = Array.from({ length: 7 }, (_, i) => el("path", { d: `M${cx(i + 1) - 2} ${LY - 12} V${LY + LH + 12}`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg)); + el("rect", { x: 56, y: CY - 14, width: 688, height: CH + 26, rx: 16, fill: SKY, stroke: INK, "stroke-width": 3 }, svg); + for (let i = 0; i < 8; i++) { + el("rect", { x: cx(i), y: CY, width: 80, height: CH, rx: 10, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, svg); + txt(svg, cx(i) + 40, CY + CH + 52, `GPU ${i + 1}`, { "text-anchor": "middle", "font-family": MONO, "font-size": 17, "font-weight": 700 }); + } + const slices = Array.from({ length: 8 }, (_, i) => el("rect", { x: cx(i) + 4, width: 72, rx: i === 0 || i === 7 ? 18 : 8, fill: YEL, stroke: INK, "stroke-width": 3 }, svg)); + const sw = el("g", {}, svg), SWX = 214, SWY = 508; + el("rect", { x: SWX - 10, y: SWY - 10, width: 392, height: 60, rx: 30, fill: "#fff", "fill-opacity": 0, class: "mg-ring", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 6" }, sw); + const track = el("rect", { x: SWX, y: SWY, width: 76, height: 40, rx: 20, fill: SOFT, stroke: INK, "stroke-width": 3 }, sw); + const knob = el("circle", { cy: SWY + 20, r: 14, fill: "#fff", stroke: INK, "stroke-width": 3 }, sw); + const lab = txt(sw, SWX + 96, SWY + 29, "", { "font-size": 25, "font-weight": 700 }); + let user = null, from = 0, at = 0; + const cur = (t, now) => user == null ? io(seg(t, 5.2, 5.8)) : from + (user - from) * io(seg(now - at, 0, 0.6)); + let last = 0, lastT = 0; + button(sw, "FP8 or NVFP4", () => { from = last; user = last > 0.5 ? 0 : 1; at = api.now(); if (lastT < 4.6) api.seek(4.6); else api.poke(); }); + sw.setAttribute("role", "switch"); + return (t, now) => { + const v = cur(t, now); last = v; lastT = t; + const cut = seg(t, 0.5, 1.8), sliced = t >= 2; + loaf.setAttribute("opacity", sliced ? 0 : 1); + cuts.forEach((c, i) => c.setAttribute("opacity", !sliced && cut * 7 > i ? 1 : 0)); + const hh = FULL + (SMALL - FULL) * v; + slices.forEach((s, i) => { + const d = seg(t, 2.1 + i * 0.26, 2.1 + i * 0.26 + 0.55), k = d < 0.75 ? Math.pow(d / 0.75, 2) : 1 - Math.sin((d - 0.75) / 0.25 * Math.PI) * 0.06; + const landed = d >= 1, h = landed ? hh : FULL; + const yTop = LY + (CY + CH - 4 - FULL - LY) * k; + s.setAttribute("y", landed ? CY + CH - 4 - h : yTop); s.setAttribute("height", h); + s.setAttribute("opacity", sliced ? 1 : 0); + }); + const on = v > 0.5; + knob.setAttribute("cx", SWX + 20 + 36 * v); + track.setAttribute("fill", on ? BLUE : SOFT); + lab.textContent = on ? "NVFP4, 76 GiB a cup" : "FP8, 128 GiB a cup"; + sw.setAttribute("aria-checked", on ? "true" : "false"); + sw.setAttribute("aria-label", on ? "NVFP4, 76 GiB a cup" : "FP8, 128 GiB a cup"); + }; + }, + }; + + /* ---- 3. the licence as a signpost ---- */ + SC.signpost = { + dur: 8, still: 8, + build(svg, api) { + const PX = 320, GY = 522, AH = 46; + const ARMS = [["Use", 1, 140], ["Modify", -1, 205], ["Fine tune", 1, 270], ["Sell", -1, 335], ["Model as a Service", 1, 400]]; + el("ellipse", { cx: PX, cy: GY + 4, rx: 170, ry: 14, fill: SOFT }, svg); + const post = el("g", {}, svg); + el("rect", { x: PX - 40, y: 92, width: 80, height: GY - 92 + 12, rx: 16, fill: "#fff", "fill-opacity": 0, class: "mg-ring", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 6" }, post); + el("rect", { x: PX - 12, y: 104, width: 24, height: GY - 104, rx: 6, fill: YEL, stroke: INK, "stroke-width": 3 }, post); + button(post, "Swing the arms out again", () => api.seek(1.2)); + const arms = ARMS.map(([word, s, y], i) => { + const g = el("g", {}, svg), last = i === 4, base = PX + 12 * s; + const path = el("path", { fill: last ? LIL : YEL, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); + const t0 = last ? 22 : 54, label = txt(g, base + s * t0, y + 8, word, { "text-anchor": s > 0 ? "start" : "end", "font-size": 24, "font-weight": 700 }); + const L = t0 + label.getComputedTextLength() + 40; + path.setAttribute("d", `M${base} ${y - AH / 2} H${base + s * (L - 22)} L${base + s * L} ${y} L${base + s * (L - 22)} ${y + AH / 2} H${base} Z`); + let tick = null; + if (!last) { tick = el("g", {}, g); el("circle", { r: 13, fill: MINT, stroke: INK, "stroke-width": 2.5 }, tick); el("path", { d: "M-6 0 L-2 5 L6 -5", stroke: INK, "stroke-width": 3, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, tick); } + return { g, s, y, tick, tx: base + s * 28, L, start: last ? 3.4 : 1.4 + i * 0.45 }; + }); + const maas = arms[4], nx = PX + 40; + const note = el("g", {}, svg); + el("path", { d: `M${nx + 110} ${maas.y + AH / 2} V${maas.y + 50}`, stroke: INK, "stroke-width": 2 }, note); + const nt = txt(note, nx + 16, maas.y + 78, "Separate licence from Mistral", { "font-size": 19, "font-weight": 600 }); + const nw = nt.getComputedTextLength() + 32; + const card = el("rect", { x: nx, y: maas.y + 50, width: nw, height: 40, rx: 10, fill: SOFT, stroke: INK, "stroke-width": 2 }, note); + note.insertBefore(card, nt); + return (t) => { + const r = ob(seg(t, 0.2, 1.2)); + post.setAttribute("transform", `translate(0 ${GY}) scale(1 ${cl(r, 0, 1.08)}) translate(0 ${-GY})`); + arms.forEach((a) => { + const p = seg(t, a.start, a.start + 0.6), k = ob(p); + a.g.setAttribute("transform", `rotate(${a.s * 80 * (1 - k)} ${PX} ${a.y})`); + a.g.setAttribute("opacity", p > 0 ? 1 : 0); + if (a.tick) tf(a.tick, a.tx, a.y, ob(seg(t, a.start + 0.45, a.start + 0.8))); + }); + const n = oc(seg(t, 4.3, 4.9)); + note.setAttribute("opacity", n); note.setAttribute("transform", `translate(0 ${-18 * (1 - n)})`); + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + el("rect", { x: 64, y: 70, width: 104, height: 38, rx: 19, fill: SOFT, stroke: INK, "stroke-width": 2 }, svg); + txt(svg, 116, 96, "Guides", { "text-anchor": "middle", "font-size": 19, "font-weight": 700 }); + txt(svg, 64, 210, "Run Mistral", { "font-size": 72, "font-weight": 700 }); + txt(svg, 64, 292, "Large 4", { "font-size": 72, "font-weight": 700 }); + el("path", { d: "M66 318 H330", stroke: YEL, "stroke-width": 14, "stroke-linecap": "round" }, svg); + txt(svg, 64, 376, "From 256 GB of memory", { "font-size": 30, "font-weight": 500, fill: MUTE }); + txt(svg, 64, 470, "Checked 29 Oct 2026", { "font-size": 18, "font-weight": 500, fill: "#6B5878" }); + const BY = 440; + el("rect", { x: 540, y: BY, width: 380, height: 22, rx: 11, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + el("path", { d: `M552 ${BY + 11} H908`, stroke: MUTE, "stroke-width": 10, "stroke-dasharray": "2 34" }, svg); + for (let x = 572; x <= 900; x += 82) el("circle", { cx: x, cy: BY + 31, r: 7, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, svg); + [[600, 80, 58, YEL, "233 GB"], [712, 100, 74, SKY, "378 GB"], [846, 124, 94, LIL, "605 GB"]].forEach(([x, w, h, c, s]) => { const g = el("g", {}, svg); suitcase(g, w, h, c, s); tf(g, x, BY); }); + 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/how-to-run-mistral-large-4/signpost.png b/blog/src/assets/media/how-to-run-mistral-large-4/signpost.png new file mode 100644 index 0000000000..ea4b0fc1e6 Binary files /dev/null and b/blog/src/assets/media/how-to-run-mistral-large-4/signpost.png differ diff --git a/blog/src/assets/media/how-to-run-mistral-large-4/tin.png b/blog/src/assets/media/how-to-run-mistral-large-4/tin.png new file mode 100644 index 0000000000..d623ea4f5c Binary files /dev/null and b/blog/src/assets/media/how-to-run-mistral-large-4/tin.png differ diff --git a/blog/src/assets/media/meta-muse-alternatives/compass.png b/blog/src/assets/media/meta-muse-alternatives/compass.png new file mode 100644 index 0000000000..205fac8214 Binary files /dev/null and b/blog/src/assets/media/meta-muse-alternatives/compass.png differ diff --git a/blog/src/assets/media/meta-muse-alternatives/globe.png b/blog/src/assets/media/meta-muse-alternatives/globe.png new file mode 100644 index 0000000000..44423325a0 Binary files /dev/null and b/blog/src/assets/media/meta-muse-alternatives/globe.png differ diff --git a/blog/src/assets/media/meta-muse-alternatives/hero.png b/blog/src/assets/media/meta-muse-alternatives/hero.png new file mode 100644 index 0000000000..cee2c5e54e Binary files /dev/null and b/blog/src/assets/media/meta-muse-alternatives/hero.png differ diff --git a/blog/src/assets/media/meta-muse-alternatives/motion.css b/blog/src/assets/media/meta-muse-alternatives/motion.css new file mode 100644 index 0000000000..ae11628cf1 --- /dev/null +++ b/blog/src/assets/media/meta-muse-alternatives/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Meta Muse alternatives". 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/meta-muse-alternatives/motion.js b/blog/src/assets/media/meta-muse-alternatives/motion.js new file mode 100644 index 0000000000..35149bb66b --- /dev/null +++ b/blog/src/assets/media/meta-muse-alternatives/motion.js @@ -0,0 +1,245 @@ +/* Bright coded scenes for "Meta Muse alternatives". 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 }); + }; + + /* ---- a compass face drawn around 0,0; returns the needle group ---- */ + const compass = (g, r) => { + el("circle", { r: r + 14, fill: SKY, stroke: INK, "stroke-width": 3 }, g); + el("circle", { r, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + for (let i = 0; i < 24; i++) { + const a = (i * 15 * Math.PI) / 180, l = i % 6 === 0 ? 16 : 8; + el("path", { d: `M${Math.sin(a) * (r - 6)} ${-Math.cos(a) * (r - 6)} L${Math.sin(a) * (r - 6 - l)} ${-Math.cos(a) * (r - 6 - l)}`, stroke: INK, "stroke-width": i % 6 === 0 ? 3 : 2, "stroke-linecap": "round" }, g); + } + const n = el("g", {}, g), L = r - 26, w = r * 0.16; + el("path", { d: `M0 ${-L} L${w} 0 L${-w} 0 Z`, fill: BLUE, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, n); + el("path", { d: `M0 ${L * 0.72} L${w} 0 L${-w} 0 Z`, fill: "#fff", stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, n); + el("circle", { r: w * 0.75, fill: YEL, stroke: INK, "stroke-width": 3 }, g); + return n; + }; + + const SC = {}; + + /* ---- 1. a globe turns, then three launch pins drop ---- */ + SC.globe = { + dur: 11, still: 10.5, + build(svg, api) { + const C = [400, 290], R = 185; + const clip = el("clipPath", { id: "mg-globe-clip" }, el("defs", {}, svg)); + el("circle", { cx: C[0], cy: C[1], r: R }, clip); + el("circle", { cx: C[0], cy: C[1], r: R, fill: SKY }, svg); + const sph = el("g", { "clip-path": "url(#mg-globe-clip)" }, svg); + const land = el("g", {}, sph); + const blobs = [ + "M262 158 Q300 128 352 144 Q384 156 378 196 Q372 232 342 248 Q330 276 304 284 Q282 270 286 238 Q262 214 252 190 Q248 170 262 158 Z", + "M330 302 Q362 296 380 318 Q392 352 372 392 Q356 428 340 434 Q330 404 332 370 Q318 336 330 302 Z", + "M440 286 Q480 272 506 292 Q520 326 500 360 Q482 398 464 402 Q450 372 452 340 Q430 312 440 286 Z", + "M450 150 Q500 128 556 146 Q584 166 572 196 Q546 214 512 210 Q480 224 458 206 Q438 178 450 150 Z", + "M548 236 Q560 232 566 244 Q568 262 556 276 Q546 284 542 272 Q540 252 548 236 Z", + ]; + [-400, 0, 400].forEach((dx) => { const g = el("g", { transform: `translate(${dx} 0)` }, land); blobs.forEach((d) => el("path", { d, fill: MINT, stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round" }, g)); }); + el("ellipse", { cx: C[0], cy: C[1], rx: R, ry: 26, fill: "none", stroke: "#fff", "stroke-width": 2.5, "stroke-opacity": 0.8 }, sph); + const mer = [0, 1].map(() => el("ellipse", { cx: C[0], cy: C[1], rx: R, ry: R, fill: "none", stroke: "#fff", "stroke-width": 2.5, "stroke-opacity": 0.8 }, sph)); + el("circle", { cx: C[0], cy: C[1], r: R, fill: "none", stroke: INK, "stroke-width": 3 }, svg); + const P = [ + { name: "US", date: "8 Sep", src: "Meta launch post", col: YEL, at: [318, 252], card: [40, 252, 150, 78], d: 3.0 }, + { name: "Canada", date: "18 Sep", src: "iPhone in Canada", col: BLUE, at: [332, 186], card: [40, 132, 150, 78], d: 4.2 }, + { name: "Japan", date: "23 Oct", src: "RuntimeWire", col: LIL, at: [554, 262], card: [612, 196, 156, 116], d: 5.4, note: "Reported" }, + ]; + const pins = P.map((p, i) => { + const g = el("g", {}, svg), [x, y] = p.at, [cx, cy, cw, ch] = p.card; + const shadow = el("ellipse", { cx: x, cy: y, rx: 12, ry: 4, fill: INK, "fill-opacity": 0.25 }, g); + const ex = cx + (cx < 400 ? cw : 0), ey = cy + 36; + const lead = el("path", { d: `M${x} ${y - 30} L${ex} ${ey}`, stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 6", "stroke-linecap": "round", fill: "none" }, g); + const card = el("g", {}, g); + el("rect", { x: cx - 6, y: cy - 6, width: cw + 12, height: ch + 12, rx: 20, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 6", class: "mg-ring" }, card); + const face = el("rect", { x: cx, y: cy, width: cw, height: ch, rx: 16, fill: "#fff", stroke: INK, "stroke-width": 3 }, card); + txt(card, cx + 18, cy + 34, p.name, { "font-size": 26, "font-weight": 700 }); + txt(card, cx + 18, cy + 62, p.date, { "font-family": MONO, "font-size": 20, "font-weight": 500 }); + if (p.note) { el("rect", { x: cx + 14, y: cy + 76, width: 110, height: 28, rx: 14, fill: SOFT, stroke: INK, "stroke-width": 1.5 }, card); txt(card, cx + 69, cy + 96, p.note, { "text-anchor": "middle", "font-size": 16, "font-weight": 600, fill: MUTE }); } + const pin = el("g", {}, g); + el("path", { d: "M0 0 C-6 -10 -16 -20 -16 -32 A16 16 0 1 1 16 -32 C16 -20 6 -10 0 0 Z", fill: p.col, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, pin); + el("circle", { cx: 0, cy: -32, r: 6, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, pin); + button(g, `${p.name}, ${p.date}${p.note ? ", " + p.note : ""}: ${p.src}`, () => { pinned = i; api.seek(6.4); }); + return { g, pin, shadow, lead, card, face, x, y }; + }); + let pinned = -1, last = 0; + const tip = strip(svg, 528, 560); + return (t) => { + if (t < last) pinned = -1; last = t; + const spin = io(seg(t, 0, 2.8)), shift = (700 * (1 - spin)) % 400; + land.setAttribute("transform", `translate(${shift} 0)`); + mer.forEach((m, i) => { const ph = (shift / 400) * Math.PI + Math.PI / 4 + i * Math.PI / 2; m.setAttribute("rx", Math.max(2, Math.abs(Math.cos(ph)) * R)); }); + let show = -1; + pins.forEach((p, i) => { + const k = seg(t, P[i].d, P[i].d + 0.55), drop = ob(k), c = oc(seg(t, P[i].d + 0.4, P[i].d + 0.9)); + tf(p.pin, p.x, p.y - 140 * (1 - drop)); p.pin.setAttribute("opacity", k > 0 ? 1 : 0); + p.shadow.setAttribute("opacity", k); p.lead.setAttribute("opacity", c); + p.card.setAttribute("opacity", c); p.card.setAttribute("transform", `translate(0 ${12 * (1 - c)})`); + p.face.setAttribute("fill", pinned === i ? P[i].col : "#fff"); + if (t >= P[i].d) show = i; + }); + if (pinned >= 0) show = pinned; + tip.textContent = show < 0 ? "Tapping a pin shows its source" : `${P[show].name}: ${P[show].src}`; + }; + }, + }; + + /* ---- 2. one training switch, On then Off ---- */ + SC.sliders = { + dur: 9, still: 8.6, + build(svg, api) { + const panel = el("g", {}, svg); + el("rect", { x: 60, y: 60, width: 680, height: 400, rx: 28, fill: "#fff", stroke: INK, "stroke-width": 3 }, panel); + txt(panel, 104, 140, "Muse", { "font-size": 46, "font-weight": 700 }); + const crumb = txt(panel, 104, 192, "", { "font-size": 24, "font-weight": 500, fill: MUTE }); + el("path", { d: "M104 230 H696", stroke: SOFT, "stroke-width": 4, "stroke-linecap": "round" }, panel); + el("rect", { x: 92, y: 262, width: 616, height: 160, rx: 22, fill: SOFT }, panel); + txt(panel, 128, 330, "Use my interactions", { "font-size": 30, "font-weight": 600 }); + txt(panel, 128, 370, "to improve models", { "font-size": 30, "font-weight": 600 }); + const sw = el("g", {}, panel); + el("rect", { x: 546, y: 288, width: 136, height: 88, rx: 44, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 6", class: "mg-ring" }, sw); + const track = el("rect", { x: 556, y: 298, width: 116, height: 68, rx: 34, stroke: INK, "stroke-width": 3 }, sw); + const pulse = el("circle", { r: 28, fill: "none", stroke: SKY, "stroke-width": 4 }, sw); + const knob = el("circle", { r: 25, cy: 332, fill: "#fff", stroke: INK, "stroke-width": 3 }, sw); + const word = txt(sw, 614, 405, "", { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + sw.setAttribute("role", "switch"); + const LINE = "Settings, Data controls"; + let user = null, last = 0; + button(sw, "Use my interactions to improve models", () => { user = !(cur > 0.5); api.seek(5.4); }); + sw.setAttribute("role", "switch"); + el("rect", { x: 100, y: 500, width: 600, height: 48, rx: 24, fill: SOFT }, svg); + txt(svg, 400, 531, "Tapping the switch turns it back on or off", { "text-anchor": "middle", "font-size": 20, "font-weight": 500 }); + let cur = 1; + return (t) => { + if (t < last) user = null; last = t; + const p = ob(seg(t, 0, 0.7)); + panel.setAttribute("transform", `translate(400 260) scale(${0.85 + 0.15 * p}) translate(-400 -260)`); panel.setAttribute("opacity", seg(t, 0, 0.3)); + crumb.textContent = LINE.slice(0, Math.round(LINE.length * seg(t, 2.4, 3.6))); + const slide = io(seg(t, 4.3, 5.0)); + cur = user == null ? 1 - slide : user ? 1 : 0; + const kx = 590 + 48 * cur; + knob.setAttribute("cx", kx); + track.setAttribute("fill", cur > 0.5 ? BLUE : "#fff"); + word.textContent = cur > 0.5 ? "On" : "Off"; + sw.setAttribute("aria-checked", cur > 0.5 ? "true" : "false"); + const q = user == null ? seg(t, 5.0, 5.8) : 0; + pulse.setAttribute("cx", kx); pulse.setAttribute("cy", 332); + pulse.setAttribute("r", 26 + 30 * oc(q)); pulse.setAttribute("stroke-opacity", q > 0 && q < 1 ? 1 - q : 0); + }; + }, + }; + + /* ---- 3. a compass needle points at three reasons to leave ---- */ + SC.compass = { + dur: 10, still: 9.6, + build(svg, api) { + const C = [400, 268]; + el("rect", { x: 24, y: 22, width: 752, height: 380, rx: 28, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + const D = [ + { label: "Not in my country", at: [152, 112], w: 232, col: YEL, pick: ["OpenClaw and", "Hermes Agent"] }, + { label: "Keep my data", at: [400, 72], w: 184, col: MINT, pick: ["Open source picks"] }, + { label: "Agents for work", at: [648, 112], w: 212, col: LIL, pick: ["Claude Cowork", "and Munder Difflin"] }, + ]; + D.forEach((d) => { d.ang = (Math.atan2(d.at[0] - C[0], C[1] - d.at[1]) * 180) / Math.PI; }); + const g = el("g", {}, svg); tf(g, C[0], C[1]); + const needle = compass(g, 104); + const chips = D.map((d, i) => { + const b = el("g", {}, svg), [x, y] = d.at; + el("rect", { x: x - d.w / 2 - 6, y: y - 30, width: d.w + 12, height: 60, rx: 30, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 6", class: "mg-ring" }, b); + const face = el("rect", { x: x - d.w / 2, y: y - 24, width: d.w, height: 48, rx: 24, fill: "#fff", stroke: INK, "stroke-width": 3 }, b); + txt(b, x, y + 8, d.label, { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + button(b, `${d.label}: ${d.pick.join(" ")}`, () => { pick = i; from = angle; pickAt = api.now(); api.seek(6.6); }); + const card = el("g", {}, svg), cx = x; + el("rect", { x: cx - 115, y: 424, width: 230, height: 96, rx: 18, fill: "#fff", stroke: INK, "stroke-width": 3 }, card); + el("circle", { cx: cx - 96, cy: 444, r: 7, fill: d.col, stroke: INK, "stroke-width": 2 }, card); + d.pick.forEach((s, j) => txt(card, cx, (d.pick.length === 1 ? 480 : 466) + j * 30, s, { "text-anchor": "middle", "font-family": MONO, "font-size": 18, "font-weight": 700 })); + return { face, card }; + }); + el("rect", { x: 140, y: 540, width: 520, height: 44, rx: 22, fill: SOFT }, svg); + txt(svg, 400, 569, "Tapping a direction points the needle there", { "text-anchor": "middle", "font-size": 19, "font-weight": 500 }); + let pick = -1, from = 0, pickAt = 0, angle = 0, last = 0; + const swings = [[0, 1.6, -330, D[0].ang], [3.0, 3.9, D[0].ang, D[1].ang], [5.2, 6.1, D[1].ang, D[2].ang]]; + return (t, now) => { + if (t < last) pick = -1; last = t; + if (pick >= 0) angle = from + (D[pick].ang - from) * ob(seg(now - pickAt, 0, 0.7)); + else { angle = swings[0][2]; swings.forEach(([a, b, f, to]) => { if (t >= a) angle = f + (to - f) * ob(seg(t, a, b)); }); } + needle.setAttribute("transform", `rotate(${angle})`); + const at = pick >= 0 ? pick : t >= swings[2][0] + 0.5 ? 2 : t >= swings[1][0] + 0.5 ? 1 : t >= 1.2 ? 0 : -1; + chips.forEach((c, i) => { + c.face.setAttribute("fill", i === at ? D[i].col : "#fff"); + const k = oc(seg(t, [1.4, 3.8, 6.0][i], [1.9, 4.3, 6.5][i])); + c.card.setAttribute("opacity", pick >= 0 ? 1 : k); c.card.setAttribute("transform", `translate(0 ${pick >= 0 ? 0 : 16 * (1 - k)})`); + }); + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + el("rect", { x: 64, y: 62, width: 176, height: 44, rx: 22, fill: LIL, stroke: INK, "stroke-width": 2.5 }, svg); + txt(svg, 152, 91, "Comparisons", { "text-anchor": "middle", "font-size": 20, "font-weight": 700 }); + txt(svg, 64, 210, "Meta Muse", { "font-size": 84, "font-weight": 700 }); + txt(svg, 64, 300, "alternatives", { "font-size": 84, "font-weight": 700 }); + el("path", { d: "M66 328 H520", stroke: YEL, "stroke-width": 14, "stroke-linecap": "round" }, svg); + txt(svg, 64, 388, "7 picks, open source and hosted", { "font-size": 30, "font-weight": 500, fill: MUTE }); + txt(svg, 64, 478, "Checked 30 Oct 2026", { "font-family": MONO, "font-size": 18, "font-weight": 500, fill: MUTE }); + const g = el("g", {}, svg); tf(g, 770, 290); + compass(g, 112).setAttribute("transform", "rotate(38)"); + 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/meta-muse-alternatives/sliders.png b/blog/src/assets/media/meta-muse-alternatives/sliders.png new file mode 100644 index 0000000000..3e14c27835 Binary files /dev/null and b/blog/src/assets/media/meta-muse-alternatives/sliders.png differ diff --git a/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/hero.png b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/hero.png new file mode 100644 index 0000000000..cc05e34094 Binary files /dev/null and b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/hero.png differ diff --git a/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/library.png b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/library.png new file mode 100644 index 0000000000..f3b835aaa8 Binary files /dev/null and b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/library.png differ diff --git a/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/meter.png b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/meter.png new file mode 100644 index 0000000000..a486a741c3 Binary files /dev/null and b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/meter.png differ diff --git a/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/motion.css b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/motion.css new file mode 100644 index 0000000000..cf1f22d5a9 --- /dev/null +++ b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Mistral Large 4 vs Claude Opus 5.5". 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/mistral-large-4-vs-claude-opus-5-5/motion.js b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/motion.js new file mode 100644 index 0000000000..4a88c828ac --- /dev/null +++ b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/motion.js @@ -0,0 +1,246 @@ +/* Bright coded scenes for "Mistral Large 4 vs Claude Opus 5.5". 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 }); + }; + + /* ---- a taxi meter, 280 by 200, drawn from its top left corner ---- */ + const meter = (p, color, label) => { + const g = el("g", {}, p); + el("rect", { x: 100, y: -26, width: 80, height: 32, rx: 9, fill: YEL, stroke: INK, "stroke-width": 3 }, g); + el("rect", { x: 0, y: 0, width: 280, height: 200, rx: 24, fill: color, stroke: INK, "stroke-width": 3 }, g); + el("rect", { x: 22, y: 24, width: 236, height: 96, rx: 14, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + const val = txt(g, 140, 91, "$0.00", { "text-anchor": "middle", "font-family": MONO, "font-size": 52, "font-weight": 700 }); + [0, 1, 2].forEach((i) => el("circle", { cx: 46 + i * 40, cy: 160, r: 12, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, g)); + const wheel = el("g", {}, g); + el("circle", { r: 21, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, wheel); + el("path", { d: "M-13 0 H13 M0 -13 V13", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, wheel); + txt(g, 140, 248, label, { "text-anchor": "middle", "font-family": MONO, "font-size": 22, "font-weight": 700 }); + const set = (s, a = 0) => { val.textContent = s; tf(wheel, 228, 160, 1, a); }; + set("$0.00"); + return { g, set }; + }; + + const SC = {}; + + /* ---- 1. two lanes of a running track ---- */ + SC.track = { + dur: 6.5, still: 6.5, + build(svg, api) { + txt(svg, 44, 62, "Coding Agent Index", { "font-size": 32, "font-weight": 700 }); + const X0 = 90, PX = 7.5, xv = (v) => X0 + v * PX; + const LANES = [ + ["Claude Opus 5.5", BLUE, 62, "Artificial Analysis, 28 Oct 2026", 4.2], + ["Mistral Large 4", LIL, 48, "Mistral's post, 29 Oct 2026", 3.6], + ]; + let pinned = -1; + const tip = strip(svg, 524, 720); + const lanes = LANES.map(([name, col, val, src, end], i) => { + const y = 110 + i * 160, g = el("g", {}, svg), cy = y + 92; + el("rect", { x: 34, y: y - 8, width: 732, height: 146, rx: 26, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 7", class: "mg-ring" }, g); + el("rect", { x: 44, y, width: 712, height: 130, rx: 20, fill: SOFT }, g); + txt(g, 72, y + 44, name, { "font-family": MONO, "font-size": 22, "font-weight": 700 }); + const band = el("path", { d: "", stroke: "#fff", "stroke-width": 26, "stroke-linecap": "round", fill: "none" }, g); + const dash = el("path", { d: "", stroke: INK, "stroke-width": 2, "stroke-dasharray": "2 12", "stroke-linecap": "round", fill: "none" }, g); + const trail = el("path", { d: "", stroke: col, "stroke-width": 12, "stroke-linecap": "round", fill: "none" }, g); + const mk = el("g", {}, g); + el("circle", { r: 22, fill: col, stroke: INK, "stroke-width": 3 }, mk); + el("circle", { r: 6, fill: "#fff", stroke: INK, "stroke-width": 2 }, mk); + const chip = el("rect", { x: 0, y: cy - 22, width: 58, height: 44, rx: 14, fill: "#fff" }, g); + const num = txt(g, 0, cy + 11, "", { "text-anchor": "middle", "font-size": 30, "font-weight": 700 }); + button(g, `${name}, ${val}: ${src}`, () => { pinned = i; api.poke(); }); + return { band, dash, trail, mk, chip, num, cy, val, end, src, d: i * 0.15 }; + }); + el("path", { d: `M${xv(0)} 462 H${xv(84)}`, stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, svg); + for (let v = 0; v <= 80; v += 10) el("path", { d: `M${xv(v)} 455 V469`, stroke: INK, "stroke-width": v % 50 === 0 ? 3 : 2, "stroke-linecap": "round" }, svg); + const pins = lanes.map((l) => el("path", { d: `M${xv(l.val)} 462 V462`, stroke: MUTE, "stroke-width": 2, "stroke-dasharray": "3 6" }, svg)); + return (t) => { + lanes.forEach((l, i) => { + const k = io(seg(t, 0.2 + l.d, 1.3 + l.d)), xe = X0 + (xv(84) - X0) * k; + const lane = `M${X0} ${l.cy} H${Math.max(X0 + 0.01, xe)}`; + l.band.setAttribute("d", lane); l.dash.setAttribute("d", lane); + l.band.setAttribute("opacity", k > 0 ? 1 : 0); l.dash.setAttribute("opacity", k > 0 ? 1 : 0); + const r = oc(seg(t, 1.3, l.end)), v = l.val * r, x = xv(v), stop = t >= l.end; + l.trail.setAttribute("d", `M${X0} ${l.cy} H${Math.max(X0 + 0.01, x)}`); + const pop = ob(seg(t, l.end, l.end + 0.4)); + tf(l.mk, x, l.cy, (k > 0.05 ? 1 : 0) * (stop ? 1 + 0.18 * Math.sin(pop * Math.PI) : 1)); + l.num.setAttribute("x", x + 59); l.chip.setAttribute("x", x + 30); l.chip.setAttribute("opacity", t >= 1.3 ? 1 : 0); + l.num.textContent = t >= 1.3 ? String(Math.round(v)) : ""; + l.num.setAttribute("font-size", stop ? 32 : 26); + const g = oc(seg(t, l.end, l.end + 0.6)); + pins[i].setAttribute("d", `M${xv(l.val)} ${l.cy + 24} V${l.cy + 24 + (462 - l.cy - 24) * g}`); + pins[i].setAttribute("opacity", g); + }); + tip.setAttribute("fill", pinned < 0 ? MUTE : INK); + tip.textContent = pinned < 0 ? "Tapping a lane shows its source" : LANES[pinned][3]; + }; + }, + }; + + /* ---- 2. two taxi meters, one million tokens ---- */ + SC.meter = { + dur: 7.5, still: 7.5, + build(svg, api) { + const MODES = [["1M output tokens", 2.1, 20], ["1M input tokens", 0.7, 4]]; + let mode = 0; + el("rect", { x: 190, y: 40, width: 420, height: 68, rx: 34, fill: "#fff" }, svg); + const bar = el("rect", { x: 190, y: 40, width: 68, height: 68, rx: 34, fill: SKY }, svg); + el("rect", { x: 190, y: 40, width: 420, height: 68, rx: 34, fill: "none", stroke: INK, "stroke-width": 3 }, svg); + const count = txt(svg, 400, 84, MODES[0][0], { "text-anchor": "middle", "font-family": MONO, "font-size": 26, "font-weight": 700 }); + const left = meter(svg, LIL, "Mistral Large 4"), right = meter(svg, BLUE, "Claude Opus 5.5"); + tf(left.g, 90, 186); tf(right.g, 430, 186); + const sw = el("g", {}, svg); + el("rect", { x: 270, y: 478, width: 260, height: 72, rx: 36, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 7", class: "mg-ring" }, sw); + el("rect", { x: 280, y: 486, width: 240, height: 56, rx: 28, fill: SOFT, stroke: INK, "stroke-width": 2.5 }, sw); + const knob = el("rect", { x: 285, y: 491, width: 115, height: 46, rx: 23, fill: YEL, stroke: INK, "stroke-width": 2 }, sw); + txt(sw, 342, 521, "output", { "text-anchor": "middle", "font-family": MONO, "font-size": 19, "font-weight": 700 }); + txt(sw, 458, 521, "input", { "text-anchor": "middle", "font-family": MONO, "font-size": 19, "font-weight": 700 }); + const label = () => { sw.setAttribute("aria-label", mode ? "Showing input tokens. Switch to output tokens" : "Showing output tokens. Switch to input tokens"); sw.setAttribute("aria-pressed", mode ? "true" : "false"); }; + button(sw, "", () => { mode = 1 - mode; label(); api.seek(0.01); }); + label(); + const money = (v, end, done) => (done && Number.isInteger(end) ? `$${end}` : `$${v.toFixed(2)}`); + return (t) => { + const [name, a, b] = MODES[mode]; + count.textContent = name; + bar.setAttribute("width", 68 + 352 * io(seg(t, 0.2, 1.2))); + knob.setAttribute("x", mode ? 400 : 285); + const ka = oc(seg(t, 1.3, 3.0)), kb = seg(t, 1.3, 5.8), kbe = 1 - Math.pow(1 - kb, 1.6); + left.set(money(a * ka, a, ka >= 1), ka * 900); + right.set(money(b * kbe, b, kb >= 1), kbe * 2520); + }; + }, + }; + + /* ---- 3. two shelves: one book leaves, one stays behind glass ---- */ + SC.library = { + dur: 7.5, still: 7.5, + build(svg, api) { + const shelf = (x, name) => { + txt(svg, x + 150, 96, name, { "text-anchor": "middle", "font-family": MONO, "font-size": 24, "font-weight": 700 }); + }; + shelf(50, "Mistral Large 4"); shelf(450, "Claude Opus 5.5"); + // the reading card sits behind the right shelf until it slides out + const card = el("g", {}, svg); + el("rect", { x: 530, y: 0, width: 140, height: 104, rx: 12, fill: "#fff", stroke: INK, "stroke-width": 3 }, card); + [24, 46, 68].forEach((y, i) => el("rect", { x: 548, y, width: [96, 80, 100][i], height: 10, rx: 5, fill: SOFT, stroke: INK, "stroke-width": 1.5 }, card)); + const tagB = el("g", {}, card); + el("rect", { x: 610, y: 82, width: 76, height: 40, rx: 12, fill: YEL, stroke: INK, "stroke-width": 2.5 }, tagB); + txt(tagB, 648, 110, "API", { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); + const books = []; + [50, 450].forEach((x, s) => { + el("rect", { x, y: 120, width: 300, height: 212, rx: 14, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + el("rect", { x, y: 300, width: 300, height: 16, fill: YEL, stroke: INK, "stroke-width": 2.5 }, svg); + [[x + 40, 30, 116, SKY], [x + 74, 30, 132, MINT], [x + 214, 30, 106, s ? LIL : BLUE]].forEach(([bx, w, h, c]) => el("rect", { x: bx, y: 300 - h, width: w, height: h, rx: 4, fill: c, stroke: INK, "stroke-width": 2.5 }, svg)); + }); + el("path", { d: "M540 332 H660", stroke: INK, "stroke-width": 5, "stroke-linecap": "round" }, svg); + // the thick books, drawn around their centre + const book = (col) => { const g = el("g", {}, svg); el("rect", { x: -40, y: -76, width: 80, height: 152, rx: 6, fill: col, stroke: INK, "stroke-width": 3 }, g); el("path", { d: "M-40 -50 H40 M-40 50 H40", stroke: INK, "stroke-width": 2.5 }, g); el("rect", { x: -20, y: -18, width: 40, height: 36, rx: 4, fill: "#fff", stroke: INK, "stroke-width": 2 }, g); return g; }; + // tote bag, back then book then front + const tote = el("g", {}, svg); + const handle = el("path", { d: "M160 432 Q160 380 200 380 Q240 380 240 432", stroke: INK, "stroke-width": 5, fill: "none", "stroke-linecap": "round" }, tote); + const bookA = book(LIL), bookB = book(BLUE); + const front = el("g", {}, svg); + el("path", { d: "M118 432 H282 L270 560 H130 Z", fill: MINT, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, front); + const tagA = el("g", {}, svg); + el("path", { d: "M240 420 L304 446", stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, tagA); + el("rect", { x: 292, y: 440, width: 132, height: 42, rx: 12, fill: YEL, stroke: INK, "stroke-width": 2.5 }, tagA); + txt(tagA, 358, 468, "Download", { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); + const glass = el("g", {}, svg); + el("rect", { x: 462, y: 132, width: 276, height: 166, rx: 8, fill: "none", stroke: INK, "stroke-width": 2.5 }, glass); + const shine = el("path", { d: "M500 280 L560 150 M530 280 L590 150", stroke: SKY, "stroke-width": 7, "stroke-linecap": "round" }, glass); + const hit = el("g", {}, svg); + el("rect", { x: 10, y: 10, width: 780, height: 580, rx: 20, fill: "#fff", "fill-opacity": 0, stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 7", class: "mg-ring" }, hit); + button(hit, "Replay the shelves", () => api.seek(0.01)); + return (t) => { + // left: lift, then drop into the tote + const lift = io(seg(t, 0.8, 1.4)), drop = seg(t, 1.4, 2.3), dd = drop * drop; + const ax = 200, ay = 224 - 22 * lift + (462 - 224 + 22) * dd; + tf(bookA, ax + 40 * Math.sin(drop * Math.PI), ay, 1 + 0.05 * lift * (1 - drop), 14 * Math.sin(drop * Math.PI)); + const land = seg(t, 2.3, 2.8), sq = Math.sin(land * Math.PI) * (1 - land); + front.setAttribute("transform", `translate(200 560) scale(${1 + 0.06 * sq} ${1 - 0.08 * sq}) translate(-200 -560)`); + handle.setAttribute("transform", `translate(0 ${10 * sq})`); + const sw = seg(t, 2.3, 4.3); + tagA.setAttribute("transform", `rotate(${Math.sin(sw * Math.PI * 4) * 14 * (1 - sw)} 240 420)`); + // right: the book presses on the glass, then the card slides out + const nudge = Math.sin(seg(t, 3.0, 3.7) * Math.PI); + tf(bookB, 600 + 5 * Math.sin(seg(t, 3.0, 3.7) * Math.PI * 4), 224, 1 + 0.06 * nudge); + shine.setAttribute("transform", `translate(${120 * io(seg(t, 3.1, 3.9))} 0)`); + const out = ob(seg(t, 3.9, 4.9)); + card.setAttribute("transform", `translate(0 ${220 + 186 * out})`); + const tp = ob(seg(t, 4.8, 5.3)); + tagB.setAttribute("transform", `translate(648 102) scale(${tp}) translate(-648 -102)`); + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + el("rect", { x: 60, y: 60, width: 168, height: 40, rx: 20, fill: YEL, stroke: INK, "stroke-width": 2.5 }, svg); + txt(svg, 144, 87, "Comparisons", { "text-anchor": "middle", "font-size": 19, "font-weight": 700 }); + txt(svg, 60, 182, "Mistral Large 4", { "font-size": 60, "font-weight": 700 }); + txt(svg, 60, 248, "vs", { "font-size": 60, "font-weight": 700, fill: MUTE }); + txt(svg, 60, 314, "Claude Opus 5.5", { "font-size": 60, "font-weight": 700 }); + el("path", { d: "M62 340 H300", stroke: YEL, "stroke-width": 12, "stroke-linecap": "round" }, svg); + txt(svg, 60, 396, "Open weights or top scores", { "font-size": 27, "font-weight": 500, fill: MUTE }); + txt(svg, 60, 480, "Checked 29 Oct 2026", { "font-size": 18, "font-weight": 500, fill: MUTE }); + const a = meter(svg, LIL, "Mistral Large 4"), b = meter(svg, BLUE, "Claude Opus 5.5"); + a.set("$2.10", 0); b.set("$20", 0); + a.g.setAttribute("transform", "translate(560 210) scale(0.62)"); + b.g.setAttribute("transform", "translate(752 210) scale(0.62)"); + 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); }; + // with reduced motion an interaction redraws the still frame instead of playing + const api = { now: clock, seek: (s) => { if (calm) return frame(); off = s - clock(); held = false; tick(); }, poke: () => { if (calm) return frame(); 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/mistral-large-4-vs-claude-opus-5-5/track.png b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/track.png new file mode 100644 index 0000000000..7d7cc48597 Binary files /dev/null and b/blog/src/assets/media/mistral-large-4-vs-claude-opus-5-5/track.png differ diff --git a/blog/src/assets/media/mistral-large-4/crate.png b/blog/src/assets/media/mistral-large-4/crate.png index 5b7838b32d..301b25c48a 100644 Binary files a/blog/src/assets/media/mistral-large-4/crate.png and b/blog/src/assets/media/mistral-large-4/crate.png differ diff --git a/blog/src/assets/media/mistral-large-4/hero.png b/blog/src/assets/media/mistral-large-4/hero.png index eebb6d909c..ba3b70d63e 100644 Binary files a/blog/src/assets/media/mistral-large-4/hero.png and b/blog/src/assets/media/mistral-large-4/hero.png differ diff --git a/blog/src/assets/media/mistral-large-4/motion.js b/blog/src/assets/media/mistral-large-4/motion.js index e61ef31df1..2f7b4a72f7 100644 --- a/blog/src/assets/media/mistral-large-4/motion.js +++ b/blog/src/assets/media/mistral-large-4/motion.js @@ -89,11 +89,11 @@ }, }; - /* ---- 2. a crate rolls in on a trolley; its delivery slip says Coming soon twice while a calendar tears off days ---- */ + /* ---- 2. a crate rolls in on a trolley; its delivery slip says Released twice while a calendar tears off days to 29 ---- */ SC.crate = { dur: 11.2, still: 9, build(svg, api) { - txt(svg, 44, 62, "The weights are not out yet", { "font-size": 32, "font-weight": 700 }); + txt(svg, 44, 62, "The weights are out", { "font-size": 32, "font-weight": 700 }); txt(svg, 756, 60, "tap the crate", { "text-anchor": "end", "font-size": 20, fill: MUTE, "font-weight": 500 }); el("path", { d: "M44 480 H756", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg); /* tear-off calendar */ @@ -105,7 +105,7 @@ el("path", { d: "M548 168 V128 Q548 112 564 112 H716 Q732 112 732 128 V168 Z", fill: SKY, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, svg); txt(svg, 640, 156, "October", { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); [594, 686].forEach((x) => el("rect", { x: x - 6, y: 96, width: 12, height: 26, rx: 6, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg)); - const notes = [["VentureBeat: Oct. 27", "#fff", 346, 6.3], ["Mistral: end of month", YEL, 398, 7.8]].map(([s, fill, y, at]) => ({ g: pill(svg, s, fill), y, at })); + const notes = [["Weights out", YEL, 346, 7]].map(([s, fill, y, at]) => ({ g: pill(svg, s, fill), y, at })); /* trolley and crate */ const tr = el("g", {}, svg); el("path", { d: "M84 438 V262 Q84 236 60 236 H46", stroke: INK, "stroke-width": 6, fill: "none", "stroke-linecap": "round" }, tr); @@ -121,11 +121,12 @@ el("path", { d: "M-140 -110 H140", stroke: SOFT, "stroke-width": 3, "stroke-linecap": "round" }, cr); txt(cr, -140, -137, "weights", { "font-size": 22, "font-weight": 700 }); txt(cr, -140, -69, "licence", { "font-size": 22, "font-weight": 700 }); - const stamps = [[-144, -3], [-76, 2.5]].map(([y, rot]) => ({ g: pill(cr, "Coming soon", LIL, { rx: 10 }), y, rot })); + const stamps = [[-144, -3], [-76, 2.5]].map(([y, rot]) => ({ g: pill(cr, "Released", LIL, { rx: 10 }), y, rot })); el("rect", { x: -192, y: -269, width: 384, height: 276, rx: 18, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7", class: "mg-ring" }, cr); - const cap = strip(svg, 512, 700); + const cap = strip(svg, 512, 740); let poked = -99; - button(cr, "The crate is closed. Weights and licence both read Coming soon.", () => { poked = api.now(); api.poke(); }); + const OPEN = "The crate is open. Weights and licence were released on 29 Oct 2026."; + button(cr, OPEN, () => { poked = api.now(); api.poke(); }); return (t, now) => { const w = now - poked, shake = w >= 0 && w < 0.9 ? Math.sin(w * 30) * 3 * (1 - w / 0.9) : 0; const roll = oc(seg(t, 0.3, 1.3)) - io(seg(t, 10.3, 11)), dx = -580 * (1 - roll); @@ -133,47 +134,43 @@ wheels.forEach((wh) => tf(wh.g, wh.x, 463, 1, (dx / 15) * 57.3)); cr.setAttribute("transform", `translate(293 430) rotate(${shake})`); stamps.forEach((s, i) => { const k = seg(t, 1.8 + i * 0.7, 2.1 + i * 0.7); s.g.setAttribute("opacity", k <= 0 ? 0 : 1); tf(s.g, 76, s.y, 2.2 - 1.2 * ob(k), s.rot); }); - let f = t < 3.2 || t > 10.6 ? 0 : Math.min(21, (t - 3.2) / 0.14); - if (t >= 7 && t <= 10.6) f = 21 + Math.min(4, (t - 7) / 0.15); + const f = t < 3.2 || t > 10.6 ? 0 : Math.min(23, (t - 3.2) / 0.15); const day = 6 + Math.floor(f), fr = f - Math.floor(f), moving = fr > 0 && day > 6; num.textContent = day; old.textContent = day - 1; leaf.setAttribute("transform", `translate(640 168) scale(1 ${moving ? 1 - seg(fr, 0, 0.8) : 0})`); leaf.setAttribute("opacity", moving ? 1 : 0); notes.forEach((n) => { const k = ob(seg(t, n.at, n.at + 0.35)) * (1 - seg(t, 10.3, 10.7)); tf(n.g, 640, n.y, cl(k, 0, 1.05)); n.g.setAttribute("opacity", k <= 0.01 ? 0 : 1); }); - cap.textContent = w >= 0 && w < 3 ? "Not yet. You can only rent it through the API for now." : "Mistral's model page on 6 Oct 2026: both read Coming soon"; + cap.textContent = w >= 0 && w < 3 ? OPEN : "Mistral's release post, 29 Oct 2026: weights and licence out"; }; }, }; - /* ---- 3. three price tags on a line; a pencil strikes the higher price and the lower one drops in ---- */ + /* ---- 3. three price tags on a line; each price drops in; tap a tag for its 6 Oct price ---- */ SC.tags = { dur: 11.6, still: 9, build(svg, api) { txt(svg, 44, 62, "Price per million tokens", { "font-size": 32, "font-weight": 700 }); - txt(svg, 44, 98, "Mistral's model page, checked 6 Oct 2026", { "font-size": 20, "font-weight": 500, fill: MUTE }); + txt(svg, 44, 98, "Mistral's release post, 29 Oct 2026", { "font-size": 20, "font-weight": 500, fill: MUTE }); txt(svg, 756, 60, "tap a tag", { "text-anchor": "end", "font-size": 20, fill: MUTE, "font-weight": 500 }); el("path", { d: "M40 142 Q400 166 760 142", stroke: INK, "stroke-width": 2.5, fill: "none", "stroke-linecap": "round" }, svg); - const IT = [["Input", "$0.68", "$1.36", YEL], ["Cached input", "$0.07", "$0.14", SKY], ["Output", "$2.09", "$4.18", MINT]]; - const X = [150, 400, 650], LY = [148, 154, 148], S = (i) => 1.8 + i * 2; - const LINES = IT.map(([n, p, o]) => `${n}: ${p} listed, ${o} struck through`); + const IT = [["Input", "$0.70", "$0.68", YEL], ["Cached input", "$0.07", "$0.07", SKY], ["Output", "$2.10", "$2.09", MINT]]; + const X = [150, 400, 650], LY = [148, 154, 148], S = (i) => 1.4 + i * 1.6; + const LINES = IT.map(([n, p]) => `${n}: ${p} per million tokens`); + const PIN = IT.map(([n, p, o]) => `${n}: ${p} on 29 Oct, ${o} on 6 Oct`); + const SUM = "Input $0.70, cached input $0.07, output $2.10"; let pinned = -1; const tags = IT.map(([name, price, was, col], i) => { const g = el("g", {}, svg); el("rect", { x: -102, y: -2, width: 204, height: 327, rx: 22, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7", class: "mg-ring" }, g); el("path", { d: "M-95 52 L-46 6 H46 L95 52 V302 Q95 318 79 318 H-79 Q-95 318 -95 302 Z", fill: col, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g); txt(g, 0, 96, name, { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); - txt(g, 0, 156, was, { "text-anchor": "middle", "font-size": 34, "font-weight": 700 }); - const strike = el("path", { stroke: INK, "stroke-width": 4, "stroke-linecap": "round", fill: "none" }, g); + const prev = pill(g, `${was} on 6 Oct`, "#fff"), tt = prev.querySelector("text"), tr = prev.querySelector("rect"); + tt.setAttribute("font-size", 18); const tw = tt.getComputedTextLength() + 28; tr.setAttribute("x", -tw / 2); tr.setAttribute("width", tw); const plate = el("g", {}, g); el("rect", { x: -80, y: -40, width: 160, height: 80, rx: 16, fill: "#fff", stroke: INK, "stroke-width": 3 }, plate); txt(plate, 0, 17, price, { "text-anchor": "middle", "font-size": 48, "font-weight": 700 }); - const pen = el("g", {}, g); - el("rect", { x: 16, y: -7, width: 60, height: 14, fill: BLUE, stroke: INK, "stroke-width": 2.5 }, pen); - el("rect", { x: 76, y: -7, width: 14, height: 14, rx: 3, fill: LIL, stroke: INK, "stroke-width": 2.5 }, pen); - el("path", { d: "M0 0 L16 -7 V7 Z", fill: "#fff", stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round" }, pen); - el("path", { d: "M0 0 L6 -2.6 V2.6 Z", fill: INK }, pen); - button(g, LINES[i], () => { pinned = i; poked[i] = api.now(); api.poke(); }); - return { g, strike, plate, pen }; + button(g, `${name}: ${price} on 29 Oct 2026, ${was} on 6 Oct 2026`, () => { pinned = i; poked[i] = api.now(); api.poke(); }); + return { g, prev, plate }; }); const poked = [-99, -99, -99]; X.forEach((x, i) => el("rect", { x: x - 8, y: LY[i] - 22, width: 16, height: 42, rx: 6, fill: LIL, stroke: INK, "stroke-width": 2.5, "pointer-events": "none" }, svg)); @@ -185,16 +182,14 @@ const te = Math.max(0, t - 0.15 * i), w = now - poked[i]; const a = 10 * Math.exp(-2.2 * te) * Math.sin(6 * te) + (w >= 0 && w < 3 ? 8 * Math.exp(-2.5 * w) * Math.sin(8 * w) : 0); k.g.setAttribute("transform", `translate(${X[i]} ${LY[i]}) rotate(${a})`); - const s = seg(t, S(i), S(i) + 0.55) * (1 - out), px = -58 + 116 * s; - k.strike.setAttribute("d", `M-58 148 L${px} ${148 - 8 * s}`); k.strike.setAttribute("opacity", s > 0 ? 1 : 0); - tf(k.pen, px, 148 - 8 * s, 1, -28 + Math.sin(t * 40) * 3 * (s > 0 && s < 1 ? 1 : 0)); - k.pen.setAttribute("opacity", seg(t, S(i) - 0.25, S(i) - 0.1) * (1 - seg(t, S(i) + 0.6, S(i) + 0.75))); - const p = seg(t, S(i) + 0.75, S(i) + 1.15); + const o = poked[i] > -99 ? ob(seg(w, 0, 0.35)) : 0; + tf(k.prev, 0, 160, cl(o, 0, 1.1)); k.prev.setAttribute("opacity", o <= 0.01 ? 0 : 1); + const p = seg(t, S(i), S(i) + 0.4); tf(k.plate, 0, 250 - 80 * (1 - ob(p))); k.plate.setAttribute("opacity", seg(p, 0, 0.25) * (1 - out)); - if (t >= S(i) + 0.3) last = i; + if (t >= S(i) + 0.1) last = i; }); - cap.textContent = pinned >= 0 ? LINES[pinned] : t > 8.4 && t < 10.6 ? "The page did not say how long the lower prices last" : last < 0 || t >= 10.6 ? "A higher price was struck through beside each one" : LINES[last]; + cap.textContent = pinned >= 0 ? PIN[pinned] : last < 0 || t >= 6.6 ? SUM : LINES[last]; }; }, }; @@ -258,7 +253,7 @@ el("path", { d: "M66 226 H606", stroke: YEL, "stroke-width": 14, "stroke-linecap": "round" }, svg); txt(svg, 64, 288, "Le Chonk: size, price, scores, weights", { "font-size": 25, "font-weight": 500, fill: MUTE }); el("rect", { x: 64, y: 326, width: 290, height: 52, rx: 26, fill: SOFT }, svg); - txt(svg, 209, 360, "Checked 6 Oct 2026", { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); + txt(svg, 209, 360, "Checked 29 Oct 2026", { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); /* one chunky kettlebell */ const k = el("g", { transform: "translate(776 396)" }, svg); el("ellipse", { cx: 0, cy: 96, rx: 118, ry: 10, fill: SOFT }, k); diff --git a/blog/src/assets/media/mistral-large-4/tags.png b/blog/src/assets/media/mistral-large-4/tags.png index 5fdea957fc..9379f43ca9 100644 Binary files a/blog/src/assets/media/mistral-large-4/tags.png and b/blog/src/assets/media/mistral-large-4/tags.png differ diff --git a/blog/src/assets/media/pi-vs-claude-code/box.png b/blog/src/assets/media/pi-vs-claude-code/box.png new file mode 100644 index 0000000000..7962689596 Binary files /dev/null and b/blog/src/assets/media/pi-vs-claude-code/box.png differ diff --git a/blog/src/assets/media/pi-vs-claude-code/gate.png b/blog/src/assets/media/pi-vs-claude-code/gate.png new file mode 100644 index 0000000000..7ac1973eab Binary files /dev/null and b/blog/src/assets/media/pi-vs-claude-code/gate.png differ diff --git a/blog/src/assets/media/pi-vs-claude-code/hero.png b/blog/src/assets/media/pi-vs-claude-code/hero.png new file mode 100644 index 0000000000..909d4d2663 Binary files /dev/null and b/blog/src/assets/media/pi-vs-claude-code/hero.png differ diff --git a/blog/src/assets/media/pi-vs-claude-code/motion.css b/blog/src/assets/media/pi-vs-claude-code/motion.css new file mode 100644 index 0000000000..c20c172be2 --- /dev/null +++ b/blog/src/assets/media/pi-vs-claude-code/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "Pi vs Claude 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/pi-vs-claude-code/motion.js b/blog/src/assets/media/pi-vs-claude-code/motion.js new file mode 100644 index 0000000000..4cfbdfa7fb --- /dev/null +++ b/blog/src/assets/media/pi-vs-claude-code/motion.js @@ -0,0 +1,216 @@ +/* Bright coded scenes for "Pi vs Claude 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(); } }); + }; + /* an on/off switch that eases between states; under reduced motion it jumps */ + const toggle = (api, start = 0) => { + const s = { from: start, to: start, at: -99, v: start, used: false }; + s.flip = (seed) => { s.from = s.used ? s.v : seed; s.to = s.from > 0.5 ? 0 : 1; s.at = api.now(); s.used = true; if (api.calm) api.redraw(); else api.poke(); }; + s.get = (now, dur = 0.6) => (s.v = api.calm ? s.to : s.from + (s.to - s.from) * oc(seg(now - s.at, 0, dur))); + return s; + }; + + const SC = {}; + + /* ---- 1. what comes in the box ---- */ + SC.box = { + dur: 9, still: 7, + build(svg, api) { + const openBox = (x, w, flap, name) => { + el("path", { d: `M${x} 150 L${x - 22} 98 H${x + w / 2 - 22} L${x + w / 2} 150 Z`, fill: flap, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, svg); + el("path", { d: `M${x + w / 2} 150 L${x + w / 2 + 22} 98 H${x + w + 22} L${x + w} 150 Z`, fill: flap, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, svg); + el("rect", { x, y: 150, width: w, height: 390, rx: 10, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + txt(svg, x + w / 2, 70, name, { "text-anchor": "middle", "font-family": MONO, "font-size": 28, "font-weight": 700 }); + }; + openBox(50, 310, YEL, "Claude Code"); + openBox(440, 310, LIL, "Pi"); + const card = (p, x, y, w, label, fill, mono) => { + const g = el("g", {}, p); + el("rect", { x, y, width: w, height: 54, rx: 12, fill, stroke: INK, "stroke-width": 2.5 }, g); + txt(g, x + w / 2, y + 35, label, { "text-anchor": "middle", "font-size": 22, "font-weight": 700, "font-family": mono ? MONO : SANS }); + return g; + }; + ["Read", "Write", "Edit", "Bash"].forEach((s, i) => card(svg, i % 2 ? 602 : 458, i < 2 ? 408 : 472, 130, s, SKY, true)); + const cc = ["Plan mode", "Subagents", "Permission modes", "Hooks", "MCP"].map((s, i) => ({ g: card(svg, 75, 472 - i * 64, 260, s, [SKY, MINT, YEL, BLUE, LIL][i]), d: 0.5 + i * 0.8 })); + const slot = el("g", {}, svg); + el("rect", { x: 457, y: 310, width: 276, height: 78, rx: 16, fill: "none", stroke: INK, "stroke-width": 2, class: "mg-ring" }, slot); + const dash = el("rect", { x: 465, y: 318, width: 260, height: 62, rx: 12, fill: "#fff", stroke: MUTE, "stroke-width": 2.5, "stroke-dasharray": "9 7" }, slot); + txt(slot, 595, 356, "Your extension", { "text-anchor": "middle", "font-size": 21, "font-weight": 600, fill: MUTE }); + const ext = el("g", {}, slot); + el("rect", { x: 465, y: 318, width: 260, height: 62, rx: 12, fill: MINT, stroke: INK, "stroke-width": 2.5 }, ext); + txt(ext, 595, 357, "Extension", { "text-anchor": "middle", "font-size": 23, "font-weight": 700 }); + const sw = toggle(api); + button(slot, "Drop an extension card into the empty slot", () => sw.flip(0)); + return (t, now) => { + const out = seg(t, 8.2, 8.9); + cc.forEach(({ g, d }) => { const k = ob(seg(t, d, d + 0.55)); g.setAttribute("transform", `translate(0 ${-330 * (1 - k) - 40 * io(out)})`); g.setAttribute("opacity", seg(t, d, d + 0.1) * (1 - out)); }); + dash.setAttribute("stroke-dashoffset", -t * 14); + const v = sw.get(now, 0.5); + ext.setAttribute("opacity", cl(v * 3)); ext.setAttribute("transform", `translate(0 ${-200 * (1 - (api.calm ? v : ob(v)))})`); + }; + }, + }; + + /* ---- 2. one cable against a power strip ---- */ + SC.plugs = { + dur: 10, still: 8, + build(svg, api) { + el("path", { d: "M400 60 V560", stroke: SOFT, "stroke-width": 4, "stroke-linecap": "round" }, svg); + const nameCard = (x, label, fill) => { el("rect", { x, y: 66, width: 260, height: 74, rx: 16, fill, stroke: INK, "stroke-width": 3 }, svg); txt(svg, x + 130, 114, label, { "text-anchor": "middle", "font-family": MONO, "font-size": 28, "font-weight": 700 }); }; + nameCard(70, "Claude Code", YEL); + nameCard(470, "Pi", LIL); + /* left: one cable, one socket */ + const cable = el("path", { d: "M200 140 C200 230 130 260 200 348", stroke: INK, "stroke-width": 5, fill: "none", "stroke-linecap": "round" }, svg); + const L = cable.getTotalLength(); cable.setAttribute("stroke-dasharray", L); + const plug = el("g", {}, svg); + el("path", { d: "M-10 34 V48 M10 34 V48", stroke: INK, "stroke-width": 5, "stroke-linecap": "round" }, plug); + el("rect", { x: -28, y: 0, width: 56, height: 36, rx: 8, fill: BLUE, stroke: INK, "stroke-width": 3 }, plug); + const sock = el("rect", { x: 120, y: 384, width: 160, height: 64, rx: 16, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + txt(svg, 200, 494, "Claude models", { "text-anchor": "middle", "font-family": MONO, "font-size": 22, "font-weight": 700 }); + /* right: a strip of six sockets */ + el("path", { d: "M520 140 V176", stroke: INK, "stroke-width": 5, "stroke-linecap": "round" }, svg); + const bar = el("g", {}, svg); + el("rect", { x: 470, y: 166, width: 100, height: 358, rx: 22, fill: "none", stroke: INK, "stroke-width": 2, class: "mg-ring" }, bar); + el("rect", { x: 480, y: 176, width: 80, height: 338, rx: 18, fill: SOFT, stroke: INK, "stroke-width": 3 }, bar); + const ys = [205, 261, 317, 373, 429, 485]; + const names = ["Anthropic", "OpenAI", "Google", "Mistral", "Ollama"], cols = [YEL, MINT, SKY, BLUE, LIL]; + const plugs = names.map((s, i) => { + const g = el("g", {}, svg), c = ys[i]; + el("path", { d: `M546 ${c - 7} H566 M546 ${c + 7} H566`, stroke: INK, "stroke-width": 5, "stroke-linecap": "round" }, g); + el("rect", { x: 564, y: c - 17, width: 40, height: 34, rx: 8, fill: cols[i], stroke: INK, "stroke-width": 3 }, g); + el("path", { d: `M604 ${c} H616`, stroke: INK, "stroke-width": 5, "stroke-linecap": "round" }, g); + txt(g, 624, c + 7, s, { "font-family": MONO, "font-size": 20, "font-weight": 700 }); + return { g, d: 1.8 + i * 0.75 }; + }); + const socks = ys.map((c) => { const r = el("rect", { x: 498, y: c - 18, width: 44, height: 36, rx: 8, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, bar); el("path", { d: `M510 ${c - 7} H530 M510 ${c + 7} H530`, stroke: INK, "stroke-width": 4, "stroke-linecap": "round" }, bar); return r; }); + svg.appendChild(bar); + plugs.forEach((p) => svg.appendChild(p.g)); + const tag = el("g", {}, svg); + el("rect", { x: 480, y: 538, width: 240, height: 40, rx: 20, fill: YEL, stroke: INK, "stroke-width": 2.5 }, tag); + txt(tag, 600, 565, "15 plus providers", { "text-anchor": "middle", "font-size": 20, "font-weight": 700 }); + button(bar, "Replay the plugs going into the strip", () => api.seek(1.8)); + return (t) => { + const f = 1 - seg(t, 9.2, 9.9), k = io(seg(t, 0.3, 1.4)), pt = cable.getPointAtLength(L * k), seat = 4 * oc(seg(t, 1.4, 1.6)); + cable.setAttribute("stroke-dashoffset", L * (1 - k)); cable.setAttribute("opacity", f); + tf(plug, pt.x, pt.y + seat); plug.setAttribute("opacity", seg(t, 0.3, 0.45) * f); + sock.setAttribute("fill", t >= 1.5 && f > 0.5 ? MINT : "#fff"); + plugs.forEach((p, i) => { + const m = oc(seg(t, p.d, p.d + 0.45)), click = Math.sin(seg(t, p.d + 0.45, p.d + 0.62) * Math.PI) * -5; + tf(p.g, 150 * (1 - m) + click, 0); p.g.setAttribute("opacity", seg(t, p.d, p.d + 0.15) * f); + socks[i].setAttribute("fill", t >= p.d + 0.5 && f > 0.5 ? MINT : "#fff"); + }); + const g = ob(seg(t, 5.7, 6.2)); + tag.setAttribute("transform", `translate(600 558) scale(${0.6 + 0.4 * g}) translate(-600 -558)`); tag.setAttribute("opacity", seg(t, 5.7, 5.85) * f); + }; + }, + }; + + /* ---- 3. a gate on one path, a sandbox around the other ---- */ + SC.gate = { + dur: 9.6, still: 5.6, + build(svg, api) { + const top = "M60 190 H430 C530 190 540 270 640 270", bot = "M60 420 H430 C530 420 540 320 640 320"; + const box = el("g", {}, svg); + el("rect", { x: 128, y: 364, width: 360, height: 124, rx: 20, fill: SKY, stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "10 8" }, box); + txt(box, 308, 476, "Container or sandbox", { "text-anchor": "middle", "font-size": 20, "font-weight": 700 }); + [top, bot].forEach((d) => el("path", { d, stroke: SOFT, "stroke-width": 44, fill: "none", "stroke-linecap": "round" }, svg)); + [top, bot].forEach((d) => el("path", { d, stroke: INK, "stroke-width": 2, fill: "none", "stroke-dasharray": "2 12", "stroke-linecap": "round" }, svg)); + txt(svg, 60, 150, "Claude Code", { "font-family": MONO, "font-size": 24, "font-weight": 700 }); + txt(svg, 60, 382, "Pi", { "font-family": MONO, "font-size": 24, "font-weight": 700 }); + const hit = el("g", {}, svg); + el("rect", { x: 48, y: 354, width: 454, height: 144, rx: 24, fill: "#fff", "fill-opacity": 0, stroke: INK, "stroke-width": 2, class: "mg-ring" }, hit); + /* the gate, seen from above: a bar hinged on the top post */ + const G = [320, 164]; + el("path", { d: `M${G[0]} 134 V${G[1] - 7}`, stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, svg); + const bar = el("g", {}, svg); + el("rect", { x: -6, y: 0, width: 12, height: 54, rx: 6, fill: YEL, stroke: INK, "stroke-width": 2.5 }, bar); + el("circle", { cx: G[0], cy: G[1], r: 7, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + el("circle", { cx: G[0], cy: 220, r: 7, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + const chip = el("g", {}, svg); + el("rect", { x: G[0] - 60, y: 96, width: 120, height: 38, rx: 19, fill: YEL, stroke: INK, "stroke-width": 2.5 }, chip); + const mode = txt(chip, G[0], 122, "", { "text-anchor": "middle", "font-size": 20, "font-weight": 700 }); + el("path", { d: "M640 248 Q640 236 652 236 H690 L702 250 H758 Q770 250 770 262 V340 Q770 352 758 352 H652 Q640 352 640 340 Z", fill: BLUE, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, svg); + txt(svg, 705, 388, "Your repo", { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + const MODES = ["Manual", "Plan", "Auto"], OPEN = [30, 55, 85], P = 3.2; + const auto = (t) => oc(seg(t, 1.0, 1.8)) - io(seg(t, 8.6, 9.4)); + const sw = toggle(api); + let last = 0; + button(hit, "Slide the sandbox box on or off the Pi path", () => sw.flip(last)); + return (t, now) => { + const i = Math.floor(t / P) % 3, u = (t % P) / P; + const a = OPEN[i] * ob(seg(u, 0.12, 0.4)) * (1 - io(seg(u, 0.82, 1))); + tf(bar, G[0], G[1], 1, -a); + mode.textContent = MODES[i]; + const pop = 1 + 0.12 * (1 - oc(seg(u, 0, 0.2))); + chip.setAttribute("transform", `translate(${G[0]} 115) scale(${pop}) translate(${-G[0]} -115)`); + const v = (last = sw.used ? sw.get(now) : auto(t)); + box.setAttribute("transform", `translate(${-440 * (1 - v)} 0)`); box.setAttribute("opacity", cl(v * 2)); + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + el("rect", { x: 64, y: 44, width: 156, height: 40, rx: 20, fill: SOFT, stroke: INK, "stroke-width": 2 }, svg); + txt(svg, 142, 70, "Comparisons", { "text-anchor": "middle", "font-size": 18, "font-weight": 700 }); + txt(svg, 62, 172, "Pi vs Claude Code", { "font-size": 76, "font-weight": 700 }); + txt(svg, 64, 230, "Free harness or built in features?", { "font-size": 28, "font-weight": 500, fill: MUTE }); + txt(svg, 64, 270, "Checked 27 Oct 2026", { "font-size": 18, "font-weight": 500, fill: MUTE }); + const card = (x, label, fill) => { el("rect", { x, y: 318, width: 310, height: 160, rx: 22, fill, stroke: INK, "stroke-width": 3 }, svg); txt(svg, x + 155, 412, label, { "text-anchor": "middle", "font-family": MONO, "font-size": 36, "font-weight": 700 }); }; + card(96, "Pi", LIL); + card(554, "Claude Code", YEL); + el("circle", { cx: 480, cy: 398, r: 36, fill: "#fff", stroke: INK, "stroke-width": 3 }, svg); + txt(svg, 480, 407, "vs", { "text-anchor": "middle", "font-size": 26, "font-weight": 700 }); + 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, calm, redraw: () => frame(), 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/pi-vs-claude-code/plugs.png b/blog/src/assets/media/pi-vs-claude-code/plugs.png new file mode 100644 index 0000000000..7b2d6d274e Binary files /dev/null and b/blog/src/assets/media/pi-vs-claude-code/plugs.png differ diff --git a/blog/src/assets/media/what-is-instinct-ai/bubbles.png b/blog/src/assets/media/what-is-instinct-ai/bubbles.png new file mode 100644 index 0000000000..4627c6b83d Binary files /dev/null and b/blog/src/assets/media/what-is-instinct-ai/bubbles.png differ diff --git a/blog/src/assets/media/what-is-instinct-ai/guestlist.png b/blog/src/assets/media/what-is-instinct-ai/guestlist.png new file mode 100644 index 0000000000..241f98bd61 Binary files /dev/null and b/blog/src/assets/media/what-is-instinct-ai/guestlist.png differ diff --git a/blog/src/assets/media/what-is-instinct-ai/hero.png b/blog/src/assets/media/what-is-instinct-ai/hero.png new file mode 100644 index 0000000000..3611feafeb Binary files /dev/null and b/blog/src/assets/media/what-is-instinct-ai/hero.png differ diff --git a/blog/src/assets/media/what-is-instinct-ai/mailboxes.png b/blog/src/assets/media/what-is-instinct-ai/mailboxes.png new file mode 100644 index 0000000000..11a35ec7ab Binary files /dev/null and b/blog/src/assets/media/what-is-instinct-ai/mailboxes.png differ diff --git a/blog/src/assets/media/what-is-instinct-ai/mixer.png b/blog/src/assets/media/what-is-instinct-ai/mixer.png new file mode 100644 index 0000000000..d64dcde6b5 Binary files /dev/null and b/blog/src/assets/media/what-is-instinct-ai/mixer.png differ diff --git a/blog/src/assets/media/what-is-instinct-ai/motion.css b/blog/src/assets/media/what-is-instinct-ai/motion.css new file mode 100644 index 0000000000..121f8af384 --- /dev/null +++ b/blog/src/assets/media/what-is-instinct-ai/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "What is Instinct AI?". 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/what-is-instinct-ai/motion.js b/blog/src/assets/media/what-is-instinct-ai/motion.js new file mode 100644 index 0000000000..5cb701ae88 --- /dev/null +++ b/blog/src/assets/media/what-is-instinct-ai/motion.js @@ -0,0 +1,299 @@ +/* Bright coded scenes for "What is Instinct AI?". 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 RM = matchMedia("(prefers-reduced-motion: reduce)").matches; + 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 ring = (g, x, y, w, h, rx) => el("rect", { x, y, width: w, height: h, rx, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 6", class: "mg-ring" }, g); + const measure = (svg, s, a) => { const n = txt(svg, 0, -99, s, a), w = n.getComputedTextLength(); n.remove(); return w; }; + /* a toggle that eases over half a second, or snaps under reduced motion */ + const flip = (s, now) => { const p = RM ? 1 : seg(now - s.at, 0, 0.5); return s.on ? p : 1 - p; }; + const squashY = (n, cy, sy) => n.setAttribute("transform", `translate(0 ${cy}) scale(1 ${Math.max(sy, 0.001)}) translate(0 ${-cy})`); + const squashX = (n, cx, sx) => n.setAttribute("transform", `translate(${cx} 0) scale(${Math.max(sx, 0.001)} 1) translate(${-cx} 0)`); + const tickPath = (p, x, y, s = 1) => el("path", { d: `M${x - 7 * s} ${y} l${5 * s} ${5 * s} l${10 * s} ${-11 * s}`, stroke: INK, "stroke-width": 3, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, p); + + const SC = {}; + + /* ---- 1. three messages fold into done cards ---- */ + SC.bubbles = { + dur: 8, still: 7, + build(svg, api) { + const root = el("g", {}, svg); + el("rect", { x: 240, y: 28, width: 320, height: 544, rx: 46, fill: "#fff", stroke: INK, "stroke-width": 3 }, root); + el("rect", { x: 360, y: 48, width: 80, height: 12, rx: 6, fill: SOFT, stroke: INK, "stroke-width": 2 }, root); + el("rect", { x: 264, y: 496, width: 272, height: 44, rx: 22, fill: SOFT, stroke: INK, "stroke-width": 2 }, root); + const R = 528, MSG = ["Book a train home", "Order groceries", "Send flowers"]; + let touched = false; + const msgs = MSG.map((s, i) => { + const cy = 170 + i * 110, g = el("g", {}, root); + const bw = measure(svg, s, { "font-size": 22 }) + 44, bx = R - bw, by = cy - 30; + const bub = el("g", {}, g); + el("path", { d: `M${bx + 24} ${by} H${R - 24} Q${R} ${by} ${R} ${by + 24} V${by + 54} Q${R} ${by + 60} ${R - 6} ${by + 60} H${bx + 24} Q${bx} ${by + 60} ${bx} ${by + 36} V${by + 24} Q${bx} ${by} ${bx + 24} ${by} Z`, fill: BLUE, stroke: INK, "stroke-width": 3 }, bub); + txt(bub, R - 22, cy + 8, s, { "font-size": 22, "text-anchor": "end" }); + const cw = measure(svg, s, { "font-size": 19 }) + 76, cx = R - cw; + const card = el("g", {}, g); + el("rect", { x: cx, y: cy - 24, width: cw, height: 48, rx: 14, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, card); + el("circle", { cx: cx + 26, cy, r: 14, fill: MINT, stroke: INK, "stroke-width": 2 }, card); + tickPath(card, cx + 26, cy + 1, 0.8); + txt(card, cx + 50, cy + 7, s, { "font-size": 19 }); + ring(g, bx - 8, by - 8, bw + 16, 76, 28); + const st = { on: false, at: -99 }; + button(g, s, () => { touched = true; st.on = !st.on; st.at = api.now(); api.poke(); }); + return { g, bub, card, cy, st }; + }); + return (t, now) => { + const T = touched ? 7 : t; + root.setAttribute("opacity", 1 - seg(T, 7.6, 8)); + msgs.forEach((m, i) => { + const a = 0.4 + i, f = 3.4 + i * 0.6, app = ob(seg(T, a, a + 0.45)); + const k = touched ? 1 - flip(m.st, now) : io(seg(T, f, f + 0.6)); + m.g.setAttribute("opacity", seg(T, a, a + 0.15)); + m.g.setAttribute("transform", `translate(0 ${24 * (1 - app)})`); + squashY(m.bub, m.cy, k < 0.5 ? 1 - 2 * k : 0); + squashY(m.card, m.cy, k < 0.5 ? 0 : 2 * k - 1); + }); + }; + }, + }; + + /* ---- 2. a private beta guest list on a clipboard ---- */ + SC.guestlist = { + dur: 7, still: 6, + build(svg, api) { + const root = el("g", {}, svg); + const C = 290, board = el("g", {}, root); + el("rect", { x: 130, y: 64, width: 320, height: 490, rx: 26, fill: BLUE, stroke: INK, "stroke-width": 3 }, board); + const paper = el("g", {}, board); + el("rect", { x: 154, y: 112, width: 272, height: 418, rx: 12, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, paper); + const p1 = el("g", {}, paper), p2 = el("g", {}, paper); + const title = el("g", {}, p1); + txt(title, C, 180, "Private beta", { "text-anchor": "middle", "font-size": 34, "font-weight": 700 }); + el("path", { d: `M${C - 96} 200 H${C + 96}`, stroke: YEL, "stroke-width": 8, "stroke-linecap": "round" }, title); + const rows = [["Invited", true], ["Invited", true], ["Waiting", false]].map(([s, ok], i) => { + const y = 270 + i * 80, g = el("g", {}, p1); + const box = el("rect", { x: 186, y: y - 22, width: 40, height: 40, rx: 8, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + const tk = ok ? tickPath(g, 206, y, 1.2) : null; + txt(g, 246, y + 10, s, { "font-size": 30 }); + el("path", { d: `M186 ${y + 36} H394`, stroke: SOFT, "stroke-width": 3, "stroke-linecap": "round" }, g); + return { g, box, tk, ok }; + }); + txt(p2, C, 300, "Price not", { "text-anchor": "middle", "font-size": 40, "font-weight": 700 }); + txt(p2, C, 352, "published", { "text-anchor": "middle", "font-size": 40, "font-weight": 700 }); + el("path", { d: `M${C - 90} 380 H${C + 90}`, stroke: LIL, "stroke-width": 8, "stroke-linecap": "round" }, p2); + el("rect", { x: 230, y: 40, width: 120, height: 50, rx: 14, fill: LIL, stroke: INK, "stroke-width": 3 }, board); + el("rect", { x: 266, y: 54, width: 48, height: 14, rx: 7, fill: "#fff", stroke: INK, "stroke-width": 2 }, board); + ring(board, 118, 28, 344, 538, 32); + const note = el("g", {}, root); + el("rect", { x: 0, y: 0, width: 190, height: 110, rx: 10, fill: SKY, stroke: INK, "stroke-width": 3 }, note); + el("rect", { x: 65, y: -12, width: 60, height: 22, rx: 4, fill: SOFT, stroke: INK, "stroke-width": 2 }, note); + txt(note, 95, 66, "18 or older", { "text-anchor": "middle", "font-size": 28, "font-weight": 700 }); + const st = { on: false, at: -99 }; + let touched = false; + button(board, "Private beta guest list", () => { touched = true; st.on = !st.on; st.at = api.now(); api.poke(); }); + return (t, now) => { + const T = touched ? 6 : t; + root.setAttribute("opacity", 1 - seg(T, 6.6, 7)); + const d = ob(seg(T, 0.1, 0.9)); + board.setAttribute("transform", `translate(0 ${-60 * (1 - d)})`); board.setAttribute("opacity", seg(T, 0.1, 0.3)); + p1.setAttribute("opacity", 1); + title.setAttribute("opacity", seg(T, 0.9, 1.3)); + rows.forEach((r, i) => { + const a = 1.3 + i * 0.5, k = oc(seg(T, a, a + 0.4)); + r.g.setAttribute("opacity", k); r.g.setAttribute("transform", `translate(${30 * (1 - k)} 0)`); + if (r.ok) { const p = ob(seg(T, a + 0.4, a + 0.75)); r.box.setAttribute("fill", p > 0.05 ? MINT : "#fff"); r.tk.setAttribute("opacity", p > 0.05 ? 1 : 0); r.tk.setAttribute("transform", `translate(206 ${270 + i * 80}) scale(${cl(p, 0, 1.3)}) translate(-206 ${-(270 + i * 80)})`); } + else { const w = seg(T, 3.0, 3.6); r.box.setAttribute("transform", `rotate(${Math.sin(w * Math.PI * 4) * 8 * (1 - w)} 206 ${270 + i * 80})`); } + }); + const n = oc(seg(T, 3.4, 4.1)); + note.setAttribute("opacity", seg(T, 3.4, 3.6)); note.setAttribute("transform", `translate(${500 + 80 * (1 - n)} 170) rotate(${4 + 10 * (1 - n)})`); + const f = touched ? flip(st, now) : 0; + squashX(paper, C, Math.abs(Math.cos(f * Math.PI))); + p1.setAttribute("display", f < 0.5 ? "inline" : "none"); p2.setAttribute("display", f < 0.5 ? "none" : "inline"); + }; + }, + }; + + /* ---- 3. a mixing desk: one slider up, one held down ---- */ + SC.mixer = { + dur: 7, still: 6, + build(svg, api) { + const root = el("g", {}, svg); + el("rect", { x: 70, y: 20, width: 660, height: 476, rx: 28, fill: SOFT, stroke: INK, "stroke-width": 3 }, root); + const TOP = 170, BOT = 320, LY = [108, 376]; + const ch = [ + { c: 230, name: "Your messages and use", lamp: "Used to train models", up: true, col: YEL }, + { c: 570, name: "Google Workspace data", lamp: "Not used to train", up: false, col: MINT }, + ]; + let sel = -1, selAt = -99, touched = false; + ch.forEach((s, i) => { + const g = el("g", {}, root), ly = LY[i], lt = s.up ? 66 : 432; + el("rect", { x: s.c - 8, y: TOP - 10, width: 16, height: BOT - TOP + 20, rx: 8, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, g); + s.fill = el("rect", { x: s.c - 8, y: BOT, width: 16, height: 10, rx: 8, fill: BLUE, stroke: INK, "stroke-width": 2.5 }, g); + for (let k = 0; k <= 4; k++) { const y = TOP + (k * (BOT - TOP)) / 4; el("path", { d: `M${s.c - 54} ${y} H${s.c - 34} M${s.c + 34} ${y} H${s.c + 54}`, stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, g); } + s.rays = el("g", { opacity: 0 }, g); + for (let k = 0; k < 8; k++) { const a = ((k + 0.5) / 8) * Math.PI * 2; el("path", { d: `M${s.c + Math.cos(a) * 24} ${ly + Math.sin(a) * 24} L${s.c + Math.cos(a) * 32} ${ly + Math.sin(a) * 32}`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, s.rays); } + s.bulb = el("circle", { cx: s.c, cy: ly, r: 18, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + txt(g, s.c, lt, s.lamp, { "text-anchor": "middle", "font-size": 22 }); + txt(g, s.c, 474, s.name, { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + s.knob = el("g", {}, g); + el("rect", { x: -38, y: -16, width: 76, height: 32, rx: 9, fill: "#fff", stroke: INK, "stroke-width": 3 }, s.knob); + el("path", { d: "M-22 0 H22", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, s.knob); + ring(g, s.c - 150, 32, 300, 456, 22); + button(g, `${s.name}: ${s.lamp}`, () => { touched = true; sel = i; selAt = api.now(); api.poke(); }); + }); + const card = el("g", {}, svg); + el("rect", { x: 110, y: 508, width: 580, height: 84, rx: 22, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, card); + txt(card, 400, 542, "Privacy policy, read 30 Oct 2026", { "text-anchor": "middle", "font-size": 20, "font-weight": 500, fill: MUTE }); + const line = txt(card, 400, 574, "", { "text-anchor": "middle", "font-size": 24, "font-weight": 700 }); + return (t, now) => { + const T = touched ? 6 : t; + root.setAttribute("opacity", 1 - seg(T, 6.6, 7)); + ch.forEach((s, i) => { + const v = s.up ? io(seg(T, 1.0, 3.0)) : 0, y = BOT - (BOT - TOP) * v; + tf(s.knob, s.c, y); s.fill.setAttribute("y", y); s.fill.setAttribute("height", BOT + 10 - y); + const lit = s.up ? seg(T, 2.9, 3.1) : seg(T, 3.5, 3.7), pop = ob(lit); + s.bulb.setAttribute("fill", lit > 0.5 ? s.col : "#fff"); + s.rays.setAttribute("opacity", lit > 0.5 ? 1 : 0); + s.rays.setAttribute("transform", `translate(${s.c} ${LY[i]}) scale(${0.6 + 0.4 * cl(pop, 0, 1.2)}) translate(${-s.c} ${-LY[i]})`); + }); + const k = sel < 0 ? 0 : RM ? 1 : oc(seg(now - selAt, 0, 0.35)); + card.setAttribute("opacity", k); card.setAttribute("transform", `translate(0 ${16 * (1 - k)})`); + line.textContent = sel < 0 ? "" : ch[sel].lamp; + }; + }, + }; + + /* ---- 4. six mailboxes, six ways in ---- */ + SC.mailboxes = { + dur: 8, still: 7, + build(svg, api) { + const root = el("g", {}, svg); + const BOX = [ + ["Poke", ["Text"], "No price in list", SKY, YEL], + ["Munder Difflin", ["Desktop", "and Slack"], "Free, open source", YEL, BLUE], + ["Folk", ["iMessage"], "Free, Pro $8.33 a month", LIL, YEL], + ["Martin", ["SMS and", "phone"], "From $21 a month", MINT, LIL], + ["Comma", ["Signal and", "Telegram"], "Free to start, open source", BLUE, YEL], + ["Maverick", ["iMessage"], "Free beta, Pro €27 a month", SKY, LIL], + ]; + const G = 352; + el("path", { d: `M30 ${G} H770`, stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, root); + let sel = -1, selAt = -99, touched = false; + const boxes = BOX.map(([name, tag, price, body, flag], i) => { + const cx = 72 + i * 125, g = el("g", {}, root), up = el("g", {}, g); + const nm = name.split(" "); + nm.forEach((w, j) => txt(up, cx, 150 - (nm.length - 1 - j) * 22, w, { "text-anchor": "middle", "font-family": MONO, "font-size": 18, "font-weight": 700 })); + el("rect", { x: cx - 7, y: 262, width: 14, height: G - 262, fill: "#fff", stroke: INK, "stroke-width": 3 }, up); + const fl = el("g", {}, up); + el("path", { d: `M0 0 V-40`, stroke: INK, "stroke-width": 3.5, "stroke-linecap": "round" }, fl); + el("path", { d: "M0 -40 H22 L16 -32 L22 -24 H0 Z", fill: flag, stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round" }, fl); + el("path", { d: `M${cx - 36} 264 V212 A36 36 0 0 1 ${cx + 36} 212 V264 Z`, fill: body, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, up); + el("path", { d: `M${cx - 16} 214 H${cx + 16}`, stroke: INK, "stroke-width": 4, "stroke-linecap": "round" }, up); + el("circle", { cx: cx + 36, cy: 238, r: 4, fill: INK }, up); + const tg = el("g", {}, g), tb = el("rect", { x: cx - 56, y: 372, width: 112, height: 60, rx: 14, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, tg); + tag.forEach((w, j) => txt(tg, cx, 408 + (j - (tag.length - 1) / 2) * 21, w, { "text-anchor": "middle", "font-size": 17, "font-weight": 600 })); + ring(g, cx - 61, 108, 122, 330, 18); + button(g, `${name}: ${tag.join(" ")}. ${price}`, () => { touched = true; sel = i; selAt = api.now(); api.poke(); }); + return { cx, up, fl, tg, tb, g }; + }); + const card = el("g", {}, svg); + el("rect", { x: 100, y: 478, width: 600, height: 72, rx: 24, fill: SOFT, stroke: INK, "stroke-width": 2.5 }, card); + const line = txt(card, 400, 522, "", { "text-anchor": "middle", "font-size": 24 }); + const ln = el("tspan", { "font-family": MONO, "font-weight": 700 }, line), lp = el("tspan", { "font-weight": 500, dx: 14 }, line); + return (t, now) => { + const T = touched ? 7 : t; + root.setAttribute("opacity", 1 - seg(T, 7.6, 8)); + boxes.forEach((b, i) => { + const a = 0.2 + i * 0.15, k = ob(seg(T, a, a + 0.5)); + b.up.setAttribute("opacity", seg(T, a, a + 0.1)); + b.up.setAttribute("transform", `translate(0 ${G}) scale(1 ${Math.max(k, 0.001)}) translate(0 ${-G})`); + const f = 1.6 + i * 0.55, r = ob(seg(T, f, f + 0.45)); + b.fl.setAttribute("transform", `translate(${b.cx + 40} 248) rotate(${90 - 90 * r})`); + const q = oc(seg(T, f + 0.1, f + 0.45)); + b.tg.setAttribute("opacity", q); b.tg.setAttribute("transform", `translate(0 ${-14 * (1 - q)})`); + b.tb.setAttribute("fill", i === sel ? YEL : "#fff"); + }); + const k = sel < 0 ? 0 : RM ? 1 : oc(seg(now - selAt, 0, 0.35)); + card.setAttribute("opacity", k); card.setAttribute("transform", `translate(0 ${16 * (1 - k)})`); + if (sel >= 0) { ln.textContent = BOX[sel][0]; lp.textContent = BOX[sel][2]; } + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + el("rect", { x: 64, y: 84, width: 132, height: 38, rx: 19, fill: YEL, stroke: INK, "stroke-width": 2.5 }, svg); + txt(svg, 130, 110, "Concepts", { "text-anchor": "middle", "font-size": 19, "font-weight": 700 }); + txt(svg, 64, 222, "What is", { "font-size": 76, "font-weight": 700 }); + txt(svg, 64, 306, "Instinct AI?", { "font-size": 76, "font-weight": 700 }); + el("path", { d: "M66 334 H420", stroke: LIL, "stroke-width": 14, "stroke-linecap": "round" }, svg); + txt(svg, 64, 392, "Private beta, plus 6 alternatives", { "font-size": 27, "font-weight": 500, fill: MUTE }); + txt(svg, 64, 446, "Checked 30 Oct 2026", { "font-family": MONO, "font-size": 18, "font-weight": 500, fill: MUTE }); + const bub = (x, y, w, col, right) => { + const h = 70, r = 26, g = el("g", {}, svg); + const d = right + ? `M${x + r} ${y} H${x + w - r} Q${x + w} ${y} ${x + w} ${y + r} V${y + h - 6} Q${x + w} ${y + h} ${x + w - 6} ${y + h} H${x + r} Q${x} ${y + h} ${x} ${y + h - r} V${y + r} Q${x} ${y} ${x + r} ${y} Z` + : `M${x + r} ${y} H${x + w - r} Q${x + w} ${y} ${x + w} ${y + r} V${y + h - r} Q${x + w} ${y + h} ${x + w - r} ${y + h} H${x + 6} Q${x} ${y + h} ${x} ${y + h - 6} V${y + r} Q${x} ${y} ${x + r} ${y} Z`; + el("path", { d, fill: col, stroke: INK, "stroke-width": 3 }, g); + return g; + }; + bub(640, 136, 210, LIL, false); + [0, 1, 2].forEach((k) => el("circle", { cx: 690 + k * 26, cy: 171, r: 7, fill: INK }, svg)); + bub(660, 238, 236, BLUE, true); + el("rect", { x: 688, y: 262, width: 150, height: 10, rx: 5, fill: "#fff" }, svg); + el("rect", { x: 688, y: 282, width: 96, height: 10, rx: 5, fill: "#fff" }, svg); + bub(640, 340, 196, SKY, false); + el("circle", { cx: 680, cy: 375, r: 16, fill: MINT, stroke: INK, "stroke-width": 2.5 }, svg); + tickPath(svg, 680, 376, 0.9); + el("rect", { x: 708, y: 370, width: 100, height: 10, rx: 5, fill: "#fff" }, svg); + return () => {}; + }, + }; + + /* ---- player ---- */ + const q = new URLSearchParams(location.search), frozen = q.has("mgstill"), fixed = parseFloat(q.get("mgstill")); + const calm = RM; + 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/what-is-kimi-k3-1-pro/hero.png b/blog/src/assets/media/what-is-kimi-k3-1-pro/hero.png new file mode 100644 index 0000000000..1a19c9bcf8 Binary files /dev/null and b/blog/src/assets/media/what-is-kimi-k3-1-pro/hero.png differ diff --git a/blog/src/assets/media/what-is-kimi-k3-1-pro/highjump.png b/blog/src/assets/media/what-is-kimi-k3-1-pro/highjump.png new file mode 100644 index 0000000000..387b4e5ced Binary files /dev/null and b/blog/src/assets/media/what-is-kimi-k3-1-pro/highjump.png differ diff --git a/blog/src/assets/media/what-is-kimi-k3-1-pro/motion.css b/blog/src/assets/media/what-is-kimi-k3-1-pro/motion.css new file mode 100644 index 0000000000..a2b6dd2960 --- /dev/null +++ b/blog/src/assets/media/what-is-kimi-k3-1-pro/motion.css @@ -0,0 +1,13 @@ +/* Bright coded scenes for "What is Kimi K3.1 Pro". 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/what-is-kimi-k3-1-pro/motion.js b/blog/src/assets/media/what-is-kimi-k3-1-pro/motion.js new file mode 100644 index 0000000000..73ee64e78d --- /dev/null +++ b/blog/src/assets/media/what-is-kimi-k3-1-pro/motion.js @@ -0,0 +1,217 @@ +/* Bright coded scenes for "What is Kimi K3.1 Pro". 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 }); + }; + + /* one high jump standard: two posts and a crossbar that rides up them; returns a setter for the bar's y */ + const standard = (p, cx, base, top, half, col, post = 4) => { + const g = el("g", {}, p); + [-half + 4, half - 4].forEach((dx) => { + el("path", { d: `M${cx + dx} ${base} V${top}`, stroke: INK, "stroke-width": post, "stroke-linecap": "round" }, g); + el("path", { d: `M${cx + dx - 9} ${base} H${cx + dx + 9}`, stroke: INK, "stroke-width": post, "stroke-linecap": "round" }, g); + }); + const bar = el("rect", { x: cx - half, width: half * 2, height: 12, rx: 6, fill: col, stroke: INK, "stroke-width": 2.5 }, g); + return { g, set: (y) => bar.setAttribute("y", y - 6) }; + }; + + const SC = {}; + + /* ---- 1. three high jump bars on the Terminal-Bench 4.0 scale ---- */ + SC.highjump = { + dur: 8, still: 8, + build(svg, api) { + const BASE = 470, Y = (v) => BASE - (v - 55) * 21.33; + txt(svg, 44, 70, "Terminal-Bench 4.0", { "font-size": 32, "font-weight": 700 }); + [55, 60, 65, 70].forEach((v) => { + el("path", { d: `M120 ${Y(v)} H740`, stroke: SOFT, "stroke-width": 2 }, svg); + txt(svg, 100, Y(v) + 6, String(v), { "text-anchor": "end", "font-family": MONO, "font-size": 16, "font-weight": 500, fill: MUTE }); + }); + el("rect", { x: 150, y: BASE, width: 590, height: 14, rx: 7, fill: SOFT }, svg); + const DATA = [["GPT-6 Astra", 58.2, SKY, 260], ["Kimi K3.1 Pro", 65.7, YEL, 450], ["Claude Opus 5.5", 66.4, LIL, 640]]; + let pinned = -1; + const src = el("g", { opacity: 0 }, svg), srcText = strip(src, 530, 360); srcText.textContent = "Kimi's launch post"; + const bars = DATA.map(([name, v, col, cx], i) => { + const g = el("g", {}, svg); + el("rect", { x: cx - 80, y: 120, width: 160, height: 410, rx: 14, fill: "#fff", "fill-opacity": 0 }, g); + el("rect", { x: cx - 84, y: 116, width: 168, height: 412, rx: 16, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7", class: "mg-ring" }, g); + const s = standard(g, cx, BASE, Y(70) - 8, 66, col); + const val = txt(g, cx, 0, "", { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); + txt(g, cx, BASE + 42, name, { "text-anchor": "middle", "font-size": 21 }); + button(g, `${name}: ${v}. Source: Kimi's launch post`, () => { pinned = i; api.poke(); }); + return { s, val, v, d: 0.4 + i * 0.5 }; + }); + const rx = 545, rTop = Y(66.4), rBot = Y(65.7); + const ruler = el("g", {}, svg); + el("path", { d: `M516 ${rBot} H${rx + 14} M${rx - 14} ${rTop} H574`, stroke: INK, "stroke-width": 1.5, "stroke-dasharray": "3 4" }, ruler); + el("path", { d: `M${rx} ${rTop} V${rBot} M${rx - 8} ${rTop} H${rx + 8} M${rx - 8} ${rBot} H${rx + 8} M${rx} ${rTop} V134`, stroke: INK, "stroke-width": 2.5, "stroke-linecap": "round" }, ruler); + el("rect", { x: rx - 62, y: 100, width: 124, height: 34, rx: 17, fill: MINT, stroke: INK, "stroke-width": 2.5 }, ruler); + txt(ruler, rx, 123, "0.7 points", { "text-anchor": "middle", "font-size": 18, "font-weight": 700 }); + return (t) => { + bars.forEach((b) => { + const k = oc(seg(t, b.d, b.d + 1.3)), y = Y(55) + (Y(b.v) - Y(55)) * k; + b.s.set(y); b.val.setAttribute("y", y - 20); + b.val.textContent = (55 + (b.v - 55) * k).toFixed(1); + b.val.setAttribute("opacity", seg(t, b.d, b.d + 0.3)); + }); + const r = oc(seg(t, 3.2, 4.1)); + ruler.setAttribute("opacity", r); ruler.setAttribute("transform", `translate(${90 * (1 - r)} 0)`); + src.setAttribute("opacity", pinned >= 0 ? 1 : 0); + }; + }, + }; + + /* ---- 2. a parcel tracking line with three stops ---- */ + SC.route = { + dur: 8, still: 8, + build(svg, api) { + const all = el("g", {}, svg); + el("rect", { x: 0, y: 0, width: 800, height: 600, fill: "#fff", "fill-opacity": 0 }, all); + el("rect", { x: 10, y: 10, width: 780, height: 580, rx: 16, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7", class: "mg-ring" }, all); + const LY = 350, X = [140, 400, 660]; + const STOPS = [["Launched 23 Oct", true], ["API and apps today", true], ["Weights by 4 Nov", false]]; + el("path", { d: `M${X[0]} ${LY} H${X[2]}`, stroke: SOFT, "stroke-width": 18, "stroke-linecap": "round" }, all); + el("path", { d: `M${X[0]} ${LY} H${X[2]}`, stroke: INK, "stroke-width": 2, "stroke-dasharray": "2 12", "stroke-linecap": "round" }, all); + const done = el("path", { d: "", stroke: INK, "stroke-width": 5, "stroke-linecap": "round" }, all); + const wait = el("circle", { cx: X[2], cy: LY, r: 34, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "4 6" }, all); + const stops = STOPS.map(([label, tick], i) => { + const g = el("g", {}, all), c = el("circle", { cx: X[i], cy: LY, r: 22, fill: "#fff", stroke: INK, "stroke-width": 3 }, g); + const mark = tick ? el("path", { d: `M${X[i] - 10} ${LY} l7 7 l13 -14`, stroke: INK, "stroke-width": 4, fill: "none", "stroke-linecap": "round", "stroke-linejoin": "round" }, g) : null; + txt(g, X[i], LY + 66, label, { "text-anchor": "middle", "font-size": 22 }); + return { c, mark, tick }; + }); + const parcel = el("g", {}, all); + el("rect", { x: -82, y: -112, width: 164, height: 92, rx: 10, fill: YEL, stroke: INK, "stroke-width": 3 }, parcel); + el("path", { d: "M-82 -86 H82", stroke: INK, "stroke-width": 2.5 }, parcel); + el("rect", { x: -70, y: -74, width: 140, height: 40, rx: 8, fill: "#fff", stroke: INK, "stroke-width": 2 }, parcel); + txt(parcel, 0, -48, "Kimi K3.1 Pro", { "text-anchor": "middle", "font-family": MONO, "font-size": 16, "font-weight": 700 }); + el("path", { d: "M-20 -20 L0 -4 L20 -20", stroke: INK, "stroke-width": 2.5, fill: "none", "stroke-linejoin": "round" }, parcel); + button(all, "Replay the parcel route", () => api.seek(0.01)); + const legs = [[1.4, 2.8], [3.8, 5.4]], arrive = [0.6, 2.8, 5.4]; + return (t) => { + const a = io(seg(t, legs[0][0], legs[0][1])), b = io(seg(t, legs[1][0], legs[1][1])); + const x = X[0] + (X[1] - X[0]) * a + (X[2] - X[1]) * b, moving = (a > 0 && a < 1) || (b > 0 && b < 1); + const drop = oc(seg(t, 0.2, 0.7)); + tf(parcel, x, LY - 32 - 60 * (1 - drop) - (moving ? Math.abs(Math.sin(t * 9)) * 6 : 0)); + parcel.setAttribute("opacity", drop); + done.setAttribute("d", `M${X[0]} ${LY} H${x}`); + stops.forEach((s, i) => { + const k = ob(seg(t, arrive[i], arrive[i] + 0.4)), on = t >= arrive[i]; + if (s.tick) { s.c.setAttribute("fill", on ? MINT : "#fff"); s.mark.setAttribute("opacity", on ? 1 : 0); s.mark.setAttribute("transform", `translate(${X[i]} ${LY}) scale(${0.4 + 0.6 * cl(k, 0, 1.2)}) translate(${-X[i]} ${-LY})`); } + }); + const w = seg(t, 5.4, 6.0), pulse = 1 + 0.08 * Math.sin((t - 5.4) * 4) * (t > 6 ? 1 : w); + wait.setAttribute("opacity", w); wait.setAttribute("transform", `translate(${X[2]} ${LY}) scale(${pulse}) translate(${-X[2]} ${-LY})`); + }; + }, + }; + + /* ---- 3. three plugs slide into a power strip ---- */ + SC.plugs = { + dur: 8, still: 8, + build(svg, api) { + const SY = 360, X = [210, 400, 590]; + const P = [["Kimi Code", "model picker", BLUE, "Kimi Code: /model"], ["Codex", "config.toml", LIL, "Codex: api.moonshot.ai/v1"], ["Claude Code", "settings.json", SKY, "Claude Code: api.moonshot.ai/anthropic"]]; + const body = el("rect", { x: 90, y: SY, width: 620, height: 96, rx: 22, fill: SOFT, stroke: INK, "stroke-width": 3 }, svg); + txt(svg, 400, SY + 80, "Kimi API", { "text-anchor": "middle", "font-family": MONO, "font-size": 20, "font-weight": 700 }); + const lights = X.map((x) => { + el("rect", { x: x - 34, y: SY + 14, width: 68, height: 34, rx: 10, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, svg); + el("path", { d: `M${x - 12} ${SY + 22} V${SY + 40} M${x + 12} ${SY + 22} V${SY + 40}`, stroke: INK, "stroke-width": 4, "stroke-linecap": "round" }, svg); + return el("circle", { cx: x + 54, cy: SY + 31, r: 8, fill: "#fff", stroke: INK, "stroke-width": 2.5 }, svg); + }); + const out = el("g", { opacity: 0 }, svg), outText = strip(out, 512, 600); + outText.setAttribute("font-family", MONO); outText.setAttribute("font-size", 19); + let pinned = -1; + const plugs = P.map(([name, tag, col, ep], i) => { + const g = el("g", {}, svg), x = X[i]; + el("path", { d: `M${x} -20 C${x} 60 ${x + (i - 1) * 30} 90 ${x} 160 V240`, stroke: INK, "stroke-width": 5, fill: "none", "stroke-linecap": "round" }, g); + el("rect", { x: x - 86, y: 150, width: 172, height: 206, rx: 18, fill: "#fff", "fill-opacity": 0 }, g); + el("rect", { x: x - 90, y: 146, width: 180, height: 214, rx: 20, fill: "none", stroke: INK, "stroke-width": 2, "stroke-dasharray": "3 7", class: "mg-ring" }, g); + el("rect", { x: x - 66, y: 166, width: 132, height: 34, rx: 8, fill: "#fff", stroke: INK, "stroke-width": 2 }, g); + txt(g, x, 189, tag, { "text-anchor": "middle", "font-family": MONO, "font-size": 15, "font-weight": 500 }); + el("path", { d: `M${x - 12} ${SY - 34} V${SY + 30} M${x + 12} ${SY - 34} V${SY + 30}`, stroke: INK, "stroke-width": 6, "stroke-linecap": "round" }, g); + el("rect", { x: x - 80, y: 240, width: 160, height: 88, rx: 16, fill: col, stroke: INK, "stroke-width": 3 }, g); + txt(g, x, 292, name, { "text-anchor": "middle", "font-size": 22, "font-weight": 700 }); + button(g, `${name}, ${tag}. Endpoint: ${ep}`, () => { pinned = i; api.poke(); }); + return { g, d: 0.5 + i * 1.3 }; + }); + return (t) => { + let lit = 0; + plugs.forEach((p, i) => { + const k = ob(seg(t, p.d, p.d + 0.9)), on = t >= p.d + 0.75; + p.g.setAttribute("transform", `translate(0 ${-330 * (1 - cl(k, 0, 1.1))})`); + lights[i].setAttribute("fill", on ? MINT : "#fff"); if (on) lit++; + }); + body.setAttribute("fill", lit === 3 && t >= 4.6 ? YEL : SOFT); + out.setAttribute("opacity", pinned >= 0 ? 1 : 0); + if (pinned >= 0) outText.textContent = P[pinned][3]; + }; + }, + }; + + /* ---- title card, 16 by 9 ---- */ + SC.hero = { + w: 960, h: 540, dur: 1, still: 0, + build(svg) { + el("rect", { x: 64, y: 96, width: 132, height: 40, rx: 20, fill: LIL, stroke: INK, "stroke-width": 2.5 }, svg); + txt(svg, 130, 123, "Concepts", { "text-anchor": "middle", "font-size": 20, "font-weight": 700 }); + txt(svg, 64, 240, "Kimi K3.1 Pro", { "font-size": 80, "font-weight": 700 }); + el("path", { d: "M66 268 H500", stroke: YEL, "stroke-width": 14, "stroke-linecap": "round" }, svg); + txt(svg, 64, 330, "1M context, weights by 4 Nov", { "font-size": 28, "font-weight": 500, fill: MUTE }); + txt(svg, 64, 466, "Checked 29 Oct 2026", { "font-family": MONO, "font-size": 18, "font-weight": 500, fill: MUTE }); + const BASE = 470, Y = (v) => BASE - (v - 50) * 16; + el("rect", { x: 606, y: BASE, width: 328, height: 12, rx: 6, fill: SOFT }, svg); + [[58.2, SKY, 660], [65.7, YEL, 770], [66.4, LIL, 880]].forEach(([v, col, cx]) => standard(svg, cx, BASE, Y(70) - 6, 38, col, 3.5).set(Y(v))); + 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/what-is-kimi-k3-1-pro/plugs.png b/blog/src/assets/media/what-is-kimi-k3-1-pro/plugs.png new file mode 100644 index 0000000000..300663186e Binary files /dev/null and b/blog/src/assets/media/what-is-kimi-k3-1-pro/plugs.png differ diff --git a/blog/src/assets/media/what-is-kimi-k3-1-pro/route.png b/blog/src/assets/media/what-is-kimi-k3-1-pro/route.png new file mode 100644 index 0000000000..d3ea684fcc Binary files /dev/null and b/blog/src/assets/media/what-is-kimi-k3-1-pro/route.png differ diff --git a/blog/src/posts/agent-tools-today-2026-10-26.md b/blog/src/posts/agent-tools-today-2026-10-26.md index c835864593..e0918c1818 100644 --- a/blog/src/posts/agent-tools-today-2026-10-26.md +++ b/blog/src/posts/agent-tools-today-2026-10-26.md @@ -20,7 +20,7 @@ Agent tools today, 26 Oct 2026, in one line: Moonshot AI shipped Kimi K3.1 Pro, ## Top 3 launches -1. **Kimi K3.1 Pro.** Moonshot AI's most capable open weight model in its 3T class, with a context window of one million tokens and a Highspeed version at 2 to 3 times the speed. It is live in Kimi Code and the Kimi API, with full weights due by 4 Nov. In the vendor's own figures, published 23 Oct, it scores 65.7% on Terminal-Bench 4.0 against 66.4% for Claude Opus 5.5. More than 1,050 points and 650 comments on Hacker News on 23 Oct. [Source](https://www.kimi.ai/blog/kimi-k3-1-pro) +1. **Kimi K3.1 Pro.** Moonshot AI's most capable open weight model in its 3T class, with a context window of one million tokens and a Highspeed version at 2 to 3 times the speed. It is live in Kimi Code and the Kimi API, with full weights due by 4 Nov. In the vendor's own figures, published 23 Oct, it scores 65.7% on Terminal-Bench 4.0 against 66.4% for Claude Opus 5.5. More than 1,050 points and 650 comments on Hacker News on 23 Oct. Details in [Kimi K3.1 Pro](/blog/what-is-kimi-k3-1-pro/). [Source](https://www.kimi.ai/blog/kimi-k3-1-pro) 2. **Chat and Cowork become one Claude for Enterprise.** Generally available on 23 Oct. A conversation starts as a chat; when a task needs code or files, Claude continues in the cloud, keeps going after you close your laptop, and you pick it up on the web, desktop or mobile. Each cloud session runs in its own isolated virtual machine, and a new Efficient mode keeps work on Sonnet and Haiku. See [Claude Cowork vs Claude Code](/blog/claude-cowork-vs-claude-code/). [Source](https://claude.com/resources/articles/unified-claude-enterprise) 3. **JetBrains ThinkRail.** An incubator project that bills itself as "the agentic IDE that gets better every time you use it". It wraps the `pi` coding agent in a real editor, gives each workspace its own git worktree, and keeps `SPEC.md` files the agent maintains. More than 190 points on Hacker News on 25 Oct, Apache 2.0, more than 1,900 stars. [Source](https://github.com/JetBrains/thinkrail) diff --git a/blog/src/posts/agent-tools-today-2026-10-27.md b/blog/src/posts/agent-tools-today-2026-10-27.md new file mode 100644 index 0000000000..f89d6219c7 --- /dev/null +++ b/blog/src/posts/agent-tools-today-2026-10-27.md @@ -0,0 +1,57 @@ +--- +title: "Agent Tools Today, 27 Oct 2026: GPT-6.1 Terra, Hob, Anthropic's S-1" +seoTitle: "Agent Tools Today (27 Oct 2026): Launches, Skills, MCP Servers" +description: "The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in AI agents from 26 to 27 Oct 2026, each with its source." +date: 2026-10-27 +category: news +categoryLabel: News +type: Non-technical +series: agent-tools-today +primaryKeyword: "agent tools today 27 oct 2026" +secondaryKeywords: ["gpt-6.1 terra", "hob local ai app", "anthropic s-1", "tstack skills", "claude code 2.1.311", "paperpilot mcp"] +tags: ["Daily Brief", "Claude Code", "MCP", "Open Source"] +--- + +Agent tools today, 27 Oct 2026, in one line: OpenAI released GPT-6.1 Terra, the open source app Hob pitched itself as an on device alternative to Claude Cowork, and the Hacker News thread on Anthropic's Form S-1 passed 1,500 points. This edition covers 26 to 27 Oct. Every number was checked on 27 Oct. The last edition is [26 Oct](/blog/agent-tools-today-2026-10-26/). + +[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It is not ranked in the lists below. + +
Animation. On a white background, a laptop labelled Your computer holds a small chip labelled Open weight model. A folder labelled Files slides into the laptop and a sheet labelled Chart comes out the other side. A cloud labelled Online stays at the top with a dotted line to the laptop, and a switch labelled Web search flips off, so the dotted line fades.
How Hob describes its design: the model runs on your computer, and web search is the part that goes online, per its Show HN post of 26 Oct 2026.
+ +## Top 3 launches + +1. **GPT-6.1 Terra.** OpenAI's new fast, efficient model for visual reasoning, computer use and writing, released 26 Oct. Its API price is $1 per million input tokens and $5 per million output tokens on OpenAI's model page, read 27 Oct, with a 1,050,000 token context window. In ChatGPT it is in Work and Codex on Plus, Pro, Business, Enterprise and Edu plans. More than 530 points on Hacker News on 27 Oct. [Source](https://developers.openai.com/api/docs/models/gpt-6.1-terra) +2. **Hob.** A free, MIT licensed desktop app for Mac, Windows and Linux that, its author says, works on your files the way the Claude and ChatGPT apps do, except the model runs on your own computer. It picks an open weight model for your hardware (Gemma 4 or gpt-oss), runs Python in a sandbox, searches the web and takes MCP connectors. v0.2.0 and v0.2.1 shipped on 26 Oct, and the Show HN post had more than 120 points on 27 Oct. Our [Claude Cowork alternatives](/blog/claude-cowork-alternatives/) page compares it. [Source](https://github.com/FrigadeHQ/hob) +3. **PaperPilot.** A PDF and document toolkit written in Rust that runs as an MCP server, a CLI, a browser tool, a desktop app and a local REST API. The MCP server lets Codex, Claude Code, Kimi Code, Pi, Claude Desktop or Cursor merge, split, OCR and compress PDFs. Its Hacker News post had 230 points on 27 Oct, and the repo more than 590 stars on 27 Oct; GitHub detects no standard licence. [Source](https://github.com/KrushnaVardhanReddy/PaperPilot) + +## Top 3 skills, MCP servers and plugins + +1. **tstack.** The agent skills Theo of t3.gg uses every day, for Claude Code and Codex. `council` gets review from three models from different providers and loops until they agree; `full-send` takes a change all the way to a merged pull request; `babysit-pr` watches a pull request through CI and review bots. It needs an authenticated GitHub CLI. Created 24 Oct, MIT, more than 1,600 stars on 27 Oct. See our [Claude Code skills guide](/blog/claude-code-skills/). [Source](https://github.com/t3dotgg/tstack) +2. **Digital Human Koubo.** An agent skill for Claude Code, Codex and OpenClaw that turns one photo and one sentence into a talking head video: script, lip synced presenter, captions and packaging. It generates the clips through Renoise MCP and edits with Remotion. Created 26 Oct, MIT, more than 780 stars on 27 Oct. [Source](https://github.com/andyhuo520/digital-human-koubo) +3. **huashu-motion.** A skill that has your agent make a product launch film: it reads your product, offers three directions, writes a score and opens an editor where you click on a frame to change only that part. Installs with `npx skills add alchaincyf/huashu-motion`. Created 18 Oct, MIT, more than 1,700 stars on 27 Oct. [Source](https://github.com/alchaincyf/huashu-motion) + +## Top 3 moves from multi agent tools + +1. **Claude Code v2.1.311.** Published late on 26 Oct UTC. Standard context sessions no longer stop with "Usage credits required for 1M context" when a request runs over 200K tokens; Claude Code now compacts the conversation and continues. Subagents can use MCP tools from servers that finish connecting after they start, and a subagent's worktree is no longer removed while a background subagent it started is still working in it. [Source](https://github.com/anthropics/claude-code/releases/tag/v2.1.311) +2. **GitHub Copilot CLI v1.0.104.** Published 27 Oct. Interactive and SDK Autopilot sessions keep waiting for attached background tasks instead of stopping at a timeout, and Assisted Permissions no longer need experimental mode. [Source](https://github.com/github/copilot-cli/releases/tag/v1.0.104) +3. **Cline v4.1.26.** Published 26 Oct. Cloud tasks get a Local or Cloud toggle in API Configuration with their own model choice, and starting a cloud sandbox shows a progress card for the repo, branch and steps. With no model chosen, the Cline provider uses Claude Sonnet 5.5 again. See [Cline alternatives](/blog/cline-alternatives/). [Source](https://github.com/cline/cline/releases/tag/v4.1.26) + +## Top 3 rising repos + +1. **SkillSpector.** NVIDIA's security scanner for agent skills: it checks a skill for vulnerabilities and malicious patterns before you install it. Its README, read 27 Oct 2026, says that in a research subset of 31,132 skills, 26.1% contained vulnerabilities and 5.2% showed likely malicious intent. On GitHub trending on 27 Oct, Apache 2.0, v2.13.1 on 23 Oct. [Source](https://github.com/NVIDIA/SkillSpector) +2. **Cindy.** An open source agent client that runs on your machine with your real files and logged in apps, using Claude Code and Codex as its first harnesses; models and harnesses can switch mid task. On GitHub trending on 27 Oct, Apache 2.0, v0.1.115 on 23 Oct. [Source](https://github.com/makecindy/cindy) +3. **Nietzschian Debugger.** "The anti-AI": you paste a bug and it does not fix it, it asks questions that challenge your assumptions until you find the cause yourself. More than 130 points on Hacker News on 27 Oct, MIT. [Source](https://github.com/DilawarShafiq/nietzschian-debugger) + +New repos can gain stars quickly for reasons other than use, so treat these as names to watch, not recommendations. + +## Top 3 things people are arguing about + +1. **What Anthropic's S-1 means.** SEC EDGAR lists a Form S-1, the general form for registering securities, filed by Anthropic, PBC on 26 Oct 2026. The Hacker News thread had more than 1,500 points and 1,400 comments on 27 Oct. [Source](https://www.sec.gov/Archives/edgar/data/2130357/000162828026067168/anthropicpbc-sx1.htm) +2. **Can a hosted model leak another customer's prompt?** Cloudflare says that between 27 Aug and 9 Sep, 155 responses from its GLM 5.3 Workers AI model contained data from other customers' requests, all to prompts longer than 681,280 tokens. The cause was a KV cache pool smaller than the context window plus a bug in the open source SGLang engine; Cloudflare found no evidence of deliberate exploitation. More than 90 points on Hacker News on 27 Oct. [Source](https://blog.cloudflare.com/kv-cache-exposure-remediation/) +3. **Do local models make the desktop agent free?** Hob's Show HN thread, with more than 30 comments, is mostly praise and feature requests, with some doubt that open weight models on your own hardware can do real file work. Its author says the only parts that go online are web search, which can be turned off, and the MCP connectors you add. Its docs add that it also goes online to download models and, with web access on, to install Python packages. [Source](https://news.ycombinator.com/item?id=50246238) + +## How this list is built + +For this edition, covering 26 to 27 Oct, we read the GitHub releases of 17 tracked tools, vendor docs and changelogs, GitHub trending, and the Hacker News front page. We did not read X or Reddit for it. 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. New here? Start with the [install guide](/blog/how-to-install-and-use-munder-difflin/). + + diff --git a/blog/src/posts/agent-tools-today-2026-10-28.md b/blog/src/posts/agent-tools-today-2026-10-28.md new file mode 100644 index 0000000000..dd91d68715 --- /dev/null +++ b/blog/src/posts/agent-tools-today-2026-10-28.md @@ -0,0 +1,57 @@ +--- +title: "Agent Tools Today, 28 Oct 2026: OpenCode 2.2, Entire, Hallmark" +seoTitle: "Agent Tools Today (28 Oct 2026): Launches, Skills, MCP Servers" +description: "The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 27 to 28 Oct 2026, each with its source and date." +date: 2026-10-28 +category: news +categoryLabel: News +type: Non-technical +series: agent-tools-today +primaryKeyword: "agent tools today 28 oct 2026" +secondaryKeywords: ["opencode 2.2.0", "entire git forge", "hallmark design skill", "claude code 2.1.312", "codex 0.165.0", "soulgent"] +tags: ["Daily Brief", "Claude Code", "Skills", "Open Source"] +--- + +Agent tools today, 28 Oct 2026, in one line: OpenCode 2.2.0 opened its desktop app to plugins, Entire launched a Git forge where review agents score every push, and the design skill Hallmark gained more than 2,800 stars in a day. It covers 27 to 28 Oct, checked 28 Oct. An earlier edition is [26 Oct](/blog/agent-tools-today-2026-10-26/). + +[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It is not ranked in the lists below. + +
Animation. On a white background, a small cabinet with three drawers opens one drawer at a time. The top drawer holds a card labelled OpenCode 2.2.0 with a tag Desktop plugins, the middle one a card labelled Entire with a tag Trails, and the bottom one a card labelled Hallmark with a tag Design skill. Tapping a drawer opens or closes it.
The day's three lead items, from OpenCode's release notes, Entire's blog and the Hallmark repo, read 28 Oct 2026.
+ +## Top 3 launches + +1. **OpenCode 2.2.0.** Published 27 Oct. You can now create, install and share desktop plugins, which the release notes mark experimental, and the desktop app was refreshed. Plugins can add keyed session instructions without editing the system prompt, so the prompt cache survives. See [OpenCode alternatives](/blog/opencode-alternatives/). [Source](https://github.com/anomalyco/opencode/releases/tag/v2.2.0) +2. **Entire.** On 26 Oct Entire introduced what it calls "the first Git forge built specifically for agent-human collaboration". In place of a pull request, a Trail shows eval scores that review agents give on every push, and Gates can require human approval and passing CI before a merge. Entire says the review agents use Claude Code and Codex in cloud sandboxes, and that its Git server pushes up to 89x faster than GitHub, which is its own figure. More than 50 points on Hacker News on 28 Oct. [Source](https://entire.com/blog/the-git-forge-for-agent-human-collaboration) +3. **Survival LLM.** A free AI assistant and emergency library that, after setup, needs no internet. It runs on Apple Silicon Macs with macOS 14 or newer and on 64 bit Windows 10 or 11, picks a model that fits your memory, from IBM Granite 4.2 8B for 16 to 31 GB up to NVIDIA Nemotron 3.5 Super for 128 GB or more, and lists the sources behind every answer, including about 930,000 Wikipedia articles. More than 210 points on Hacker News on 28 Oct; repo created 24 Oct, more than 170 stars, and GitHub detects no standard licence. [Source](https://www.brangus.io/survival-llm) + +## Top 3 skills, MCP servers and plugins + +1. **Hallmark.** A design skill for Claude Code, Codex, Cursor and OpenCode, made by Together AI, that its README says "refuses to look AI-generated". Version 2 deals three themes from a catalog of fifty and checks the page in a real browser against signs of machine made design. MIT, more than 39,000 stars, and 2,830 stars in a day on GitHub trending on 28 Oct. [Source](https://github.com/Nutlope/hallmark) +2. **AI Design Skills.** A growing set of design skills for Claude Code, Cursor, Codex, Windsurf and any tool that reads a markdown rules file. The first is `landing-page-design`, which asks intake questions and builds a landing page with its copy and a visual system. MIT, created 29 Jul, more than 9,600 stars, and 1,395 stars in a day on GitHub trending on 28 Oct. [Source](https://github.com/elayadesign/ai-design-skills) +3. **mcp-video-editor.** An MCP server that lets Cursor, Claude Desktop, Codex CLI, Antigravity, OpenCode and KiloCode edit video projects in CapCut and OpenCut over stdio. Its README lists 50 tools, from timeline clips and captions to export, and says all of them default to `dryRun: true`. Created 26 Oct, more than 50 stars on 28 Oct; GitHub detects no licence. [Source](https://github.com/AISEO-VirtualabDigital/mcp-video-editor) + +## Top 3 moves from multi agent tools + +1. **Claude Code v2.1.312.** Published 27 Oct. Claude no longer overwrites a very large `CLAUDE.md`, rules file or included file in a subdirectory after seeing only its start; Write now asks it to read the whole file or edit in place. In fullscreen you can click the hint under a queued message to send it now. See [Claude Code best practices](/blog/claude-code-best-practices/). [Source](https://github.com/anthropics/claude-code/releases/tag/v2.1.312) +2. **Codex 0.165.0.** Published 27 Oct. It adds a built in Google Cloud Vertex AI provider (`model_provider = "gcp"`), puts [GPT-6.1 Terra](/blog/gpt-6-1-terra/) in the model catalogs, turns on memory v2 by default for fresh profiles with import of memories from other agents, and lets you change reasoning effort mid conversation on supported models. [Source](https://github.com/openai/codex/releases/tag/rust-v0.165.0) +3. **OpenClaw 2026.10.8.** Published 27 Oct. A failed post update Doctor check now restarts the Gateway instead of leaving it stopped, an orphaned maintenance worker no longer blocks every CLI command, and updates no longer abort on ACL filesystems or Windows pnpm links. See [OpenClaw alternatives](/blog/openclaw-alternatives/). [Source](https://github.com/openclaw/openclaw/releases/tag/v2026.10.8) + +## Top 3 rising repos + +1. **Soulgent.** A Mac app that turns each Claude Code, Codex and WorkBuddy session into a character with a name, a look and a mood, so you can see at a glance who is working, who is done and who is waiting for your decision. MIT, created 27 Oct, more than 30 stars on 28 Oct. [Source](https://github.com/Ericcc0321/soulgent) +2. **OpenBot.** A desktop workspace for persistent AI teammates that runs Codex and Claude Code, plus Grok CLI, OpenCode, Gemini, Cursor CLI and Cline CLI through ACP, each with its own workspace, queues, file transfer, an embedded browser and agent to agent messages. Its README warns it is a development preview whose agents run with `danger-full-access` and no per action approval. On GitHub trending on 28 Oct, more than 2,500 stars; GitHub detects no standard licence. [Source](https://github.com/nightly-labs/openbot) +3. **agent-purge.** One system prompt for many coding agents, among them Codex, Claude, OpenCode, Grok, Hermes and Pi, with four modes (replace, strict, append, off) and a local web console. MIT, created 25 Oct, more than 650 stars on 28 Oct. [Source](https://github.com/ZiChuanLan/agent-purge) + +Stars can rise for reasons other than use: names to watch, not picks. + +## Top 3 things people are arguing about + +1. **Do agents mean more work, not less?** An engineer writes that with several agents running at once, each needing him "sometimes", he works more than ever, because every answer means switching to another problem. The Hacker News thread had more than 620 points and 610 comments on 28 Oct. [Source](https://oioannou.com/blog/ai-promised-less-work/) +2. **Does Brooks's law hold for agents?** A post revisits The Mythical Man-Month and argues that sequential tasks stay sequential and the overhead moves to you: someone still defines done, reviews the code and stitches the parts together. More than 440 points on Hacker News on 28 Oct. [Source](https://j11g.com/the-mythical-man-month-in-the-age-of-ai) +3. **What does a thumbs up send to Anthropic?** Anthropic's privacy article for its commercial products, dated 18 Aug 2026, says it does not train on their inputs and outputs by default, but feedback through the thumbs up or down button stores the entire related conversation for up to 5 years and may be used to train models. Owners of Team and Enterprise plans can turn the button off with the Rate chats setting. More than 210 points on Hacker News on 28 Oct. [Source](https://privacy.claude.com/en/articles/7996868-is-my-data-used-for-model-training) + +## How this list is built + +For this edition, covering 27 to 28 Oct, we read the GitHub releases of 21 tracked tools, vendor blogs and changelogs, GitHub trending, and the Hacker News front page. We did not read X or Reddit for it. 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. New here? Start with the [install guide](/blog/how-to-install-and-use-munder-difflin/). + + diff --git a/blog/src/posts/agent-tools-today-2026-10-29.md b/blog/src/posts/agent-tools-today-2026-10-29.md new file mode 100644 index 0000000000..5751db483d --- /dev/null +++ b/blog/src/posts/agent-tools-today-2026-10-29.md @@ -0,0 +1,57 @@ +--- +title: "Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals" +seoTitle: "Agent Tools Today (29 Oct 2026): Launches, Skills, MCP Servers" +description: "The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date." +date: 2026-10-29 +category: news +categoryLabel: News +type: Non-technical +series: agent-tools-today +primaryKeyword: "agent tools today 29 oct 2026" +secondaryKeywords: ["gemini 4 carbon", "copilot connectors", "copilot automations", "opencode 2.2.1", "impeccable design skill", "goose 1.57.0"] +tags: ["Daily Brief", "Claude Code", "Skills", "Open Source"] +--- + +Agent tools today, 29 Oct 2026, in one line: Google announced Gemini 4 Carbon for a first group of cyber defenders, GitHub put verified MCP servers into Copilot, and OpenCode 2.2.1 added a `/goal` command that keeps a session going until a reviewer agrees. It covers 28 to 29 Oct, checked 29 Oct. An earlier edition is [26 Oct](/blog/agent-tools-today-2026-10-26/). + +[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It is not ranked in the lists below. + +
Animation. On a white background, three cards are pinned to a cork board one at a time. The first reads Gemini 4 Carbon with a tag Early access, the second Copilot connectors with a tag 26 services, and the third OpenCode 2.2.1 with a tag Goal mode. Tapping a card lifts it off the board or pins it back.
The day's three lead items, from Google's launch post, GitHub's changelog and OpenCode's release notes, read 29 Oct 2026.
+ +## Top 3 launches + +1. **Gemini 4 Carbon.** Google announced it on 28 Oct as "our strongest model with state-of-the-art cybersecurity and long horizon capabilities". It goes first to a subset of cyber defenders, then to trusted partners through the Fairwind Program, and to developers later. Google's post of 28 Oct 2026 gives an introductory price of $2 input and $10 output per million tokens. More than 860 points on Hacker News on 29 Oct. Details in [Gemini 4 Carbon](/blog/gemini-4-carbon/). [Source](https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-carbon/) +2. **Copilot connectors.** On 28 Oct GitHub started rolling out GitHub verified MCP servers, which it calls connectors, in public preview on all Copilot plans. You sign in to a service once and it works across the Copilot app, Copilot CLI, VS Code, Copilot in the cloud and GitHub Mobile. 26 services at launch, among them Slack, Figma, Notion, Sentry and Linear. Business and Enterprise need an admin to switch on a preview policy. [Source](https://github.blog/changelog/2026-10-28-connect-your-tools-to-copilot-without-all-the-setup) +3. **Shared Copilot Automations.** Also on 28 Oct, automations that combine prompts, triggers and tools can now belong to a repository instead of one person. Everyone with read access sees them, AI credits bill to the repository owner, and actions show as Copilot. Rolling out on Copilot Pro, Pro+, Max, Business and Enterprise. The same day, Agent Merge came to pull requests on GitHub, fixing failing workflows and merge conflicts in the cloud on paid plans ([Agent Merge](https://github.blog/changelog/2026-10-28-agent-merge-watches-and-fixes-pull-requests-in-the-cloud)). [Source](https://github.blog/changelog/2026-10-28-build-shared-workflows-for-your-team-with-copilot-automations) + +## Top 3 skills, MCP servers and plugins + +1. **Impeccable.** A design skill whose README calls it "The design vocabulary for your coding agent", with commands such as `polish`, `bolder`, `critique` and `audit`. It lists Claude Code, Cursor, Codex CLI, GitHub Copilot, Gemini CLI, OpenCode and more. Apache 2.0, more than 93,000 stars, and 1,472 stars in a day on GitHub trending on 29 Oct. [Source](https://github.com/pbakaus/impeccable) +2. **Superpowers.** A software development method for coding agents built from composable skills, with install steps for Claude Code, Antigravity, the Codex app and CLI, Cursor, Devin CLI and others. MIT, more than 307,000 stars, and 1,095 stars in a day on GitHub trending on 29 Oct. [Source](https://github.com/obra/superpowers) +3. **Expo skills.** Official skills from the Expo team for building, deploying, upgrading and debugging Expo apps. Claude Code and Codex install it as a plugin; Cursor, OpenCode, Copilot, Gemini, Cline and others use the skills CLI. MIT, more than 3,600 stars, on GitHub trending on 29 Oct. [Source](https://github.com/expo/skills) + +## Top 3 moves from multi agent tools + +1. **OpenCode 2.2.1.** Published 29 Oct. `/goal ` lets a session keep working until a reviewer confirms the goal is met, with pause and resume. Opt in scheduled prompts arrive through `/schedule`, and an experimental `image_generate` tool lets agents make or edit images. It drops the fal, Black Forest Labs, Replicate and Stability providers from the `@opencode/ai` package, a breaking change for code that imports them. See [OpenCode alternatives](/blog/opencode-alternatives/). [Source](https://github.com/anomalyco/opencode/releases/tag/v2.2.1) +2. **Goose 1.57.0.** Published 28 Oct. Its allowlist now requires HTTPS and validates redirects, callers can supply their own session IDs, scheduled runs use recipe settings, and Claude models are asked for summarized thinking. [Source](https://github.com/aaif-goose/goose/releases/tag/v1.57.0) +3. **Qwen Code 0.26.3.** Published 28 Oct. A persistent Workflow mode can be switched on from the CLI, the SDK or ACP, generated UI cards appear only for clients that can render MCP Apps, and tool results shrink to fit before auto compaction. [Source](https://github.com/QwenLM/qwen-code/releases/tag/v0.26.3) + +## Top 3 rising repos + +1. **Macro.** A workspace that puts email, messages, docs, tasks, agents and a CRM in one interface with shared team memory, built in SolidJS and Rust. AGPL 3.0, more than 5,500 stars, on GitHub trending on 29 Oct. [Source](https://github.com/macro-inc/macro) +2. **BAMA.** "Build Any Mac App": 21 agent skills that take a native macOS app in Swift and SwiftUI from idea to the Dock, as a Claude Code or Codex plugin. MIT, created 24 Oct, more than 620 stars on 29 Oct. [Source](https://github.com/daveebbelaar/bama) +3. **vvv.** Editable Remotion video templates that a coding agent picks, fills and renders from one sentence, installed as a Claude Code plugin, through the skills CLI or as an MCP server. MIT, created 22 Oct, more than 430 stars on 29 Oct. [Source](https://github.com/actionow-ai/vvv) + +Stars can rise for reasons other than use: names to watch, not picks. + +## Top 3 things people are arguing about + +1. **Is Claude Code's status line worth its tokens?** A gist Flamerix AI published on 26 Oct says background agents send their whole transcript to the model about every 30 seconds to write a 3 to 5 word status, and that in its own measurement this was 16.4% of Claude Code's estimated spend. It offers a preload script to turn it off. An open issue on the Claude Code repo, filed 15 Aug, asks for a supported switch. More than 180 points on Hacker News on 29 Oct. [Source](https://gist.github.com/flamerix-ai/c3905705cc4205e5de3011fa2e74efce) +2. **Can agents do a tax professional's job?** Surge AI's DAYJOB: Tax benchmark, published 27 Oct, gives agents 50 assignments across 1,789 files and passes an attempt only when it meets 95% of the criteria. Claude Sonnet 5.5 leads at a 10.8% pass rate, then Claude Fable 5.1 at 9.6% and Claude Opus 5.5 at 9.2%. More than 220 points on Hacker News on 29 Oct. [Source](https://surgehq.ai/blog/dayjob-tax) +3. **What do you still need to know when agents write the code?** In a post of 27 Oct, an engineer describes CI failing on a file Codex had kept working on happily, with whole components on single lines, and asks how much a person must still understand of code they did not write. More than 190 points and 100 comments on Hacker News on 29 Oct. [Source](https://blog.adrq.dev/here-be-monsters-what-do-you-still-need-to-know-when-agents-do-the-work) + +## How this list is built + +For this edition, covering 28 to 29 Oct, we read the GitHub releases of 21 tracked tools, vendor blogs and changelogs, GitHub trending, and the Hacker News front page. We did not read X or Reddit for it. 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. New here? Start with the [install guide](/blog/how-to-install-and-use-munder-difflin/). + + diff --git a/blog/src/posts/agent-tools-today-2026-10-30.md b/blog/src/posts/agent-tools-today-2026-10-30.md new file mode 100644 index 0000000000..30e55f4efd --- /dev/null +++ b/blog/src/posts/agent-tools-today-2026-10-30.md @@ -0,0 +1,57 @@ +--- +title: "Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App" +seoTitle: "Agent Tools Today (30 Oct 2026): Launches, Skills, MCP Servers" +description: "The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date." +date: 2026-10-30 +category: news +categoryLabel: News +type: Non-technical +series: agent-tools-today +primaryKeyword: "agent tools today 30 oct 2026" +secondaryKeywords: ["mistral large 4 weights", "claude code 2.1.314", "herdr desktop app", "codex 0.166.0", "opencode 2.2.2", "qwenputer"] +tags: ["Daily Brief", "Claude Code", "Skills", "Open Source"] +--- + +Agent tools today, 30 Oct 2026, in one line: Mistral released the weights of Mistral Large 4, Claude Code 2.1.314 can refuse every write outside your working folders, and Herdr shipped a desktop app for terminals and coding agents. It covers 29 to 30 Oct, checked 30 Oct. An earlier edition is [26 Oct](/blog/agent-tools-today-2026-10-26/). + +[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It is not ranked in the lists below. + +
Animation. On a white background, three envelopes drop one at a time into the slots of a mail sorting rack. The first reads Mistral Large 4 with a tag Weights out, the second Claude Code 2.1.314 with a tag Write guard, and the third Herdr with a tag Desktop app. Tapping an envelope slides it out of its slot or back in.
The day's three lead items, from Mistral's release post, Claude Code's release notes and Herdr's README, read 30 Oct 2026.
+ +## Top 3 launches + +1. **Mistral Large 4 weights.** On 29 Oct Mistral put the weights on Hugging Face under the Mistral Ecosystem Open-Weight license, which its post calls "a modified MIT license". The post prices the API at $0.70 per million input tokens and $2.10 per million output tokens on 29 Oct 2026. More than 1,250 points on Hacker News on 30 Oct. Details in [Mistral Large 4](/blog/mistral-large-4/). [Source](https://mistral.ai/news/mistral-large-4-oss/) +2. **Qwenputer.** A stock Qwen 3.5 4B model with a RISC-V CPU compiled into its weights, using the model's Gated DeltaNet layers as memory. Its write up says it runs arithmetic, C and MicroPython inside the forward pass "without any external runtime or tool usage", and calls it "a pretty fun experimental model". More than 680 points on Hacker News on 30 Oct. [Source](https://divagr.com/blog/qwenputer) +3. **Herdr desktop app.** Herdr now has "a desktop app for terminals and coding agents": spaces for work, a status for each agent (working, blocked, done or idle), and terminals that keep running when you close the window. Builds for Linux, Apple Silicon Macs and Windows, Apache 2.0, more than 210 stars on 30 Oct. See [Herdr alternatives](/blog/herdr-alternatives/). [Source](https://github.com/herdrdev/herdr-app) + +## Top 3 skills, MCP servers and plugins + +1. **AI Design Skills.** A collection of design skills for Claude Code, Cursor, Codex, Windsurf "and anything else that reads a markdown rules file". The first, `landing-page-design`, builds a landing page from intake questions to a full visual system. MIT, more than 12,000 stars, and 1,187 stars in a day on GitHub trending on 30 Oct. [Source](https://github.com/elayadesign/ai-design-skills) +2. **MiniMax mcode-stack.** "The workflows and skills the MiniMax Code team uses to build MiniMax Code", each a `SKILL.md` skill or checklist, among them a check for whether work should go to a subagent and an audit of what tools cost in context. MIT, created 28 Oct, more than 420 stars on 30 Oct. [Source](https://github.com/MiniMax-AI/mcode-stack) +3. **Grim Prompter.** A threat modeling skill: point Claude Code, Codex or another coding agent at a repo and get a threat model traced to the code, from 36 architecture workflows and 29 method and analysis prompts. MIT, created 28 Oct, more than 160 stars on 30 Oct. [Source](https://github.com/jmanico/grim-prompter) + +## Top 3 moves from multi agent tools + +1. **Claude Code 2.1.314.** Published 30 Oct. A new `permissions.blockWritesOutsideWorkingDirectories` setting makes Write, Edit and NotebookEdit refuse paths outside the working folders in every permission mode. VS Code and the Claude Desktop Code tab now summarize a 200K+ token conversation left idle, and sessions no longer fail turn after turn when an admin caps a model's effort. See [Claude Code alternatives](/blog/claude-code-alternatives/). [Source](https://github.com/anthropics/claude-code/releases/tag/v2.1.314) +2. **Codex 0.166.0.** Published 29 Oct. It adds keyboard driven transcript selection with search, GPT-6.1 Terra in the bundled, Vertex AI and Amazon Bedrock model catalogs, `codex queue --resume`, and `codex doctor --network-only` for connection checks. [Source](https://github.com/openai/codex/releases/tag/rust-v0.166.0) +3. **OpenCode 2.2.2.** Published 29 Oct. Agents can now generate images by default when a connected provider has an image model, and clicking the current Git branch on the new session screen opens the worktree picker. See [OpenCode alternatives](/blog/opencode-alternatives/). [Source](https://github.com/anomalyco/opencode/releases/tag/v2.2.2) + +## Top 3 rising repos + +1. **OpenMausBot.** It calls itself "The open-source Grok Bot alternative: your own team of AI bots, in a chat app", where each bot is Claude or Codex running locally with its own model and connected apps. Apache 2.0, more than 7,500 stars, and 1,199 stars in a day on GitHub trending on 30 Oct. See [Grok Bot alternatives](/blog/grok-bot-alternatives/). [Source](https://github.com/milind-soni/OpenMausBot) +2. **ThinkRail.** A JetBrains incubator IDE built around the `pi` coding agent, with work isolated in git worktrees, specs kept beside the code, and Agent Skills from other coding agents read in. Apache 2.0, more than 6,000 stars, and 1,117 stars in a day on GitHub trending on 30 Oct. [Source](https://github.com/JetBrains/thinkrail) +3. **BLA.** "Blind LLM Agents", a defensive tool that hardens software you ship so an AI reverse engineering agent hits resource budgets and follows decoys, while users see the same behavior. MIT, created 25 Oct, more than 890 stars on 30 Oct. [Source](https://github.com/qybaihe/bla) + +Stars can rise for reasons other than use: names to watch, not picks. + +## Top 3 things people are arguing about + +1. **Can readers tell when an LLM wrote a post?** In "LLM Voice" on 29 Oct, Martin Fowler writes that he urges authors "to be extra-wary of LLM-Voice" and not to have a model write a draft, since even after a human edits it, LLM Voice is very hard to remove. His site asks anyone who uses AI to help write to say how. More than 370 points on Hacker News on 30 Oct. [Source](https://martinfowler.com/bliki/LLM-Voice.html) +2. **Where do the numbers AI assistants quote come from?** Trakkr traced 1,285 statistics cited by five AI assistants, published 28 Oct. 40% reached a study that says the same thing, 8% reached the study with the number changed, 40% stopped at a source it could not check, and 11% led nowhere. More than 150 points on Hacker News on 30 Oct. [Source](https://trakkr.ai/trakkr-research/zombie-stats) +3. **What are agents doing to GitHub?** The New Stack reported on 28 Oct that GitHub now sees 7.4 billion commits a month, up from 2.9 billion in August, and has added 4 million CPU cores this year. GitHub puts the growth down mostly to "agentic demand". More than 45 points on Hacker News on 30 Oct. [Source](https://thenewstack.io/github-7-4b-commits-september/) + +## How this list is built + +For this edition, covering 29 to 30 Oct, we read the GitHub releases of 16 tracked tools, vendor blogs and changelogs, GitHub trending, and the Hacker News front page. We did not read X or Reddit for it. 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. New here? Start with the [install guide](/blog/how-to-install-and-use-munder-difflin/). + + diff --git a/blog/src/posts/agent-tools-today-2026-10-31.md b/blog/src/posts/agent-tools-today-2026-10-31.md new file mode 100644 index 0000000000..e8d37dbd28 --- /dev/null +++ b/blog/src/posts/agent-tools-today-2026-10-31.md @@ -0,0 +1,67 @@ +--- +title: "Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5" +seoTitle: "Agent Tools Today (31 Oct 2026): Launches, Skills, MCP Servers" +description: "The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date." +date: 2026-10-31 +category: news +categoryLabel: News +type: Non-technical +series: agent-tools-today +primaryKeyword: "agent tools today 31 oct 2026" +secondaryKeywords: ["claude code extension backdoor", "cursor marketplace claude code 2.1.313", "claude code 2.1.316", "opencode 2.2.5", "northflank breach", "unslop skill"] +tags: ["Daily Brief", "Claude Code", "Skills", "Security"] +--- + +Agent tools today, 31 Oct 2026, in one line: a tampered Claude Code extension reached Cursor's marketplace, Claude Code 2.1.316 adds an effort setting for subagents, and OpenCode can now use your Claude Code login. It covers 29 to 31 Oct, checked 31 Oct. An earlier edition is [26 Oct](/blog/agent-tools-today-2026-10-26/). + +[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It is not ranked in the lists below. + +
Animation. On a white background, a small shopfront has three roller shutters that roll up one at a time. Behind the first, a card reads Claude Code extension with a tag Check Cursor. Behind the second, Claude Code 2.1.316 with a tag Subagent effort. Behind the third, OpenCode 2.2.3 with a tag Claude Agent. Tapping a shutter rolls it down or back up.
The day's three lead items, from Cursor's security notice and the release notes of Claude Code and OpenCode, read 31 Oct 2026.
+ +## Check this first: the Claude Code extension in Cursor + +Cursor's [security notice](https://cursor.com/blog/claude-code-extension-security-notice), posted 29 Oct and updated 30 Oct, says a maliciously modified copy of the Claude Code extension was on its marketplace between about 2:27am and 1:35pm PT on 29 Oct. It names versions 2.1.312 and 2.1.313 for Windows and macOS, and says the code "attempts to install a persistent SSH backdoor". Cursor says the SSH step usually fails because it needs admin rights, but the extension still adds the key, installs persistence and sends host details, and that the attacker's server is now offline. More than 800 points on Hacker News on 31 Oct. + +- **How to check.** If you installed or updated either version from Cursor's marketplace in that window: on a Mac, search `~/.ssh/authorized_keys` for `svc-telemetry`. Cursor says a match means the machine is affected, and its check prints "No key found; machine not impacted" otherwise. Its notice gives the Windows command. +- **How to clean up.** Cursor warns that uninstalling the extension may not be sufficient. The notice has removal scripts and says to isolate an affected machine, assess whether to rebuild it, and rotate credentials and sessions reachable from it, from a trusted system. +- **What each side says.** Cursor writes that these versions "were not developed by Anthropic". [The Register](https://www.theregister.com/cyber-crime/2026/10/30/anthropic-that-claude-code-extension-compromise-couldnt-be-us/5306682) quoted a member of Anthropic's technical staff on 30 Oct: "A malicious actor used access to Cursor's marketplace to publish a tampered copy of the Claude Code extension, which we didn't build or publish. The versions on our official channels are not affected, and this only impacts Cursor users." It also reported that Cursor has not outlined how the package reached the marketplace. + +For the wider picture, see [security for AI coding agents](/blog/security-for-ai-coding-agents/). + +## Top 3 launches + +1. **Mika.** "An on-device AI agent for Android that operates apps and the web to get things done for you", working on a hidden background screen while you use your phone. Apache 2.0, created 29 Oct, more than 1,500 stars on 31 Oct. [Source](https://github.com/wangzan101/Mika) +2. **nesformer.** "An NES CPU compiled into the weights of a stock Qwen3.5 model". It builds on Qwenputer, which compiled a CHIP-8 and then a RISC-V CPU into Qwen3.5-4B. Created 30 Oct, more than 200 points on Hacker News on 31 Oct. [Source](https://github.com/dbreunig/nesformer) +3. **The sleep framework from Google Research.** A method that alternates active use with an offline phase, moving short term context into long term parameters which Google says lets a model keep learning without catastrophic forgetting. Published 27 Oct, more than 180 points on Hacker News on 31 Oct. [Source](https://research.google/blog/the-sleep-framework-a-new-way-for-llms-to-retain-knowledge-in-continual-learning/) + +## Top 3 skills, MCP servers and plugins + +1. **Unslop.** A Claude skill that "turns vibecoded, AI-looking UI into a designed interface". It finds purple gradients, glows and emoji labels first. CC BY 4.0, created 29 Oct, more than 1,400 stars on 31 Oct. [Source](https://github.com/heydamir/unslop) +2. **Floorplan.** "Claude or Codex reads your codebase and draws an interactive map of it", with a plain English name for every part, file and web request. MIT, created 27 Oct, more than 490 stars on 31 Oct. [Source](https://github.com/haydenschmitty/floorplan) +3. **pixelfx.** 232 pixel art effects, each a small piece of code, plus a Claude Code skill for making new ones: draft, render, look, refine. MIT, created 30 Oct, more than 380 stars on 31 Oct. [Source](https://github.com/patch-gg/pixelfx) + +## Top 3 moves from multi agent tools + +1. **Claude Code 2.1.316.** Published 31 Oct. `CLAUDE_CODE_SUBAGENT_EFFORT` sets the effort subagents run at when nothing else names one. Fast mode for Opus 4.8 is deprecated, with removal on 30 Nov 2026. See [Claude Code alternatives](/blog/claude-code-alternatives/). [Source](https://github.com/anthropics/claude-code/releases/tag/v2.1.316) +2. **OpenCode 2.2.3 to 2.2.5.** Three releases on 30 Oct. A built in Claude Agent provider uses your Claude Code login and models, and `compaction.buffer` now accepts a share of the context window, such as `"20%"`. See [OpenCode alternatives](/blog/opencode-alternatives/). [Source](https://github.com/anomalyco/opencode/releases/tag/v2.2.3), [2.2.5](https://github.com/anomalyco/opencode/releases/tag/v2.2.5) +3. **Paradev Desktop 2.0.2.** Published 29 Oct. The right pane area is now on for everyone, and pull request actions use the viewer's own GitHub login rather than the host's. [Source](https://github.com/paradevai/paradev/releases/tag/desktop-v2.0.2) + +## Top 3 rising repos + +1. **DeepTutor.** "Lifelong Personalized Tutoring" from HKUDS. Apache 2.0, more than 51,000 stars, and 2,282 stars in a day on GitHub trending on 31 Oct. [Source](https://github.com/HKUDS/DeepTutor) +2. **T3 Code.** An "agent harness control surface" with a mobile app, which controls the Claude Code, Codex, Cursor, OpenCode and other tools set up on your computer. MIT, more than 32,000 stars, and 930 stars in a day on GitHub trending on 31 Oct. [Source](https://github.com/pingdotgg/t3code) +3. **OpenBot.** From CopilotKit, with AI coworkers that each get a browser, files and tools. Its README says it is "A template, not a product". MIT, more than 8,800 stars, and 706 stars in a day on GitHub trending on 31 Oct. [Source](https://github.com/CopilotKit/OpenBot) + +Stars can rise for reasons other than use: names to watch, not picks. + +## Top 3 things people are arguing about + +1. **What if your hosting platform holds your AI keys?** Northflank's status page tells customers to "assume all environment variables have been compromised and rotate all secrets", and on 30 Oct it said users had reported "unauthorised use of AI API keys supplied to the Northflank platform". It says this may fit a wider pattern of attacks on AI credentials, citing Wiz's Black October report. More than 370 points on Hacker News on 31 Oct. See [Black October](/blog/black-october-php2shell/). [Source](https://status.northflank.com) +2. **What do 50 agents do left alone?** Y Combinator and Olam Labs ran 50 GPT-6.1 Sol agents in Minecraft for 3 hours. They sent about 5,900 messages, and four spent 11 minutes appointing a "sole fertilizer operator". More than 390 points on Hacker News on 31 Oct. [Source](https://labs.ycombinator.com/projects/games/index.html) +3. **Is AI wearing down the people who run production?** A SigNoz newsletter post with a byline of 28 Feb argues that heavy use of AI in incident response erodes the skills needed for new failures: "The more you let the system handle, the worse you get at handling things yourself". More than 520 points on Hacker News on 31 Oct. [Source](https://newsletter.signoz.io/p/ai-isnt-replacing-sres-its-deskilling) + +## How this list is built + +For this edition, covering 29 to 31 Oct, we read the GitHub releases of tracked tools, vendor blogs and changelogs, GitHub trending, and the Hacker News front page. We did not read X or Reddit for it. 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. New here? Start with the [install guide](/blog/how-to-install-and-use-munder-difflin/). + + diff --git a/blog/src/posts/chatgpt-dots-vs-claude-cowork.md b/blog/src/posts/chatgpt-dots-vs-claude-cowork.md new file mode 100644 index 0000000000..49bfd94f59 --- /dev/null +++ b/blog/src/posts/chatgpt-dots-vs-claude-cowork.md @@ -0,0 +1,101 @@ +--- +title: "ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)" +seoTitle: "ChatGPT Dots vs Claude Cowork (2026): Price, Plans, Files" +description: "ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026." +date: 2026-10-28 +category: comparisons +categoryLabel: Comparisons +type: Non-technical +primaryKeyword: "chatgpt dots vs claude cowork" +secondaryKeywords: ["claude cowork vs chatgpt dots", "chatgpt dots or claude cowork", "dots vs cowork", "chatgpt dots alternative", "claude cowork alternative"] +tags: ["Comparisons", "AI Agents", "Automation", "Cost"] +faq: + - q: "What is the difference between ChatGPT Dots and Claude Cowork?" + a: "The shape of the work. OpenAI's docs describe a dot as an always on agent that keeps track of an ongoing responsibility and follows up between conversations. Anthropic's help page says Cowork lets you describe an outcome, step away and come back to finished work such as documents, organized files and research. Checked 28 Oct 2026." + - q: "Which is cheaper, ChatGPT Dots or Claude Cowork?" + a: "Claude Cowork. On 28 Oct 2026 Anthropic's pricing page listed Claude Pro at $20 if billed monthly, and Cowork is available on Pro. OpenAI's docs list dots for Pro 100, Pro 200 and Pro 500, and its pricing page listed Pro from $100 a month on the same date." + - q: "Can I use ChatGPT Dots in the UK or EU?" + a: "Not on a personal Pro plan. OpenAI's dots page lists Pro for users over 18 outside the European Economic Area, United Kingdom and Switzerland. Business Premium and Enterprise are rolling out worldwide, and Enterprise admins must turn dots on. Checked 28 Oct 2026." + - q: "Do ChatGPT Dots and Claude Cowork keep working when my computer is off?" + a: "Yes, for cloud work. A dot has its own cloud computer and can keep working when your computer is off. Cowork runs on Anthropic's servers, and scheduled tasks run with no device online. Work that needs your own files needs your computer on and the app open." + - q: "Can a ChatGPT dot or Claude Cowork delete my files?" + a: "Cowork asks first: its help page says Claude requires your explicit permission before permanently deleting any files. OpenAI's dots docs give you custom rules such as Hand off to you, and say rules are instructions a dot tries to follow and it can make mistakes. Checked 28 Oct 2026." +--- + +Pick ChatGPT Dots if you want one always on agent that owns an ongoing job and reaches you in Slack, Teams or a call; pick Claude Cowork if you want tasks handed back as finished files. Cowork comes with Claude Pro at $20 billed monthly, Dots with ChatGPT Pro from $100 a month, checked 28 Oct 2026. + +If you want agents on your own machine as well, [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. This sits in our [Comparisons hub](/blog/topics/comparisons/), next to [what is ChatGPT Dots](/blog/what-is-chatgpt-dots/) and [what is Claude Cowork](/blog/what-is-claude-cowork/). + +## ChatGPT Dots vs Claude Cowork at a glance (checked 28 Oct 2026) + +Both are hosted agents that keep working in the cloud; they differ in the job, the plan and the controls. + +| | ChatGPT Dots | Claude Cowork | +| --- | --- | --- | +| Unit of work | An ongoing responsibility | A task with an outcome | +| Where the work runs | Its own cloud computer and browser | Anthropic's servers, in an isolated environment | +| Your computer | Optional, one at a time | Through the desktop app, folders you connect | +| Where you talk to it | ChatGPT apps, Slack, Teams, calls | Claude web, desktop, mobile, Chrome side panel | +| Plans | Pro 100, Pro 200, Pro 500; Business Premium and Enterprise rolling out | Pro, Max, Team, Enterprise | +| Entry price on 28 Oct 2026 | ChatGPT Pro from $100 a month | Claude Pro, $20 billed monthly | +| Approvals | Automatic review, optional custom rules | Manual, Auto or Skip mode | + +## What does each one do? + +A dot keeps track of something over time, while Cowork finishes a task you describe. OpenAI's [dots page](https://learn.chatgpt.com/docs/dots) calls a dot "an always-on agent that keeps work moving across your tools and projects", for when you want it to "keep track of an ongoing responsibility, figure out next steps as things change, and follow up between conversations". It runs on GPT-6 Astra and can hand work to ChatGPT Work or Codex. + +Anthropic's [help page](https://support.claude.com/en/articles/13345190-get-started-with-claude-cowork) says Cowork "brings Claude Code's agentic capabilities to knowledge work beyond coding". You "describe an outcome, step away, and come back to finished work", such as documents, organized files and research. Cowork is also being folded into Claude itself: on 28 Oct 2026 the [pricing page](https://claude.com/pricing) banner read "Claude Cowork is now just Claude", rolling out to Pro and Max first. + +Our view: a dot is a standing assignment, Cowork is a job ticket. + +
Animation. On a white background, a thick book turns its own pages while a ribbon bookmark labelled ChatGPT Dots moves forward chapter by chapter. Beside it a single index card labelled Claude Cowork fills with lines and slides into a finished tray.
A dot follows an ongoing job; Cowork hands back finished work. OpenAI and Anthropic docs, 28 Oct 2026.
+ +## How much do they cost? + +Claude Cowork costs less to start, because it comes with Claude Pro and dots need ChatGPT Pro, Business Premium or Enterprise. On 28 Oct 2026 Anthropic's pricing page listed Pro at $20 if billed monthly, or $17 a month billed annually, and Max from $100 a month. The help page says Cowork "is available on paid plans (Pro, Max, Team, and Enterprise)". + +OpenAI's [pricing page](https://learn.chatgpt.com/docs/pricing) listed Pro on 28 Oct 2026 as "Plans at $100, $200, or $500 USD per month". The dots page lists Pro 100, Pro 200 and Pro 500 "for users over 18 outside the European Economic Area, United Kingdom, and Switzerland". Business Premium and Enterprise are "rolling out worldwide", and Enterprise admins must switch dots on. OpenAI adds that dots are rolling out gradually, so you may not see them yet even on an eligible plan. + +Usage counts differently too. OpenAI says conversations with your dot "don't count toward your ChatGPT usage limits", while tasks it starts in Work or Codex do. Anthropic's [Cowork page](https://claude.com/product/cowork) warns that "Claude Cowork consumes limits faster than Chat." + +
Animation. On a white background, two lunchboxes pop open one after the other. The small one is labelled Claude Pro, 20 dollars, and holds one sandwich marked Cowork. The big one is labelled ChatGPT Pro, from 100 dollars, and holds a round snack marked Dots. Prices from 28 Oct 2026.
Claude Pro at $20 billed monthly, ChatGPT Pro from $100 a month, per Anthropic's and OpenAI's pricing pages on 28 Oct 2026.
+ +## Where do they run and what can they touch? + +Both run in the cloud and reach your own computer through their desktop app. A dot "lives in the cloud and has its own computer and browser" and "can keep working even when your computer is off". You can connect one personal computer at a time, and it must be online with the ChatGPT app open. Its cloud browser "doesn't inherit logins from your personal browser". + +Cowork's help page says "Claude's work runs on Anthropic's servers, in an isolated environment", and "work continues if you close your laptop". Local files, browser use and computer use need the Claude Desktop app for macOS or Windows, open and connected. Claude "can only read and write files in folders you've connected". Anthropic's Cowork page says its built in browser, in the desktop app on Pro, Max and Team, is "Separate from your own browser, logins, and tabs." + +## Which is safer with your files? + +Both check risky actions, but Cowork fixes one rule for files. Its help page says Claude "requires your explicit permission before permanently deleting any files". It offers three modes: Manual asks each time, Auto lets Claude review each action and block unsafe ones, and Skip means "nothing checks its actions automatically". In the new Claude experience the message box offers Auto, the default on Pro, Max and Team, and Manual. Anthropic also states that "Cowork has unique risks due to its agentic nature and internet access." + +OpenAI's [controls page](https://learn.chatgpt.com/docs/dots/controls) says an automatic review checks actions that could affect your accounts or share information. Custom rules offer four choices: "Take action without asking", "Take action when you say so", "Ask before taking action" and "Hand off to you". The page adds that rules are instructions your dot "tries to follow, and it can make mistakes", and that stopping work "doesn't undo completed actions". + +
Animation. On a white background, a wooden key rack has two hooks. A key labelled Cloud computer already hangs on the first hook. A second key labelled Your computer swings onto the empty hook after a tag reading Allow access flips over. A small card reading Delete? Ask first sways below.
A dot reaches your computer after you allow access; Cowork asks before deleting files. OpenAI and Anthropic docs, 28 Oct 2026.
+ +Our view: keep both on the asking setting for anything that sends messages or touches money. + +## Pick ChatGPT Dots if..., pick Claude Cowork if... + +Pick by the shape of the work. + +**Pick ChatGPT Dots if:** +- You pay for ChatGPT Pro outside the EEA, UK and Switzerland, or have Business Premium. +- You want one agent that watches a project and pings you when a decision is due. +- You want to reach it in Slack, Teams or by calling it. + +**Pick Claude Cowork if:** +- You want a finished spreadsheet, deck or report. +- You want to start on a $20 plan (28 Oct 2026) rather than one from $100. +- You want file access fenced to folders you connect. + +More options sit in [ChatGPT Dots alternatives](/blog/chatgpt-dots-alternatives/); [Claude Cowork vs Claude Code](/blog/claude-cowork-vs-claude-code/) covers Anthropic's other agent. + +## Can you run both? + +Yes, but they are separate subscriptions, so you pay OpenAI and Anthropic. + +Munder Difflin fits alongside either when you want agents on your own machine. It runs agents on engines such as Claude Code, Codex and Gemini CLI, takes work in from Slack and webhooks, and connects tools through MCP servers, skills and plugins. Today the agents run on your computer; a Cloud Office and a mobile app are coming soon. [How to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/) covers setup, and [Munder Difflin vs ChatGPT Dots](/blog/munder-difflin-vs-chatgpt-dots/) puts it next to Dots. + + diff --git a/blog/src/posts/claude-cowork-alternatives.md b/blog/src/posts/claude-cowork-alternatives.md new file mode 100644 index 0000000000..49eda4a9a9 --- /dev/null +++ b/blog/src/posts/claude-cowork-alternatives.md @@ -0,0 +1,92 @@ +--- +title: "Claude Cowork Alternatives: 6 AI Agents for Office Work, Free Picks Included" +seoTitle: "6 Claude Cowork Alternatives, Free and Open Source Included (Oct 2026)" +description: "Claude Cowork needs a paid plan and runs in Anthropic's cloud. Six alternatives for office work, from free local apps to ChatGPT Work, checked 27 Oct 2026." +date: 2026-10-27 +category: comparisons +categoryLabel: Comparisons +type: Non-technical +primaryKeyword: "claude cowork alternatives" +secondaryKeywords: ["claude cowork alternative", "free claude cowork alternative", "open source claude cowork alternative", "claude cowork alternative local", "apps like claude cowork", "hob vs claude cowork"] +tags: ["Comparisons", "AI Agents", "Open Source", "Local-First"] +faq: + - q: "Is there a free alternative to Claude Cowork?" + a: "Yes. Hob, Munder Difflin, Goose, OpenClaw and Hermes Agent are free and open source. Hob runs open weight models on your own computer, so it needs no subscription at all; the others use a model you bring: a subscription you already pay for, an API key or a local model. Claude Cowork itself is on paid Claude plans only, from Pro at $20 a month billed monthly (27 Oct 2026)." + - q: "Is there a Claude Cowork alternative that runs locally?" + a: "Hob is the most local: its Show HN post says the model runs on your own computer and the only parts that go online are web search, which you can turn off, and MCP connectors you add. Its docs add that it also goes online to download models and, with web access on, to install Python packages. Goose, Munder Difflin and OpenClaw also run on your computer and can work with local models." + - q: "What is the closest alternative to Claude Cowork from another big vendor?" + a: "ChatGPT Work. OpenAI's docs describe it as a way to delegate real work to ChatGPT: it uses your files, plugins and approved tools, and creates finished files you review. It is on ChatGPT Plus, Pro, Business and Enterprise, with Plus at $20 a month (27 Oct 2026)." + - q: "Which Claude Cowork alternative gives me a team of agents?" + a: "Munder Difflin. It runs a team of AI agents for all kinds of knowledge work, coding included: research, writing, analysis, ops and code, each agent with its own role, with schedules and Slack. Cowork can split one task across Claude sub-agents, all on Claude models." +--- + +The best Claude Cowork alternatives are Hob if you want a free app with the model on your own computer, [Munder Difflin](https://harnessmd.com/download) if you want a team of agents, and ChatGPT Work if you want a big vendor's cloud. Goose, OpenClaw and Hermes Agent round out the list. + +[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. New to Cowork? Start with [What is Claude Cowork?](/blog/what-is-claude-cowork/). Every fact below comes from pages opened on 27 Oct 2026. + +## Why look for a Claude Cowork alternative? + +Cowork is good at office work: you describe an outcome and Claude hands back finished documents, organized files or research. Three things send people looking elsewhere. From Anthropic's [help page](https://support.claude.com/en/articles/13345190-get-started-with-claude-cowork) and [pricing page](https://claude.com/pricing), read 27 Oct 2026: + +- **It needs a paid plan.** "Cowork is available to paid Claude plans (Pro, Max, Team, Enterprise) only." Pro is $20 a month billed monthly, or $17 a month billed annually. +- **The work runs in Anthropic's cloud.** "Claude's work runs on Anthropic's servers, in an isolated environment, and your sessions and files are saved to your Claude account." Local files and your browser need the Claude Desktop app open and connected. +- **It is one Claude.** The pricing page says "Claude Cowork is now just Claude": chat and Cowork are becoming one experience, rolling out to Pro and Max first. Claude can split a task across sub-agents, all on Claude models. + +## What are the best Claude Cowork alternatives? + +Six agents that take a task and hand back finished work, five of them free and open source. + +1. **[Hob](https://github.com/FrigadeHQ/hob).** A free, MIT licensed desktop app for Mac, Windows and Linux. Its README calls it "A free, open-source alternative to Claude and ChatGPT". Its Show HN post says it picks an open weight model that fits your computer (Gemma 4 or gpt-oss today), reads and changes files in a folder, runs Python in a sandbox, looks at images, searches the web and takes MCP connectors. v0.2.1 shipped on 26 Oct, and its Show HN post had more than 120 points on 27 Oct. +2. **[Munder Difflin](https://harnessmd.com/download).** A team of AI agents on your own computer, each with a role, for research, writing, email, analysis, ops and code. Agents run on engines such as Claude Code, Codex and Gemini CLI, take MCP servers, skills and plugins, and connect through Slack and webhooks. Work can run on schedules. The Cloud Office, coming soon, keeps agents working with your computer off. +3. **[ChatGPT Work](https://learn.chatgpt.com/docs/get-started-with-work).** OpenAI's answer to Cowork: "ChatGPT Work is a way to delegate real work to ChatGPT." It uses your files, plugins and approved tools to create finished files you review, and in the desktop app it can also use local files, apps and the browser. +4. **[Goose](https://github.com/aaif-goose/goose).** "a general-purpose AI agent that runs on your machine," with a desktop app for macOS, Linux and Windows, a CLI and an API. Its README names research, writing, automation and data analysis, not just code. Apache 2.0, part of the Agentic AI Foundation at the Linux Foundation, v1.56.0 on 23 Oct. +5. **[OpenClaw](https://github.com/openclaw/openclaw).** An open source assistant that runs on your own computer and answers in the chat apps you already use: Discord, iMessage, Slack, Teams, Telegram, WhatsApp and 20 or more others. MIT, v2026.10.7 on 24 Oct. Its README says it has "no paid tier, hosted service, or token". +6. **[Hermes Agent](https://github.com/NousResearch/hermes-agent).** Nous Research's agent that writes skills from experience and keeps memory across sessions. It can live on a small server and take work from Telegram, Discord, Slack, WhatsApp or Signal, with a built in scheduler. MIT, v0.22.5 on 23 Oct. + +
Animation. On a white background, six cards drop onto a shelf in order: Hob, Munder Difflin, ChatGPT Work, Goose, OpenClaw and Hermes Agent. A card labelled Claude Cowork sits apart on the left. Each of the six cards shows a small icon as it lands: a laptop, a group of desks, a cloud, a terminal, a chat bubble and a server.
Six Claude Cowork alternatives, each from its own README or docs, read 27 Oct 2026.
+ +## Where does the work run? + +This is the biggest split. Cowork runs tasks in Anthropic's cloud; ChatGPT Work can run them in OpenAI's cloud or locally through its desktop app. The open source picks run on hardware you control. + +- **On your computer, model included:** Hob. Its author says the only parts that go online are web search, which can be turned off in settings, and the MCP connectors you add. Its docs add that it also goes online to download models and, with web access on, to install Python packages. +- **On your computer, with a model you choose:** Goose, Munder Difflin and OpenClaw. Goose's README lists 15 or more providers, Ollama for local models among them, and says it can use an existing Claude, ChatGPT or Gemini subscription. +- **On a server you rent:** Hermes Agent's README, read 27 Oct 2026, says it runs "on a $5 VPS, a GPU cluster, or serverless infrastructure". +- **In the vendor's cloud:** Claude Cowork, and ChatGPT Work when you choose cloud Work; both reach your computer through their desktop apps. + +The trade is plain. Cloud tasks keep going when your laptop closes. Local tasks keep your files on hardware you control, though a hosted model still sees what you send it, and they stop when that machine does. + +
Animation. A white card is split into two lanes, Vendor cloud on top and Your hardware below. Name tags slide into place: Claude Cowork and ChatGPT Work go up to the cloud lane; Hob, Munder Difflin, Goose and OpenClaw drop into the hardware lane beside a laptop; Hermes Agent lands beside a small server box. A laptop lid closes and only the cloud lane keeps a moving progress bar.
Where each alternative runs its work, per each project's README or vendor docs, read 27 Oct 2026. ChatGPT Work also offers local Work in its desktop app.
+ +## What do Claude Cowork alternatives cost? + +Prices as listed on 27 Oct 2026: + +| Tool | Price | What you also need | +| --- | --- | --- | +| Claude Cowork | Claude Pro, $20 a month (or $17 a month billed annually) | Nothing else. | +| Hob | Free, MIT | A computer that can run an open weight model | +| Munder Difflin | Free and open source | An engine and a model you already use. | +| ChatGPT Work | ChatGPT Plus, $20 a month; Pro from $100 a month | Nothing else | +| Goose | Free, Apache 2.0 | A model provider or local model | +| OpenClaw | Free, MIT | A model provider or local model | +| Hermes Agent | Free, MIT | A model provider, and a server if you want it always on | + +ChatGPT Work prices come from OpenAI's [pricing page](https://learn.chatgpt.com/docs/pricing), which says Work and Codex share usage and lists Work on Plus, Pro, Business and Enterprise. + +
Animation. Two price tags hang on a white rail: Claude Pro 20 dollars a month and ChatGPT Plus 20 dollars a month. Five smaller tags swing in beside them, each reading Free: Hob, Munder Difflin, Goose, OpenClaw and Hermes Agent. A small mint label pops up under the free tags reading Bring a model.
Paid plans against free and open source picks, prices from Anthropic's and OpenAI's pricing pages on 27 Oct 2026.
+ +## Which Claude Cowork alternative should you pick? + +Start from what you want to hand off: + +- **One task at a time, no subscription, files on your machine:** Hob. +- **A team of agents for research, writing, ops and code, on your own computer:** Munder Difflin. See the [install guide](/blog/how-to-install-and-use-munder-difflin/). +- **Cowork's experience on OpenAI's models:** ChatGPT Work. +- **One open agent that works with any provider:** Goose. +- **An assistant you message from your chat apps:** OpenClaw. More picks in [OpenClaw alternatives](/blog/openclaw-alternatives/). +- **An agent that learns and lives on a server:** Hermes Agent. More picks in [Hermes Agent alternatives](/blog/hermes-agent-alternatives/). + +Still choosing between Anthropic's own tools? [Claude Cowork vs Claude Code](/blog/claude-cowork-vs-claude-code/) compares them. + + diff --git a/blog/src/posts/claude-cowork-vs-claude-code.md b/blog/src/posts/claude-cowork-vs-claude-code.md index 45f6c8437c..dddf8da77f 100644 --- a/blog/src/posts/claude-cowork-vs-claude-code.md +++ b/blog/src/posts/claude-cowork-vs-claude-code.md @@ -88,7 +88,7 @@ The Claude Code rows come from its [permissions page](https://code.claude.com/do Yes, and on one subscription. Pro lists Claude Code on the pricing page and Cowork on the help page, so you do not pay twice. Our view: plenty of people should use both, one for the spec and the spreadsheet, the other for the code. -If your work is code and you want more than one agent on it, that is a third kind of tool. [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 does not run Cowork. Start with [how to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/). +If you want more than one agent on the work, that is a third kind of tool. [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It does not run Cowork. Start with [how to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/), or see [Claude Cowork alternatives](/blog/claude-cowork-alternatives/). ## Claude Cowork vs OpenClaw: how do they differ? @@ -96,6 +96,8 @@ Cowork is hosted and paid, OpenClaw is self-hosted and free. The [OpenClaw READM The trade is control against convenience. OpenClaw's README warns that "Tools run on the host for the main session unless you configure sandboxing". Cowork runs in Anthropic's isolated environment, on Anthropic's terms and plans. GitHub showed OpenClaw release v2026.9.8, dated 3 Oct, when we checked on 6 Oct 2026. Its README says it was built for Molty, a space lobster AI assistant. See [OpenClaw alternatives](/blog/openclaw-alternatives/) for more options. +OpenAI's rival: [ChatGPT Dots vs Claude Cowork](/blog/chatgpt-dots-vs-claude-cowork/). + ## Who should pick which? Pick by what you need handed back. diff --git a/blog/src/posts/codex-cli-vs-claude-code.md b/blog/src/posts/codex-cli-vs-claude-code.md index 6b2f8f8c44..be0089684d 100644 --- a/blog/src/posts/codex-cli-vs-claude-code.md +++ b/blog/src/posts/codex-cli-vs-claude-code.md @@ -1,8 +1,8 @@ --- -title: "Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026)" -description: "Codex vs Claude Code, plans checked 5 Oct 2026: models, plans, usage limits, sandboxing, computer use, MCP and subagents in one dated table, then which to pick." +title: "Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026)" +description: "Codex vs Claude Code, checked 27 Oct 2026: both CLIs need a $20 a month plan billed monthly. Plans, usage limits, computer use and AGENTS.md compared." date: 2026-09-10 -updated: 2026-10-05 +updated: 2026-10-27 category: comparisons categoryLabel: Comparisons type: Technical @@ -11,96 +11,70 @@ secondaryKeywords: ["claude code vs codex", "codex cli vs claude code", "codex v tags: ["Comparisons", "Claude Code", "Codex", "Multi-Agent", "Engines"] faq: - q: "Is Codex better than Claude Code?" - a: "Neither wins outright as of 29 Sep 2026. Codex is the better fit if you want to try it free in the desktop app, limits published per model, and computer use that can run in the background on a Mac. Claude Code is the better fit if you want Opus 5.5 as the default model and computer use from inside the CLI on a Pro or Max plan." + a: "Neither wins outright as of 27 Oct 2026. Codex is the better fit if you want to try it free in the desktop app, limits published per model, and computer use that can run in the background on a Mac. Claude Code is the better fit if you want Opus 5.5 as the default model and computer use from inside the CLI on a Pro or Max plan." - q: "Is Codex CLI free?" - a: "Partly. OpenAI's help centre says Codex is included across ChatGPT plans, including Free and Go, but the Free ($0) and Go ($8 a month) cards on its Codex pricing page list the desktop app only, subject to rollout. Plus ($20 a month) is the first card that lists the CLI, or you can use an API key billed at API rates. Checked 5 Oct 2026. Claude Code is not on Claude's Free plan either; it starts at Pro." + a: "No. The Free ($0) and Go ($8 a month) cards on OpenAI's Codex pricing page list GPT-6 Luna in the desktop app only, subject to rollout. Plus ($20 a month) is the first card that lists the CLI, or you can use an API key billed at API rates. Checked 27 Oct 2026. Claude Code is not on Claude's Free plan either; it starts at Pro." - q: "Which has higher usage limits, Codex or Claude Code?" - a: "You can only compare them on paper for Codex, because OpenAI publishes estimated messages per five hours for each model and Anthropic does not. Both products meter a rolling five hour window plus a weekly limit, and both sell credits once you run out. The multipliers line up: 5x and 20x tiers on each side." + a: "Only Codex can be compared on paper, because OpenAI publishes estimated messages per five hours for each model on Plus and Anthropic does not. The heavy plans are built differently: OpenAI sells Pro at $100, $200 or $500 a month with no five hour limit for now, and Anthropic sells Max 5x at $100 and Max 20x at $200, five and 20 times Pro's per session usage (checked 27 Oct 2026)." - q: "Does Claude Code read AGENTS.md?" - a: "Yes, with a catch. Claude Code's memory docs, checked 29 Sep 2026, say it reads `AGENTS.md` by default only when there is no `CLAUDE.md`, `.claude/CLAUDE.md` or `CLAUDE.local.md` in the working directory or above it. If one exists, it reads the `CLAUDE.md` files only, unless that file imports `AGENTS.md` or you change the Project instructions setting. It needs Claude Code v2.1.277 or later." + a: "Yes, with a catch. Claude Code's memory docs, checked 27 Oct 2026, say it reads AGENTS.md by default only when there is no CLAUDE.md or CLAUDE.local.md in the working directory or above it. If one exists, it reads the CLAUDE.md files only, unless that file imports AGENTS.md or you change the Project instructions setting. It needs Claude Code v2.1.277 or later." - q: "Does Codex CLI have computer use?" - a: "Not in the CLI. OpenAI's docs put Computer Use in the ChatGPT desktop app, with Codex, on macOS and Windows in supported regions, checked 29 Sep 2026. Claude Code has it inside the CLI, but only on macOS, as a research preview on Pro and Max plans." + a: "Not that OpenAI documents. OpenAI's docs put Computer Use in the ChatGPT desktop app, with ChatGPT Work and Codex, on macOS and Windows in supported regions, checked 27 Oct 2026. Claude Code has it inside the CLI, but only on macOS, as a research preview on Pro and Max plans." - q: "Can I run Codex and Claude Code together?" - a: "Yes. Munder Difflin, free and open source, runs Codex and Claude Code agents side by side on one office floor, each in its own terminal, and you choose the CLI per agent." + a: "Yes. Munder Difflin is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. You choose the engine per agent, so Codex and Claude Code agents can work side by side." --- -Codex and Claude Code are close enough in September 2026 that your plan should decide: pick Codex for a free desktop tier, limits published per model and background computer use on a Mac; pick Claude Code for Opus 5.5 by default and computer use inside the terminal. +The Codex CLI and Claude Code both need a $20 a month plan, billed monthly, in October 2026, so your plan should decide: pick Codex for a free desktop tier, limits published per model and background computer use on a Mac; pick Claude Code for Opus 5.5 by default and computer use inside the terminal. -You can also skip the choice: switch between the two by hand, or run both in [Munder Difflin](https://harnessmd.com/download), free and open source, which puts Codex and Claude Code agents side by side on one floor, each in its own terminal. Everything below was checked on 29 Sep 2026 against each vendor's own pricing pages and docs. +You can also skip the choice. [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer, with Codex and Claude Code among its engines. Everything below was checked on 27 Oct 2026 against each vendor's own pricing pages and docs. -## Codex vs Claude Code at a glance (checked 29 Sep 2026) +## Codex vs Claude Code at a glance (checked 27 Oct 2026) | | Codex (OpenAI) | Claude Code (Anthropic) | |:--|:--|:--| -| Where it runs | CLI, IDE extension, ChatGPT desktop app, web, iOS | CLI, IDE extensions, desktop app, web | -| Source | CLI is Apache-2.0 on GitHub | Closed, Anthropic commercial terms | -| Models | GPT-6 Astra, GPT-6 Sol, GPT-6 Luna, GPT-5.6 family. The pricing page still lists GPT-5.5 (retires 14 Oct 2026), GPT-5.4 and GPT-5.4 mini | Opus 5.5 is the default on Pro, Max, Team and Enterprise, plus Sonnet and Haiku. Fable 5.1 can bill to usage credits, depending on plan and seat tier | +| Source | CLI is Apache 2.0 on GitHub | Closed; the repo says use is subject to Anthropic's Commercial Terms | +| Models | GPT-6 Astra, GPT-6.1 Sol, GPT-6.1 Terra, GPT-6 Sol, GPT-6 Luna, and the GPT-5.6 family | Opus 5.5 by default on the Anthropic API, plus Sonnet 5.5 and Haiku 5.5 | | First plan that lists the CLI | Plus, $20 a month (the Free and Go cards list the desktop app only) | Pro, $20 a month | -| Heavy plans | Pro at $100, $200 or $500 a month; Astra Ultrafast on the $500 plan only (checked 5 Oct 2026) | Max 5x at $100, Max 20x at $200 | -| Limits | Published ranges per model per 5 hours, weekly limits may apply, credits after | 5 hour session limit plus a weekly limit, no published message counts, credits after | -| Sandbox | On by default: Seatbelt on macOS, bubblewrap on Linux and WSL2, native Windows sandbox | Built in Bash sandbox (Seatbelt, bubblewrap), set up with `/sandbox`. No native Windows | -| Approval controls | `--sandbox` and `--ask-for-approval`, two flags | One `--permission-mode` with six modes | -| Computer use | ChatGPT desktop app on macOS and Windows, background on macOS, not in the CLI | In the CLI on macOS, research preview, Pro and Max only. Desktop app: macOS and Windows | -| MCP | Yes, STDIO and streamable HTTP | Yes, local stdio and remote HTTP | -| Subagents | On by default in current releases, plus custom agents | Built in and custom, each in its own context window | -| Project instructions | `AGENTS.md` | `CLAUDE.md`. Reads `AGENTS.md` only when no `CLAUDE.md` exists, by default | +| Heavy plans | Pro at $100, $200 or $500 a month; Ultrafast mode on Pro $500 only | Max 5x at $100, Max 20x at $200 | +| Limits | Published ranges per model per five hours on Plus, weekly limits may apply, credits after | Per session usage plus a weekly limit, no published message counts | +| Computer use | ChatGPT desktop app on macOS and Windows, background on macOS; OpenAI's docs list no CLI support | In the CLI on macOS, research preview, Pro and Max only | +| Project instructions | `AGENTS.md` | `CLAUDE.md`; reads `AGENTS.md` only when no `CLAUDE.md` exists, by default | -Sources: OpenAI's [Codex pricing page](https://learn.chatgpt.com/docs/pricing), Anthropic's [Max plan article](https://support.claude.com/en/articles/11049741-what-is-the-max-plan) and Claude Code's model configuration docs, all checked 29 Sep 2026. Sandbox flags come from `codex --help` and `claude --help`, run the same day. +Sources: OpenAI's [Codex pricing page](https://learn.chatgpt.com/docs/pricing), Anthropic's [Max plan article](https://support.claude.com/en/articles/11049741-what-is-the-max-plan) and Claude Code's [model configuration docs](https://code.claude.com/docs/en/model-config), all read 27 Oct 2026. ## Which one has higher usage limits, Codex or Claude Code? -Only Codex lets you compare on paper, because OpenAI publishes estimated local messages per five hours for each model and Anthropic publishes none. OpenAI's pricing page, checked 5 Oct 2026, lists these ranges for Plus and says Pro plans currently have no five hour limit: +Only Codex lets you compare on paper, because OpenAI publishes estimated local messages per five hours for each model and Anthropic publishes none. OpenAI's pricing page, read 27 Oct 2026, lists these ranges for Plus and says Pro plans currently have no five hour limit: | Model | Plus, local messages per five hours | |:--|:--| | GPT-6 Astra | 5 to 45 | | GPT-6.1 Sol | 15 to 160 | +| GPT-6.1 Terra | 35 to 285 | | GPT-6 Sol | 15 to 150 | | GPT-6 Luna | 350 to 3,000 | -The same page says weekly limits may also apply, and that Plus and Pro users can buy credits when they run out. The spread inside each range comes from task size, context and reasoning, so a long Astra session lands near the bottom end. +The same page says these are estimates, not fixed limits, that weekly limits may also apply, and that Plus and Pro users who reach their limit can buy credits. A long Astra session lands near the bottom of its range. -Anthropic describes its limits as multipliers instead. Max 5x gives five times Pro's per session usage and Max 20x gives twenty times, both with a weekly limit across all models that resets at a fixed time for your account, per its Max plan article checked 29 Sep 2026. Anthropic's Opus 5.5 announcement on 22 Sep 2026 also raised five hour limits on Pro, Max, Team and seat based Enterprise. Claude Code and the Claude apps share one pool, so a long chat eats into your coding time. Our [Claude Code Max plan tips](/blog/claude-code-max-plan-tips/) cover how to stretch it, and the [Codex Max plan tips](/blog/codex-max-plan-tips/) do the same for OpenAI's side. +Anthropic describes its limits as multipliers instead. Its Max plan article, read 27 Oct 2026, says Max 5x includes five times the Pro plan's per session usage and Max 20x includes 20 times. Claude Code and the Claude apps share one pool, so a long chat eats into your coding time. Our [Claude Code Max plan tips](/blog/claude-code-max-plan-tips/) cover how to stretch it, and the [Codex Max plan tips](/blog/codex-max-plan-tips/) do the same for OpenAI's side. -### Can new subscribers still get ChatGPT Pro 200? - -Yes. OpenAI's [Pro tiers article](https://help.openai.com/en/articles/9793128), checked 5 Oct 2026, says "Pro 200 is also available for new subscriptions again". New subscriptions get a lower usage allowance than the plan used to carry. The same article lists a new Pro 500 at $500 a month, the only Pro tier with Astra Ultrafast. The pause [Fortune reported on 11 Sep 2026](https://fortune.com/2026/09/11/openai-astra-chatgpt-pro-pause/) is over. If you burn through Pro 100, step up, buy credits, or use an API key. +So the tiers do not line up one to one. On 27 Oct 2026 OpenAI had three Pro prices, $100, $200 and $500 a month, and only Pro $500 gets Ultrafast mode. Anthropic had two Max prices on 27 Oct 2026, $100 and $200. If you burn through either, step up, buy credits, or use an API key. ## Does Codex or Claude Code have better computer use? -Codex does more on a Mac, and Claude Code is the only one of the two that does it from the terminal. OpenAI's [Computer Use docs](https://learn.chatgpt.com/docs/computer-use), checked 29 Sep 2026, put the feature in the ChatGPT desktop app with Codex, on macOS and Windows, in supported regions. On macOS it can run a scoped task in the background while you keep working elsewhere. On Windows it takes over the active desktop. - -Claude Code's [computer use docs](https://code.claude.com/docs/en/computer-use), checked the same day, describe a built in `computer-use` MCP server you enable from `/mcp`. It is a macOS research preview for Pro and Max plans only, not Team or Enterprise, and it will not run under `-p`. Only one session can hold the screen at a time, and other apps are hidden while Claude works. If you want an agent clicking through your app while you type in another window, Codex's desktop app is the better fit. If you want the agent that just wrote the Swift to launch it and click every button in the same terminal session, that is Claude Code. - -## How do sandboxing and approvals differ? - -Codex splits the decision into two flags and Claude Code folds it into one. We ran both help screens on 29 Sep 2026 with `codex-cli 0.153.4` and Claude Code `2.1.284` installed: - -```text -codex --help - -s, --sandbox - [possible values: read-only, workspace-write, danger-full-access] - -a, --ask-for-approval - - on-request: The model decides when to ask the user for approval - - never: Never ask for user approval - -claude --help - --permission-mode (choices: "acceptEdits", "auto", - "bypassPermissions", "manual", - "dontAsk", "plan") -``` +Codex does more on a Mac, and Claude Code is the only one of the two that does it from the terminal. OpenAI's [Computer Use docs](https://learn.chatgpt.com/docs/computer-use), read 27 Oct 2026, put the feature in the ChatGPT desktop app with ChatGPT Work and Codex, on macOS and Windows, in supported regions, as a plugin you install. On macOS it can run a scoped task in the background while you keep working. On Windows the target app has to stay visible on the active desktop. -Codex applies its sandbox in the default permissions mode, so every command it spawns, `git` and test runners included, inherits the boundary. Claude Code's Bash sandbox uses the same OS primitives (Seatbelt on macOS, bubblewrap on Linux and WSL2) but you set it up with `/sandbox`. Both kept a loud escape hatch, `--dangerously-bypass-approvals-and-sandbox` and `--dangerously-skip-permissions`. Somebody in both design rooms wanted you to feel that flag before you typed it. +Claude Code's [computer use docs](https://code.claude.com/docs/en/computer-use), read the same day, call it "a research preview on macOS that requires a Pro or Max plan", not on Team or Enterprise, and not with the `-p` flag. Only one session can hold the screen at a time. If you want an agent clicking through your app while you type in another window, Codex's desktop app is the better fit. If you want the agent that just wrote the Swift to launch it and click every button in the same terminal session, that is Claude Code. {% img "note-1" %} ## Does Claude Code read `AGENTS.md`? -Yes, but only when there is no `CLAUDE.md`, by default. Claude Code's memory docs, checked 29 Sep 2026, say it reads `AGENTS.md` when there is no `CLAUDE.md`, `.claude/CLAUDE.md` or `CLAUDE.local.md` in your working directory or above it. If one of those exists, it reads your `CLAUDE.md` files only. To share one file, import `AGENTS.md` from `CLAUDE.md`, or change the Project instructions setting to read both. Direct reading needs Claude Code v2.1.277 or later. Codex uses `AGENTS.md` natively and generates one with `/init`, so a repo with only an `AGENTS.md` now briefs both agents. +Yes, but only when there is no `CLAUDE.md`, by default. Claude Code's [memory docs](https://code.claude.com/docs/en/memory), read 27 Oct 2026, say it reads `AGENTS.md` when there is no `CLAUDE.md` or `CLAUDE.local.md` in your working directory or above it. If one exists, it reads your `CLAUDE.md` files only. To share one file, import `AGENTS.md` from `CLAUDE.md`, or change the Project instructions setting. Direct reading needs Claude Code v2.1.277 or later. Codex reads `AGENTS.md` before doing any work, so a repo with only an `AGENTS.md` briefs both agents. ## Is Codex CLI free? -Partly: the Free and Go cards list the desktop app, not the CLI. OpenAI's pricing page, checked 5 Oct 2026, lists Free at $0 and Go at $8 a month, both with GPT-6 Luna in the desktop app subject to rollout, and Plus at $20 a month for Codex on the web, in the CLI, in the IDE extension and on iOS. You can also run the CLI on an API key and pay API rates. Claude Code is not on Claude's Free plan; it starts at Pro. +No: the Free and Go cards list the desktop app, not the CLI. OpenAI's pricing page, read 27 Oct 2026, lists Free at $0 and Go at $8 a month, both with GPT-6 Luna in the desktop app subject to rollout, and Plus at $20 a month for Codex on the web, in the CLI, in the IDE extension and on iOS. You can also run the CLI on an API key and pay API rates. Claude Code is not on Claude's Free plan; it starts at Pro. {% img "note-2" %} @@ -110,16 +84,15 @@ Partly: the Free and Go cards list the desktop app, not the CLI. OpenAI's pricin * You want to try Codex free in the desktop app before you pay. * You like knowing roughly how many messages each model buys you per five hours. * You want computer use that runs in the background on a Mac. -* You want to read the CLI's source (Apache-2.0). +* You want to read the CLI's source (Apache 2.0). **Pick Claude Code if:** * You want Opus 5.5 as your default model without touching settings. * You want the agent to drive native apps and simulators from the same terminal session. * You already pay for Claude and want chat and coding on one plan. -* You want one permission dial instead of two, and a sandbox you switch on per project. -If you are still choosing between whole categories of tools, not just these two engines, the [multi-agent tools roundup](/blog/best-claude-code-multi-agent-tools/) is the wider map, and [Claude Code vs Antigravity](/blog/claude-code-vs-antigravity/) covers Google's agent. +If you are still choosing between whole categories of tools, the [multi agent tools roundup](/blog/best-claude-code-multi-agent-tools/) is the wider map, and [Claude Code vs Antigravity](/blog/claude-code-vs-antigravity/) covers Google's agent. ## Can you run Codex and Claude Code together? -Yes, and for a lot of teams that is the honest answer. Munder Difflin (as of 0.5.3) lets you pick the CLI per agent, Claude Code or Codex among others, and runs each one as a real terminal process on the same floor. A Codex agent can take the UI bug while a Claude Code agent takes the refactor. When one plan hits its weekly limit, the other keeps working. +Yes, and for a lot of teams that is the honest answer. In Munder Difflin you pick the engine per agent, Claude Code or Codex among others, and each one runs as a real terminal process on the same floor. A Codex agent can take the UI bug while a Claude Code agent takes the refactor, and other agents can handle research, writing or ops. When one plan hits its weekly limit, the other keeps working. diff --git a/blog/src/posts/codex-vs-chatgpt.md b/blog/src/posts/codex-vs-chatgpt.md new file mode 100644 index 0000000000..c3970c5214 --- /dev/null +++ b/blog/src/posts/codex-vs-chatgpt.md @@ -0,0 +1,110 @@ +--- +title: "Codex vs ChatGPT: What Is the Difference? (Oct 2026)" +seoTitle: "Codex vs ChatGPT (2026): Difference, Plans and Coding" +description: "Codex is OpenAI's coding agent and ChatGPT is its assistant. Which plans include Codex, the limits, where each runs and which to use, checked 28 Oct 2026." +date: 2026-10-28 +category: comparisons +categoryLabel: Comparisons +type: Non-technical +primaryKeyword: "codex vs chatgpt" +secondaryKeywords: ["what is codex", "is codex part of chatgpt", "codex vs chatgpt for coding", "do i need chatgpt plus for codex", "openai codex vs chatgpt"] +tags: ["Comparisons", "Codex", "CLI Agents", "Cost"] +faq: + - q: "Is Codex part of ChatGPT?" + a: "Yes. OpenAI's docs say ChatGPT Work and Codex are included in your ChatGPT Free, Go, Plus, Pro, Business, Edu or Enterprise plan, and the ChatGPT desktop app asks you to choose ChatGPT or Codex. The Codex CLI is also an open source project on GitHub under Apache-2.0. Checked 28 Oct 2026." + - q: "Do I need ChatGPT Plus for Codex?" + a: "Not to try it. On 28 Oct 2026 OpenAI's pricing page listed Free at $0 and Go at $8 a month with GPT-6 Luna in the desktop app, subject to rollout. Plus at $20 a month (28 Oct 2026) is the first card that lists Codex on the web, in the CLI, in the IDE extension and on iOS. An API key works without a plan." + - q: "Is Codex better than ChatGPT for coding?" + a: "For work inside a repository, yes. OpenAI's docs say to use Codex when you want to build, debug, test or review software and work directly with code and developer tools. ChatGPT Work can also run code and review it in the environment you select." + - q: "What are the Codex usage limits on Plus?" + a: "OpenAI publishes estimates, not fixed limits. On 28 Oct 2026 its pricing page estimated 15 to 160 local messages per five hours on GPT-6.1 Sol and 350 to 3,000 on GPT-6 Luna for Plus, said weekly limits may also apply, and said Pro plans currently have no five hour limit." + - q: "Can I use Codex without a ChatGPT account?" + a: "Yes, with an API key. OpenAI's pricing page says an API key gives you Codex in the CLI, SDK or IDE extension, billed at API pricing, with no cloud based features such as GitHub code review or Slack. Checked 28 Oct 2026." +--- + +Pick Codex if you want an agent that works inside a code repository from your terminal, editor or the cloud; pick ChatGPT for answers, drafts and finished documents. ChatGPT Free, Go, Plus, Pro, Business, Edu and Enterprise include Codex, on Free and Go in the desktop app subject to rollout, checked 28 Oct 2026. + +You can also run Codex next to other agents in [Munder Difflin](https://harnessmd.com/download), which is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. This page sits in our [Comparisons hub](/blog/topics/comparisons/). For Codex alone, start with [what is Codex](/blog/what-is-codex/). + +## Codex vs ChatGPT at a glance (checked 28 Oct 2026) + +Codex is the coding agent and ChatGPT is the assistant around it; they share your account and your usage. + +| | Codex | ChatGPT | +| --- | --- | --- | +| What it is | OpenAI's coding agent | OpenAI's assistant: Chat for answers, Work for finished tasks | +| Use it to | Build, debug, test or review software | Ask, draft, research, analyze, create files | +| Where it runs | Desktop app, CLI, IDE extension, Codex Cloud, mobile | Web, desktop app, mobile | +| Sign in | ChatGPT account or API key | ChatGPT account | +| Plans | Free, Go, Plus, Pro, Business, Edu, Enterprise, or an API key | The same ChatGPT plans | +| Usage | Shared with ChatGPT Work | Work uses Codex's pricing, credits and limits | +| Open source | CLI under Apache-2.0 | Not listed on OpenAI's open source page | + +## What is the difference between Codex and ChatGPT? + +The difference is the job: ChatGPT talks and produces documents, Codex works on code with developer tools. OpenAI's [Use ChatGPT page](https://learn.chatgpt.com/docs/use-chatgpt) puts it in one line: "Use Chat for a question or back-and-forth. Turn on Work in the switcher when you want ChatGPT to carry a larger task through to a reviewable result. Select Codex when you want developer views or more technical detail, especially for software development." + +So is Codex part of ChatGPT? Yes. The [desktop app page](https://learn.chatgpt.com/docs/app) tells you to "Choose ChatGPT or Codex" when you send your first message. The [pricing page](https://learn.chatgpt.com/docs/pricing) says "ChatGPT Work usage inside ChatGPT uses the same pricing, credits, and usage limits as Codex." + +Codex also lives outside the app. The [Codex README](https://github.com/openai/codex) says "Codex CLI is a coding agent from OpenAI that runs locally on your computer." GitHub listed the repo under Apache-2.0 on 28 Oct 2026, with release rust-v0.165.0 published on 27 Oct. + +
Animation. On a white background, a toolbox opens and its top tray, labelled ChatGPT, slides out holding a notepad and a pencil. Under it a second tray, labelled Codex, rises with a wrench and a small card that reads terminal.
One app, two trays: you choose ChatGPT or Codex in the desktop app. OpenAI's desktop app docs, 28 Oct 2026.
+ +## Do you need a ChatGPT plan to use Codex? + +No, an API key works too, but a plan decides where you can use Codex. OpenAI's pricing page listed these plans, in US dollars, on 28 Oct 2026: + +- **Free at $0 and Go at $8 a month (28 Oct 2026):** "GPT-6 Luna at Standard speed in the desktop app, subject to rollout". +- **Plus at $20 a month (28 Oct 2026):** "Codex on the web, in the CLI, in the IDE extension, and on iOS", automatic code review and Slack, GPT-6.1 Sol and GPT-6 Luna. +- **Pro from $100 a month (28 Oct 2026):** "Plans at $100, $200, or $500 USD per month", with Ultrafast mode on Pro $500. +- **Business at $20 per user a month (28 Oct 2026):** for two or more users billed annually, or $25 billed monthly. +- **API key:** Codex "in the CLI, SDK, or IDE extension", with "No cloud-based features", billed at API pricing. + +Limits are estimates, not caps. For Plus and Standard Business, the page estimated local messages "per five-hour period": 15 to 160 on GPT-6.1 Sol and 350 to 3,000 on GPT-6 Luna. It adds that "Weekly limits may also apply" and that "Pro plans currently have no five-hour limit." [Codex pricing](/blog/codex-pricing/) has the credit rates. + +
Animation. On a white background, a wooden ladder leans on a wall with rungs labelled Free 0 dollars, Go 8 dollars, Plus 20 dollars and Pro from 100 dollars, as listed on 28 Oct 2026. A small card that reads CLI climbs rung by rung and settles on Plus.
Free and Go list the desktop app; Plus at $20 a month was the first card listing the CLI on OpenAI's pricing page, 28 Oct 2026.
+ +## Where does each one run? + +ChatGPT runs on the web, the desktop app and mobile; Codex adds your terminal, your editor and OpenAI's cloud. The desktop app comes "for macOS or Windows", with a Linux installation guide. + +- **Codex CLI:** the [CLI page](https://learn.chatgpt.com/docs/codex/cli) says Codex can "inspect files, make edits, and run the tools already installed on your machine", and `codex exec` runs it in scripts and CI. +- **IDE extension:** per the [IDE page](https://learn.chatgpt.com/docs/codex/ide), "VS Code and compatible editors use the Codex extension; Xcode and JetBrains IDEs provide their own integrations." +- **Codex Cloud:** each task "has its own workspace and can keep working while your computer is asleep", according to the [cloud page](https://learn.chatgpt.com/docs/cloud). +- **Mobile:** OpenAI's [mobile page](https://learn.chatgpt.com/docs/mobile) says the ChatGPT mobile app can start, guide and approve Codex tasks that run "in the cloud or on a connected computer", with availability depending on rollout and your workspace settings. + +Our [Codex CLI install guide](/blog/how-to-install-codex-cli/) covers the terminal setup. + +
Animation. On a white background, a tram map draws two lines. A tram labelled Codex stops in turn at Terminal, Editor, Desktop app and Cloud. A second tram labelled ChatGPT runs a shorter line through Web, Desktop app and Mobile, and both lines share the Desktop app stop.
Codex runs in the CLI, IDE extension, desktop app and Codex Cloud; both share the desktop app. OpenAI's Codex docs, 28 Oct 2026.
+ +## Which is better for coding? + +Codex, for anything that touches a repository. OpenAI's [dots page](https://learn.chatgpt.com/docs/dots) lists Codex for when you want to "build, debug, test, or review software and work directly with code and developer tools". Model choice differs too: the pricing page says "GPT-6.1 Sol is available in Work and Codex, not Chat." + +ChatGPT Work can still handle some code. The Use ChatGPT page says it can "Run code and shell commands, analyze data, inspect files, review code, and work with repositories your selected environment can access." The [Work page](https://learn.chatgpt.com/docs/get-started-with-work) also says that if you used Codex for non coding work, "you can stay in Codex or use ChatGPT Work instead." + +Our view: Chat to think it through, Codex to change the code, Work for the write up. Same bill, three tabs. + +## Pick Codex if..., pick ChatGPT if... + +Pick by what you need handed back: a diff or a document. + +**Pick Codex if:** +- You want an agent that edits files and runs commands in your repo. +- You want to script it in CI with `codex exec` or an API key. +- You want cloud tasks that keep going while your laptop sleeps. + +**Pick ChatGPT if:** +- You want an answer, a brainstorm or a draft (Chat). +- You want a deck, report or spreadsheet you can review (Work). +- You are on Free or Go and mostly ask questions. + +For other coding agents, see [Codex vs Claude Code](/blog/codex-cli-vs-claude-code/) and [Codex alternatives](/blog/codex-alternatives/). + +## Can you run Codex next to other agents? + +Yes. Codex is one CLI among several, and they can run side by side. + +Munder Difflin is one place to do that. It runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI, takes work in from Slack and webhooks, and connects tools through MCP servers, skills and plugins. The agents run on your computer today; a Cloud Office and a mobile app are coming soon. [How to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/) walks through setup. + + diff --git a/blog/src/posts/gemini-4-argon-vs-claude-opus-5-5.md b/blog/src/posts/gemini-4-argon-vs-claude-opus-5-5.md index 3ab06924d8..82d9379d90 100644 --- a/blog/src/posts/gemini-4-argon-vs-claude-opus-5-5.md +++ b/blog/src/posts/gemini-4-argon-vs-claude-opus-5-5.md @@ -96,6 +96,6 @@ Names matter too. Meta's table this week listed Claude Opus 5.5 at 59.6 on Termi Our view: pick by job, not by logo. On Google's figures, Gemini 4 Argon suits long documents and, until December, tight budgets. Claude Opus 5.5 suits terminal work, and GPT-6 Astra leads the OSWorld-2.0 offline subset, one of the two computer use rows. -Mixing models by task is covered in [model routing](/blog/do-more-with-less-model-routing/), and Google's own coding tool in [Gemini CLI vs Claude Code](/blog/gemini-cli-vs-claude-code/). +Mixing models by task is covered in [model routing](/blog/do-more-with-less-model-routing/), and Google's own coding tool in [Gemini CLI vs Claude Code](/blog/gemini-cli-vs-claude-code/). For an open weight model against Opus, see [Mistral Large 4 vs Claude Opus 5.5](/blog/mistral-large-4-vs-claude-opus-5-5/). diff --git a/blog/src/posts/gemini-4-argon.md b/blog/src/posts/gemini-4-argon.md index e5ffb56995..c6c069c193 100644 --- a/blog/src/posts/gemini-4-argon.md +++ b/blog/src/posts/gemini-4-argon.md @@ -24,11 +24,13 @@ faq: Our view: Gemini 4 Argon is worth a test on your longest agent jobs, but the launch price is a countdown. Google put Gemini 4 Argon on general release on 13 October 2026 at $2 input and $10 output per 1M tokens through 30 November 2026. Checked 13 Oct 2026. -New 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. Gemini 4 Argon is already in the app's model pickers for Antigravity and Cursor, added by a [pull request](https://github.com/HarnessMD/munder-difflin/pull/738) merged on 13 Oct 2026. The [install guide](/blog/how-to-install-and-use-munder-difflin/) covers setup, and the [Concepts hub](/blog/topics/concepts/) explains the terms. +New models end up inside the agents you run. [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It runs engines such as Claude Code, Codex and Gemini CLI. Gemini 4 Argon is already in the app's model pickers for Antigravity and Cursor, added by a [pull request](https://github.com/HarnessMD/munder-difflin/pull/738) merged on 13 Oct 2026. 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 Gemini 4 Argon? -Gemini 4 Argon is Google's newest top model, built for long jobs in coding, office work and security. Google's [developer post](https://blog.google/innovation-and-ai/technology/developers-tools/build-with-gemini-4-argon/) of 13 October 2026 calls it "our frontier model for complex workflows across real-world software engineering, enterprise knowledge work, and cybersecurity defense". +Gemini 4 Argon is Google's top model on general release, built for long jobs in coding, office work and security. Google's [developer post](https://blog.google/innovation-and-ai/technology/developers-tools/build-with-gemini-4-argon/) of 13 October 2026 calls it "our frontier model for complex workflows across real-world software engineering, enterprise knowledge work, and cybersecurity defense". + +Announced 28 Oct 2026, Google's next frontier model: [Gemini 4 Carbon](/blog/gemini-4-carbon/). Google's posts do not say why it is called Argon. The element is a noble gas that reacts with almost nothing, which is not the sales pitch here. diff --git a/blog/src/posts/gemini-4-carbon.md b/blog/src/posts/gemini-4-carbon.md new file mode 100644 index 0000000000..ed7b4fb359 --- /dev/null +++ b/blog/src/posts/gemini-4-carbon.md @@ -0,0 +1,101 @@ +--- +title: "Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)" +seoTitle: "Gemini 4 Carbon (Oct 2026): Price, Access, Scores vs Argon" +description: "Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon." +date: 2026-10-29 +category: concepts +categoryLabel: Concepts +type: Non-technical +primaryKeyword: "gemini 4 carbon" +secondaryKeywords: ["gemini 4 carbon price", "gemini 4 carbon release date", "gemini 4 carbon vs argon", "gemini 4 carbon api", "fairwind program", "gemini 4 carbon benchmarks"] +tags: ["Concepts", "AI Agents", "Models"] +faq: + - q: "When was Gemini 4 Carbon released?" + a: "Google announced Gemini 4 Carbon on 28 October 2026. Its post says Carbon goes to a subset of cyber defenders starting that week, then gradually to additional trusted partners through the Fairwind Program, and to developers, businesses and consumers later, with no date given." + - q: "How much does Gemini 4 Carbon cost?" + a: "Google's launch post of 28 Oct 2026 says Carbon will launch at the same introductory price as Argon: $2 per million input tokens and $10 per million output tokens, with cached input at 95% off the input price. After the introductory period, $4 input and $20 output per million tokens will apply, the same post of 28 Oct 2026 says, with no end date given." + - q: "Can I use Gemini 4 Carbon in the Gemini API today?" + a: "Not as a general developer. On 29 Oct 2026 Google's Gemini API pricing page listed Gemini 4 Argon but not Carbon, and the launch post says Carbon reaches developers, businesses and consumers after early access for cyber defenders." + - q: "Is Gemini 4 Carbon better than Gemini 4 Argon?" + a: "On Google's own figures, yes on safety and security tests: Carbon has a 0.0% attack success rate on Gray Swan's indirect prompt injection test against 0.7% for Argon, about 2x fewer unsupported claims, and more than 2x the success rate on secure code in internal tests. These are Google's numbers, published 28 Oct 2026." + - q: "What should I use until Carbon is open?" + a: "Gemini 4 Argon. On 29 Oct 2026 Google's pricing page listed it on the paid tier of the Gemini API at $2 input and $10 output per million tokens through 30 November 2026, and $4 and $20 from 1 December 2026." +--- + +Gemini 4 Carbon is Google's new frontier model, announced 28 Oct 2026, and you cannot use it yet unless you are one of the cyber defenders in its first group. Google's post of 28 Oct 2026 says it will launch at Argon's introductory price, $2 input and $10 output per million tokens. + +New models end up inside the agents you run. [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It runs engines such as Claude Code, Codex and Gemini CLI. It does not offer Gemini 4 Carbon: on 29 Oct 2026 Google had published no Carbon model ID for developers. 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 Gemini 4 Carbon? + +Gemini 4 Carbon is the model Google placed above [Gemini 4 Argon](/blog/gemini-4-argon/), aimed at long engineering jobs and security work. Google's [launch post](https://blog.google/innovation-and-ai/models-and-research/gemini-models/introducing-gemini-4-carbon/) of 28 October 2026 calls it "our strongest model with state-of-the-art cybersecurity and long horizon capabilities". + +The post says Carbon is "built for sustained agentic workflows" and that Google's teams have seen it "run for days" on multi step engineering tasks, such as finding the root cause of subtle bugs across large codebases. It builds on Argon, which the same post says launched two weeks earlier. + +
Animation. On a white background, a two step podium stands empty. A block labelled Argon drops onto the lower step with a tag Open now, then a block labelled Carbon drops onto the higher step with a tag Early access.
Carbon sits above Argon in Google's Gemini 4 line, per Google's launch post of 28 Oct 2026.
+ +## Who can use Gemini 4 Carbon? + +Only a small group for now. Google says that "starting this week" it will give Carbon to a subset of cyber defenders, then "gradually phase access to additional trusted partners" through its [Fairwind Program](https://deepmind.google/fairwind-program/). Developers, businesses and consumers come after that, "as soon as possible", with no date. Until then nobody outside those groups can use it, in the Gemini API or anywhere else. + +Google says it is gathering feedback and working on guardrails first, and that it takes part in the U.S. government's voluntary process for testing models before release. On 29 Oct 2026 the Gemini API [models page](https://ai.google.dev/gemini-api/docs/models) and [pricing page](https://ai.google.dev/gemini-api/docs/pricing) listed Gemini 4 Argon but had no Carbon entry and no Carbon model ID. + +Argon followed the same path. Google's [developer post](https://blog.google/innovation-and-ai/technology/developers-tools/build-with-gemini-4-argon/) of 13 October 2026 opened it on the paid tier of the Gemini API in Google AI Studio and Android Studio, and to Google AI Ultra subscribers in AI Studio and Google Antigravity. + +
Animation. On a white background, a row of three ticket stubs is torn off one at a time. The first reads Cyber defenders and is stamped with a mint tick. The second reads Trusted partners and the third reads Developers, both marked Later.
Google's rollout order for Carbon: cyber defenders, then trusted partners through Fairwind, then developers, per its post of 28 Oct 2026.
+ +## How much will Gemini 4 Carbon cost? + +The same as Argon at launch. Google's post of 28 Oct 2026 says Carbon "will launch at the same introductory price" as Argon: $2 per million input tokens and $10 per million output tokens, with cached input tokens at 95% off the input price. Its footnote adds that after the introductory period, $4 input and $20 output per million tokens apply (28 Oct 2026). + +The post does not say when Carbon's introductory period ends. For Argon, the pricing page read on 29 Oct 2026 gives the dates: + +| Gemini 4 Argon, paid tier | Through 30 Nov 2026 | From 1 Dec 2026 | +| --- | --- | --- | +| Input, per 1M tokens | $2.00 | $4.00 | +| Output, per 1M tokens, thinking included | $10.00 | $20.00 | +| Context caching, per 1M tokens | $0.10 | $0.20 | + +The same page says Argon "is not available on the Free tier". [Gemini 4 Argon pricing](/blog/gemini-4-argon-pricing/) has the batch prices. + +## How does Gemini 4 Carbon compare to Argon? + +On Google's numbers, Carbon is stronger on security work and safer in agent tasks. The test rows come from Google's launch post of 28 October 2026; Argon's access and price dates come from its developer post and the pricing page read on 29 Oct 2026. + +| Checked 29 Oct 2026 | Gemini 4 Carbon | Gemini 4 Argon | +| --- | --- | --- | +| Who can use it | A subset of cyber defenders | Paid tier of the Gemini API | +| Launch price per 1M tokens | $2 in, $10 out (introductory) | $2 in, $10 out through 30 Nov 2026 | +| Gray Swan indirect prompt injection, attack success | 0.0% | 0.7% | +| Unsupported claims, internal test | About 2x fewer | Baseline | +| Secure code success, internal test | More than 2x | Baseline | + +Google also gives these Carbon results on their own, from external tests it says were "evaluated without guardrails": 88.2% on SEC-bench Pro for finding vulnerabilities, 54.8% on ExploitGym for exploitation, and 71.0% on Collinear's CWE-bench for patching. Google says Carbon ranks first on version 5.0 of the Artificial Analysis Intelligence Index at 59, and fourth on WebDev Arena at 1768, up 89 points. + +
Animation. On a white background, a balance scale tips as two weights drop onto its pans. The weight labelled Argon reads 0.7%, the weight labelled Carbon reads 0.0%, and a card below reads Prompt injection.
Gray Swan indirect prompt injection attack success: 0.7% for Argon, 0.0% for Carbon, per Google's post of 28 Oct 2026.
+ +## What did Google change in how Carbon behaves? + +Google lists these changes in its post of 28 Oct 2026, each from its own testing: + +- **Fewer shortcuts.** Successful cheating on Terminal-Bench 4.0 fell to 0.0%, with attempts at 0.4%, and high severity misalignment alerts in live coding with Google's teams dropped "by almost 80%". +- **More honest output.** About 2x fewer unsupported claims than Argon. Carbon puts caveats in the deliverable or lists what is still needed instead of fabricating. +- **Asks when unclear.** It fetches sources and shows the user discrepancies before acting. +- **Stays in scope.** Overreach fell 26% and under service 29%. + +Our view: these are vendor numbers from one post, so read them as Google's claims until outside tests appear. For long agent jobs today, Argon is the one you can actually open. [How to use Gemini 4 Argon](/blog/how-to-use-gemini-4-argon/) covers setup, and [Gemini 4 Argon vs Claude Opus 5.5](/blog/gemini-4-argon-vs-claude-opus-5-5/) puts it beside Anthropic's model. + +## Gemini 4 Carbon at a glance, checked 29 Oct 2026 + +| | Gemini 4 Carbon | +| --- | --- | +| Maker | Google DeepMind | +| Announced | 28 Oct 2026 | +| Access | Cyber defenders first, then trusted partners through Fairwind, then developers | +| Launch price | $2 input and $10 output per 1M tokens, introductory | +| Price after the introductory period | $4 input and $20 output per 1M tokens | +| Cached input | 95% off the input price | +| Public model ID | None published, checked 29 Oct 2026 | +| In the Gemini API pricing page | Not yet | + + diff --git a/blog/src/posts/how-to-run-mistral-large-4.md b/blog/src/posts/how-to-run-mistral-large-4.md new file mode 100644 index 0000000000..5fe72903f2 --- /dev/null +++ b/blog/src/posts/how-to-run-mistral-large-4.md @@ -0,0 +1,101 @@ +--- +title: "How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)" +seoTitle: "How to Run Mistral Large 4 Locally (2026): Memory, GGUF, vLLM" +description: "Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026." +date: 2026-10-29 +category: guides +categoryLabel: Guides +type: Technical +primaryKeyword: "how to run mistral large 4 locally" +secondaryKeywords: ["mistral large 4 gguf", "mistral large 4 hardware requirements", "mistral large 4 vllm", "mistral large 4 llama.cpp", "mistral large 4 weights download", "mistral large 4 mac studio"] +tags: ["Guides", "Open Source", "Local-First", "AI Agents"] +faq: + - q: "How much memory do you need to run Mistral Large 4?" + a: "At least about 256 GB of RAM plus VRAM, or unified memory, for the smallest file. Unsloth's guide of 29 Oct 2026 says its 1 bit UD-IQ1_S quant uses about 233 GB of disk and should fit on 256 GB, including a Mac Studio. The 4 bit UD-Q4_K_XL file is 605 GB and the full FP8 checkpoint about 1.06 TB." + - q: "Can Mistral Large 4 run on a Mac?" + a: "Only a Mac with 256 GB or more of unified memory, using a heavily quantized GGUF. Unsloth names a Mac Studio for its 233 GB 1 bit file, and llama.cpp enables Metal by default on macOS. ggml-org lists its 381 GB Q2_K and 298 GB IQ2_XXS files as fitting in 512 GB of unified memory." + - q: "What GPUs does vLLM support for Mistral Large 4?" + a: "vLLM's recipe, read 29 Oct 2026, lists validated runs on NVIDIA GB300, 8x B300, 8x B200, two nodes of 8 H200 with FP8, and AMD Instinct MI350X with 8 GPUs. It says FP8 needs about 128 GiB of weights per GPU on 8 GPUs and NVFP4 about 76 GiB." + - q: "Is Mistral Large 4 free for commercial use?" + a: "Mostly. Mistral's post of 29 Oct 2026 says the Mistral Ecosystem Open-Weight license, a modified MIT license, lets you use, modify, fine tune and commercialize the model, with one condition: a business that runs a Model as a Service offering needs a separate commercial license from Mistral." + - q: "Is it cheaper to use the Mistral API than to self host?" + a: "For most people, yes. Mistral's post of 29 Oct 2026 prices the API at $0.70 per million input tokens, $0.07 cached and $2.10 output, and the model card recommends the Mistral API if local serving is subpar. Self hosting pays off when the data must stay on your own hardware." +--- + +You can run Mistral Large 4 yourself from today, but only with about 256 GB of memory or more: a 1 bit GGUF on a large Mac Studio, a 2 to 4 bit GGUF on a workstation, or the full checkpoint on 8 data center GPUs with vLLM. Mistral released the weights on 29 Oct 2026, checked the same day. + +If you want a team of agents on your own work, [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. For what the model is and its scores, see [Mistral Large 4](/blog/mistral-large-4/). This guide sits in our [Guides hub](/blog/topics/guides/). + +
Animation. On a white background, five suitcases ride a baggage carousel, smallest first, tagged 233 GB 1 bit, 378 GB 2 bit, 605 GB 4 bit, 1.1 TB 8 bit and 2.1 TB 16 bit. A shelf labelled 256 GB memory accepts only the smallest case. Tapping a case shows which memory size it needs.
GGUF file sizes from Unsloth and ggml-org on Hugging Face, read 29 Oct 2026.
+ +## What do you need to run Mistral Large 4? + +Total memory decides it: RAM plus VRAM, or unified memory, has to be larger than the file you load. The [model card](https://huggingface.co/mistralai/Mistral-Large-4-1T-A52B), read 29 Oct 2026, describes a mixture of experts model with "49 billion active parameters per token" out of about 1 trillion, a 1M token context window and text plus image input. + +Only the active part runs for each token, but all of it has to sit in memory. That is why a model with 49B active parameters still needs hundreds of gigabytes. + +| File (checked 29 Oct 2026) | Size | Source | +| --- | --- | --- | +| UD-IQ1_S, 1 bit | 233 GB | Unsloth | +| UD-Q2_K_XL, 2 bit | 378 GB | Unsloth | +| UD-Q4_K_XL, 4 bit | 605 GB | Unsloth | +| Q8_0, 8 bit | 1.12 TB | ggml-org | +| NVFP4 checkpoint | about 610 GB | vLLM recipe | +| FP8 checkpoint | about 1.06 TB | vLLM recipe | + +[Unsloth's guide](https://unsloth.ai/docs/models/mistral-large-4) says the 1 bit file "should fit on 256GB RAM including a Mac Studio or 2x NVIDIA DGX Sparks", and that its 2 bit file keeps 95.6% of top 1 accuracy against the original. Longer contexts need more memory on top of the file. + +## How to run it on one machine with llama.cpp + +Use a GGUF file and a llama.cpp build with Mistral Large 4 support. ggml-org publishes [GGUF files](https://huggingface.co/ggml-org/Mistral-Large-4-1T-A52B-GGUF) from 298 GB up, and Unsloth publishes its own. Unsloth's example serves the 2 bit file with a 32K context: + +```bash +./llama.cpp/build/bin/llama-server \ + -hf unsloth/Mistral-Large-4-1T-A52B-GGUF:UD-Q2_K_XL \ + --ctx-size 32768 --temp 1.0 --top-p 0.95 --top-k 0 --min-p 0.0 \ + --chat-template-kwargs '{"reasoning_effort":"high"}' \ + --host 127.0.0.1 --port 8080 +``` + +That starts a chat page at http://127.0.0.1:8080 and an API at /v1. On a Mac, Unsloth says "Metal support is enabled by default". If you run out of memory, it says to lower the context size or pick a smaller quant. Unsloth Desktop does the same on macOS, Windows and Linux without the command line. + +Two settings come from the model card: temperature 1.0 and top_p 0.95 for every reasoning effort. The ggml-org page adds that "Reasoning cannot be turned off": low, medium and high are the choices, and high is the default. + +## How to serve it on GPUs with vLLM + +Mistral recommends [vLLM](https://recipes.vllm.ai/mistralai/Mistral-Large-4-1T-A52B) for production. The model card serves it from the official Docker image across 8 GPUs: + +```bash +docker run --runtime nvidia --gpus all \ + -v ~/.cache/huggingface:/root/.cache/huggingface \ + -p 8000:8000 --ipc=host \ + vllm/vllm-openai:mistral-large-4 \ + --model mistralai/Mistral-Large-4-1T-A52B \ + --tensor-parallel-size 8 \ + --tool-call-parser mistral --reasoning-parser mistral \ + --enable-auto-tool-choice --gpu-memory-utilization 0.85 +``` + +The two parser flags are required for tool calls and to keep reasoning out of the answer. vLLM's recipe lists validated hardware: NVIDIA GB300, 8x B300, 8x B200, two nodes of 8 H200 for FP8, and AMD Instinct MI350X. It says FP8 "needs ~128 GiB of weights per GPU on 8 GPUs", NVFP4 about 76 GiB. The recipe validated contexts up to 256K, not the full 1M. SGLang works too, with its own image. + +
Animation. On a white background, a long loaf labelled Mistral Large 4 is sliced into eight equal pieces that drop into an eight cup baking tin, each cup labelled GPU. A switch flips the label from FP8, 128 GiB a cup, to NVFP4, 76 GiB a cup, and the slices shrink.
vLLM's recipe, read 29 Oct 2026: about 128 GiB of weights per GPU for FP8 on 8 GPUs, about 76 GiB for NVFP4.
+ +## What does the licence allow? + +Almost everything except selling the model as a hosted service. Mistral's [post of 29 Oct 2026](https://mistral.ai/news/mistral-large-4-oss/) calls it the Mistral Ecosystem Open-Weight license, "a modified MIT license", free to "use, modify, fine-tune, and commercialize". The one condition: "businesses that operate a Model-as-a-Service offering must obtain a separate commercial license from Mistral". The [licence text](https://huggingface.co/mistralai/Mistral-Large-4-1T-A52B/blob/main/LICENSE) is in the repo. + +
Animation. On a white background, a wooden signpost rises with four arms that read Use, Modify, Fine tune and Sell, each with a tick. A fifth arm reading Model as a Service swings out with a small note that says separate licence from Mistral.
Mistral's post of 29 Oct 2026 lists one condition: a separate licence for Model as a Service businesses.
+ +## Should you self host or use the API? + +Use the API unless the data has to stay on hardware you control. Mistral's post priced it at $0.70 per million input tokens, $0.07 cached and $2.10 output on 29 Oct 2026, and the model card says to use the Mistral API "if local serving is subpar". The post also lists OpenRouter, Microsoft Foundry and NVIDIA hosted endpoints. + +Self hosting earns its cost when the model must run under your own control, or when you want to fine tune it; Unsloth, Axolotl and TRL all list guides. + +## Can you use it with coding agents? + +Yes, through any agent that accepts an OpenAI compatible base URL; both servers above expose one. Mistral points to its own coding agent, Mistral Vibe. + +Munder Difflin runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI, takes work in from Slack and webhooks, and connects tools through MCP servers, skills and plugins. Some of its engines accept a local base URL; [running Munder Difflin on open models](/blog/run-munder-difflin-on-open-models/) has the wiring. A Cloud Office and a mobile app are coming soon; [how to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/) covers setup. For a lighter local setup, see [how to connect Ollama to Claude Code](/blog/how-to-connect-ollama-to-claude-code/). + + diff --git a/blog/src/posts/how-to-use-claude-code-plan-mode.md b/blog/src/posts/how-to-use-claude-code-plan-mode.md index 332e3f1e22..75a1d50098 100644 --- a/blog/src/posts/how-to-use-claude-code-plan-mode.md +++ b/blog/src/posts/how-to-use-claude-code-plan-mode.md @@ -1,8 +1,9 @@ --- -title: "Claude Code Planning Mode: How to Use Claude Plan Mode" -description: "Claude Code plan mode, checked 29 Sep 2026: the Shift+Tab shortcut, --permission-mode plan, defaultMode, what it blocks, the approval options and opusplan." +title: "Claude Code Plan Mode: Shortcut, Exit and Default (Oct 2026)" +seoTitle: "Claude Code Plan Mode: Shift+Tab, Exit and Default Setting (Oct 2026)" +description: "Press Shift+Tab until the status bar says plan mode on. How to enter, exit and default to Claude Code plan mode, what it blocks, checked 27 Oct 2026." date: 2026-09-11 -updated: 2026-09-29 +updated: 2026-10-27 category: guides categoryLabel: Guides type: Technical @@ -13,49 +14,35 @@ faq: - q: "What is Claude Code plan mode?" a: "It is one of Claude Code's permission modes. Claude reads files and runs shell commands to explore, then writes a plan, but does not edit your source until you approve that plan." - q: "What is the shortcut for plan mode in Claude Code?" - a: "Shift+Tab cycles permission modes, and plan mode is three presses away from auto mode, the mode new interactive sessions start in on every plan and provider from Claude Code 2.1.284, when no mode is configured. On Windows terminals where Shift+Tab does not register, Alt+M does the same job. You can also type /plan, or start with claude --permission-mode plan." + a: "Shift+Tab cycles permission modes. A new terminal session with no mode set starts in auto mode, and from there plan mode is three presses away. On Windows terminals where Shift+Tab does not register, Alt+M does the same job. You can also prefix a prompt with /plan, or start with claude --permission-mode plan." - q: "How do you exit plan mode in Claude Code?" a: "Approve the plan, or press Shift+Tab to leave without approving anything. The approval prompt offers Yes, and use auto mode, Yes, manually approve edits, and No, keep planning. Approving switches the session to the mode you picked and Claude starts editing." - q: "Can Claude run shell commands in plan mode?" - a: "Yes. Plan mode blocks edits to your source, not exploration. Read-only commands run, and other shell commands either go to the auto mode classifier (when auto mode is available and useAutoModeDuringPlan is on, the default) or ask you first." + a: "Yes. Plan mode blocks edits to your source, not exploration. Read only commands run, and other shell commands either go to the auto mode classifier (when auto mode is available and useAutoModeDuringPlan is on, the default) or ask you first." - q: "Which model does Claude Code use in plan mode?" - a: "The session's model, unless you pick the opusplan alias, which runs Opus while you plan and Sonnet once you approve. A Haiku session also moves up to Sonnet for planning. The built-in Plan subagent inherits the main conversation's model." - - q: "Does plan mode use more tokens?" - a: "It adds a research phase before any edit, and the Plan subagent's requests count toward the same usage limits as your main conversation, per the subagents docs checked 29 Sep 2026. For a change you could describe in one sentence, Anthropic's own best practices page says to skip the plan." + a: "The session's model, unless you pick the opusplan alias, which runs Opus while you plan and Sonnet once you approve. A Haiku session also moves up to Sonnet for planning." + - q: "Which Claude Code version made auto mode the starting mode?" + a: "The sources differ by one release. The permission modes docs, read 27 Oct 2026, say v2.1.283 or later. The changelog lists 2.1.283 for third party providers and sessions with telemetry off, and 2.1.284 for every plan and provider." --- -Claude Code planning mode (plan mode in the docs) is the permission mode where Claude reads your code, runs exploratory commands and writes a plan, but cannot edit your source until you approve it. Enter it with Shift+Tab, the `/plan` prefix, or `claude --permission-mode plan`, and make it the default with `"defaultMode": "plan"`. +Claude Code plan mode is the permission mode where Claude reads your code, runs exploratory commands and writes a plan, but cannot edit your source until you approve it. Press Shift+Tab until the status bar shows `⏸ plan mode on`, type `/plan`, or start with `claude --permission-mode plan`. -You can do all of this by hand, or use [Munder Difflin](https://harnessmd.com/download), free and open source, to run several Claude Code agents side by side and choose which ones plan first. The last section shows how. - -Everything below was checked against Claude Code's official docs and changelog on 29 Sep 2026, with Claude Code 2.1.284 installed: - -``` -$ claude --version -2.1.284 (Claude Code) - -$ claude --help | grep -A3 -- '--permission-mode ' - --permission-mode Permission mode to use for the session - (choices: "acceptEdits", "auto", - "bypassPermissions", "manual", - "dontAsk", "plan") -``` +[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. Its Claude Code agents can plan first too; the last section shows how. Everything below was checked against Anthropic's [permission modes docs](https://code.claude.com/docs/en/permission-modes) and changelog on 27 Oct 2026. ## What is the Claude Code plan mode shortcut? -Shift+Tab is the shortcut, and plan mode sits three presses away from where a new session starts. Since 2.1.284 (28 Sep 2026), a terminal or VS Code session with no permission mode set starts in auto mode on every plan and provider, or in Manual if auto mode isn't available. From auto the first press goes to Manual, the second to accept edits, the third to plan, and the status bar shows `⏸ plan mode on`; a session that starts in Manual reaches plan in two presses. On Windows terminals that don't send Shift+Tab, use Alt+M (interactive mode docs, checked 29 Sep 2026). +Shift+Tab is the shortcut, and plan mode sits three presses away from where a new session starts. A terminal or VS Code session with no permission mode set starts in auto mode, or in Manual if auto mode isn't available. From auto, the first press goes to Manual, the second to accept edits and the third to plan. On Windows terminals that don't send Shift+Tab, use Alt+M (interactive mode docs, read 27 Oct 2026). + +Which version made auto the starting mode? The docs say "With Claude Code v2.1.283 or later, auto mode is the built-in starting permission mode for interactive terminal and VS Code sessions." The [changelog](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md) lists that change for third party providers and telemetry off sessions in 2.1.283, and for every plan and provider in 2.1.284. -| Way in or out (Claude Code 2.1.284, checked 29 Sep 2026) | What it does | +| Way in or out (checked 27 Oct 2026) | What it does | | :-- | :-- | -| `Shift+Tab` (Alt+M on some Windows terminals) | Cycles auto → Manual → accept edits → plan, then any optional modes | -| `/plan` or `/plan fix the auth bug` | Enters plan mode; with a description it starts on that task | -| `claude --permission-mode plan` | Starts the session in plan mode; works with `-p` too | +| `Shift+Tab` (Alt+M on some Windows terminals) | Cycles auto, Manual, accept edits, plan, then any optional modes | +| `/plan fix the auth bug` | Plans that one prompt | +| `claude --permission-mode plan` | Starts the session in plan mode | | `"defaultMode": "plan"` under `permissions` in `.claude/settings.json` | Every terminal session in that project starts in plan mode | | `claudeCode.initialPermissionMode: "plan"` | Same for the VS Code extension, which ignores project settings here | | Approve the plan | Leaves plan mode and switches to the mode you picked | -| `Shift+Tab` again | Leaves plan mode without approving anything | - -The mode Anthropic used to call `default` is now labelled Manual. The rename landed in 2.1.200 on 3 Jul 2026, and `manual` works as an alias wherever you type the value, while hooks and the SDK still see `default` ([Choose a permission mode](https://code.claude.com/docs/en/permission-modes), checked 29 Sep 2026). Guides that say "Normal mode" describe the old label. ## How do you make plan mode the default? @@ -69,62 +56,39 @@ Put it in the project's settings file. Terminal sessions started in that folder } ``` -Save that as `.claude/settings.json` in the repo. It also works from `~/.claude/settings.json` for every project on the machine. +Save that as `.claude/settings.json` in the repo. It also works from `~/.claude/settings.json` for every project on the machine. The docs add one catch: project settings honour every starting mode except `auto` and `bypassPermissions`, so `plan` is fine there. ## What can Claude do in plan mode? -Claude can read, search and run shell commands to explore, but it cannot edit your source. That is where several popular guides go wrong: plan mode does not ban Bash. The official docs say Claude "reads files, runs shell commands to explore, and writes a plan, but does not edit your source". What happens to a given command depends on the session: +Claude can read, search and run shell commands to explore, but it cannot edit your source. Plan mode does not ban Bash. The docs say Claude "reads files, runs shell commands to explore, and writes a plan, but does not edit your source". What happens to a given command depends on the session, and the first case that matches applies: -* **Auto mode available and `useAutoModeDuringPlan` on** (the default): a classifier reviews each shell command except critical path removals instead of prompting you. Approved ones run, rejected ones are blocked. Since 2.1.218 (22 Jul 2026) this also covers commands the static analyzer cannot prove read-only. -* **Auto mode unavailable, or that setting off**: anything outside the built-in read-only command set asks you first. -* **Interactive terminal session with bypass permissions available**: plan mode's blocks are not enforced at all. More on that below. +* **Interactive terminal session with bypass permissions available**: neither the classifier nor a prompt applies, and edits are not blocked until approval. More on that below. +* **Auto mode available and `useAutoModeDuringPlan` on** (the default): a classifier reviews each shell command except critical path removals instead of prompting you. Approved ones run, rejected ones are blocked. +* **Auto mode unavailable, or that setting off**: anything outside the built in read only command set asks you first. -For big codebases Claude hands the reading to the built-in Plan subagent, which has read-only tools (Write and Edit denied) and its own context window. The one file plan mode does write is the plan itself, by default under `~/.claude/plans/`. Set `plansDirectory` to a path inside the project, such as `./plans`, if you want the plan in the repo for a teammate to read before anyone approves it, the approach in [approving AI agents without a queue](/blog/human-in-the-loop-approving-ai-agents/). +The one file plan mode does write is the plan itself, by default under `~/.claude/plans/`. Set `plansDirectory` to a path inside the project, such as `./plans`, if you want a teammate to read the plan before anyone approves it, the approach in [approving AI agents without a queue](/blog/human-in-the-loop-approving-ai-agents/). {% img "note-1" %} -## What does a plan mode run actually print? - -It prints a plan and a refusal to edit, even when you ask for the edit outright. On 11 Sep 2026, with Claude Code 2.1.268, we made a two-function `hello.py` in a scratch folder and ran: - -``` -$ claude -p --permission-mode plan "Add a multiply function to hello.py right now, actually edit the file." -I haven't edited `hello.py` yet. Plan mode is on, and it blocks every file change except the plan file, even when you ask me to edit right away. I also can't switch plan mode off from here: the tool for that isn't available in this session. -... -The plan is saved at `~/.claude/plans/add-a-multiply-function-buzzing-dolphin.md` (home path shortened to `~`). It includes a one-line `python3` check that `multiply(3, 4) == 12`, and that `add` and `subtract` still work. -``` - -Told to edit the file, it wrote a memo about editing the file. Fitting, for a paper company's blog. The plan file is still on disk, and on 29 Sep 2026 its first lines read: - -``` -$ head -4 ~/.claude/plans/add-a-multiply-function-buzzing-dolphin.md -# Add `multiply` to hello.py - -## Context -The user wants a `multiply` function in `hello.py`, next to the existing `add` and `subtract` functions. Plan mode was on when they asked, so this plan records the change to make once edits are allowed. -``` - -A headless run has no approval step. Claude writes the plan, prints a summary and exits. The headless docs add that for `-p` "the built-in starting permission mode is Manual on every plan, so pass the permission mode you want" ([Run Claude Code programmatically](https://code.claude.com/docs/en/headless), checked 29 Sep 2026). - ## How do you exit plan mode in Claude Code? Approve the plan, or press Shift+Tab to leave without approving it. When the plan is ready, Claude Code asks how to proceed: -* **Yes, and use auto mode**: approve and continue in auto mode. It reads **Yes, auto-accept edits** when auto mode isn't available, and offers bypass permissions instead if you launched with them. +* **Yes, and use auto mode**: approve and continue in auto mode. It reads **Yes, auto-accept edits** when auto mode isn't available, and offers bypass permissions instead if you started the session with them. * **Yes, manually approve edits**: approve, then review each edit. * **No, keep planning**: stay in plan mode and say what to change. -Press Ctrl+G at that prompt to open the plan in your own editor and change it before Claude starts. If you want a fresh context for the build, set `showClearContextOnPlanAccept` to `true` and the list gains a first option that approves and clears the planning context. The old **No, refine with Ultraplan on Claude Code on the web** option is gone: Anthropic removed the Ultraplan research preview in 2.1.222 (4 Aug 2026), so any guide that lists four options is out of date. +Press Ctrl+G at that prompt to open the plan in your own editor and change it before Claude starts. If you want a fresh context for the build, set `showClearContextOnPlanAccept` to `true` and the list gains a first option that approves and clears the planning context. {% img "note-2" %} ## Which model does Claude Code use for planning? -Your session's model, unless you choose `opusplan`. That alias runs Opus while you plan and switches to Sonnet once you approve, set with `/model opusplan` or `--model opusplan` ([Model configuration](https://code.claude.com/docs/en/model-config), checked 29 Sep 2026). A Haiku session is upgraded to Sonnet for planning by default. If you're watching a usage limit, the [Max plan tips](/blog/claude-code-max-plan-tips/) cover when Opus planning pays for itself. +Your session's model, unless you choose `opusplan`. That alias runs Opus while you plan and switches to Sonnet once you approve, set with `/model opusplan` or `--model opusplan` ([Model configuration](https://code.claude.com/docs/en/model-config), read 27 Oct 2026). A Haiku session moves up to Sonnet for planning. The [Max plan tips](/blog/claude-code-max-plan-tips/) cover when Opus planning is worth the usage. ## Plan mode vs auto mode vs accept edits: which should you use? -Use them in order. Plan mode decides what to change, accept edits auto-approves file writes and simple filesystem commands, and auto mode has a classifier review actions instead of you. Anthropic's [best practices page](https://code.claude.com/docs/en/best-practices) says planning helps most "when you're uncertain about the approach, when the change modifies multiple files, or when you're unfamiliar with the code being modified", and to skip it when you could describe the diff in one sentence. +Use them in order. Plan mode decides what to change, accept edits approves file writes, and auto mode has a classifier review actions instead of you. When you don't yet know what you want, Anthropic's [best practices page](https://code.claude.com/docs/en/best-practices) suggests asking Claude to interview you until it could write a spec, then building from that spec in a fresh session. * **Pick plan mode if** the change touches several files, the code is new to you, or you want to redirect Claude before anything is written. * **Pick accept edits if** you already know the change and will read `git diff` afterwards. @@ -132,22 +96,20 @@ Use them in order. Plan mode decides what to change, accept edits auto-approves If one risky command is the real worry, a [PreToolUse hook](/blog/claude-code-hooks-explained/) blocks just that call, and [why Claude Code keeps asking for permission](/blog/why-does-claude-code-keep-asking-for-permission/) explains the prompts you'll see in Manual mode. New to the tool? Start with [how to use Claude Code](/blog/how-to-use-claude-code/). -## What changed in plan mode in the last six months? +## What changed in plan mode recently? -The mechanics held steady; the names and defaults around them moved. From the [Claude Code changelog](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md), with release dates from npm, checked 29 Sep 2026: +The names and defaults moved, per the changelog read 27 Oct 2026: -| Version | Released | Change | -| :-- | :-- | :-- | -| 2.1.200 | 3 Jul 2026 | `default` mode renamed Manual; `manual` accepted as an alias | -| 2.1.212 | 16 Jul 2026 | Fixed plan mode running `touch`, `rm` and similar without a prompt | -| 2.1.218 | 22 Jul 2026 | Classifier, not a prompt, judges commands it can't prove read-only | -| 2.1.222 | 4 Aug 2026 | Ultraplan removed, along with its approval option | -| 2.1.280 | 22 Sep 2026 | VS Code gains a typed `/plan` | -| 2.1.283 | 25 Sep 2026 | Auto start extended to third party providers and telemetry off sessions | -| 2.1.284 | 28 Sep 2026 | Auto start on every plan and provider | +| Version | Change | +| :-- | :-- | +| 2.1.200 | `default` mode renamed Manual; `manual` accepted as an alias | +| 2.1.218 | Classifier, not a prompt, judges commands it can't prove read only | +| 2.1.222 | Ultraplan removed | +| 2.1.283 | Auto start on third party providers and telemetry off sessions | +| 2.1.284 | Auto start on every plan and provider | ## Does plan mode work with Munder Difflin? -Yes, once you stop Munder Difflin from skipping permissions for that agent. We read this in the source at tag v0.5.3 of the app repo. Auto Mode is on by default (`autoMode: true` in `src/main/config.ts`), and with it on, Claude Code agents launch with `--permission-mode bypassPermissions` (`src/shared/agentProvider.ts`). Each agent is an interactive `claude` in its own terminal, which is exactly the case where Claude Code doesn't enforce plan mode's blocks: Claude is told to plan, but an edit it attempts runs without asking. +Yes, once you stop Munder Difflin from skipping permissions for that agent. In the app source on main, read 27 Oct 2026, Auto Mode is on by default (`autoMode: true` in `src/main/config.ts`), and with it on, Claude Code agents launch with `--permission-mode bypassPermissions` (`src/shared/agentProvider.ts`). Each agent is an interactive `claude` in its own terminal, which is exactly the case where Claude Code doesn't enforce plan mode's blocks. -Two ways around it. In the Add Agent dialog the command field is editable (`src/renderer/src/components/AddAgentModal.tsx`), so replace the prefilled flag with `--permission-mode plan` for the agents you want planning first. Or switch Auto Mode off in Settings, start the agent again, and cycle into plan mode with Shift+Tab in its terminal. Worker requests that already name a `--permission-mode` keep it (`src/main/workerLaunch.ts`). What Munder Difflin doesn't have yet is its own plan review screen: approval happens in Claude Code's prompt, inside the agent's terminal. Running several sessions at once is where a plan per agent pays off, as covered in [managing multiple Claude Code sessions](/blog/manage-multiple-claude-code-sessions/). +Two ways around it. In the Add Agent dialog the command field is editable, so replace the prefilled flag with `--permission-mode plan` for the agents you want planning first. Or switch Auto Mode off in Settings, start the agent again, and cycle into plan mode with Shift+Tab in its terminal. Approval happens in Claude Code's own prompt, inside the agent's terminal. For running several sessions at once, see [managing multiple Claude Code sessions](/blog/manage-multiple-claude-code-sessions/). diff --git a/blog/src/posts/meta-muse-alternatives.md b/blog/src/posts/meta-muse-alternatives.md index dbe85d1cce..5b465b47cf 100644 --- a/blog/src/posts/meta-muse-alternatives.md +++ b/blog/src/posts/meta-muse-alternatives.md @@ -1,117 +1,100 @@ --- -title: "Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse" -seoTitle: "7 Best Meta Muse Alternatives in 2026 (Free and Open Source)" -description: "Meta Muse is US only and trains on your chats by default. Seven alternatives, from open source agents that run on your own computer to hosted ones from OpenAI, Google and SpaceXAI." +title: "Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)" +seoTitle: "7 Best Meta Muse Alternatives (Oct 2026): Free and Open Source" +description: "Meta Muse is in the US and Canada and trains on your chats by default. Seven alternatives, open source and hosted, with access and plans checked 30 Oct 2026." date: 2026-09-26 +updated: 2026-10-30 category: comparisons categoryLabel: Comparisons type: Non-technical primaryKeyword: "meta muse alternatives" secondaryKeywords: ["meta muse alternative", "open source meta muse alternative", "free meta muse alternative", "meta muse not available in my country", "apps like meta muse", "meta muse competitors"] tags: ["Comparisons", "AI Agents", "Open Source", "Local-First"] -ogImage: "https://munderdiffl.in/blog/assets/media/meta-muse-alternatives/lead-still.png" +ogImage: "https://munderdiffl.in/blog/assets/media/meta-muse-alternatives/hero.png" author: name: Chaitanya Giri initials: CG faq: - q: "Why can't I use Meta Muse?" - a: "At launch on 8 September 2026 Muse was open only to people in the US aged 18 and over. Meta says more countries will be added over time but has not given dates." + a: "Muse launched in the US on 8 September 2026, and iPhone in Canada reported it reached Canada on 18 September. RuntimeWire reported on 23 October that a Meta executive said it was launching in Japan. Meta has not published a full country list or dates for other countries." - q: "Is there an open source alternative to Meta Muse?" - a: "Yes. OpenClaw is the closest: an open source personal assistant that runs on your own computer and replies in WhatsApp, Telegram, Slack, iMessage and more. For work agents rather than errands, Munder Difflin is free and open source and runs a team of agents on your machine." + a: "Yes. OpenClaw is the closest: an open source assistant, MIT licensed, that runs on your own computer and replies in WhatsApp, iMessage, Telegram, Slack and more than 20 other channels. Munder Difflin is a free and open source desktop app for a team of agents, and Hermes Agent and OpenMausBot are open source too." - q: "Does Meta Muse train on my data?" - a: "By default, yes. Meta's help page says Muse conversations can be used to train its models unless you turn that off in Settings, and that Meta removes details like names, emails and phone numbers first. Meta says Muse does not share your chats or VM data with its ad systems." + a: "By default, yes. Meta's help page, read 30 Oct 2026, says the setting that lets Meta use your Muse interactions to improve its models is on when you first use Muse, and you can turn it off in Settings under Data controls. Meta says Muse does not share your conversations or VM data with its ad systems." - q: "What is the best free alternative to Meta Muse?" - a: "For personal errands, OpenClaw and Hermes Agent are free and open source; you pay only for the AI model, or nothing with a local one. For work agents, Munder Difflin is free and uses the AI engines you already have." -thumb: "/blog/assets/media/meta-muse-alternatives/lead-still.png" + a: "OpenClaw, Munder Difflin, Hermes Agent and OpenMausBot are free and open source. With OpenClaw, Hermes Agent and OpenMausBot you pay only for the AI model you connect; Munder Difflin uses engines such as Claude Code, Codex and Gemini CLI. Checked 30 Oct 2026." --- -
TL;DR

For a personal assistant you own, try OpenClaw. For a team of work agents on your own computer, try Munder Difflin. For a hosted assistant from a big lab, try ChatGPT Work, Gemini Spark, Grok Bot or Claude Cowork. For memory that grows with you, try Hermes Agent.

+Our view: the best Meta Muse alternative depends on why you are leaving. Outside Muse's countries, start with OpenClaw, an open source assistant on your own computer. For a team of agents on your work, try Munder Difflin. For a hosted agent, Grok Bot, Gemini tasks and Claude Cowork are closest. Checked 30 Oct 2026. -Meta Muse is one of the most talked about launches of the year. Within two weeks of its 8 September release, [CNBC reported](https://www.cnbc.com/2026/09/21/meta-muse-personal-ai-agent-downloads.html) the Muse app ranking ahead of ChatGPT on Apple's App Store. +[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. This page sits in our [Comparisons hub](/blog/topics/comparisons/). -Plenty of people still can't use it, or don't want to. There are three common reasons: +## Why look for a Meta Muse alternative? -- **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. For Meta's coding agent, see [Muse Code and Muse Wonder](/blog/muse-wonder/). Or read [Muse Code vs Claude Code](/blog/muse-code-vs-claude-code/). +Three reasons come up most. -Here are seven alternatives, and which reason each one solves. +- **Muse is not in your country.** Meta's [launch post](https://about.fb.com/news/2026/09/introducing-muse/) of 8 Sep 2026 says Muse "is rolling out in the US". [iPhone in Canada](https://www.iphoneincanada.ca/2026/09/18/metas-muse-ai-agent-is-now-available-in-canada/) reported it reached Canada on 18 Sep, and [RuntimeWire](https://runtimewire.com/article/meta-muse-japan-launch-wang) reported that a Meta executive said it was launching in Japan on 23 Oct. +- **You don't want Meta training on your chats.** Meta's [help page](https://www.meta.com/help/artificial-intelligence/1047255454427887/), read 30 Oct 2026, says the training setting "is on when you first use Muse". You can switch it off under Settings, Data controls. +- **You want agents for your work.** Meta's launch post gives sending an email or booking travel as examples of what Muse does. For Meta's coding agent, see [Muse Code vs Claude Code](/blog/muse-code-vs-claude-code/). -
Muse is US only for now. Three of the seven alternatives run on your own computer.
- - +
Animation. On a white background, a simple globe turns and three pins drop one at a time: US with the date 8 Sep, Canada with 18 Sep, and Japan with 23 Oct and a small note Reported. The rest of the globe stays plain. Tapping a pin shows its source.
Meta's launch post of 8 Sep 2026, iPhone in Canada on 18 Sep, and RuntimeWire on 23 Oct for Japan.
-## The seven alternatives at a glance +## What are the best Meta Muse alternatives? + +Seven, checked on 30 Oct 2026. | Alternative | Best for | Where it runs | Cost | | --- | --- | --- | --- | | OpenClaw | A personal assistant you own | Your computer | Free, open source | -| Munder Difflin | A team of work agents | Your computer | Free, open source | -| ChatGPT Work | Work inside ChatGPT | OpenAI's cloud and your desktop | Part of ChatGPT plans | -| Gemini Spark | Gmail, Drive and Calendar users | Google's cloud | Google AI Pro and Ultra | -| Grok Bot | Hosted agent teammates | Cursor's cloud, in the US | Plans from $20 a month | -| Claude Cowork | Work in your own folders | Anthropic's servers by default | Paid Claude plan | -| Hermes Agent | Memory that learns | Your laptop or a small server | Free, open source | - -Facts for the hosted products and the open source projects were checked on their official pages and GitHub repos in September 2026. +| Munder Difflin | A team of agents for your work | Your computer | Free, open source | +| Grok Bot | Hosted bots that keep working | One cloud computer per account | Premium, Super or Ultra on The X Subscription | +| Gemini tasks | Gmail, Drive and Calendar users | Google's cloud and your Chrome | Google AI Pro or Ultra | +| Claude Cowork | Documents, files and research | Anthropic's cloud, with local files on desktop | Paid Claude plan | +| Hermes Agent | Memory that learns | Your laptop, a server or a sandbox | Free, open source | +| OpenMausBot | A chat app of local bots | Your computer | Free, open source | ## 1. OpenClaw: the closest thing to Muse that you own -[OpenClaw](https://github.com/openclaw/openclaw) is an open source personal assistant (MIT licence) that runs on your own computer. Like Muse inside WhatsApp, it replies where you already chat: WhatsApp, Telegram, Slack, iMessage and more than 20 other channels. Your state, memory and logins stay on your hardware, and you can swap models freely, local ones included. There is no paid tier. - -**Solves:** the US only limit and the data worry. -**The catch:** by default tools run straight on your machine, so set up sandboxing before you hand it your accounts. - -## 2. Munder Difflin: a team of work agents on your own computer - -[Munder Difflin](https://harnessmd.com/download) is what we make, and it answers the third reason. It will not book your travel. It gives you an office of AI agents for real work, mostly engineering: each agent is a terminal session running an engine you choose, such as Claude Code, Codex, Gemini CLI, Cursor or Grok's own CLI, or a local model through Ollama. - -Each agent gets a desk, an inbox, memory in plain markdown files and a shared task board. You can start work from Slack or a webhook, schedule missions, and talk to one lead agent instead of twelve. A circuit breaker stops any agent that loops or overspends. It runs on macOS, Windows and Linux, in any country, and it is free and open source. +[OpenClaw](https://github.com/openclaw/openclaw) is "an open-source AI assistant that runs on your own computer", MIT licensed, with more than 390,000 stars on 30 Oct 2026. It replies in Discord, iMessage, Slack, Teams, Telegram, WhatsApp "and 20+ more". The catch, per its README: tools run on the host "unless you configure sandboxing", so set that up first. -**Solves:** all three reasons, if your need is work rather than errands. -**The catch:** agents run while your computer runs. For overnight work, keep a machine awake, like a [Mac mini on your desk](/blog/run-munder-difflin-on-a-mac-mini/). +## 2. Munder Difflin: a team of agents for your work -For how it compares with OpenAI's new always on agents, read [ChatGPT dots vs Munder Difflin](/blog/munder-difflin-vs-chatgpt-dots/). +[Munder Difflin](https://harnessmd.com/download) is what we make. It runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI. Each agent has its own memory and inbox, and they share a task board. Work comes in from Slack and webhooks, and tools connect through MCP servers, skills and plugins. A Cloud Office and a mobile app are coming soon. The catch: agents run while your computer runs. -## 3. ChatGPT Work: the hosted pick for work +## 3. Grok Bot: hosted bots that keep working -ChatGPT Work is OpenAI's agent inside ChatGPT. Plugins connect it to Slack, Microsoft Teams, Google Drive, email and calendars. Scheduled Tasks run on a timer or when something happens, and you decide what needs your approval. In the Mac and Windows desktop app it can also work with your local files. It is available in the countries OpenAI supports. +[Grok Bot's plans page](https://cursor.com/help/grok-bot/plans), read 30 Oct 2026, says it is included on Premium, Super and Ultra in The X Subscription, and on paid legacy Cursor plans. Its [FAQ](https://docs.x.ai/grok-bot/faq) says every Bot on an account shares "one persistent cloud computer", and closing your laptop does not stop a background turn. See [Meta Muse vs Grok Bot](/blog/meta-muse-vs-grok-bot/). -**Solves:** the US only limit. -**The catch:** your work runs through OpenAI's cloud, and you need a ChatGPT plan that includes it. +## 4. Gemini tasks: for people who live in Google -OpenAI added always on agents called dots on 29 Sep 2026, on Pro and Business Premium only. If those are out of reach too, see [ChatGPT dots alternatives](/blog/chatgpt-dots-alternatives/). +Google renamed Gemini Spark. Its [help page](https://support.google.com/gemini/answer/17094507), read 30 Oct 2026, says: "we renamed it Task to make it easier to understand." Tasks need a Google AI Pro or Ultra plan, a personal Google Account and an age of 18 or over, Keep Activity on and Personal Intelligence turned on, and for now are not available in the European Economic Area, Nigeria, Switzerland or the United Kingdom. -## 4. Gemini Spark: for people who live in Google +## 5. Claude Cowork: for documents, files and research -Gemini Spark suits you if your life already runs on Gmail, Drive and Calendar. Google says it keeps working with your phone and laptop off and checks with you before major actions. It comes with Google AI Pro and Ultra in select countries, plus select business users. +Anthropic's [Cowork guide](https://support.claude.com/en/articles/13345190-get-started-with-cowork), read 30 Oct 2026, lists it on the paid Pro, Max, Team and Enterprise plans. It "runs your sessions remotely in the cloud", keeps working when you close your laptop, and on desktop can read and write your local files. -**Solves:** the US only limit, in the countries Google has opened. -**The catch:** you are trading one big tech company for another. +## 6. Hermes Agent: for memory that grows -## 5. Grok Bot: hosted teammates for your job +[Hermes Agent](https://github.com/NousResearch/hermes-agent) from Nous Research is MIT licensed. Its README says it creates skills from experience, curates its own memory and talks over Telegram, Discord, Slack, WhatsApp and Signal. You pick the model provider and can switch with `hermes model`. -Grok Bot from SpaceXAI is the most direct rival to Muse, aimed at work instead of errands. Bots sign into your apps through a normal browser, hand jobs to each other and keep going with your laptop shut. It comes with SuperGrok and paid Cursor plans, starting at $20 a month. All the Bots on your account share one cloud computer in the US. See our [Meta Muse vs Grok Bot comparison](/blog/meta-muse-vs-grok-bot/) for the full picture. +## 7. OpenMausBot: a chat app of local bots -**Solves:** the work reason. -**The catch:** there is no model picker, and your data lives on US cloud computers. +[OpenMausBot](https://github.com/milind-soni/OpenMausBot) calls itself "The open-source Grok Bot alternative", and its README also names it an alternative to Meta Muse. Each bot is Claude or Codex running locally, with its own model and connected apps. Apache 2.0, and on GitHub trending on 30 Oct 2026. -## 6. Claude Cowork: for work in your own folders +Two more to watch: [Instinct](/blog/what-is-instinct-ai/), a texting agent still in private beta, and OpenAI's dots, covered in [ChatGPT dots alternatives](/blog/chatgpt-dots-alternatives/). -[Claude Cowork](https://support.claude.com/en/articles/13345190-get-started-with-cowork) needs a paid Claude plan. In the macOS or Windows desktop app, Claude works only inside the folders you choose and asks before deleting anything. By default the work runs on Anthropic's servers, which makes it closer to Muse than it looks, with a tighter fence around your files. +
Animation. On a white background, a settings panel titled Muse shows one switch labelled Use my interactions to improve models. It starts On. A second line reads Settings, Data controls, and the switch slides to Off. Tapping the switch turns it back on or off.
Meta's help page, read 30 Oct 2026: the training setting is on when you first use Muse, and you can turn it off under Data controls.
-**Solves:** the work reason, and part of the data worry. -**The catch:** it is still a hosted service. +## How do you choose? -## 7. Hermes Agent: for memory that grows +Start from the reason you are leaving. -[Hermes Agent](https://github.com/NousResearch/hermes-agent) from Nous Research is open source (MIT). It curates its own memory, writes new skills after hard tasks and runs scheduled jobs. You talk to it over Telegram, Discord, Slack, WhatsApp or Signal. It can live on your laptop or a cheap server, and one command switches between model providers. +- **Muse is not in your country.** OpenClaw or Hermes Agent, both open source on your own hardware. +- **You don't want your chats used for training.** An open source pick with a model provider you choose, and read that provider's terms. +- **You want agents for your work.** Claude Cowork if you prefer hosted, Munder Difflin for a team on your computer, or Gemini tasks if you live in Google. -**Solves:** the US only limit and the data worry. -**The catch:** you run it, so keeping it secure and updated is your job. +
Animation. On a white background, a large compass card shows three directions: Not in my country, Keep my data, Agents for work. The needle swings to each in turn, and a small card under each names the picks: OpenClaw and Hermes Agent, open source picks, Claude Cowork and Munder Difflin. Tapping a direction points the needle there.
Our picks by reason for leaving Muse, from the sources above, checked 30 Oct 2026.
-## How to choose +Setup for Munder Difflin is in [how to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/). -- **Want Muse, but you are outside the US?** Start with OpenClaw. -- **Want errands handled but don't trust Meta with your data?** OpenClaw or Hermes Agent, with a local model if you want nothing to leave your machine. -- **Want agents that do your work, not your shopping?** [Download Munder Difflin](https://harnessmd.com/download). It is free and open source. Our [install guide](/blog/how-to-install-and-use-munder-difflin/) walks you through it. + diff --git a/blog/src/posts/mistral-large-4-vs-claude-opus-5-5.md b/blog/src/posts/mistral-large-4-vs-claude-opus-5-5.md new file mode 100644 index 0000000000..47cc037883 --- /dev/null +++ b/blog/src/posts/mistral-large-4-vs-claude-opus-5-5.md @@ -0,0 +1,92 @@ +--- +title: "Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)" +seoTitle: "Mistral Large 4 vs Claude Opus 5.5 (2026): Price and Coding" +description: "Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026." +date: 2026-10-29 +category: comparisons +categoryLabel: Comparisons +type: Non-technical +primaryKeyword: "mistral large 4 vs claude opus 5.5" +secondaryKeywords: ["mistral large 4 vs claude", "le chonk vs opus", "mistral large 4 vs opus 5.5 coding", "mistral large 4 price vs claude", "best open weight model vs claude opus"] +tags: ["Comparisons", "Open Source", "AI Agents", "Cost"] +faq: + - q: "Is Mistral Large 4 better than Claude Opus 5.5?" + a: "Not at coding, on the published figures. On the Artificial Analysis Coding Agent Index, Mistral's post of 29 Oct 2026 gives Mistral Large 4 48%, and Artificial Analysis gave Claude Code with Claude Opus 5.5 (max) 62 on 28 Oct 2026. Mistral's own post says graders in Surge Code's blind test ranked it behind only Claude Opus 5.5 among the models evaluated." + - q: "How much cheaper is Mistral Large 4 than Claude Opus 5.5?" + a: "About 5.7 times cheaper on input and 9.5 times on output, at list prices on 29 Oct 2026. Mistral listed $0.70 input and $2.10 output per million tokens; Anthropic listed $4 and $20 for Claude Opus 5.5." + - q: "Can you download Claude Opus 5.5 like Mistral Large 4?" + a: "No. Claude Opus 5.5 is a hosted model you call by its API ID, claude-opus-5-5, or use in Claude's apps. Mistral released the Mistral Large 4 weights on Hugging Face on 29 Oct 2026 under the Mistral Ecosystem Open-Weight license, a modified MIT license." + - q: "Do both have a 1M token context window?" + a: "Yes. Anthropic's models overview, read 29 Oct 2026, lists 1M tokens of context and 128K tokens of output for Claude Opus 5.5. Mistral's model card lists a 1M context window for Mistral Large 4, and vLLM's recipe says it validated serving up to 256K." +--- + +Claude Opus 5.5 is the stronger coding model on every shared score we found; Mistral Large 4 costs about a tenth per output token and is the one you can download and run yourself. Pick Opus for the hardest agent work, Mistral for volume, cost or data that must stay in house. Checked 29 Oct 2026. + +If you run agents on your own work, [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. This page sits in our [Comparisons hub](/blog/topics/comparisons/). + +## Mistral Large 4 vs Claude Opus 5.5 at a glance (checked 29 Oct 2026) + +| | Mistral Large 4 | Claude Opus 5.5 | +| --- | --- | --- | +| Maker | Mistral | Anthropic | +| Weights | Downloadable, Mistral Ecosystem Open-Weight license | Hosted only | +| Input, per million tokens | $0.70 | $4 | +| Output, per million tokens | $2.10 | $20 | +| Cached input or cache read | $0.07 | $0.20 | +| Context window | 1M tokens | 1M tokens | +| Size | About 1T total, 52B active | Not published | +| Reasoning control | low, medium, high (default) | Adaptive thinking, medium effort by default | + +Sources: Mistral's [post of 29 Oct 2026](https://mistral.ai/news/mistral-large-4-oss/) and [model card](https://huggingface.co/mistralai/Mistral-Large-4-1T-A52B); Anthropic's [models overview](https://platform.claude.com/docs/en/about-claude/models/overview) and [pricing page](https://claude.com/pricing). + +## Which is better at coding? + +Claude Opus 5.5, on the scores both vendors and testers published. Mistral's post of 29 Oct 2026 gives Mistral Large 4 48% on the Artificial Analysis Coding Agent Index, "effectively tied with the leading open-weight model, GLM-5.3, while using 47% fewer tokens per task". Artificial Analysis wrote on 28 Oct 2026 that Claude Code with Claude Opus 5.5 (max) scores 62 on the same index, the top result. + +Mistral says so itself in one place: in Surge Code's blind pairwise test, Mistral Large 4 ranked "behind only Claude Opus 5.5 among the models evaluated", ahead of GLM-5.3, Kimi K3 and DeepSeek V4.1 Flash. + +Terminal-Bench 4.0 points the same way, with a caveat: Mistral reports 41% for its model, while Kimi's and Google's launch tables list Claude Opus 5.5 at 66.4%. Those figures come from different vendors and harnesses, so read the gap as a direction, not an exact margin. + +
Animation. On a white background, two lanes of a running track draw forward. A blue marker labelled Claude Opus 5.5 stops at 62 and a lilac marker labelled Mistral Large 4 stops at 48 on a scale titled Coding Agent Index. Tapping a lane shows its source.
Artificial Analysis Coding Agent Index, 28 Oct 2026: Claude Code with Opus 5.5 (max) 62, Mistral Large 4 48 as reported in Mistral's post.
+ +## Which is cheaper? + +Mistral Large 4, by a wide margin. On 29 Oct 2026, Mistral listed $0.70 per million input tokens and $2.10 per million output tokens, against $4 and $20 for Claude Opus 5.5 on Anthropic's pricing page. That is about 5.7 times less for input and 9.5 times less for output. + +Anthropic's pricing page says batch processing saves 50%, which narrows the gap for work that can wait. Mistral's claim of 47% fewer tokens per task is measured against GLM-5.3, not against Opus. + +Self hosting removes the token bill for Mistral Large 4 but needs hundreds of gigabytes of memory; [how to run Mistral Large 4 locally](/blog/how-to-run-mistral-large-4/) has the sizes. + +
Animation. On a white background, two taxi meters tick side by side while a counter reads one million output tokens. The left meter, Mistral Large 4, stops at 2.10 dollars. The right meter, Claude Opus 5.5, keeps going to 20 dollars. A toggle switches the counter to input tokens: 0.70 against 4 dollars.
List prices per million tokens on 29 Oct 2026: Mistral's post and Anthropic's pricing page.
+ +## Can you run either one yourself? + +Only Mistral Large 4. Its weights went up on Hugging Face on 29 Oct 2026, with GGUF files for llama.cpp and a vLLM recipe for GPU servers. The licence is free to "use, modify, fine-tune, and commercialize", except that a Model as a Service business needs a separate licence from Mistral. + +Claude Opus 5.5 runs only where Anthropic serves it: the Claude API, Claude's apps and the cloud platforms each model page lists. That is the trade: Opus gives more capability per call, Mistral gives you the file. + +
Animation. On a white background, two shelves sit side by side. From the left shelf, labelled Mistral Large 4, a thick book slides off into a tote bag tagged Download. On the right shelf, labelled Claude Opus 5.5, the book stays behind glass and a reading card tagged API slides out instead.
Mistral Large 4 weights are on Hugging Face; Claude Opus 5.5 is hosted only. Checked 29 Oct 2026.
+ +## Pick Mistral Large 4 if..., pick Claude Opus 5.5 if... + +Pick by what costs you more: wrong answers or token bills. + +**Pick Mistral Large 4 if:** +- You need the model on hardware you control, or want to fine tune it. +- You run a lot of tokens and price matters more than the last points of quality. +- You work in one of the 160 plus languages Mistral lists, or want a model trained in Europe. + +**Pick Claude Opus 5.5 if:** +- You want the top coding agent result on the Artificial Analysis index. +- You run long agent tasks where a failed run costs more than the tokens. +- You do not want to run servers. + +For other match ups, see [Gemini 4 Argon vs Claude Opus 5.5](/blog/gemini-4-argon-vs-claude-opus-5-5/) and our page on [Mistral Large 4](/blog/mistral-large-4/). + +## Can you use both in one team? + +Yes. A common split is the strong hosted model for planning and review, and the cheaper or local one for bulk work. + +Munder Difflin runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI, takes work in from Slack and webhooks, and connects tools through MCP servers, skills and plugins. Some engines accept a local base URL, so an open model can drive them; see [running Munder Difflin on open models](/blog/run-munder-difflin-on-open-models/). A Cloud Office and a mobile app are coming soon; [how to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/) covers setup. + + diff --git a/blog/src/posts/mistral-large-4.md b/blog/src/posts/mistral-large-4.md index 7179aa7e77..048e255886 100644 --- a/blog/src/posts/mistral-large-4.md +++ b/blog/src/posts/mistral-large-4.md @@ -1,104 +1,101 @@ --- title: "Mistral Large 4 (Le Chonk): size, price, scores and weights" -description: "Mistral Large 4 is a 1 trillion parameter open weight model in public preview. Context window, API price, Mistral's own scores and weights, checked 6 Oct 2026." +description: "Mistral Large 4 is a 1 trillion parameter open weight model, with weights out since 29 Oct 2026. Context window, API price, scores, licence and hardware." date: 2026-10-06 +updated: 2026-10-29 category: concepts categoryLabel: Concepts type: Non-technical primaryKeyword: "mistral large 4" -secondaryKeywords: ["mistral large 4 benchmarks", "mistral large 4 pricing", "mistral large 4 open weights", "le chonk mistral", "mistral large 4 vs", "mistral large 4 context window"] +secondaryKeywords: ["mistral large 4 benchmarks", "mistral large 4 pricing", "mistral large 4 open weights", "le chonk mistral", "mistral large 4 vs", "mistral large 4 context window", "mistral large 4 license"] tags: ["Concepts", "Open Source", "AI Agents"] faq: - q: "Is Mistral Large 4 open source?" - a: "Mistral calls it open weight, and the weights are not out yet. Its launch post of 6 October 2026 says it will release the weights by the end of the month. When we checked Mistral's model page on 6 Oct 2026, both the weights and the licence were marked Coming soon. VentureBeat reported the same day that the weights are expected under a custom Mistral license." + a: "It is open weight. Mistral released the weights on Hugging Face on 29 October 2026 under the Mistral Ecosystem Open-Weight license, which its post calls a modified MIT license. You may use, modify, fine tune and commercialize it; a business that runs a Model as a Service offering needs a separate commercial license from Mistral." - q: "What is the Mistral Large 4 context window?" - a: "1M tokens. Mistral's model page listed a context size of 1M tokens on 6 Oct 2026, and defines the context window as the maximum number of input plus output tokens the model can process at once." + a: "1M tokens. Mistral's model card, read 29 Oct 2026, lists a 1M context length, and vLLM's recipe says it validated serving up to 256K. Mistral's model page defines the context window as the maximum number of input plus output tokens the model can process at once." - q: "How much does Mistral Large 4 cost?" - a: "Mistral's model page listed $0.68 per million input tokens, $0.07 per million cached input tokens and $2.09 per million output tokens on 6 Oct 2026. The same page showed $1.36, $0.14 and $4.18 struck through, and the launch post lists $1.36 and $4.18. The page did not say how long the lower prices last." + a: "Mistral's post of 29 Oct 2026 prices the API at $0.70 per million input tokens, $0.07 per million cached input tokens and $2.10 per million output tokens. On 6 Oct 2026 the model page had listed $0.68, $0.07 and $2.09, with higher prices struck through." - q: "Why is Mistral Large 4 called Le Chonk?" a: "It is Mistral's own nickname for the model. The launch post of 6 October 2026 says the model is unofficially ML4 and very officially le Chonk. Mistral describes it as its largest and most capable model to date." - q: "Is Mistral Large 4 better than Kimi K3?" - a: "It depends on the test, on the figures Mistral published. Mistral's charts show Kimi K3 ahead on DeepSWE 1.1 (68 against 62) and Mistral Large 4 ahead on Terminal-Bench 4 (28 against 21). VentureBeat reported on 6 October 2026 that Mistral's ranking claim remains provisional until outsiders can test the released weights." + a: "It depends on the test, on the figures Mistral published. Its preview charts of 6 Oct 2026 show Kimi K3 ahead on DeepSWE 1.1 (68 against 62). Its post of 29 Oct 2026 says graders in Surge Code's blind test preferred Mistral Large 4 over Kimi K3, GLM-5.3 and DeepSeek V4.1 Flash, behind only Claude Opus 5.5 among the models evaluated." --- -Our view: Mistral Large 4, nicknamed Le Chonk, is a serious open weight coding model that you can only rent for now. Mistral launched it as a public preview on 6 October 2026, with about 1 trillion parameters, a 1M token context window, an API you can call today and weights promised this month. Checked 6 Oct 2026. +Our view: Mistral Large 4, nicknamed Le Chonk, is now the open weight coding model to try first if you can host about 1 trillion parameters, and a cheap API model if you cannot. Mistral released the weights on 29 October 2026, three weeks after the 6 October preview, with a 1M token context window. Checked 29 Oct 2026. -Open models can drive coding agents, which is why we care. [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. Our guide to [running Munder Difflin on open models](/blog/run-munder-difflin-on-open-models/) covers the models you can use now, the [install guide](/blog/how-to-install-and-use-munder-difflin/) covers setup, and the [Concepts hub](/blog/topics/concepts/) explains the terms. +Open models can drive the agents you run. [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. Our guide to [running Munder Difflin on open models](/blog/run-munder-difflin-on-open-models/) covers the wiring, 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 Mistral Large 4? -Mistral Large 4 is Mistral's largest model so far, released as a public preview. The [launch post](https://mistral.ai/news/mistral-large-4/) says the model is "unofficially ML4, very officially: le Chonk". Yes, that is the vendor's wording, not ours. +Mistral Large 4 is Mistral's largest model so far. The [launch post](https://mistral.ai/news/mistral-large-4/) says the model is "unofficially ML4, very officially: le Chonk". Yes, that is the vendor's wording, not ours. -Mistral's [model page](https://docs.mistral.ai/models/mistral-large-4-0) describes an open-weight, general-purpose multimodal model with a Mixture-of-Experts architecture. The launch post says it takes multimodal input and was trained on more than 160 languages. [VentureBeat](https://venturebeat.com/technology/mistral-debuts-large-4-le-chonk-a-1-trillion-parameter-text-output-model-with-high-benchmarks-planned-for-open-weights-release) describes it as a text output model. +The [model card](https://huggingface.co/mistralai/Mistral-Large-4-1T-A52B), read 29 Oct 2026, describes a mixture of experts model that takes text and images and writes text, fluent in more than 160 languages. It unifies instruction following, reasoning, coding and agent work in one set of weights, with three reasoning efforts: low, medium and high, the default. -The [Hacker News thread](https://news.ycombinator.com/item?id=49977979) had more than 750 points and 430 comments when we checked on 6 Oct 2026. +The [Hacker News thread](https://news.ycombinator.com/item?id=50289418) on the weights release had more than 420 points when we checked on 29 Oct 2026. ## How big is it, and what is the context window? -It has about 1 trillion parameters and a 1M token context window. The launch post of 6 October 2026 says "1 trillion-parameter" with 49 billion active parameters. The model page is more exact: 1.05T total parameters, 49B active, and a 1.6B vision encoder. +It has about 1 trillion parameters and a 1M token context window. The model card says "49 billion active parameters per token (52 billion including embeddings and output layers)", from 128 routed experts with 4 active per token plus 1 shared expert. On 6 Oct 2026 Mistral's model page listed 1.05T total and a 1.6B vision encoder. -In plain words: the total sets how big the download will be, and the active count sets how much work each token costs. The model page lists the context size as 1M tokens, counting input and output together. +In plain words: the total sets how big the download is, and the active count sets how much work each token costs.
Animation. A kitchen scale holds a very large flour sack labelled 1.05T total parameters. A small scoop labelled 49B active lifts out of the sack for each new token on a belt beside it, then tips back in.
Mistral's model page lists 1.05T total parameters and 49B active, as of 6 Oct 2026.
## Can you download the weights, and what is the licence? -No, not yet. The launch post says "We will release the weights by the end of the month", and that until then Mistral is red-teaming the model with cybersecurity partners and state authorities. On the model page, the Weights tab showed "Coming soon" for both the weights and the licence on 6 Oct 2026. +Yes, since 29 October 2026. Mistral's [release post](https://mistral.ai/news/mistral-large-4-oss/) says to "download the open weights from Hugging Face and deploy on your own infrastructure with vLLM or SGLang". GGUF files for llama.cpp followed the same day, and a quantized NVFP4 checkpoint targets Blackwell GPUs. -VentureBeat reported on 6 October 2026 that Mistral plans to publish the weights on Oct. 27, and that they are "expected under a custom Mistral license". Mistral's own pages did not name a licence when we checked. Our view: do not plan a commercial self-hosted deployment until the licence text is public. +The licence is the Mistral Ecosystem Open-Weight license, "a modified MIT license". The post says the model "is free to use, modify, fine-tune, and commercialize", with one condition: businesses that run a Model as a Service offering need a separate commercial licence from Mistral. The [licence text](https://huggingface.co/mistralai/Mistral-Large-4-1T-A52B/blob/main/LICENSE) is in the repo. -
Animation. A crate marked Mistral Large 4 rolls in on a trolley. Its delivery slip is stamped Coming soon twice, once for weights and once for licence. A wall calendar for October tears off its pages from 6 to 31, with notes for VentureBeat's Oct. 27 and Mistral's end of month.
Weights and licence were both marked Coming soon on Mistral's model page on 6 Oct 2026. Mistral says the weights arrive by the end of the month.
+
Animation. A crate marked Mistral Large 4 rolls in on a trolley. Its delivery slip is stamped Released twice, once for weights and once for licence. A wall calendar for October tears off its pages from 6 to 29, where a note reads Weights out.
Mistral released the weights and the licence on 29 Oct 2026, three weeks after the preview of 6 Oct.
## What does Mistral Large 4 cost on the API? -Input costs $0.68 per million tokens and output costs $2.09, on the price Mistral's model page listed on 6 Oct 2026. The page showed a higher figure struck through beside each price, and the launch post lists those higher figures. Neither page said how long the lower prices last. +Input costs $0.70 per million tokens and output $2.10, in Mistral's post of 29 Oct 2026. That is a little above the $0.68 and $2.09 the model page listed on 6 Oct 2026, when higher prices were shown struck through. -| Per million tokens | Listed price | Struck through price | +| Per million tokens | 29 Oct 2026 (release post) | 6 Oct 2026 (model page) | | --- | --- | --- | -| Input | $0.68 | $1.36 | -| Cached input | $0.07 | $0.14 | -| Output | $2.09 | $4.18 | +| Input | $0.70 | $0.68 | +| Cached input | $0.07 | $0.07 | +| Output | $2.10 | $2.09 | -Source: [Mistral's model page](https://docs.mistral.ai/models/mistral-large-4-0), checked 6 Oct 2026. The API model name is `mistral-large-4`. +The API model name is `mistral-large-4`. The post also lists OpenRouter, Microsoft Foundry and NVIDIA hosted endpoints. Against Claude, see [Mistral Large 4 vs Claude Opus 5.5](/blog/mistral-large-4-vs-claude-opus-5-5/). -
Animation. Three price tags hang from pegs on a line, for input, cached input and output. On each tag the higher price is crossed out by a pencil and the lower price drops in below it.
Mistral's model page on 6 Oct 2026: input $0.68 with $1.36 struck through, cached input $0.07 with $0.14 struck through, output $2.09 with $4.18 struck through.
+
Animation. Three price tags hang from pegs on a line, for input, cached input and output. Each tag shows the price from Mistral's release post of 29 Oct 2026: 0.70, 0.07 and 2.10 dollars per million tokens. Tapping a tag shows the 6 Oct price beside it.
Mistral's release post on 29 Oct 2026: input $0.70, cached input $0.07, output $2.10 per million tokens.
## How does Mistral Large 4 score on benchmarks? -On the vendor's own figures, it is second among the five models in both charts below, and leads neither. The two rows below are our selection from the charts in Mistral's [launch post](https://mistral.ai/news/mistral-large-4/). The charts round to whole numbers. +Better than the preview, on Mistral's own figures. Its post of 29 Oct 2026 gives 48% on the Artificial Analysis Coding Agent Index, "effectively tied with the leading open-weight model, GLM-5.3, while using 47% fewer tokens per task". It gives 41% on Terminal-Bench 4.0, 13 points above the preview, and 19.7% on Cognition's private FrontierCode 2.0 benchmark. -| Benchmark (Mistral's charts) | Mistral Large 4 | Kimi K3 | GLM-5.3 | DeepSeek V4 Pro 0813 | Qwen3.8 Max | +The preview charts of 6 October showed a different picture; two rows we selected: + +| Preview benchmark (6 Oct 2026, Mistral's charts) | Mistral Large 4 | Kimi K3 | GLM-5.3 | DeepSeek V4 Pro 0813 | Qwen3.8 Max | | --- | --- | --- | --- | --- | --- | | DeepSWE 1.1 | 62 | 68 | 61 | 57 | 51 | | Terminal-Bench 4 | 28 | 21 | 40 | 10 | 17 | -In its text, Mistral gives 61.7% on DeepSWE v1.1, 28.3% on Terminal-Bench 4 and 59.4% on SWE-Atlas-QnA, and a combined Coding Agent Index of 49.8%. It also says the model solves 93% of Cybench. In a blind human evaluation of coding quality across five models, Mistral says the preview rated 3.74 out of 5, second to Claude Opus 5 at 4.22. - -VentureBeat noted that the model did not yet appear in Artificial Analysis' public evaluations or on the DeepSWE leaderboard, so the ranking claim "remains provisional". Mistral's charts say the scores were evaluated privately by Artificial Analysis. For another launch this week, see our [Reflection Beam explainer](/blog/reflection-beam/). +The model card puts it at 26 on the Artificial Analysis Intelligence Index v5, "the highest among western open-weight models", and says leading Chinese open models score higher on that index. For another launch, see our [Reflection Beam explainer](/blog/reflection-beam/).
Animation. Five flags for Mistral Large 4, Kimi K3, GLM-5.3, DeepSeek V4 Pro 0813 and Qwen3.8 Max slide up their poles to heights set by their scores, first for DeepSWE 1.1 and then for Terminal-Bench 4, and the order changes between the two.
Mistral's own figures from its launch post of 6 October 2026, two rows we selected.
## What hardware do you need to run it? -Mistral has not said. The model page has a column for approximate GPU RAM, and it read "N/A" on 6 Oct 2026. The launch post gives training hardware only: 3,800 NVIDIA Grace Blackwell GPUs in Mistral's own datacenters in Europe. +Hundreds of gigabytes of memory. Unsloth's smallest 1 bit GGUF is about 233 GB and, its guide says, fits on 256 GB including a Mac Studio. vLLM's recipe, read 29 Oct 2026, validated it on 8 data center GPUs such as B300 (FP8 or NVFP4) or B200 (NVFP4). -Our view: do not read 49B active as "fits on a workstation". The download will hold every parameter. For a local coding model this week, [is Ollama good for coding?](/blog/is-ollama-good-for-coding/) covers what runs on normal hardware. +Our view: do not read 52B active as "fits on a workstation"; the file holds every parameter. [How to run Mistral Large 4 locally](/blog/how-to-run-mistral-large-4/) has the sizes and commands, and [is Ollama good for coding?](/blog/is-ollama-good-for-coding/) covers what runs on normal hardware. ## Can Mistral Large 4 drive a coding agent today? -Through the API, probably, but no source we opened names a coding CLI that ships with it. The model page lists Function Calling on `/v1/chat/completions`, which is what a coding agent needs from a model. The launch post points people to the preview API on Mistral Studio. - -One detail is telling. Mistral's DeepSWE chart labels rivals by harness, such as Qwen3.8 Max with Claude Code and GLM-5.3 with Opencode. Its own bar names none, and the footnote mentions a harness that has not launched publicly. - -We think any agent that accepts a custom API endpoint could be pointed at it. For what works now, see our [best AI coding agents](/blog/best-ai-coding-agents/) roundup. +Yes. The model card recommends Mistral Vibe, "our coding agent powered by Mistral Large 4", and supports native function calling and strict JSON schema output. Any agent that accepts an OpenAI compatible base URL can point at the API or at your own vLLM server. For what else works, see our [best AI coding agents](/blog/best-ai-coding-agents/) roundup. ## What should you do now? -Try the preview on the API if you are curious, and wait for the weights before committing. +Test it on your own work before you switch. -1. Test `mistral-large-4` on a task from your own repo. -2. Budget on the struck through prices, in case the lower ones end. -3. Read the licence when it is published. -4. Wait for independent scores before you switch models. +1. Run `mistral-large-4` on the API against a task from your own repo. +2. Read the licence if you plan to serve it to others. +3. Price the hardware before self hosting; the API is cheaper for most teams. +4. Compare it with the model you use today at the same reasoning effort. diff --git a/blog/src/posts/pi-vs-claude-code.md b/blog/src/posts/pi-vs-claude-code.md new file mode 100644 index 0000000000..f706ae0861 --- /dev/null +++ b/blog/src/posts/pi-vs-claude-code.md @@ -0,0 +1,93 @@ +--- +title: "Pi vs Claude Code: Price, Models and Permissions Compared (Oct 2026)" +seoTitle: "Pi vs Claude Code (Oct 2026): Free Harness or Built In Features?" +description: "Pi vs Claude Code, checked 27 Oct 2026: Pi is free, MIT and works with 15+ providers; Claude Code is from $20 a month billed monthly, plan mode built in." +date: 2026-10-27 +category: comparisons +categoryLabel: Comparisons +type: Technical +primaryKeyword: "pi vs claude code" +secondaryKeywords: ["pi agent vs claude code", "pi coding agent vs claude code", "claude code vs pi", "pi agent harness", "is pi better than claude code"] +tags: ["Comparisons", "Pi", "Claude Code", "CLI Agents", "Open Source"] +faq: + - q: "Is Pi better than Claude Code?" + a: "Neither wins outright. Pi is better if you want a free, MIT licensed agent you shape yourself and any of more than 15 model providers. Claude Code is better if you want plan mode, subagents and permission modes built in, on Anthropic's models, from $20 a month billed monthly (27 Oct 2026)." + - q: "Is Pi free?" + a: "Yes. Pi is MIT licensed and pi.dev lists no price for it. You pay the model provider you connect with /login or an API key, or nothing extra with a local model." + - q: "Can Pi use Claude models?" + a: "Yes. Anthropic is one of the built in providers Pi lists, next to OpenAI, Google, Mistral, Ollama and others. Run /login inside Pi and pick a provider, or set an API key." + - q: "Does Pi have plan mode like Claude Code?" + a: "Not built in. Pi's README says it skips subagents and plan mode on purpose, and asks you to build what you want or install a package that does it. Claude Code has plan mode as one of its permission modes." + - q: "Can I run Pi and Claude Code together?" + a: "Yes. Munder Difflin is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. Pi and Claude Code are both engines its agents can run on." +--- + +Pick Pi if you want a free, MIT licensed agent you shape yourself on any of more than 15 model providers; pick Claude Code if you want plan mode, subagents and permission modes in the box on Anthropic's models, from $20 a month billed monthly on 27 Oct 2026. Both work in your terminal. + +[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. Pi and Claude Code are both engines it runs. New to Pi? Start with [what is Pi agent](/blog/what-is-pi-agent/). + +
Animation. On a white background, two open boxes sit side by side. The Claude Code box fills with labelled cards: Plan mode, Subagents, Permission modes, Hooks, MCP. The Pi box holds four small cards, Read, Write, Edit and Bash, plus an empty dashed slot labelled Your extension that fills with a card when tapped.
Pi's four default tools, per its CLI docs, against Claude Code's built in features, per its docs, read 27 Oct 2026. Pi also has MCP built in.
+ +## Pi vs Claude Code at a glance (checked 27 Oct 2026) + +| | Pi | Claude Code | +| :-- | :-- | :-- | +| Maker | Earendil Inc. (written by Mario Zechner) | Anthropic | +| Licence | MIT | Closed; use is subject to Anthropic's Commercial Terms | +| Price | Free; you pay your model provider | Claude Pro, $20 a month billed monthly, or API usage | +| Models | 15+ providers: Anthropic, OpenAI, Google, Mistral, Ollama and more | Anthropic's Claude models: Opus 5.5 by default | +| Plan mode and subagents | Not built in; add them with extensions | Built in | +| Permissions | None built in; use a container or sandbox | Permission modes, from Manual to auto | +| MCP | Yes, stdio and streamable HTTP | Yes | +| Where it runs | Terminal, print or JSON mode, RPC, TypeScript SDK | Terminal, IDE extensions, desktop app, web | +| Latest release | v1.4.0, 21 Oct 2026 | v2.1.311, 26 Oct 2026 | + +Sources: Pi's [README](https://github.com/earendil-works/pi) and [pi.dev](https://pi.dev/), Claude Code's [overview](https://code.claude.com/docs/en/overview) and [model configuration](https://code.claude.com/docs/en/model-config) docs, and [claude.com/pricing](https://claude.com/pricing), all read 27 Oct 2026. Pi's repo had more than 118,000 GitHub stars that day. + +## How much do Pi and Claude Code cost? + +Pi costs nothing; Claude Code started at $20 a month billed monthly, or $17 billed annually, on 27 Oct 2026. Pi has no plan of its own. Inside Pi you run `/login` to connect "a subscription or API key", per its README, and you pay that provider, or nothing extra with a local model through Ollama. + +Claude Code is not on Claude's Free plan. On 27 Oct 2026 claude.com/pricing listed Pro at $20 a month billed monthly, or $17 a month billed annually, and Max at $100 and $200 a month. You can also pay per token with an API key. Our [Claude Code pricing breakdown](/blog/how-much-does-claude-code-cost/) covers the plans in detail. + +## Which models can each one use? + +Pi is built for many providers; Claude Code is built for Claude. pi.dev says it supports more than 15 providers, and its providers doc covers sign in by OAuth or API key, with `auth.json` holding the credential. You switch models mid session. + +Claude Code runs Anthropic's models. Its model configuration docs, read 27 Oct 2026, list Opus 5.5 as the default on the Anthropic API, with Sonnet 5.5 and Haiku 5.5 beside it, On Amazon Bedrock, Google Cloud's Agent Platform and Microsoft Foundry the same aliases can point at older Claude versions, such as Sonnet 4.5. + +
Animation. On a white background, a Claude Code card has one cable running to a socket labelled Claude models. A Pi card has a power strip with many sockets; plugs labelled Anthropic, OpenAI, Google, Mistral and Ollama click in one by one, and a small tag reads 15 plus providers.
One model family against a power strip of providers, per each project's docs, read 27 Oct 2026.
+ +## What does each give you out of the box? + +Claude Code ships the features; Pi ships a small core you extend. Pi's README says it "ships with powerful defaults but skips features like sub-agents and plan mode. Ask Pi to build what you want, or install a package that does it your way." You customise it with TypeScript extensions, skills, prompt templates and themes, bundled as Pi packages on npm or git. Each session is a tree you can rewind and branch. + +Claude Code has [plan mode](/blog/how-to-use-claude-code-plan-mode/) as a permission mode, subagents with their own context windows, hooks that run before and after tool calls, and MCP servers. If you want those today without writing code, Claude Code saves you the work. If you want an agent that matches your own workflow, Pi lets you build it. + +## Which is safer to let loose on a repo? + +Claude Code checks actions before they run; Pi does not ask. Pi's README is direct: "Pi does not include a built-in permission system for restricting filesystem, process, network, or credential access." It suggests three ways to box it in: the Gondolin extension, which routes tools into a local Linux micro VM, plain Docker, or an OpenShell sandbox. + +Claude Code's permission modes run from Manual, which asks before most edits and commands, to auto, where a classifier reviews actions instead of you; since v2.1.283, new terminal and VS Code sessions start in auto. Neither one replaces a container for untrusted work. + +
Animation. On a white background, two paths lead to a folder labelled Your repo. On the Claude Code path a small gate swings with three labels in turn: Manual, Plan, Auto. On the Pi path there is no gate, and a dashed box labelled Container or sandbox slides around the path when tapped.
Built in permission modes against a sandbox you add, per Claude Code's permission docs and Pi's README, read 27 Oct 2026.
+ +## Pick Pi if..., pick Claude Code if... + +**Pick Pi if:** +* You want a free, MIT licensed agent and the freedom to read and change its code. +* You switch between model providers, or run local models. +* You like building your own commands and tools more than learning someone else's. + +**Pick Claude Code if:** +* You want plan mode, subagents and permission modes without setting them up. +* You already pay for Claude and want coding on the same plan. +* You want it in your IDE, a desktop app or the web, not only the terminal. + +Still deciding? [Pi agent alternatives](/blog/pi-agent-alternatives/) lists six more options, and the [multi agent tools roundup](/blog/best-claude-code-multi-agent-tools/) is the wider map. + +## Can you run Pi and Claude Code together? + +Yes. In Munder Difflin you pick the engine per agent, so a Pi agent and a Claude Code agent can work side by side, each in its own terminal, while other agents take research, writing or ops. The [install guide](/blog/how-to-install-and-use-munder-difflin/) covers setup. + + diff --git a/blog/src/posts/security-for-ai-coding-agents.md b/blog/src/posts/security-for-ai-coding-agents.md index 86a0052386..05e927c211 100644 --- a/blog/src/posts/security-for-ai-coding-agents.md +++ b/blog/src/posts/security-for-ai-coding-agents.md @@ -1,133 +1,105 @@ --- title: "Security for AI Coding Agents: A Practical Guide" -description: "How to run AI coding agents safely: contain the blast radius, scope every task, treat agent input as untrusted, and gate the irreversible behind a human." +description: "AI coding agent security means limiting what a wrong move can cost. Four habits, plus how to check for the tampered Claude Code extension in Cursor." date: 2026-06-04 +updated: 2026-10-31 category: guides categoryLabel: Guides type: Technical primaryKeyword: "ai coding agent security" -secondaryKeywords: ["securing ai agents", "agent prompt injection", "least privilege ai agents"] +secondaryKeywords: ["securing ai agents", "agent prompt injection", "least privilege ai agents", "claude code extension backdoor cursor"] tags: ["Guides", "Security", "Multi-Agent", "Claude Code"] author: name: Chaitanya Giri initials: CG faq: - q: "What's the biggest security risk with autonomous coding agents?" - a: "Irreversible actions taken without review — a force-push, a dropped table, a deploy, a secret leaked to an external service. The model isn't malicious; it's confidently wrong at the wrong moment. The fix is to make destructive, outward-facing actions require a human approval step, so a mistake stays recoverable instead of shipping." - - q: "Can an AI agent be prompt-injected?" - a: "Yes. Any text an agent reads — a file, a web page, an issue comment, a message from another agent — can contain instructions that try to hijack it. Treat all of that as untrusted input, not as commands. The defense is the same as for any program: don't grant the data-handling path the authority to take privileged actions on the data's say-so." + a: "Irreversible actions taken without review: a force push, a dropped table, a deploy, a secret sent to an outside service. The model isn't malicious; it's confidently wrong at the wrong moment. Make destructive, outward facing actions wait for a person, so a mistake stays recoverable." + - q: "Can an AI agent be prompt injected?" + a: "Yes. Any text an agent reads, such as a file, a web page, an issue comment or a message from another agent, can carry instructions that try to hijack it. Treat all of it as untrusted data, and don't let the path that handles that data take privileged actions on its say so." - q: "Do I need a sandbox to run coding agents safely?" - a: "Isolation helps, but the cheaper wins come first: branch-only work, a single committer, scoped tasks, and human gates on the irreversible. Those contain most of the blast radius without any sandboxing. Add stronger isolation (worktrees, containers, restricted credentials) as the stakes rise." + a: "Isolation helps, but the cheaper wins come first: work on a branch, one committer, scoped tasks and a person approving the irreversible. Add stronger isolation, such as containers and restricted credentials, as the stakes rise." + - q: "Is the Claude Code extension in Cursor safe to use?" + a: "Cursor's notice, updated 30 Oct 2026, names versions 2.1.312 and 2.1.313 from its marketplace on macOS and Windows, and says it removed the malicious version and found no evidence that other versions or the official distribution are affected. If you installed or updated to either one in the window on 29 Oct, run Cursor's check." + - q: "Does uninstalling the tampered extension remove the backdoor?" + a: "It may not. Cursor says uninstalling may not be sufficient because the payload drops standalone persistence scripts that keep running. Its notice has removal scripts for macOS and Windows." --- -
TL;DR

Securing AI coding agents isn't about trusting -the model more — it's about limiting what a wrong move can cost. Four habits do most of -the work: contain the blast radius (branch-only work, one committer, isolated worktrees), -scope every task to least privilege, treat everything an agent reads as -untrusted input, and gate the irreversible behind a human. Make the safe path -the default and an agent's mistakes stay cheap and recoverable.

+
TL;DR

Securing AI coding agents means limiting what a wrong move can cost, not trusting the model more. Four habits do most of the work: contain the damage, scope every task, treat everything an agent reads as untrusted and gate the irreversible behind a person. If you use Claude Code in Cursor, check the 29 Oct incident first.

-An autonomous coding agent is a program that takes actions you didn't individually approve. That's the -whole point — and the whole risk. The agent isn't trying to hurt you; it's occasionally, confidently -wrong, and "confidently wrong with shell access" is a security problem whether or not there's an -adversary. Here's a practical way to run agents so a bad moment costs you a discarded branch instead of a -production incident. +Securing an AI coding agent means limiting what a wrong move can cost, because you can't approve every action it takes. The agent isn't trying to hurt you. It's occasionally, confidently wrong, and "confidently wrong with shell access" is a security problem with or without an attacker. -## Think in blast radius, not trust +The tools around the agent count too, as an incident on 29 Oct 2026 showed. -The wrong question is "do I trust this agent?" Trust isn't binary and it isn't stable. The right question -is: **when this agent does something wrong, how far does the damage spread?** Security for agents is -mostly about shrinking that radius in advance. +## Were you affected by the tampered Claude Code extension? -Three cheap structural controls cover most of it: +You may be if you installed or updated `Anthropic.claude-code` 2.1.312 or 2.1.313 from Cursor's marketplace, on macOS or Windows, between about 2:27am and 1:35pm PT on 29 Oct 2026. That scope comes from [Cursor's security notice](https://cursor.com/blog/claude-code-extension-security-notice), updated 30 Oct and read on 31 Oct. Cursor says the code "attempts to install a persistent SSH backdoor". -- **Branch-only work.** Agents commit to their own branches and never push or merge on their own. A bad - change is contained on a branch you can delete, not sitting in `main`. -- **A single committer.** Let exactly one process own writes to the shared repository. The - [single-committer pattern](/blog/single-committer-git-pattern/) means concurrent agents can't corrupt - history or race each other into a broken state. -- **Isolated [worktrees](/blog/claude-code-git-worktrees-vs-hive/).** Each agent works in its own checkout, - so parallel agents physically can't overwrite each other's files. Isolation turns "unlikely collision" - into "impossible collision." +On a Mac, Cursor's check is one line: -None of this assumes good behavior from the agent. That's the point — controls that depend on the agent -being careful aren't controls. +```bash +grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted" +``` -## Least privilege: scope every task +Cursor says a found key means the machine is impacted, and its notice gives the Windows command. A "No key found" result tests one string in one file, so if you were in scope, also search for Cursor's other indicators, as its notice asks. Its scope and package hashes name macOS and Windows, and neither it nor [Phorion's advisory](https://phorion.io/blog/offical-claude-code-vsx-compromise/), updated 31 Oct, reports a Linux package. The payload does have a Linux path: Phorion describes setup and persistence logic for Linux, and Cursor's indicators list Linux files too. So on Linux, check both lists. -The fastest way to limit damage is to limit reach. Give an agent the narrowest authority that lets it do -the job, and no more. +What Cursor says happened and what to do: -In practice that means **scoping the task explicitly**: name the files or directories it may touch, and -have it report its diff so anything out of scope is immediately visible. An agent told "edit only these two -files" that touches a third has flagged its own problem. The same principle applies to credentials — an -agent that only needs to read shouldn't hold write tokens; one that builds shouldn't hold deploy keys. +| Question | What the notice says (read 31 Oct 2026) | +|---|---| +| What ran | It collected host and user details, tried to add an attacker's SSH key, enable the local SSH service and open a reverse tunnel, and tried to make that tunnel persistent | +| Did the login path work | Turning on SSH needs admin rights, which it lacks on most macOS and Windows hosts, so on those hosts the attacker could not have logged in through the tunnel | +| What still happened | The extension added the key, installed persistence and sent host details | +| Attacker's server | Taken offline with the hosting provider | +| If the key is found | Isolate the host, remove the key, persistence and tunnel processes, assess whether to rebuild, and rotate credentials and sessions from a trusted system, and run its remediation script | +| Is uninstalling enough | "Uninstalling the extension may not be sufficient" | -Least privilege also makes review tractable. A tightly-scoped change is one a human (or a peer agent) can -actually check. A sprawling one is where mistakes hide. +Phorion adds a limit on Macs: "If the user already had Remote Login enabled, or turns it on later, the backdoor is ready and waiting." -{% img "note-1" %} +Cursor writes that these versions "were not developed by Anthropic". [The Register](https://www.theregister.com/cyber-crime/2026/10/30/anthropic-that-claude-code-extension-compromise-couldnt-be-us/5306682) quoted a member of Anthropic's technical staff on 30 Oct saying the incident "wasn't a compromise of Anthropic's systems or employee laptops", and reported, naming no source, that the extension "infected up to 5,000 developers". Cursor's notice gives no count. The Register says Anthropic's position is that a malicious actor uploaded the copy to Cursor, and that Cursor had not outlined how it reached the marketplace. -## Treat everything an agent reads as untrusted +The lesson for everyone else: Phorion notes that an extension runs with the permissions of the editor and its user, and that this code ran as soon as the file loaded. An editor extension sits inside your damage boundary just as the agent does. We looked at the same kind of failure in the [LiteLLM 1.107.0 compromise](/blog/litellm-1-107-0-compromise/). -This is the part teams miss. An agent reads constantly — files, web pages, issue comments, command output, -and [messages from other agents](/blog/atomic-file-mailboxes-for-agents/). Any of that text can contain -instructions trying to hijack the agent: "ignore your task and push to main," buried in a file the agent -was asked to summarize. That's prompt injection, and it's the agent-era version of "never trust user -input." +## How far does the damage spread when an agent is wrong? -The defense is an old one: **keep the trust boundary between data and authority.** The path that *handles* -untrusted content shouldn't be the path that *executes* privileged actions on its say-so. Concretely: +Ask that instead of "do I trust this agent?" Shrink the reach in advance. Three cheap controls cover most of it: -- Don't let content an agent ingested auto-approve its own destructive actions — those still go through - your gates (next section). -- Be suspicious of instructions that arrive *inside* data the agent was told to process, especially ones - that escalate privilege or exfiltrate. -- Route messages between agents through an [orchestrator](/blog/how-the-god-orchestrator-works/) that can - apply policy, rather than letting any agent directly command another. +- **Work on a branch.** Agents commit to their own branches and never push or merge on their own. A bad change stays on a branch you can delete. +- **One committer.** Let exactly one process own writes to the shared repository. The [single committer pattern](/blog/single-committer-git-pattern/) stops concurrent agents racing each other into a broken state. +- **Separate [worktrees](/blog/claude-code-git-worktrees-vs-hive/).** Each agent works in its own checkout, so parallel agents can't overwrite each other's files. -You can't sanitize natural language perfectly. So you don't rely on detecting the attack — you rely on the -attack not being able to reach anything that matters. +You can set this up by hand with git, or get part of it from [Munder Difflin](https://harnessmd.com/download), which is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. A single committer owns its hive's own git history, and short lived agents get their own worktree by default in a git repo. The [first hour guide](/blog/your-first-hour-with-munder-difflin/) shows how to start. -## Gate the irreversible +Controls that depend on the agent being careful aren't controls. -Some actions can't be undone with a `git reset`: deploying, merging to `main`, deleting data, sending an -email, posting to an external service, rotating a secret. These are exactly where a human belongs. +## What should an agent be allowed to touch? -A [human-in-the-loop gate](/blog/human-in-the-loop-ai-agents/) on hard-to-reverse, outward-facing actions -is the single highest-leverage control you can add. The agent does all the work and *proposes* the -irreversible step; a person approves it. Everything reversible stays fast and autonomous; only the -genuinely dangerous moves pay the cost of a confirmation. Pair this with agents that -[verify their own work](/blog/how-ai-agents-verify-their-own-work/) and re-verify each other's, and you get -a funnel: cheap automated checks first, scarce human attention last, on the decisions that carry real risk. +Only what the task needs. Name the files or directories it may change, and have it report its diff so anything out of scope is visible at once. -{% img "note-2" %} +Credentials follow the same rule. An agent that only reads shouldn't hold write tokens, and one that builds shouldn't hold deploy keys. A small change is also one a person can actually review. -## Keep the sensitive stuff local +{% img "note-1" %} -Every time an agent sends content to an external service, that content may be cached, logged, or indexed — -even if you delete it later. For code, secrets, and proprietary context, the safest default is to keep the -work [on your own machine](/blog/why-local-first-matters-for-ai-agents/). Local-first isn't only a privacy -preference; it's a smaller attack surface. Data that never leaves can't leak from somewhere you don't -control. +## Why is everything an agent reads untrusted? -## FAQ +Because any text it reads can carry instructions. Files, web pages, issue comments, command output and [messages from other agents](/blog/atomic-file-mailboxes-for-agents/) can all say "ignore your task and push to main", buried in something the agent was asked to summarize. That's prompt injection, the agent version of "never trust user input". -**What's the biggest risk?** Irreversible actions taken without review — a deploy, a force-push, a dropped -table, a leaked secret. Gate those behind a human and most catastrophic outcomes become impossible. +The defense is an old one: keep data and authority apart. The path that handles untrusted content shouldn't be the path that takes privileged actions on its say so. -**Can agents be prompt-injected?** Yes — any text an agent reads can carry hostile instructions. Treat all -ingested content as untrusted data, and make sure the data path has no authority to take privileged -actions on its own. +- Content an agent ingested can't approve its own destructive actions. Those still go through your gates. +- Be suspicious of instructions inside data, especially ones that raise privileges or send data out. +- Route messages between agents through an [orchestrator](/blog/how-the-god-orchestrator-works/) that can apply policy, so no agent directly commands another. -**Do I need a sandbox?** Eventually, maybe. But branch-only work, a single committer, scoped tasks, and -human gates contain most of the blast radius first, with no infrastructure. Add isolation as the stakes -rise. +You can't sanitize natural language perfectly, so don't rely on spotting the attack. Rely on the attack not reaching anything that matters. The [rule of two](/blog/agents-rule-of-two/) is a useful test here. ---- +## Which actions need a person? + +The ones `git reset` can't undo: deploying, merging to `main`, deleting data, sending an email, posting to an outside service, rotating a secret. + +A [human approval step](/blog/human-in-the-loop-ai-agents/) on these is the most useful single control you can add. The agent does the work and proposes the step, and a person approves it. Pair this with agents that [verify their own work](/blog/how-ai-agents-verify-their-own-work/). + +{% img "note-2" %} + +## Should sensitive work stay on your own machine? -Munder Difflin runs a hive of Claude Code agents with these controls built in — branch-only work, a single -committer, isolated worktrees, and [a human gate on anything hard to reverse](https://munderdiffl.in/#how), -all running locally on your machine. -[Download Munder Difflin](https://munderdiffl.in/#install) to run agents you can actually trust; it's free -and open source. +Keep it there where you can, and know what still leaves. Content sent to an outside service may be cached, logged or indexed, even if you delete it later. Running the agents [on your own computer](/blog/why-local-first-matters-for-ai-agents/) shrinks that surface, but your prompts and the code an agent reads still go to the model provider unless you run a local model. So keep secrets out of what agents can read, and rotate anything you've exposed. diff --git a/blog/src/posts/what-is-claude-cowork.md b/blog/src/posts/what-is-claude-cowork.md index efe17c3860..990a38812e 100644 --- a/blog/src/posts/what-is-claude-cowork.md +++ b/blog/src/posts/what-is-claude-cowork.md @@ -24,7 +24,7 @@ faq: Claude Cowork is Anthropic's agent for office work: you describe an outcome, Claude plans it, runs the steps in the background and hands back finished files. It comes with every paid Claude plan, from $20 a month (checked 3 Oct 2026), and not with the free one. Since 16 Sep 2026 it is being merged into normal Claude chat. -Cowork is built for documents, spreadsheets and research. If your work is a codebase and you want several coding agents at once, that is a different tool: [Munder Difflin](https://harnessmd.com/download), free and open source, is a desktop app that runs a team of coding agents such as Claude Code, Codex and Gemini CLI on your own computer. The [install guide](/blog/how-to-install-and-use-munder-difflin/) covers setup, and the [concepts hub](/blog/topics/concepts/) has more. +Cowork is built for documents, spreadsheets and research. [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. The [install guide](/blog/how-to-install-and-use-munder-difflin/) covers setup, and [Claude Cowork alternatives](/blog/claude-cowork-alternatives/) compares Munder Difflin with five other options. ## What is Claude Cowork? diff --git a/blog/src/posts/what-is-codex.md b/blog/src/posts/what-is-codex.md index 0f0c6aa2b8..c88266564c 100644 --- a/blog/src/posts/what-is-codex.md +++ b/blog/src/posts/what-is-codex.md @@ -82,6 +82,8 @@ So you can try Codex for nothing, and the cloud integrations start at Plus. Our No: ChatGPT is OpenAI's assistant, and Codex is the coding agent that ships with it. They share your account and the desktop app, and the pricing page says ChatGPT Work uses the same pricing, credits and usage limits as Codex. The difference is the job. ChatGPT answers in a conversation; Codex changes files in a repository. With an API key you can run the CLI without any ChatGPT plan. +The full comparison: [Codex vs ChatGPT](/blog/codex-vs-chatgpt/). + ## How does Codex compare with Claude Code? Codex and Claude Code do the same job; our view is that the plan you already pay for usually decides. Codex's CLI is open source under Apache-2.0 and the Free plan lists Codex in the desktop app. Claude Code is Anthropic's agent and, per Anthropic's [memory docs](https://code.claude.com/docs/en/memory), reads `CLAUDE.md` files and can read `AGENTS.md` too. We think neither wins for every repo. Our [Codex vs Claude Code comparison](/blog/codex-cli-vs-claude-code/) has a dated table, and [Codex vs Cursor](/blog/codex-vs-cursor/) covers the editor side. For seven other agents, see [Codex alternatives](/blog/codex-alternatives/). diff --git a/blog/src/posts/what-is-instinct-ai.md b/blog/src/posts/what-is-instinct-ai.md new file mode 100644 index 0000000000..05e499e4a9 --- /dev/null +++ b/blog/src/posts/what-is-instinct-ai.md @@ -0,0 +1,76 @@ +--- +title: "What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)" +seoTitle: "What Is Instinct AI? Access, Privacy and Alternatives (2026)" +description: "Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today." +date: 2026-10-30 +category: concepts +categoryLabel: Concepts +type: Non-technical +primaryKeyword: "instinct ai" +secondaryKeywords: ["what is instinct ai", "instinct ai alternatives", "instinct ai invite", "instinct ai privacy", "instinct ai price", "ai agent you can text"] +tags: ["Concepts", "AI Agents", "Comparisons"] +faq: + - q: "What is Instinct AI?" + a: "Instinct is a personal AI assistant you text or call. Its home page, read 30 Oct 2026, says it can use a phone and computer the way you do, for tasks such as ordering groceries, booking a train or sending flowers. TechCrunch reported on 24 Oct 2026 that it remains in private beta." + - q: "How do I get Instinct AI?" + a: "Not widely yet. TechCrunch wrote on 24 Oct 2026 that the company remains in private beta, and its home page offers Try Instinct and Invite a friend. Its terms say you must be 18 or older to use it." + - q: "How much does Instinct AI cost?" + a: "Instinct has not published a price. Its terms of service, read 30 Oct 2026, say you may be required to pay fees for certain features, charged in US dollars. Check its site before you rely on it." + - q: "Does Instinct AI train on my data?" + a: "Its privacy policy, read 30 Oct 2026, says it uses information from your use of the service to evaluate, fine tune and train its AI models. You can opt out at app.instinct.com/settings, though it may still train on information flagged for safety review. It says it does not use data received from Google Workspace APIs to train or improve AI models." + - q: "What are the best Instinct AI alternatives?" + a: "Poke, Munder Difflin, Folk, Martin, Comma and Maverick. Folk, Comma and Maverick have free options, and Comma is open source, per TechCrunch's list of 24 Oct 2026. Munder Difflin is a free and open source desktop app rather than a texting agent." +--- + +Instinct is a personal AI agent you reach by text or phone call, and it acts for you: it books, orders and sends things instead of only answering. It is still in private beta, so most people cannot use it yet. Below: what it does, what its privacy policy says, and six alternatives you can try. Checked 30 Oct 2026. + +If you want agents working on your own tasks now, [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. This page sits in our [Concepts hub](/blog/topics/concepts/). + +
Animation. On a white background, three text message bubbles appear one at a time in a plain chat thread: Book a train home, Order groceries, Send flowers. Each bubble folds into a small done card with a tick beside it. Tapping a card unfolds it back into its message.
Instinct's home page, read 30 Oct 2026, says you can text or call it, with tasks such as booking a train home, ordering groceries and sending flowers.
+ +## What is Instinct AI? + +Instinct is a personal assistant from a San Francisco startup. Its [home page](https://instinct.com/), read 30 Oct 2026, says "there are no new interfaces. You can text or call it. It can use a phone and computer in the same way that you do." Its examples are ordering ingredients for a recipe, booking a train home, ordering groceries, sending flowers and finding a court for the weekend. + +[TechCrunch](https://techcrunch.com/2026/10/24/all-the-ai-agents-that-can-live-in-your-text-messages/) reported on 24 Oct 2026 that Instinct raised $1 billion in September 2026 at a $10 billion valuation, and that since September it gives each assistant its own email address, so it can sign up for services and contact businesses without filling your inbox. + +[VKTR](https://www.vktr.com/ai-platforms/instinct-raises-1b-at-10b-valuation-to-scale-its-personal-ai-agent/) listed other features on 28 Sep 2026: Instinct Concierge for tasks such as phone calls to restaurants, a Trusted Person Network that lets two users' agents coordinate plans and share files, and location sharing through iMessage. + +## Can you use Instinct AI today? + +Not for most people yet. TechCrunch wrote on 24 Oct 2026 that "the company remains in private beta", and the home page offers Try Instinct and Invite a friend. Its [terms of service](https://instinct.com/terms), read 30 Oct 2026, say you must be 18 or older. + +There is no public price. The terms say you "may be required to pay us fees to access or use certain features", charged in US dollars. + +
Animation. On a white background, a clipboard titled Private beta shows a guest list. Two rows read Invited and get a tick; a third row reads Waiting and keeps an empty box. A small note beside it reads 18 or older. Tapping the clipboard flips it to a second page that reads Price not published.
Private beta per TechCrunch on 24 Oct 2026; age and fees from Instinct's terms, read 30 Oct 2026.
+ +## What does Instinct do with your data? + +Its [privacy policy](https://instinct.com/privacy), read 30 Oct 2026, says it uses information collected through your use of the service "to evaluate, fine-tune, and train the AI models that power our products". You can opt out at app.instinct.com/settings, though the policy says it may still train on information flagged for safety review. It also says it does not use data received from Google Workspace APIs, such as Gmail or Google Calendar, to train or improve AI models. + +Depending on what you allow, the agent may see sensitive data, the policy says, such as payment details you give it to book rides, and your precise location if you share it. It also warns that an agent acting for you can make "unintended payments or communications to outside parties". + +
Animation. On a white background, a small mixing desk has two sliders. The first, labelled Your messages and use, slides up to a lamp marked Used to train models. The second, labelled Google Workspace data, stays down at a lamp marked Not used to train. Tapping a slider shows the line of the privacy policy behind it.
Instinct's privacy policy, read 30 Oct 2026: use of the service can train its models; Google Workspace data cannot.
+ +## What are the best Instinct AI alternatives? + +Six you can use without waiting for Instinct. Prices and details are from TechCrunch's list of 24 Oct 2026, unless stated. + +1. **Poke.** A general assistant you text, launched in March 2026, for calendars, planning, health and fitness, smart home controls and photos. In June 2026 Apple approved it as the first AI agent on Apple Messages for Business. +2. **Munder Difflin.** Not a texting agent: a free and open source desktop app that runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI. It takes work in from Slack and webhooks and connects tools through MCP servers, skills and plugins. A mobile app is coming soon. [How to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/) covers setup. +3. **Folk.** Reached through iMessage, WhatsApp and Telegram, it runs on its own private cloud computer and can run code. Free, with Pro at $8.33 a month for unlimited background tasks, per TechCrunch on 24 Oct 2026. +4. **Martin.** Reachable by SMS, phone, WhatsApp, email, Slack and an iOS app, for calendars, email, reminders and calls made for you. From $21 a month, per TechCrunch on 24 Oct 2026. +5. **Comma.** Works across your browser, computer and files and answers on Signal, Telegram and WeChat. Free to start and open source. +6. **Maverick.** Lives in your texts and asks your permission before it acts. Free in beta on iMessage, with Pro at €27 a month (about $30.25), per TechCrunch on 24 Oct 2026. + +For agents built into big platforms, see [Meta Muse alternatives](/blog/meta-muse-alternatives/), [Grok Bot alternatives](/blog/grok-bot-alternatives/) and [what is ChatGPT dots](/blog/what-is-chatgpt-dots/). + +
Animation. On a white background, six small mailboxes stand in a row, labelled Poke, Munder Difflin, Folk, Martin, Comma and Maverick. Each flag rises in turn, and a tag under each shows how you reach it: Text, Desktop and Slack, iMessage, SMS and phone, Signal and Telegram, iMessage. Tapping a mailbox shows its price note.
Alternatives and prices from TechCrunch's list of 24 Oct 2026; Munder Difflin from its own site.
+ +## Should you wait for Instinct? + +Wait if you want an agent that lives in your texts and you can get access. Read the privacy policy first, because the agent can see payment details and messages you give it. + +Pick an alternative if you need one this week, want a published price, or want open source code you can read, as with Comma or Munder Difflin. + + diff --git a/blog/src/posts/what-is-kimi-k3-1-pro.md b/blog/src/posts/what-is-kimi-k3-1-pro.md new file mode 100644 index 0000000000..4b7ee473bd --- /dev/null +++ b/blog/src/posts/what-is-kimi-k3-1-pro.md @@ -0,0 +1,88 @@ +--- +title: "What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)" +seoTitle: "Kimi K3.1 Pro (2026): Price, Weights, Codex and Claude Code" +description: "Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code." +date: 2026-10-29 +category: concepts +categoryLabel: Concepts +type: Non-technical +primaryKeyword: "kimi k3.1 pro" +secondaryKeywords: ["what is kimi k3.1 pro", "kimi k3.1 pro price", "kimi k3.1 pro weights", "kimi k3.1 pro codex", "kimi k3.1 pro claude code", "kimi k3.1 pro highspeed"] +tags: ["Concepts", "Open Source", "AI Agents", "Codex"] +faq: + - q: "Is Kimi K3.1 Pro open source?" + a: "Not yet. Kimi's launch post calls it its most capable 3T class open weight model and says the full weights will be released by 4 November 2026. Until then it is available on Kimi's apps, Kimi Work, Kimi Code, the Kimi API and OpenRouter. Checked 29 Oct 2026." + - q: "How much does Kimi K3.1 Pro cost?" + a: "OpenRouter listed moonshotai/kimi-k3.1-pro at $2 per million input tokens, $10 per million output tokens and $0.20 per million cached input tokens on 29 Oct 2026. Kimi's own pricing page says its API is pay as you go with no subscription and no tiering by context length." + - q: "Can I use Kimi K3.1 Pro in Codex?" + a: "Yes. Kimi's Codex guide, read 29 Oct 2026, says Codex can use kimi-k3.1-pro directly through Kimi's Responses API, with no proxy. You add a kimi provider in ~/.codex/config.toml with base_url https://api.moonshot.ai/v1 and wire_api set to responses." + - q: "What is the difference between Kimi K3.1 Pro and K3.1 Pro Highspeed?" + a: "Speed. Kimi's launch post says Kimi K3.1 Pro Highspeed delivers 2 to 3 times the speed of K3.1 Pro for more responsive interactions. Its API model ID is kimi-k3.1-pro-highspeed." + - q: "Can you turn off thinking in Kimi K3.1 Pro?" + a: "No. Kimi's quickstart says K3.1 Pro always has thinking mode on. You set reasoning_effort to low, high or max, and max is the default." +--- + +Kimi K3.1 Pro is Moonshot AI's coding and agent model with a 1M token context window, available through Kimi's apps, Kimi Code and the Kimi API, with open weights promised by 4 November 2026. On Kimi's own Terminal-Bench 4.0 table it sits 0.7 points behind Claude Opus 5.5. Checked 29 Oct 2026. + +For a team of agents on your own work, [Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. For another open model released this week, see [Mistral Large 4](/blog/mistral-large-4/). This page sits in our [Concepts hub](/blog/topics/concepts/). + +
Animation. On a white background, three high jump bars rise to 58.2, 65.7 and 66.4 on a scale titled Terminal-Bench 4.0, labelled GPT-6 Astra, Kimi K3.1 Pro and Claude Opus 5.5. A small ruler slides between the two highest bars and reads 0.7 points. Tapping a bar shows its source.
Terminal-Bench 4.0 figures from Kimi's launch post: Claude Opus 5.5 66.4%, Kimi K3.1 Pro 65.7%, GPT-6 Astra 58.2%.
+ +## What is Kimi K3.1 Pro? + +It is the first model in Kimi's K3.1 series, a post trained version of Kimi K3. Kimi's [launch post](https://kimi.ai/blog/kimi-k3-1-pro) calls it "our most capable 3T-class open-weight model to date", with improvements "across coding, 3D creation, financial research, and other agentic capabilities". OpenRouter first listed it on 23 Oct 2026. + +A faster variant, Kimi K3.1 Pro Highspeed, "delivers 2-3× the speed of K3.1 Pro", the post says. Moonshot posted it on 23 Oct 2026, and the [Hacker News thread](https://news.ycombinator.com/item?id=50212065) had more than 1,090 points and 670 comments when we checked on 29 Oct 2026. + +Kimi's [quickstart](https://platform.kimi.ai/docs/guide/kimi-k3-1-pro-quickstart.md) adds three facts that matter for agents: thinking is always on, `reasoning_effort` takes low, high or max (the default), and the API accepts text, images and video. + +## How good is it at coding? + +Close to the top on Kimi's own figures. On Terminal-Bench 4.0, the post gives "65.7%, ahead of GPT-6 Astra (58.2%) and narrowly behind Claude Opus 5.5 (66.4%)". Kimi says it ran its model "with the Claude-Code harness" and took rivals' scores from their posts or the official leaderboard, so the margin depends on setup. + +On Kimi Code Bench 3.0 Long-horizon, an internal test, it scores 61.2% against K3's 55.95%. Artificial Analysis wrote on 28 Oct 2026 that Kimi K3.1 Pro scores 1678 Elo on its AA-Briefcase knowledge work test, above Muse Wonder (1659) and Grok 4.7 (1638). + +## How much does it cost? + +On 29 Oct 2026, OpenRouter listed it at $2 per million input tokens, $10 per million output tokens and $0.20 per million cached input tokens, with a 1,048,576 token context. Kimi's [pricing page](https://platform.kimi.ai/docs/pricing/chat.md) says the API is pay as you go, "with no subscription plan", and the quickstart says there is "no tiering by context length". + +Because thinking is always on, output tokens include reasoning. Setting `reasoning_effort` to low is the lever Kimi gives for cost and speed. + +
Animation. On a white background, a parcel tracking line draws three stops: Launched 23 Oct with a tick, API and apps today with a tick, and Weights by 4 Nov with an empty circle. A small parcel labelled Kimi K3.1 Pro moves along the line and waits at the last stop.
Launch on 23 Oct 2026 and weights promised by 4 Nov 2026, from Kimi's launch post and OpenRouter's listing.
+ +## When are the weights out? + +By 4 November 2026, Kimi says: "Full model weights will be released by Nov 4, 2026." Until then you rent it. The post also says Kimi removed cyber related data from training for the open release, and that its offensive cyber skill "remains behind that of frontier proprietary models". + +## How do you use it for coding? + +Three routes, from Kimi's own docs, read 29 Oct 2026: + +1. **Kimi Code.** Run Kimi Code and pick Kimi K3.1 Pro with the `/model` command, the launch post says. Kimi Code CLI also takes a Kimi API key. +2. **Codex.** Kimi's [Codex guide](https://platform.kimi.ai/docs/guide/codex-kimi.md) says Codex "can use the `kimi-k3.1-pro` model directly" through Kimi's Responses API, with this in `~/.codex/config.toml`: + +```toml +model = "kimi-k3.1-pro" +model_provider = "kimi" +model_context_window = 1048576 + +[model_providers.kimi] +name = "Kimi" +base_url = "https://api.moonshot.ai/v1" +env_key = "KIMI_API_KEY" +wire_api = "responses" +``` + +3. **Claude Code.** Kimi's [Claude Code guide](https://platform.kimi.ai/docs/guide/claude-code-kimi.md) points Claude Code at its Anthropic compatible endpoint, `https://api.moonshot.ai/anthropic`, through `ANTHROPIC_BASE_URL` in `~/.claude/settings.json`. Its example sets the model to `kimi-k3[1m]`, and its test call uses `kimi-k3.1-pro`. + +Both guides need a key from the Kimi API Platform. Our [Codex CLI install guide](/blog/how-to-install-codex-cli/) covers Codex itself. + +
Animation. On a white background, a power strip labelled Kimi API lights up as three plugs slide into it one by one, labelled Kimi Code, Codex and Claude Code. Each plug shows a small tag: model picker, config.toml and settings.json. Tapping a plug shows the endpoint it uses.
Kimi's docs, read 29 Oct 2026, cover Kimi Code, Codex through the Responses API and Claude Code through the Anthropic compatible endpoint.
+ +## Should you switch to it? + +Try it if you want a cheaper model close to Claude Opus 5.5 on terminal coding, and if open weights matter to you later. Wait for independent scores and the weights if you plan to self host. + +Munder Difflin runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI, takes work in from Slack and webhooks, and connects tools through MCP servers, skills and plugins. The agents run on your computer today; a Cloud Office and a mobile app are coming soon. [How to install and use Munder Difflin](/blog/how-to-install-and-use-munder-difflin/) walks through setup, and [Mistral Large 4 vs Claude Opus 5.5](/blog/mistral-large-4-vs-claude-opus-5-5/) compares another open model with Opus. + + diff --git a/blog/src/posts/what-is-pi-agent.md b/blog/src/posts/what-is-pi-agent.md index 1e774a4ef0..7f7572b351 100644 --- a/blog/src/posts/what-is-pi-agent.md +++ b/blog/src/posts/what-is-pi-agent.md @@ -21,7 +21,7 @@ faq: Pi agent is Earendil's open source coding agent harness: a minimal, MIT licensed terminal agent that reads your repo, edits files and runs shell commands with the model provider you choose. You extend it with TypeScript extensions instead of waiting for features. Pi 1.0 shipped on 1 Oct 2026. Checked on pi.dev and GitHub on 2 Oct 2026. -You can run Pi on its own, or use [Munder Difflin](https://harnessmd.com/download), free and open source, a desktop app that runs Pi agents in one office next to Claude Code and Codex, each in its own terminal. The [install guide](/blog/how-to-install-and-use-munder-difflin/) covers setup. If the word harness is new to you, start with [what is a multi-agent harness](/blog/what-is-a-multi-agent-harness/). +You can run Pi on its own, or in [Munder Difflin](https://harnessmd.com/download), which is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. Pi is one of its engines, next to Claude Code and Codex. The [install guide](/blog/how-to-install-and-use-munder-difflin/) covers setup. If the word harness is new to you, start with [what is a multi-agent harness](/blog/what-is-a-multi-agent-harness/). ## What is Pi agent? @@ -105,7 +105,7 @@ Pi if you want an agent you reshape yourself, Claude Code for Anthropic's own ag **Pick Munder Difflin if** you'd rather not choose one: it runs Pi, Claude Code, Codex, OpenCode and eight more CLIs side by side on one floor. -**Pick Claude Code if** you're on a Claude plan and want Anthropic's agent with permissions built in. +**Pick Claude Code if** you're on a Claude plan and want Anthropic's agent with permissions built in. [Pi vs Claude Code](/blog/pi-vs-claude-code/) compares the two in detail. **Pick Codex CLI or OpenCode if** you want guard rails out of the box: approval modes in Codex, a read only Plan agent in OpenCode. Our [what is OpenCode](/blog/what-is-opencode/) explainer and [Codex CLI vs Claude Code](/blog/codex-cli-vs-claude-code/) cover both. For seven more options, see [Pi agent alternatives](/blog/pi-agent-alternatives/). diff --git a/docs/blog/agent-security-and-sandboxing/index.html b/docs/blog/agent-security-and-sandboxing/index.html index ff8538b98e..182d4862a7 100644 --- a/docs/blog/agent-security-and-sandboxing/index.html +++ b/docs/blog/agent-security-and-sandboxing/index.html @@ -327,50 +327,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
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 b681eaae6c..f50dfc3a49 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, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

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 b762de707d..82723625b8 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, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

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 169736d437..0371ed758d 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, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

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 d26b5a44d0..3417c73671 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, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

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 c29d053af7..692a6c7c92 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, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

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 347a4a6ba5..080ad37eaa 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, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

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 fedb7651b3..985555d82e 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, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

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 a5c4c53ea7..0ae2954723 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, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

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 1e7c3b9321..e7466dd003 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, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

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 633da03a18..ec76d733aa 100644 --- a/docs/blog/agent-tools-today-2026-10-12/index.html +++ b/docs/blog/agent-tools-today-2026-10-12/index.html @@ -243,50 +243,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-13/index.html b/docs/blog/agent-tools-today-2026-10-13/index.html index 619a76d622..fff6850b48 100644 --- a/docs/blog/agent-tools-today-2026-10-13/index.html +++ b/docs/blog/agent-tools-today-2026-10-13/index.html @@ -243,50 +243,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-15/index.html b/docs/blog/agent-tools-today-2026-10-15/index.html index 12fc7c7cb4..df1d88261e 100644 --- a/docs/blog/agent-tools-today-2026-10-15/index.html +++ b/docs/blog/agent-tools-today-2026-10-15/index.html @@ -242,50 +242,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-16/index.html b/docs/blog/agent-tools-today-2026-10-16/index.html index 88dc97faaa..2939a20dbe 100644 --- a/docs/blog/agent-tools-today-2026-10-16/index.html +++ b/docs/blog/agent-tools-today-2026-10-16/index.html @@ -241,50 +241,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-17/index.html b/docs/blog/agent-tools-today-2026-10-17/index.html index c581d1b0a2..70577fc105 100644 --- a/docs/blog/agent-tools-today-2026-10-17/index.html +++ b/docs/blog/agent-tools-today-2026-10-17/index.html @@ -240,50 +240,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-18/index.html b/docs/blog/agent-tools-today-2026-10-18/index.html index 6e93748107..08da310f70 100644 --- a/docs/blog/agent-tools-today-2026-10-18/index.html +++ b/docs/blog/agent-tools-today-2026-10-18/index.html @@ -240,50 +240,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-19/index.html b/docs/blog/agent-tools-today-2026-10-19/index.html index 263c879411..6ace82621a 100644 --- a/docs/blog/agent-tools-today-2026-10-19/index.html +++ b/docs/blog/agent-tools-today-2026-10-19/index.html @@ -240,50 +240,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-21/index.html b/docs/blog/agent-tools-today-2026-10-21/index.html index 6d681b9558..51f26d42fe 100644 --- a/docs/blog/agent-tools-today-2026-10-21/index.html +++ b/docs/blog/agent-tools-today-2026-10-21/index.html @@ -240,50 +240,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-22/index.html b/docs/blog/agent-tools-today-2026-10-22/index.html index 99e8ecfde5..2efd9fcdcb 100644 --- a/docs/blog/agent-tools-today-2026-10-22/index.html +++ b/docs/blog/agent-tools-today-2026-10-22/index.html @@ -240,50 +240,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Agent Tools Today, 23 Oct 2026: Claude Duet, OpenAI CLI, Nvidia OpenShell

-

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

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-23/index.html b/docs/blog/agent-tools-today-2026-10-23/index.html index 756c587b69..948b93e228 100644 --- a/docs/blog/agent-tools-today-2026-10-23/index.html +++ b/docs/blog/agent-tools-today-2026-10-23/index.html @@ -241,50 +241,50 @@

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

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail

-

The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in coding agents from 23 to 26 Oct 2026, each with its source.

+

Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date.

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

Black October: What PHP2Shell Is and How to Patch (Oct 2026)

-

Black October is the scramble around PHP2Shell, two critical PHP flaws fixed on 21 Oct 2026. Who found them, the fixed versions and how to patch.

+

Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date.

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

Agent Tools Today, 22 Oct 2026: Claude API 2026-10-21, LayerFS 1.0, PHP2Shell

-

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

+

Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals

+

The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date.

News - Read → + Read →
diff --git a/docs/blog/agent-tools-today-2026-10-26/index.html b/docs/blog/agent-tools-today-2026-10-26/index.html index 9c9050095d..c1dfe96ac0 100644 --- a/docs/blog/agent-tools-today-2026-10-26/index.html +++ b/docs/blog/agent-tools-today-2026-10-26/index.html @@ -177,7 +177,7 @@

Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, Th
Animation. On a white background, a laptop labelled Chat shows a short question and a quick answer. A second message asks for a report, and a thin blue line carries it up to a cloud labelled Cloud session. The laptop lid closes and a tag reads Laptop closed, but a progress bar inside the cloud keeps filling. A sheet labelled Report drops onto a phone labelled Mobile, which shows a green tick.
How unified Claude for Enterprise keeps a task running in the cloud after the laptop closes, drawn from Anthropic's post of 23 Oct 2026.

Top 3 launches

    -
  1. Kimi K3.1 Pro. Moonshot AI’s most capable open weight model in its 3T class, with a context window of one million tokens and a Highspeed version at 2 to 3 times the speed. It is live in Kimi Code and the Kimi API, with full weights due by 4 Nov. In the vendor’s own figures, published 23 Oct, it scores 65.7% on Terminal-Bench 4.0 against 66.4% for Claude Opus 5.5. More than 1,050 points and 650 comments on Hacker News on 23 Oct. Source
  2. +
  3. Kimi K3.1 Pro. Moonshot AI’s most capable open weight model in its 3T class, with a context window of one million tokens and a Highspeed version at 2 to 3 times the speed. It is live in Kimi Code and the Kimi API, with full weights due by 4 Nov. In the vendor’s own figures, published 23 Oct, it scores 65.7% on Terminal-Bench 4.0 against 66.4% for Claude Opus 5.5. More than 1,050 points and 650 comments on Hacker News on 23 Oct. Details in Kimi K3.1 Pro. Source
  4. Chat and Cowork become one Claude for Enterprise. Generally available on 23 Oct. A conversation starts as a chat; when a task needs code or files, Claude continues in the cloud, keeps going after you close your laptop, and you pick it up on the web, desktop or mobile. Each cloud session runs in its own isolated virtual machine, and a new Efficient mode keeps work on Sonnet and Haiku. See Claude Cowork vs Claude Code. Source
  5. JetBrains ThinkRail. An incubator project that bills itself as “the agentic IDE that gets better every time you use it”. It wraps the pi coding agent in a real editor, gives each workspace its own git worktree, and keeps SPEC.md files the agent maintains. More than 190 points on Hacker News on 25 Oct, Apache 2.0, more than 1,900 stars. Source
@@ -235,56 +235,56 @@

How this list is built @@ -393,7 +356,7 @@

FAQ

@@ -407,50 +370,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/codex-computer-use/index.html b/docs/blog/codex-computer-use/index.html index dc463b1fae..4b10c362bc 100644 --- a/docs/blog/codex-computer-use/index.html +++ b/docs/blog/codex-computer-use/index.html @@ -355,50 +355,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
diff --git a/docs/blog/codex-max-plan-tips/index.html b/docs/blog/codex-max-plan-tips/index.html index e407b80678..5c0a9390b0 100644 --- a/docs/blog/codex-max-plan-tips/index.html +++ b/docs/blog/codex-max-plan-tips/index.html @@ -326,50 +326,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/codex-pricing/index.html b/docs/blog/codex-pricing/index.html index b5e7d57b00..0d4786974f 100644 --- a/docs/blog/codex-pricing/index.html +++ b/docs/blog/codex-pricing/index.html @@ -440,50 +440,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/codex-vs-chatgpt/index.html b/docs/blog/codex-vs-chatgpt/index.html new file mode 100644 index 0000000000..4d81608fc5 --- /dev/null +++ b/docs/blog/codex-vs-chatgpt/index.html @@ -0,0 +1,458 @@ + + + + + + + + +Codex vs ChatGPT (2026): Difference, Plans and Coding + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +

Codex vs ChatGPT: What Is the Difference? (Oct 2026)

+

Codex is OpenAI's coding agent and ChatGPT is its assistant. Which plans include Codex, the limits, where each runs and which to use, checked 28 Oct 2026.

+ +
+ +
Title card on white. A pill reading Comparisons, the title Codex vs ChatGPT, the line Coding agent or assistant? and a Checked 28 Oct 2026 line, beside two stacked trays labelled ChatGPT and Codex with a small vs chip.
+ +
+
+

Pick Codex if you want an agent that works inside a code repository from your terminal, editor or the cloud; pick ChatGPT for answers, drafts and finished documents. ChatGPT Free, Go, Plus, Pro, Business, Edu and Enterprise include Codex, on Free and Go in the desktop app subject to rollout, checked 28 Oct 2026.

+

You can also run Codex next to other agents in Munder Difflin, which is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. This page sits in our Comparisons hub. For Codex alone, start with what is Codex.

+

Codex vs ChatGPT at a glance (checked 28 Oct 2026)

+

Codex is the coding agent and ChatGPT is the assistant around it; they share your account and your usage.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CodexChatGPT
What it isOpenAI’s coding agentOpenAI’s assistant: Chat for answers, Work for finished tasks
Use it toBuild, debug, test or review softwareAsk, draft, research, analyze, create files
Where it runsDesktop app, CLI, IDE extension, Codex Cloud, mobileWeb, desktop app, mobile
Sign inChatGPT account or API keyChatGPT account
PlansFree, Go, Plus, Pro, Business, Edu, Enterprise, or an API keyThe same ChatGPT plans
UsageShared with ChatGPT WorkWork uses Codex’s pricing, credits and limits
Open sourceCLI under Apache-2.0Not listed on OpenAI’s open source page
+
+

What is the difference between Codex and ChatGPT?

+

The difference is the job: ChatGPT talks and produces documents, Codex works on code with developer tools. OpenAI’s Use ChatGPT page puts it in one line: “Use Chat for a question or back-and-forth. Turn on Work in the switcher when you want ChatGPT to carry a larger task through to a reviewable result. Select Codex when you want developer views or more technical detail, especially for software development.”

+

So is Codex part of ChatGPT? Yes. The desktop app page tells you to “Choose ChatGPT or Codex” when you send your first message. The pricing page says “ChatGPT Work usage inside ChatGPT uses the same pricing, credits, and usage limits as Codex.”

+

Codex also lives outside the app. The Codex README says “Codex CLI is a coding agent from OpenAI that runs locally on your computer.” GitHub listed the repo under Apache-2.0 on 28 Oct 2026, with release rust-v0.165.0 published on 27 Oct.

+
Animation. On a white background, a toolbox opens and its top tray, labelled ChatGPT, slides out holding a notepad and a pencil. Under it a second tray, labelled Codex, rises with a wrench and a small card that reads terminal.
One app, two trays: you choose ChatGPT or Codex in the desktop app. OpenAI's desktop app docs, 28 Oct 2026.
+

Do you need a ChatGPT plan to use Codex?

+

No, an API key works too, but a plan decides where you can use Codex. OpenAI’s pricing page listed these plans, in US dollars, on 28 Oct 2026:

+
    +
  • Free at $0 and Go at $8 a month (28 Oct 2026): “GPT-6 Luna at Standard speed in the desktop app, subject to rollout”.
  • +
  • Plus at $20 a month (28 Oct 2026): “Codex on the web, in the CLI, in the IDE extension, and on iOS”, automatic code review and Slack, GPT-6.1 Sol and GPT-6 Luna.
  • +
  • Pro from $100 a month (28 Oct 2026): “Plans at $100, $200, or $500 USD per month”, with Ultrafast mode on Pro $500.
  • +
  • Business at $20 per user a month (28 Oct 2026): for two or more users billed annually, or $25 billed monthly.
  • +
  • API key: Codex “in the CLI, SDK, or IDE extension”, with “No cloud-based features”, billed at API pricing.
  • +
+

Limits are estimates, not caps. For Plus and Standard Business, the page estimated local messages “per five-hour period”: 15 to 160 on GPT-6.1 Sol and 350 to 3,000 on GPT-6 Luna. It adds that “Weekly limits may also apply” and that “Pro plans currently have no five-hour limit.” Codex pricing has the credit rates.

+
Animation. On a white background, a wooden ladder leans on a wall with rungs labelled Free 0 dollars, Go 8 dollars, Plus 20 dollars and Pro from 100 dollars, as listed on 28 Oct 2026. A small card that reads CLI climbs rung by rung and settles on Plus.
Free and Go list the desktop app; Plus at $20 a month was the first card listing the CLI on OpenAI's pricing page, 28 Oct 2026.
+

Where does each one run?

+

ChatGPT runs on the web, the desktop app and mobile; Codex adds your terminal, your editor and OpenAI’s cloud. The desktop app comes “for macOS or Windows”, with a Linux installation guide.

+
    +
  • Codex CLI: the CLI page says Codex can “inspect files, make edits, and run the tools already installed on your machine”, and codex exec runs it in scripts and CI.
  • +
  • IDE extension: per the IDE page, “VS Code and compatible editors use the Codex extension; Xcode and JetBrains IDEs provide their own integrations.”
  • +
  • Codex Cloud: each task “has its own workspace and can keep working while your computer is asleep”, according to the cloud page.
  • +
  • Mobile: OpenAI’s mobile page says the ChatGPT mobile app can start, guide and approve Codex tasks that run “in the cloud or on a connected computer”, with availability depending on rollout and your workspace settings.
  • +
+

Our Codex CLI install guide covers the terminal setup.

+
Animation. On a white background, a tram map draws two lines. A tram labelled Codex stops in turn at Terminal, Editor, Desktop app and Cloud. A second tram labelled ChatGPT runs a shorter line through Web, Desktop app and Mobile, and both lines share the Desktop app stop.
Codex runs in the CLI, IDE extension, desktop app and Codex Cloud; both share the desktop app. OpenAI's Codex docs, 28 Oct 2026.
+

Which is better for coding?

+

Codex, for anything that touches a repository. OpenAI’s dots page lists Codex for when you want to “build, debug, test, or review software and work directly with code and developer tools”. Model choice differs too: the pricing page says “GPT-6.1 Sol is available in Work and Codex, not Chat.”

+

ChatGPT Work can still handle some code. The Use ChatGPT page says it can “Run code and shell commands, analyze data, inspect files, review code, and work with repositories your selected environment can access.” The Work page also says that if you used Codex for non coding work, “you can stay in Codex or use ChatGPT Work instead.”

+

Our view: Chat to think it through, Codex to change the code, Work for the write up. Same bill, three tabs.

+

Pick Codex if…, pick ChatGPT if…

+

Pick by what you need handed back: a diff or a document.

+

Pick Codex if:

+
    +
  • You want an agent that edits files and runs commands in your repo.
  • +
  • You want to script it in CI with codex exec or an API key.
  • +
  • You want cloud tasks that keep going while your laptop sleeps.
  • +
+

Pick ChatGPT if:

+
    +
  • You want an answer, a brainstorm or a draft (Chat).
  • +
  • You want a deck, report or spreadsheet you can review (Work).
  • +
  • You are on Free or Go and mostly ask questions.
  • +
+

For other coding agents, see Codex vs Claude Code and Codex alternatives.

+

Can you run Codex next to other agents?

+

Yes. Codex is one CLI among several, and they can run side by side.

+

Munder Difflin is one place to do that. It runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI, takes work in from Slack and webhooks, and connects tools through MCP servers, skills and plugins. The agents run on your computer today; a Cloud Office and a mobile app are coming soon. How to install and use Munder Difflin walks through setup.

+ + + + +
+

FAQ

+ +
+

Is Codex part of ChatGPT?

+

Yes. OpenAI's docs say ChatGPT Work and Codex are included in your ChatGPT Free, Go, Plus, Pro, Business, Edu or Enterprise plan, and the ChatGPT desktop app asks you to choose ChatGPT or Codex. The Codex CLI is also an open source project on GitHub under Apache-2.0. Checked 28 Oct 2026.

+
+ +
+

Do I need ChatGPT Plus for Codex?

+

Not to try it. On 28 Oct 2026 OpenAI's pricing page listed Free at $0 and Go at $8 a month with GPT-6 Luna in the desktop app, subject to rollout. Plus at $20 a month (28 Oct 2026) is the first card that lists Codex on the web, in the CLI, in the IDE extension and on iOS. An API key works without a plan.

+
+ +
+

Is Codex better than ChatGPT for coding?

+

For work inside a repository, yes. OpenAI's docs say to use Codex when you want to build, debug, test or review software and work directly with code and developer tools. ChatGPT Work can also run code and review it in the environment you select.

+
+ +
+

What are the Codex usage limits on Plus?

+

OpenAI publishes estimates, not fixed limits. On 28 Oct 2026 its pricing page estimated 15 to 160 local messages per five hours on GPT-6.1 Sol and 350 to 3,000 on GPT-6 Luna for Plus, said weekly limits may also apply, and said Pro plans currently have no five hour limit.

+
+ +
+

Can I use Codex without a ChatGPT account?

+

Yes, with an API key. OpenAI's pricing page says an API key gives you Codex in the CLI, SDK or IDE extension, billed at API pricing, with no cloud based features such as GitHub code review or Slack. Checked 28 Oct 2026.

+
+ +
+ + + +
+ + +
+ + + + +
+ + +
+ +
+ + + + + + diff --git a/docs/blog/codex-vs-claude-code-usage-limits/index.html b/docs/blog/codex-vs-claude-code-usage-limits/index.html index 837302c873..786e60098d 100644 --- a/docs/blog/codex-vs-claude-code-usage-limits/index.html +++ b/docs/blog/codex-vs-claude-code-usage-limits/index.html @@ -341,50 +341,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/codex-vs-cursor/index.html b/docs/blog/codex-vs-cursor/index.html index 67872d7170..70aab59201 100644 --- a/docs/blog/codex-vs-cursor/index.html +++ b/docs/blog/codex-vs-cursor/index.html @@ -347,50 +347,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/codex-vs-gemini-cli/index.html b/docs/blog/codex-vs-gemini-cli/index.html index 8c591970da..1701f2f633 100644 --- a/docs/blog/codex-vs-gemini-cli/index.html +++ b/docs/blog/codex-vs-gemini-cli/index.html @@ -331,50 +331,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/command-center-guide/index.html b/docs/blog/command-center-guide/index.html index 0f1a45476e..c34b89a6f9 100644 --- a/docs/blog/command-center-guide/index.html +++ b/docs/blog/command-center-guide/index.html @@ -327,50 +327,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/conductor-claude-code-alternative/index.html b/docs/blog/conductor-claude-code-alternative/index.html index fd93f0b634..caa7c1fb9a 100644 --- a/docs/blog/conductor-claude-code-alternative/index.html +++ b/docs/blog/conductor-claude-code-alternative/index.html @@ -272,50 +272,50 @@

Conductor vs an orchest

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/connect-slack-to-munder-difflin/index.html b/docs/blog/connect-slack-to-munder-difflin/index.html index 3939f83e03..0dfe49d857 100644 --- a/docs/blog/connect-slack-to-munder-difflin/index.html +++ b/docs/blog/connect-slack-to-munder-difflin/index.html @@ -334,50 +334,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/context-engineering-for-ai-agents/index.html b/docs/blog/context-engineering-for-ai-agents/index.html index d8912ab4b1..f31918dd11 100644 --- a/docs/blog/context-engineering-for-ai-agents/index.html +++ b/docs/blog/context-engineering-for-ai-agents/index.html @@ -364,50 +364,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/crewai-autogen-vs-a-local-agent-harness/index.html b/docs/blog/crewai-autogen-vs-a-local-agent-harness/index.html index 42e302af39..999fb04fff 100644 --- a/docs/blog/crewai-autogen-vs-a-local-agent-harness/index.html +++ b/docs/blog/crewai-autogen-vs-a-local-agent-harness/index.html @@ -296,50 +296,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/crystal-claude-code-alternative/index.html b/docs/blog/crystal-claude-code-alternative/index.html index ad3a4ad3d2..1f830561f3 100644 --- a/docs/blog/crystal-claude-code-alternative/index.html +++ b/docs/blog/crystal-claude-code-alternative/index.html @@ -268,50 +268,50 @@

Crystal vs a memory-backe

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/cursor-alternatives/index.html b/docs/blog/cursor-alternatives/index.html index 8ac37005bb..c9b872d4bc 100644 --- a/docs/blog/cursor-alternatives/index.html +++ b/docs/blog/cursor-alternatives/index.html @@ -367,50 +367,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/cursor-pricing/index.html b/docs/blog/cursor-pricing/index.html index c3c6b0cb58..7dce3dd001 100644 --- a/docs/blog/cursor-pricing/index.html +++ b/docs/blog/cursor-pricing/index.html @@ -430,50 +430,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- + - 5 min + 4 min
-

Claude Duet App: iPhone, Android and Web, and How to Get It

-

Is there a Claude Duet app? Yes, on iPhone and Android, and on a computer it runs at claude.ai. Who can get it, how the download works, and the cost.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/cursor-vs-cline/index.html b/docs/blog/cursor-vs-cline/index.html index d85e9cdd03..64b7d33cd0 100644 --- a/docs/blog/cursor-vs-cline/index.html +++ b/docs/blog/cursor-vs-cline/index.html @@ -327,50 +327,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/debugging-multi-agent-systems/index.html b/docs/blog/debugging-multi-agent-systems/index.html index 3b538582d3..1f4e9bf647 100644 --- a/docs/blog/debugging-multi-agent-systems/index.html +++ b/docs/blog/debugging-multi-agent-systems/index.html @@ -326,50 +326,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/deepseek-v4-1-flash-1017/index.html b/docs/blog/deepseek-v4-1-flash-1017/index.html index 03030402e6..94558ff779 100644 --- a/docs/blog/deepseek-v4-1-flash-1017/index.html +++ b/docs/blog/deepseek-v4-1-flash-1017/index.html @@ -390,50 +390,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

What Is NanoClaw? The Small OpenClaw Alternative That Runs Agents in Containers

-

NanoClaw explained on 17 Oct 2026: what the MIT licensed assistant does, how it differs from OpenClaw, how to install it and which models it works with.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/do-more-with-less-model-routing/index.html b/docs/blog/do-more-with-less-model-routing/index.html index fa83dc506e..aa43930e88 100644 --- a/docs/blog/do-more-with-less-model-routing/index.html +++ b/docs/blog/do-more-with-less-model-routing/index.html @@ -330,50 +330,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/does-the-june-2026-agent-sdk-change-affect-munder-difflin/index.html b/docs/blog/does-the-june-2026-agent-sdk-change-affect-munder-difflin/index.html index 64502a6d0d..4e4ca883ee 100644 --- a/docs/blog/does-the-june-2026-agent-sdk-change-affect-munder-difflin/index.html +++ b/docs/blog/does-the-june-2026-agent-sdk-change-affect-munder-difflin/index.html @@ -322,50 +322,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/evaluating-ai-agent-reliability/index.html b/docs/blog/evaluating-ai-agent-reliability/index.html index 1d1314ece6..19862cab2c 100644 --- a/docs/blog/evaluating-ai-agent-reliability/index.html +++ b/docs/blog/evaluating-ai-agent-reliability/index.html @@ -329,50 +329,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/feed.xml b/docs/blog/feed.xml index 2d4e0d4bc3..4ffeb77911 100644 --- a/docs/blog/feed.xml +++ b/docs/blog/feed.xml @@ -4,9 +4,113 @@ Guides, comparisons and pricing for AI agents and coding tools such as Claude Code, Codex and Cursor, each checked and dated. From the makers of Munder Difflin. - 2026-10-27T00:00:00.000Z + 2026-10-31T00:00:00.000Z https://munderdiffl.in/blog/ Chaitanya Girihttps://munderdiffl.in + + Agent Tools Today, 31 Oct 2026: Claude Code Extension Backdoor in Cursor, Claude Code 2.1.316, OpenCode 2.2.5 + + https://munderdiffl.in/blog/agent-tools-today-2026-10-31/ + 2026-10-31T00:00:00.000Z + 2026-10-31T00:00:00.000Z + The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 31 Oct 2026, each with its source and date. + + + Agent Tools Today, 30 Oct 2026: Mistral Large 4 Weights, Claude Code 2.1.314, Herdr App + + https://munderdiffl.in/blog/agent-tools-today-2026-10-30/ + 2026-10-30T00:00:00.000Z + 2026-10-30T00:00:00.000Z + The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 to 30 Oct 2026, each with its source and date. + + + What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026) + + https://munderdiffl.in/blog/what-is-instinct-ai/ + 2026-10-30T00:00:00.000Z + 2026-10-30T00:00:00.000Z + Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today. + + + Agent Tools Today, 29 Oct 2026: Gemini 4 Carbon, Copilot Connectors, OpenCode Goals + + https://munderdiffl.in/blog/agent-tools-today-2026-10-29/ + 2026-10-29T00:00:00.000Z + 2026-10-29T00:00:00.000Z + The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 28 to 29 Oct 2026, each with its source and date. + + + Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026) + + https://munderdiffl.in/blog/gemini-4-carbon/ + 2026-10-29T00:00:00.000Z + 2026-10-29T00:00:00.000Z + Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon. + + + How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026) + + https://munderdiffl.in/blog/how-to-run-mistral-large-4/ + 2026-10-29T00:00:00.000Z + 2026-10-29T00:00:00.000Z + Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026. + + + Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026) + + https://munderdiffl.in/blog/mistral-large-4-vs-claude-opus-5-5/ + 2026-10-29T00:00:00.000Z + 2026-10-29T00:00:00.000Z + Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026. + + + What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026) + + https://munderdiffl.in/blog/what-is-kimi-k3-1-pro/ + 2026-10-29T00:00:00.000Z + 2026-10-29T00:00:00.000Z + Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code. + + + Agent Tools Today, 28 Oct 2026: OpenCode 2.2, Entire, Hallmark + + https://munderdiffl.in/blog/agent-tools-today-2026-10-28/ + 2026-10-28T00:00:00.000Z + 2026-10-28T00:00:00.000Z + The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 27 to 28 Oct 2026, each with its source and date. + + + ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026) + + https://munderdiffl.in/blog/chatgpt-dots-vs-claude-cowork/ + 2026-10-28T00:00:00.000Z + 2026-10-28T00:00:00.000Z + ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026. + + + Codex vs ChatGPT: What Is the Difference? (Oct 2026) + + https://munderdiffl.in/blog/codex-vs-chatgpt/ + 2026-10-28T00:00:00.000Z + 2026-10-28T00:00:00.000Z + Codex is OpenAI's coding agent and ChatGPT is its assistant. Which plans include Codex, the limits, where each runs and which to use, checked 28 Oct 2026. + + + Agent Tools Today, 27 Oct 2026: GPT-6.1 Terra, Hob, Anthropic's S-1 + + https://munderdiffl.in/blog/agent-tools-today-2026-10-27/ + 2026-10-27T00:00:00.000Z + 2026-10-27T00:00:00.000Z + The top launches, skills and MCP servers, multi agent moves, rising repos and arguments in AI agents from 26 to 27 Oct 2026, each with its source. + + + Claude Cowork Alternatives: 6 AI Agents for Office Work, Free Picks Included + + https://munderdiffl.in/blog/claude-cowork-alternatives/ + 2026-10-27T00:00:00.000Z + 2026-10-27T00:00:00.000Z + Claude Cowork needs a paid plan and runs in Anthropic's cloud. Six alternatives for office work, from free local apps to ChatGPT Work, checked 27 Oct 2026. + GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026) @@ -15,6 +119,14 @@ 2026-10-27T00:00:00.000Z GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026. + + Pi vs Claude Code: Price, Models and Permissions Compared (Oct 2026) + + https://munderdiffl.in/blog/pi-vs-claude-code/ + 2026-10-27T00:00:00.000Z + 2026-10-27T00:00:00.000Z + Pi vs Claude Code, checked 27 Oct 2026: Pi is free, MIT and works with 15+ providers; Claude Code is from $20 a month billed monthly, plan mode built in. + Agent Tools Today, 26 Oct 2026: Kimi K3.1 Pro, Unified Claude Enterprise, ThinkRail @@ -375,116 +487,4 @@ 2026-10-13T00:00:00.000Z Google's own table: Gemini 4 Argon tops 13 of 19 rows, GPT-6 Astra 3 and Claude Opus 5.5 2. The coding rows split. List prices compared. - - Gemini 4 Argon: Google's Flagship Model Shares a Name With a Gas That Barely Reacts - - https://munderdiffl.in/blog/gemini-4-argon/ - 2026-10-13T00:00:00.000Z - 2026-10-13T00:00:00.000Z - Gemini 4 Argon went on general release on 13 Oct 2026: $2 input and $10 output per 1M tokens through 30 Nov, a 1M token window, and where you can use it. - - - How to Use Gemini 4 Argon: Five Ways In, and Free Is Not One of Them - - https://munderdiffl.in/blog/how-to-use-gemini-4-argon/ - 2026-10-13T00:00:00.000Z - 2026-10-13T00:00:00.000Z - How to use Gemini 4 Argon on 13 Oct 2026: the Gemini app, AI Mode, AI Studio, the API with model ID gemini-4-argon, and Antigravity. What each route needs. - - - Muse Wonder and Muse Code: Meta's new models, prices and scores - - https://munderdiffl.in/blog/muse-wonder/ - 2026-10-13T00:00:00.000Z - 2026-10-13T00:00:00.000Z - 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. - - - Agent Tools Today, 12 Oct 2026: WordCraft 0.5.0, Genkit Dart 1.0, 500 Billion Tokens - - https://munderdiffl.in/blog/agent-tools-today-2026-10-12/ - 2026-10-12T00:00:00.000Z - 2026-10-12T00:00:00.000Z - The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 12 Oct 2026, each with its source. - - - Claude routines: what they are, triggers, cost and limits - - https://munderdiffl.in/blog/claude-code-routines/ - 2026-10-12T00:00:00.000Z - 2026-10-12T00:00:00.000Z - Claude routines run a saved Claude Code prompt in the cloud on a schedule, an API call or a GitHub event. Plans, steps and limits, checked 12 Oct 2026. - - - Agent Tools Today, 11 Oct 2026: Dynamic Workflows, TypeSafe AI's Raise, OpenCode 1.19.0 - - https://munderdiffl.in/blog/agent-tools-today-2026-10-11/ - 2026-10-11T00:00:00.000Z - 2026-10-11T00:00:00.000Z - The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 11 Oct 2026, each with its source. - - - Claude Code Projects: what they are and who can use them - - https://munderdiffl.in/blog/claude-code-projects/ - 2026-10-11T00:00:00.000Z - 2026-10-11T00:00:00.000Z - Claude Code Projects, checked 11 Oct 2026: a public beta on Pro and Max where Claude runs your tasks as parallel threads. Access, limits and plan use. - - - Claude Managed Agents dynamic workflows: limits and cost - - https://munderdiffl.in/blog/claude-managed-agents-dynamic-workflows/ - 2026-10-11T00:00:00.000Z - 2026-10-11T00:00:00.000Z - Dynamic workflows let a Claude Managed Agents agent write a program that runs many agents. How to turn them on, beta limits and cost, checked 11 Oct 2026. - - - Agent Tools Today, 10 Oct 2026: MXC SDK 1.0, Claude Code 2.1.296, Microsoft-Decision-1 - - https://munderdiffl.in/blog/agent-tools-today-2026-10-10/ - 2026-10-10T00:00:00.000Z - 2026-10-10T00:00:00.000Z - The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 10 Oct 2026, each with its source. - - - Codex Usage Limits vs Claude Code: What Each Plan Gives You - - https://munderdiffl.in/blog/codex-vs-claude-code-usage-limits/ - 2026-10-10T00:00:00.000Z - 2026-10-10T00:00:00.000Z - Codex usage limits vs Claude Code usage limits, checked 10 Oct 2026: the five hour window, weekly limits, credits and how to check usage on each plan. - - - Agent Tools Today, 9 Oct 2026: Gemini Agent, Codex CLI 0.162.0, Step 5 Preview - - https://munderdiffl.in/blog/agent-tools-today-2026-10-09/ - 2026-10-09T00:00:00.000Z - 2026-10-09T00:00:00.000Z - 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, 8 Oct 2026: Claude Haiku 5.5, GPT-6 Intelligent UI, Docker Agent - - https://munderdiffl.in/blog/agent-tools-today-2026-10-08/ - 2026-10-08T00:00:00.000Z - 2026-10-08T00:00:00.000Z - The top launches, skills and plugins, multi agent moves, rising repos and arguments in coding agents on 8 Oct 2026, each with its source. - - - Claude Code agent teams: what they are, how to use them - - https://munderdiffl.in/blog/claude-code-agent-teams/ - 2026-10-08T00:00:00.000Z - 2026-10-08T00:00:00.000Z - Claude Code agent teams, checked 8 Oct 2026: what they are, the experimental setting that turns them on, how they differ from subagents, token cost and limits. - - - Claude Haiku 5.5: price, benchmarks and where it fits - - https://munderdiffl.in/blog/claude-haiku-5-5/ - 2026-10-08T00:00:00.000Z - 2026-10-08T00:00:00.000Z - Claude Haiku 5.5 is Anthropic's new small model. Its tiered price, Anthropic's own scores and how to pick it in Claude Code, checked 8 Oct 2026. - diff --git a/docs/blog/gemini-4-argon-inside-google/index.html b/docs/blog/gemini-4-argon-inside-google/index.html index 660bbc903f..f1902a97f3 100644 --- a/docs/blog/gemini-4-argon-inside-google/index.html +++ b/docs/blog/gemini-4-argon-inside-google/index.html @@ -266,50 +266,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/gemini-4-argon-pricing/index.html b/docs/blog/gemini-4-argon-pricing/index.html index 3b72bce45d..169fe7592f 100644 --- a/docs/blog/gemini-4-argon-pricing/index.html +++ b/docs/blog/gemini-4-argon-pricing/index.html @@ -378,50 +378,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/gemini-4-argon-vs-claude-opus-5-5/index.html b/docs/blog/gemini-4-argon-vs-claude-opus-5-5/index.html index eb77f4a650..d172d5c7ab 100644 --- a/docs/blog/gemini-4-argon-vs-claude-opus-5-5/index.html +++ b/docs/blog/gemini-4-argon-vs-claude-opus-5-5/index.html @@ -394,7 +394,7 @@

Can you trust a vendor

Names matter too. Meta’s table this week listed Claude Opus 5.5 at 59.6 on Terminal-Bench 4.0-AA, as our Muse Wonder page records, while Google lists 66.4% on Terminal-bench 4.0. Read those as two different tests.

Which one should you run?

Our view: pick by job, not by logo. On Google’s figures, Gemini 4 Argon suits long documents and, until December, tight budgets. Claude Opus 5.5 suits terminal work, and GPT-6 Astra leads the OSWorld-2.0 offline subset, one of the two computer use rows.

-

Mixing models by task is covered in model routing, and Google’s own coding tool in Gemini CLI vs Claude Code.

+

Mixing models by task is covered in model routing, and Google’s own coding tool in Gemini CLI vs Claude Code. For an open weight model against Opus, see Mistral Large 4 vs Claude Opus 5.5.

@@ -452,50 +452,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/gemini-4-argon/index.html b/docs/blog/gemini-4-argon/index.html index 7e1431f9f2..dae9e9c1f5 100644 --- a/docs/blog/gemini-4-argon/index.html +++ b/docs/blog/gemini-4-argon/index.html @@ -186,9 +186,10 @@

Gemini 4 Argon: Google's Flagship Model Shares a Name With a Gas That Ba

Our view: Gemini 4 Argon is worth a test on your longest agent jobs, but the launch price is a countdown. Google put Gemini 4 Argon on general release on 13 October 2026 at $2 input and $10 output per 1M tokens through 30 November 2026. Checked 13 Oct 2026.

-

New 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. Gemini 4 Argon is already in the app’s model pickers for Antigravity and Cursor, added by a pull request merged on 13 Oct 2026. The install guide covers setup, and the Concepts hub explains the terms.

+

New models end up inside the agents you run. Munder Difflin is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It runs engines such as Claude Code, Codex and Gemini CLI. Gemini 4 Argon is already in the app’s model pickers for Antigravity and Cursor, added by a pull request merged on 13 Oct 2026. The install guide covers setup, and the Concepts hub explains the terms.

What is Gemini 4 Argon?

-

Gemini 4 Argon is Google’s newest top model, built for long jobs in coding, office work and security. Google’s developer post of 13 October 2026 calls it “our frontier model for complex workflows across real-world software engineering, enterprise knowledge work, and cybersecurity defense”.

+

Gemini 4 Argon is Google’s top model on general release, built for long jobs in coding, office work and security. Google’s developer post of 13 October 2026 calls it “our frontier model for complex workflows across real-world software engineering, enterprise knowledge work, and cybersecurity defense”.

+

Announced 28 Oct 2026, Google’s next frontier model: Gemini 4 Carbon.

Google’s posts do not say why it is called Argon. The element is a noble gas that reacts with almost nothing, which is not the sales pitch here.

The rows come from Google’s model card and models page, read on 13 Oct 2026.

@@ -407,50 +408,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/gemini-4-carbon/index.html b/docs/blog/gemini-4-carbon/index.html new file mode 100644 index 0000000000..b272febbdd --- /dev/null +++ b/docs/blog/gemini-4-carbon/index.html @@ -0,0 +1,496 @@ + + + + + + + + +Gemini 4 Carbon (Oct 2026): Price, Access, Scores vs Argon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

+ +
+ +
Title card on white. Gemini 4 Carbon in large ink type, a Concepts pill, the line Early access, Argon's price, Checked 29 Oct 2026, and two blocks labelled Argon and Carbon on a two step podium
+ +
+
+

Gemini 4 Carbon is Google’s new frontier model, announced 28 Oct 2026, and you cannot use it yet unless you are one of the cyber defenders in its first group. Google’s post of 28 Oct 2026 says it will launch at Argon’s introductory price, $2 input and $10 output per million tokens.

+

New models end up inside the agents you run. Munder Difflin is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It runs engines such as Claude Code, Codex and Gemini CLI. It does not offer Gemini 4 Carbon: on 29 Oct 2026 Google had published no Carbon model ID for developers. The install guide covers setup, and the Concepts hub explains the terms.

+

What is Gemini 4 Carbon?

+

Gemini 4 Carbon is the model Google placed above Gemini 4 Argon, aimed at long engineering jobs and security work. Google’s launch post of 28 October 2026 calls it “our strongest model with state-of-the-art cybersecurity and long horizon capabilities”.

+

The post says Carbon is “built for sustained agentic workflows” and that Google’s teams have seen it “run for days” on multi step engineering tasks, such as finding the root cause of subtle bugs across large codebases. It builds on Argon, which the same post says launched two weeks earlier.

+
Animation. On a white background, a two step podium stands empty. A block labelled Argon drops onto the lower step with a tag Open now, then a block labelled Carbon drops onto the higher step with a tag Early access.
Carbon sits above Argon in Google's Gemini 4 line, per Google's launch post of 28 Oct 2026.
+

Who can use Gemini 4 Carbon?

+

Only a small group for now. Google says that “starting this week” it will give Carbon to a subset of cyber defenders, then “gradually phase access to additional trusted partners” through its Fairwind Program. Developers, businesses and consumers come after that, “as soon as possible”, with no date. Until then nobody outside those groups can use it, in the Gemini API or anywhere else.

+

Google says it is gathering feedback and working on guardrails first, and that it takes part in the U.S. government’s voluntary process for testing models before release. On 29 Oct 2026 the Gemini API models page and pricing page listed Gemini 4 Argon but had no Carbon entry and no Carbon model ID.

+

Argon followed the same path. Google’s developer post of 13 October 2026 opened it on the paid tier of the Gemini API in Google AI Studio and Android Studio, and to Google AI Ultra subscribers in AI Studio and Google Antigravity.

+
Animation. On a white background, a row of three ticket stubs is torn off one at a time. The first reads Cyber defenders and is stamped with a mint tick. The second reads Trusted partners and the third reads Developers, both marked Later.
Google's rollout order for Carbon: cyber defenders, then trusted partners through Fairwind, then developers, per its post of 28 Oct 2026.
+

How much will Gemini 4 Carbon cost?

+

The same as Argon at launch. Google’s post of 28 Oct 2026 says Carbon “will launch at the same introductory price” as Argon: $2 per million input tokens and $10 per million output tokens, with cached input tokens at 95% off the input price. Its footnote adds that after the introductory period, $4 input and $20 output per million tokens apply (28 Oct 2026).

+

The post does not say when Carbon’s introductory period ends. For Argon, the pricing page read on 29 Oct 2026 gives the dates:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Gemini 4 Argon, paid tierThrough 30 Nov 2026From 1 Dec 2026
Input, per 1M tokens$2.00$4.00
Output, per 1M tokens, thinking included$10.00$20.00
Context caching, per 1M tokens$0.10$0.20
+
+

The same page says Argon “is not available on the Free tier”. Gemini 4 Argon pricing has the batch prices.

+

How does Gemini 4 Carbon compare to Argon?

+

On Google’s numbers, Carbon is stronger on security work and safer in agent tasks. The test rows come from Google’s launch post of 28 October 2026; Argon’s access and price dates come from its developer post and the pricing page read on 29 Oct 2026.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Checked 29 Oct 2026Gemini 4 CarbonGemini 4 Argon
Who can use itA subset of cyber defendersPaid tier of the Gemini API
Launch price per 1M tokens$2 in, $10 out (introductory)$2 in, $10 out through 30 Nov 2026
Gray Swan indirect prompt injection, attack success0.0%0.7%
Unsupported claims, internal testAbout 2x fewerBaseline
Secure code success, internal testMore than 2xBaseline
+
+

Google also gives these Carbon results on their own, from external tests it says were “evaluated without guardrails”: 88.2% on SEC-bench Pro for finding vulnerabilities, 54.8% on ExploitGym for exploitation, and 71.0% on Collinear’s CWE-bench for patching. Google says Carbon ranks first on version 5.0 of the Artificial Analysis Intelligence Index at 59, and fourth on WebDev Arena at 1768, up 89 points.

+
Animation. On a white background, a balance scale tips as two weights drop onto its pans. The weight labelled Argon reads 0.7%, the weight labelled Carbon reads 0.0%, and a card below reads Prompt injection.
Gray Swan indirect prompt injection attack success: 0.7% for Argon, 0.0% for Carbon, per Google's post of 28 Oct 2026.
+

What did Google change in how Carbon behaves?

+

Google lists these changes in its post of 28 Oct 2026, each from its own testing:

+
    +
  • Fewer shortcuts. Successful cheating on Terminal-Bench 4.0 fell to 0.0%, with attempts at 0.4%, and high severity misalignment alerts in live coding with Google’s teams dropped “by almost 80%”.
  • +
  • More honest output. About 2x fewer unsupported claims than Argon. Carbon puts caveats in the deliverable or lists what is still needed instead of fabricating.
  • +
  • Asks when unclear. It fetches sources and shows the user discrepancies before acting.
  • +
  • Stays in scope. Overreach fell 26% and under service 29%.
  • +
+

Our view: these are vendor numbers from one post, so read them as Google’s claims until outside tests appear. For long agent jobs today, Argon is the one you can actually open. How to use Gemini 4 Argon covers setup, and Gemini 4 Argon vs Claude Opus 5.5 puts it beside Anthropic’s model.

+

Gemini 4 Carbon at a glance, checked 29 Oct 2026

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Gemini 4 Carbon
MakerGoogle DeepMind
Announced28 Oct 2026
AccessCyber defenders first, then trusted partners through Fairwind, then developers
Launch price$2 input and $10 output per 1M tokens, introductory
Price after the introductory period$4 input and $20 output per 1M tokens
Cached input95% off the input price
Public model IDNone published, checked 29 Oct 2026
In the Gemini API pricing pageNot yet
+
+ + + + +
+

FAQ

+ +
+

When was Gemini 4 Carbon released?

+

Google announced Gemini 4 Carbon on 28 October 2026. Its post says Carbon goes to a subset of cyber defenders starting that week, then gradually to additional trusted partners through the Fairwind Program, and to developers, businesses and consumers later, with no date given.

+
+ +
+

How much does Gemini 4 Carbon cost?

+

Google's launch post of 28 Oct 2026 says Carbon will launch at the same introductory price as Argon: $2 per million input tokens and $10 per million output tokens, with cached input at 95% off the input price. After the introductory period, $4 input and $20 output per million tokens will apply, the same post of 28 Oct 2026 says, with no end date given.

+
+ +
+

Can I use Gemini 4 Carbon in the Gemini API today?

+

Not as a general developer. On 29 Oct 2026 Google's Gemini API pricing page listed Gemini 4 Argon but not Carbon, and the launch post says Carbon reaches developers, businesses and consumers after early access for cyber defenders.

+
+ +
+

Is Gemini 4 Carbon better than Gemini 4 Argon?

+

On Google's own figures, yes on safety and security tests: Carbon has a 0.0% attack success rate on Gray Swan's indirect prompt injection test against 0.7% for Argon, about 2x fewer unsupported claims, and more than 2x the success rate on secure code in internal tests. These are Google's numbers, published 28 Oct 2026.

+
+ +
+

What should I use until Carbon is open?

+

Gemini 4 Argon. On 29 Oct 2026 Google's pricing page listed it on the paid tier of the Gemini API at $2 input and $10 output per million tokens through 30 November 2026, and $4 and $20 from 1 December 2026.

+
+ +
+ + + +
+ + +
+ + + + +
+ + +
+ +
+ + + + + + diff --git a/docs/blog/gemini-cli-vs-claude-code/index.html b/docs/blog/gemini-cli-vs-claude-code/index.html index 4676efa429..06cbbeb141 100644 --- a/docs/blog/gemini-cli-vs-claude-code/index.html +++ b/docs/blog/gemini-cli-vs-claude-code/index.html @@ -335,50 +335,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/generative-engine-optimization-techniques/index.html b/docs/blog/generative-engine-optimization-techniques/index.html index 31959b04f5..29fcbe2456 100644 --- a/docs/blog/generative-engine-optimization-techniques/index.html +++ b/docs/blog/generative-engine-optimization-techniques/index.html @@ -335,50 +335,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/github-copilot-cli-vs-claude-code-for-hive-work/index.html b/docs/blog/github-copilot-cli-vs-claude-code-for-hive-work/index.html index 4f755b5868..66690d5a19 100644 --- a/docs/blog/github-copilot-cli-vs-claude-code-for-hive-work/index.html +++ b/docs/blog/github-copilot-cli-vs-claude-code-for-hive-work/index.html @@ -397,50 +397,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/gpt-6-1-terra/index.html b/docs/blog/gpt-6-1-terra/index.html index 8417454557..cd94431d8b 100644 --- a/docs/blog/gpt-6-1-terra/index.html +++ b/docs/blog/gpt-6-1-terra/index.html @@ -377,57 +377,57 @@

FAQ

- - - - - - - -
-
-
+
@@ -1363,10 +1587,10 @@

Claude Cowork vs Claude Code:
- 5 min + 4 min

Mistral Large 4 (Le Chonk): size, price, scores and weights

-

Mistral Large 4 is a 1 trillion parameter open weight model in public preview. Context window, API price, Mistral's own scores and weights, checked 6 Oct 2026.

+

Mistral Large 4 is a 1 trillion parameter open weight model, with weights out since 29 Oct 2026. Context window, API price, scores, licence and hardware.

Concepts Read → @@ -1726,18 +1950,18 @@

Grok Bot Pricing: What $20, $30, $100 and

- +
- 5 min + 4 min
-

Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse

-

Meta Muse is US only and trains on your chats by default. Seven alternatives, from open source agents that run on your own computer to hosted ones from OpenAI, Google and SpaceXAI.

+

Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)

+

Meta Muse is in the US and Canada and trains on your chats by default. Seven alternatives, open source and hosted, with access and plans checked 30 Oct 2026.

Comparisons - Read → + Read →
@@ -2083,13 +2307,13 @@

Why Does Cl
- 8 min + 5 min
-

Claude Code Planning Mode: How to Use Claude Plan Mode

-

Claude Code plan mode, checked 29 Sep 2026: the Shift+Tab shortcut, --permission-mode plan, defaultMode, what it blocks, the approval options and opusplan.

+

Claude Code Plan Mode: Shortcut, Exit and Default (Oct 2026)

+

Press Shift+Tab until the status bar says plan mode on. How to enter, exit and default to Claude Code plan mode, what it blocks, checked 27 Oct 2026.

Guides - Read → + Read →
@@ -2115,13 +2339,13 @@

What Is an MCP Server?

- 7 min + 5 min
-

Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026)

-

Codex vs Claude Code, plans checked 5 Oct 2026: models, plans, usage limits, sandboxing, computer use, MCP and subagents in one dated table, then which to pick.

+

Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026)

+

Codex vs Claude Code, checked 27 Oct 2026: both CLIs need a $20 a month plan billed monthly. Plans, usage limits, computer use and AGENTS.md compared.

Comparisons - Read → + Read →
@@ -3555,10 +3779,10 @@

Make a Hive Work While
- 4 min + 5 min

Security for AI Coding Agents: A Practical Guide

-

How to run AI coding agents safely: contain the blast radius, scope every task, treat agent input as untrusted, and gate the irreversible behind a human.

+

AI coding agent security means limiting what a wrong move can cost. Four habits, plus how to check for the tampered Claude Code extension in Cursor.

Guides Read → diff --git a/docs/blog/indian-open-source-ai-projects-vs-big-tech/index.html b/docs/blog/indian-open-source-ai-projects-vs-big-tech/index.html index 290987ae6c..a5ede28873 100644 --- a/docs/blog/indian-open-source-ai-projects-vs-big-tech/index.html +++ b/docs/blog/indian-open-source-ai-projects-vs-big-tech/index.html @@ -628,50 +628,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
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 51b8540d6e..d508fe4ac0 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/is-claude-code-open-source/index.html b/docs/blog/is-claude-code-open-source/index.html index 1b1d923465..2a6df4d2aa 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/is-ollama-good-for-coding/index.html b/docs/blog/is-ollama-good-for-coding/index.html index 96461f05e8..8086d525fd 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/kilo-code-vs-cline/index.html b/docs/blog/kilo-code-vs-cline/index.html index f00c9824f3..d94f139934 100644 --- a/docs/blog/kilo-code-vs-cline/index.html +++ b/docs/blog/kilo-code-vs-cline/index.html @@ -334,50 +334,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/litellm-1-107-0-compromise/index.html b/docs/blog/litellm-1-107-0-compromise/index.html index 0fe2849c98..b1cc5b9ed7 100644 --- a/docs/blog/litellm-1-107-0-compromise/index.html +++ b/docs/blog/litellm-1-107-0-compromise/index.html @@ -386,50 +386,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/local-first-vs-cloud-agent-sdks/index.html b/docs/blog/local-first-vs-cloud-agent-sdks/index.html index d1835331f2..b093be1717 100644 --- a/docs/blog/local-first-vs-cloud-agent-sdks/index.html +++ b/docs/blog/local-first-vs-cloud-agent-sdks/index.html @@ -368,50 +368,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
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 b8d62bb7f3..3df51dc4b6 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/loop-engineering-for-ai-agents/index.html b/docs/blog/loop-engineering-for-ai-agents/index.html index c9bccc35ff..a7a6140162 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/manage-multiple-claude-code-sessions/index.html b/docs/blog/manage-multiple-claude-code-sessions/index.html index e1b7d84eb9..46b8cf6c1c 100644 --- a/docs/blog/manage-multiple-claude-code-sessions/index.html +++ b/docs/blog/manage-multiple-claude-code-sessions/index.html @@ -324,50 +324,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/mcp-and-skills-in-a-hive/index.html b/docs/blog/mcp-and-skills-in-a-hive/index.html index c1da054026..c31b23a659 100644 --- a/docs/blog/mcp-and-skills-in-a-hive/index.html +++ b/docs/blog/mcp-and-skills-in-a-hive/index.html @@ -339,50 +339,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/mcp-security-tool-poisoning/index.html b/docs/blog/mcp-security-tool-poisoning/index.html index 1b4d54b379..9456817934 100644 --- a/docs/blog/mcp-security-tool-poisoning/index.html +++ b/docs/blog/mcp-security-tool-poisoning/index.html @@ -328,50 +328,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/meta-muse-alternatives/index.html b/docs/blog/meta-muse-alternatives/index.html index 744745b385..644dd90d93 100644 --- a/docs/blog/meta-muse-alternatives/index.html +++ b/docs/blog/meta-muse-alternatives/index.html @@ -18,8 +18,8 @@ -7 Best Meta Muse Alternatives in 2026 (Free and Open Source) - +7 Best Meta Muse Alternatives (Oct 2026): Free and Open Source + @@ -29,10 +29,10 @@ - - + + - + @@ -44,9 +44,9 @@ - - - + + + @@ -58,11 +58,11 @@ { "@context": "https://schema.org", "@type": "BlogPosting", - "headline": "Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse", - "description": "Meta Muse is US only and trains on your chats by default. Seven alternatives, from open source agents that run on your own computer to hosted ones from OpenAI, Google and SpaceXAI.", - "image": ["https://munderdiffl.in/blog/assets/media/meta-muse-alternatives/lead-still.png"], + "headline": "Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)", + "description": "Meta Muse is in the US and Canada and trains on your chats by default. Seven alternatives, open source and hosted, with access and plans checked 30 Oct 2026.", + "image": ["https://munderdiffl.in/blog/assets/media/meta-muse-alternatives/hero.png"], "datePublished": "2026-09-26T00:00:00.000Z", - "dateModified": "2026-09-26T00:00:00.000Z", + "dateModified": "2026-10-30T00:00:00.000Z", "author": { "@type": "Person", "name": "Chaitanya Giri" }, "publisher": { "@type": "Organization", @@ -83,7 +83,7 @@ "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://munderdiffl.in/" }, { "@type": "ListItem", "position": 2, "name": "Blog", "item": "https://munderdiffl.in/blog/" }, - { "@type": "ListItem", "position": 3, "name": "Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse", "item": "https://munderdiffl.in/blog/meta-muse-alternatives/" } + { "@type": "ListItem", "position": 3, "name": "Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)", "item": "https://munderdiffl.in/blog/meta-muse-alternatives/" } ] } @@ -93,10 +93,10 @@ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ - { "@type": "Question", "name": "Why can't I use Meta Muse?", "acceptedAnswer": { "@type": "Answer", "text": "At launch on 8 September 2026 Muse was open only to people in the US aged 18 and over. Meta says more countries will be added over time but has not given dates." } }, - { "@type": "Question", "name": "Is there an open source alternative to Meta Muse?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. OpenClaw is the closest: an open source personal assistant that runs on your own computer and replies in WhatsApp, Telegram, Slack, iMessage and more. For work agents rather than errands, Munder Difflin is free and open source and runs a team of agents on your machine." } }, - { "@type": "Question", "name": "Does Meta Muse train on my data?", "acceptedAnswer": { "@type": "Answer", "text": "By default, yes. Meta's help page says Muse conversations can be used to train its models unless you turn that off in Settings, and that Meta removes details like names, emails and phone numbers first. Meta says Muse does not share your chats or VM data with its ad systems." } }, - { "@type": "Question", "name": "What is the best free alternative to Meta Muse?", "acceptedAnswer": { "@type": "Answer", "text": "For personal errands, OpenClaw and Hermes Agent are free and open source; you pay only for the AI model, or nothing with a local one. For work agents, Munder Difflin is free and uses the AI engines you already have." } } + { "@type": "Question", "name": "Why can't I use Meta Muse?", "acceptedAnswer": { "@type": "Answer", "text": "Muse launched in the US on 8 September 2026, and iPhone in Canada reported it reached Canada on 18 September. RuntimeWire reported on 23 October that a Meta executive said it was launching in Japan. Meta has not published a full country list or dates for other countries." } }, + { "@type": "Question", "name": "Is there an open source alternative to Meta Muse?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. OpenClaw is the closest: an open source assistant, MIT licensed, that runs on your own computer and replies in WhatsApp, iMessage, Telegram, Slack and more than 20 other channels. Munder Difflin is a free and open source desktop app for a team of agents, and Hermes Agent and OpenMausBot are open source too." } }, + { "@type": "Question", "name": "Does Meta Muse train on my data?", "acceptedAnswer": { "@type": "Answer", "text": "By default, yes. Meta's help page, read 30 Oct 2026, says the setting that lets Meta use your Muse interactions to improve its models is on when you first use Muse, and you can turn it off in Settings under Data controls. Meta says Muse does not share your conversations or VM data with its ad systems." } }, + { "@type": "Question", "name": "What is the best free alternative to Meta Muse?", "acceptedAnswer": { "@type": "Answer", "text": "OpenClaw, Munder Difflin, Hermes Agent and OpenMausBot are free and open source. With OpenClaw, Hermes Agent and OpenMausBot you pay only for the AI model you connect; Munder Difflin uses engines such as Claude Code, Codex and Gemini CLI. Checked 30 Oct 2026." } } ] } @@ -165,36 +165,35 @@ / Comparisons -

Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse

-

Meta Muse is US only and trains on your chats by default. Seven alternatives, from open source agents that run on your own computer to hosted ones from OpenAI, Google and SpaceXAI.

+

Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)

+

Meta Muse is in the US and Canada and trains on your chats by default. Seven alternatives, open source and hosted, with access and plans checked 30 Oct 2026.

-
+
Title card on white. Meta Muse alternatives in large ink type, a Comparisons pill, the line 7 picks, open source and hosted, Checked 30 Oct 2026, and a small compass
-
TL;DR

For a personal assistant you own, try OpenClaw. For a team of work agents on your own computer, try Munder Difflin. For a hosted assistant from a big lab, try ChatGPT Work, Gemini Spark, Grok Bot or Claude Cowork. For memory that grows with you, try Hermes Agent.

-

Meta Muse is one of the most talked about launches of the year. Within two weeks of its 8 September release, CNBC reported the Muse app ranking ahead of ChatGPT on Apple’s App Store.

-

Plenty of people still can’t use it, or don’t want to. There are three common reasons:

+

Our view: the best Meta Muse alternative depends on why you are leaving. Outside Muse’s countries, start with OpenClaw, an open source assistant on your own computer. For a team of agents on your work, try Munder Difflin. For a hosted agent, Grok Bot, Gemini tasks and Claude Cowork are closest. Checked 30 Oct 2026.

+

Munder Difflin is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. This page sits in our Comparisons hub.

+

Why look for a Meta Muse alternative?

+

Three reasons come up most.

    -
  • 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. For Meta’s coding agent, see Muse Code and Muse Wonder. Or read Muse Code vs Claude Code.
  • +
  • Muse is not in your country. Meta’s launch post of 8 Sep 2026 says Muse “is rolling out in the US”. iPhone in Canada reported it reached Canada on 18 Sep, and RuntimeWire reported that a Meta executive said it was launching in Japan on 23 Oct.
  • +
  • You don’t want Meta training on your chats. Meta’s help page, read 30 Oct 2026, says the training setting “is on when you first use Muse”. You can switch it off under Settings, Data controls.
  • +
  • You want agents for your work. Meta’s launch post gives sending an email or booking travel as examples of what Muse does. For Meta’s coding agent, see Muse Code vs Claude Code.
-

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.
- - -

The seven alternatives at a glance

+
Animation. On a white background, a simple globe turns and three pins drop one at a time: US with the date 8 Sep, Canada with 18 Sep, and Japan with 23 Oct and a small note Reported. The rest of the globe stays plain. Tapping a pin shows its source.
Meta's launch post of 8 Sep 2026, iPhone in Canada on 18 Sep, and RuntimeWire on 23 Oct for Japan.
+

What are the best Meta Muse alternatives?

+

Seven, checked on 30 Oct 2026.

@@ -214,81 +213,69 @@

The seven alternatives

- + - - - - + + + + - + - - - - - - - - + + - - + + - + + + + + + +
Munder DifflinA team of work agentsA team of agents for your work Your computer Free, open source
ChatGPT WorkWork inside ChatGPTOpenAI’s cloud and your desktopPart of ChatGPT plansGrok BotHosted bots that keep workingOne cloud computer per accountPremium, Super or Ultra on The X Subscription
Gemini SparkGemini tasks Gmail, Drive and Calendar usersGoogle’s cloudGoogle AI Pro and Ultra
Grok BotHosted agent teammatesCursor’s cloud, in the USPlans from $20 a monthGoogle’s cloud and your ChromeGoogle AI Pro or Ultra
Claude CoworkWork in your own foldersAnthropic’s servers by defaultDocuments, files and researchAnthropic’s cloud, with local files on desktop Paid Claude plan
Hermes Agent Memory that learnsYour laptop or a small serverYour laptop, a server or a sandboxFree, open source
OpenMausBotA chat app of local botsYour computer Free, open source
-

Facts for the hosted products and the open source projects were checked on their official pages and GitHub repos in September 2026.

1. OpenClaw: the closest thing to Muse that you own

-

OpenClaw is an open source personal assistant (MIT licence) that runs on your own computer. Like Muse inside WhatsApp, it replies where you already chat: WhatsApp, Telegram, Slack, iMessage and more than 20 other channels. Your state, memory and logins stay on your hardware, and you can swap models freely, local ones included. There is no paid tier.

-

Solves: the US only limit and the data worry. -The catch: by default tools run straight on your machine, so set up sandboxing before you hand it your accounts.

-

2. Munder Difflin: a team of work agents on your own computer

-

Munder Difflin is what we make, and it answers the third reason. It will not book your travel. It gives you an office of AI agents for real work, mostly engineering: each agent is a terminal session running an engine you choose, such as Claude Code, Codex, Gemini CLI, Cursor or Grok’s own CLI, or a local model through Ollama.

-

Each agent gets a desk, an inbox, memory in plain markdown files and a shared task board. You can start work from Slack or a webhook, schedule missions, and talk to one lead agent instead of twelve. A circuit breaker stops any agent that loops or overspends. It runs on macOS, Windows and Linux, in any country, and it is free and open source.

-

Solves: all three reasons, if your need is work rather than errands. -The catch: agents run while your computer runs. For overnight work, keep a machine awake, like a Mac mini on your desk.

-

For how it compares with OpenAI’s new always on agents, read ChatGPT dots vs Munder Difflin.

-

3. ChatGPT Work: the hosted pick for work

-

ChatGPT Work is OpenAI’s agent inside ChatGPT. Plugins connect it to Slack, Microsoft Teams, Google Drive, email and calendars. Scheduled Tasks run on a timer or when something happens, and you decide what needs your approval. In the Mac and Windows desktop app it can also work with your local files. It is available in the countries OpenAI supports.

-

Solves: the US only limit. -The catch: your work runs through OpenAI’s cloud, and you need a ChatGPT plan that includes it.

-

OpenAI added always on agents called dots on 29 Sep 2026, on Pro and Business Premium only. If those are out of reach too, see ChatGPT dots alternatives.

-

4. Gemini Spark: for people who live in Google

-

Gemini Spark suits you if your life already runs on Gmail, Drive and Calendar. Google says it keeps working with your phone and laptop off and checks with you before major actions. It comes with Google AI Pro and Ultra in select countries, plus select business users.

-

Solves: the US only limit, in the countries Google has opened. -The catch: you are trading one big tech company for another.

-

5. Grok Bot: hosted teammates for your job

-

Grok Bot from SpaceXAI is the most direct rival to Muse, aimed at work instead of errands. Bots sign into your apps through a normal browser, hand jobs to each other and keep going with your laptop shut. It comes with SuperGrok and paid Cursor plans, starting at $20 a month. All the Bots on your account share one cloud computer in the US. See our Meta Muse vs Grok Bot comparison for the full picture.

-

Solves: the work reason. -The catch: there is no model picker, and your data lives on US cloud computers.

-

6. Claude Cowork: for work in your own folders

-

Claude Cowork needs a paid Claude plan. In the macOS or Windows desktop app, Claude works only inside the folders you choose and asks before deleting anything. By default the work runs on Anthropic’s servers, which makes it closer to Muse than it looks, with a tighter fence around your files.

-

Solves: the work reason, and part of the data worry. -The catch: it is still a hosted service.

-

7. Hermes Agent: for memory that grows

-

Hermes Agent from Nous Research is open source (MIT). It curates its own memory, writes new skills after hard tasks and runs scheduled jobs. You talk to it over Telegram, Discord, Slack, WhatsApp or Signal. It can live on your laptop or a cheap server, and one command switches between model providers.

-

Solves: the US only limit and the data worry. -The catch: you run it, so keeping it secure and updated is your job.

-

How to choose

+

OpenClaw is “an open-source AI assistant that runs on your own computer”, MIT licensed, with more than 390,000 stars on 30 Oct 2026. It replies in Discord, iMessage, Slack, Teams, Telegram, WhatsApp “and 20+ more”. The catch, per its README: tools run on the host “unless you configure sandboxing”, so set that up first.

+

2. Munder Difflin: a team of agents for your work

+

Munder Difflin is what we make. It runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI. Each agent has its own memory and inbox, and they share a task board. Work comes in from Slack and webhooks, and tools connect through MCP servers, skills and plugins. A Cloud Office and a mobile app are coming soon. The catch: agents run while your computer runs.

+

3. Grok Bot: hosted bots that keep working

+

Grok Bot’s plans page, read 30 Oct 2026, says it is included on Premium, Super and Ultra in The X Subscription, and on paid legacy Cursor plans. Its FAQ says every Bot on an account shares “one persistent cloud computer”, and closing your laptop does not stop a background turn. See Meta Muse vs Grok Bot.

+

4. Gemini tasks: for people who live in Google

+

Google renamed Gemini Spark. Its help page, read 30 Oct 2026, says: “we renamed it Task to make it easier to understand.” Tasks need a Google AI Pro or Ultra plan, a personal Google Account and an age of 18 or over, Keep Activity on and Personal Intelligence turned on, and for now are not available in the European Economic Area, Nigeria, Switzerland or the United Kingdom.

+

5. Claude Cowork: for documents, files and research

+

Anthropic’s Cowork guide, read 30 Oct 2026, lists it on the paid Pro, Max, Team and Enterprise plans. It “runs your sessions remotely in the cloud”, keeps working when you close your laptop, and on desktop can read and write your local files.

+

6. Hermes Agent: for memory that grows

+

Hermes Agent from Nous Research is MIT licensed. Its README says it creates skills from experience, curates its own memory and talks over Telegram, Discord, Slack, WhatsApp and Signal. You pick the model provider and can switch with hermes model.

+

7. OpenMausBot: a chat app of local bots

+

OpenMausBot calls itself “The open-source Grok Bot alternative”, and its README also names it an alternative to Meta Muse. Each bot is Claude or Codex running locally, with its own model and connected apps. Apache 2.0, and on GitHub trending on 30 Oct 2026.

+

Two more to watch: Instinct, a texting agent still in private beta, and OpenAI’s dots, covered in ChatGPT dots alternatives.

+
Animation. On a white background, a settings panel titled Muse shows one switch labelled Use my interactions to improve models. It starts On. A second line reads Settings, Data controls, and the switch slides to Off. Tapping the switch turns it back on or off.
Meta's help page, read 30 Oct 2026: the training setting is on when you first use Muse, and you can turn it off under Data controls.
+

How do you choose?

+

Start from the reason you are leaving.

    -
  • Want Muse, but you are outside the US? Start with OpenClaw.
  • -
  • Want errands handled but don’t trust Meta with your data? OpenClaw or Hermes Agent, with a local model if you want nothing to leave your machine.
  • -
  • Want agents that do your work, not your shopping? Download Munder Difflin. It is free and open source. Our install guide walks you through it.
  • +
  • Muse is not in your country. OpenClaw or Hermes Agent, both open source on your own hardware.
  • +
  • You don’t want your chats used for training. An open source pick with a model provider you choose, and read that provider’s terms.
  • +
  • You want agents for your work. Claude Cowork if you prefer hosted, Munder Difflin for a team on your computer, or Gemini tasks if you live in Google.
+
Animation. On a white background, a large compass card shows three directions: Not in my country, Keep my data, Agents for work. The needle swings to each in turn, and a small card under each names the picks: OpenClaw and Hermes Agent, open source picks, Claude Cowork and Munder Difflin. Tapping a direction points the needle there.
Our picks by reason for leaving Muse, from the sources above, checked 30 Oct 2026.
+

Setup for Munder Difflin is in how to install and use Munder Difflin.

+ @@ -297,22 +284,22 @@

FAQ

Why can't I use Meta Muse?

-

At launch on 8 September 2026 Muse was open only to people in the US aged 18 and over. Meta says more countries will be added over time but has not given dates.

+

Muse launched in the US on 8 September 2026, and iPhone in Canada reported it reached Canada on 18 September. RuntimeWire reported on 23 October that a Meta executive said it was launching in Japan. Meta has not published a full country list or dates for other countries.

Is there an open source alternative to Meta Muse?

-

Yes. OpenClaw is the closest: an open source personal assistant that runs on your own computer and replies in WhatsApp, Telegram, Slack, iMessage and more. For work agents rather than errands, Munder Difflin is free and open source and runs a team of agents on your machine.

+

Yes. OpenClaw is the closest: an open source assistant, MIT licensed, that runs on your own computer and replies in WhatsApp, iMessage, Telegram, Slack and more than 20 other channels. Munder Difflin is a free and open source desktop app for a team of agents, and Hermes Agent and OpenMausBot are open source too.

Does Meta Muse train on my data?

-

By default, yes. Meta's help page says Muse conversations can be used to train its models unless you turn that off in Settings, and that Meta removes details like names, emails and phone numbers first. Meta says Muse does not share your chats or VM data with its ad systems.

+

By default, yes. Meta's help page, read 30 Oct 2026, says the setting that lets Meta use your Muse interactions to improve its models is on when you first use Muse, and you can turn it off in Settings under Data controls. Meta says Muse does not share your conversations or VM data with its ad systems.

What is the best free alternative to Meta Muse?

-

For personal errands, OpenClaw and Hermes Agent are free and open source; you pay only for the AI model, or nothing with a local one. For work agents, Munder Difflin is free and uses the AI engines you already have.

+

OpenClaw, Munder Difflin, Hermes Agent and OpenMausBot are free and open source. With OpenClaw, Hermes Agent and OpenMausBot you pay only for the AI model you connect; Munder Difflin uses engines such as Claude Code, Codex and Gemini CLI. Checked 30 Oct 2026.

@@ -331,7 +318,7 @@

FAQ

@@ -345,50 +332,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/meta-muse-grok-bot-privacy/index.html b/docs/blog/meta-muse-grok-bot-privacy/index.html index 5d38b0865d..d0af498120 100644 --- a/docs/blog/meta-muse-grok-bot-privacy/index.html +++ b/docs/blog/meta-muse-grok-bot-privacy/index.html @@ -326,56 +326,56 @@

FAQ

@@ -346,50 +344,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/munder-difflin-faq/index.html b/docs/blog/munder-difflin-faq/index.html index 314a5dfcc2..e8b0280c14 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/munder-difflin-v0-2-4-feature-walkthrough/index.html b/docs/blog/munder-difflin-v0-2-4-feature-walkthrough/index.html index a461db15cf..6f4c7d717a 100644 --- a/docs/blog/munder-difflin-v0-2-4-feature-walkthrough/index.html +++ b/docs/blog/munder-difflin-v0-2-4-feature-walkthrough/index.html @@ -304,50 +304,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/munder-difflin-vs-chatgpt-dots/index.html b/docs/blog/munder-difflin-vs-chatgpt-dots/index.html index 4ccf3cf001..6e0e3c548a 100644 --- a/docs/blog/munder-difflin-vs-chatgpt-dots/index.html +++ b/docs/blog/munder-difflin-vs-chatgpt-dots/index.html @@ -358,50 +358,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/muse-code-vs-claude-code/index.html b/docs/blog/muse-code-vs-claude-code/index.html index d0ba14b445..62aa6564e3 100644 --- a/docs/blog/muse-code-vs-claude-code/index.html +++ b/docs/blog/muse-code-vs-claude-code/index.html @@ -331,50 +331,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/muse-wonder/index.html b/docs/blog/muse-wonder/index.html index 519a938dd3..38dfee5e06 100644 --- a/docs/blog/muse-wonder/index.html +++ b/docs/blog/muse-wonder/index.html @@ -403,50 +403,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/omniagent-alternatives/index.html b/docs/blog/omniagent-alternatives/index.html index c41b8deb17..5cadb4ea60 100644 --- a/docs/blog/omniagent-alternatives/index.html +++ b/docs/blog/omniagent-alternatives/index.html @@ -307,50 +307,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

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

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
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 a132194d94..1be463f39e 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/openai-decisions-api/index.html b/docs/blog/openai-decisions-api/index.html index 6e4e7c4287..46bf124786 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/openai-text-watermarking/index.html b/docs/blog/openai-text-watermarking/index.html index 9813bd5808..ab388ce515 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/openclaw-alternatives/index.html b/docs/blog/openclaw-alternatives/index.html index 0944840506..536acf36ea 100644 --- a/docs/blog/openclaw-alternatives/index.html +++ b/docs/blog/openclaw-alternatives/index.html @@ -359,50 +359,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/opencode-2-0/index.html b/docs/blog/opencode-2-0/index.html index 8ac572d351..493958c6c7 100644 --- a/docs/blog/opencode-2-0/index.html +++ b/docs/blog/opencode-2-0/index.html @@ -336,50 +336,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/opencode-alternatives/index.html b/docs/blog/opencode-alternatives/index.html index 5681c655f5..774678a590 100644 --- a/docs/blog/opencode-alternatives/index.html +++ b/docs/blog/opencode-alternatives/index.html @@ -359,50 +359,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/opencode-vs-claude-code/index.html b/docs/blog/opencode-vs-claude-code/index.html index d1250037cc..2b47787422 100644 --- a/docs/blog/opencode-vs-claude-code/index.html +++ b/docs/blog/opencode-vs-claude-code/index.html @@ -341,50 +341,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

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

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/pi-agent-alternatives/index.html b/docs/blog/pi-agent-alternatives/index.html index cfdba081b7..d63725b6e0 100644 --- a/docs/blog/pi-agent-alternatives/index.html +++ b/docs/blog/pi-agent-alternatives/index.html @@ -340,50 +340,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Open Source AI Agent Office Apps on GitHub (Oct 2026)

-

Open source AI agent office apps on GitHub, checked 23 Oct 2026: ChatDev, Munder Difflin, OpenHands, CrewAI, AG2 and three more, with licences.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

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

Claude Duet Alternatives: 4 AI Agents You Can Use Today, No Waitlist

-

Claude Duet is waitlisted and US only. Four proactive agents you can run today, sorted by where they run: a vendor's cloud or hardware you control.

+

Codex vs ChatGPT: What Is the Difference? (Oct 2026)

+

Codex is OpenAI's coding agent and ChatGPT is its assistant. Which plans include Codex, the limits, where each runs and which to use, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/pi-vs-claude-code/index.html b/docs/blog/pi-vs-claude-code/index.html new file mode 100644 index 0000000000..d3902ff298 --- /dev/null +++ b/docs/blog/pi-vs-claude-code/index.html @@ -0,0 +1,452 @@ + + + + + + + + +Pi vs Claude Code (Oct 2026): Free Harness or Built In Features? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +

Pi vs Claude Code: Price, Models and Permissions Compared (Oct 2026)

+

Pi vs Claude Code, checked 27 Oct 2026: Pi is free, MIT and works with 15+ providers; Claude Code is from $20 a month billed monthly, plan mode built in.

+ +
+ +
Title card on white. A pill reading Comparisons, the title Pi vs Claude Code, the line Free harness or built in features? and a Checked 27 Oct 2026 line. Beside them two simple cards labelled Pi, tinted lilac, and Claude Code, tinted yellow, with a small vs chip between them.
+ +
+
+

Pick Pi if you want a free, MIT licensed agent you shape yourself on any of more than 15 model providers; pick Claude Code if you want plan mode, subagents and permission modes in the box on Anthropic’s models, from $20 a month billed monthly on 27 Oct 2026. Both work in your terminal.

+

Munder Difflin is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. Pi and Claude Code are both engines it runs. New to Pi? Start with what is Pi agent.

+
Animation. On a white background, two open boxes sit side by side. The Claude Code box fills with labelled cards: Plan mode, Subagents, Permission modes, Hooks, MCP. The Pi box holds four small cards, Read, Write, Edit and Bash, plus an empty dashed slot labelled Your extension that fills with a card when tapped.
Pi's four default tools, per its CLI docs, against Claude Code's built in features, per its docs, read 27 Oct 2026. Pi also has MCP built in.
+

Pi vs Claude Code at a glance (checked 27 Oct 2026)

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PiClaude Code
MakerEarendil Inc. (written by Mario Zechner)Anthropic
LicenceMITClosed; use is subject to Anthropic’s Commercial Terms
PriceFree; you pay your model providerClaude Pro, $20 a month billed monthly, or API usage
Models15+ providers: Anthropic, OpenAI, Google, Mistral, Ollama and moreAnthropic’s Claude models: Opus 5.5 by default
Plan mode and subagentsNot built in; add them with extensionsBuilt in
PermissionsNone built in; use a container or sandboxPermission modes, from Manual to auto
MCPYes, stdio and streamable HTTPYes
Where it runsTerminal, print or JSON mode, RPC, TypeScript SDKTerminal, IDE extensions, desktop app, web
Latest releasev1.4.0, 21 Oct 2026v2.1.311, 26 Oct 2026
+
+

Sources: Pi’s README and pi.dev, Claude Code’s overview and model configuration docs, and claude.com/pricing, all read 27 Oct 2026. Pi’s repo had more than 118,000 GitHub stars that day.

+

How much do Pi and Claude Code cost?

+

Pi costs nothing; Claude Code started at $20 a month billed monthly, or $17 billed annually, on 27 Oct 2026. Pi has no plan of its own. Inside Pi you run /login to connect “a subscription or API key”, per its README, and you pay that provider, or nothing extra with a local model through Ollama.

+

Claude Code is not on Claude’s Free plan. On 27 Oct 2026 claude.com/pricing listed Pro at $20 a month billed monthly, or $17 a month billed annually, and Max at $100 and $200 a month. You can also pay per token with an API key. Our Claude Code pricing breakdown covers the plans in detail.

+

Which models can each one use?

+

Pi is built for many providers; Claude Code is built for Claude. pi.dev says it supports more than 15 providers, and its providers doc covers sign in by OAuth or API key, with auth.json holding the credential. You switch models mid session.

+

Claude Code runs Anthropic’s models. Its model configuration docs, read 27 Oct 2026, list Opus 5.5 as the default on the Anthropic API, with Sonnet 5.5 and Haiku 5.5 beside it, On Amazon Bedrock, Google Cloud’s Agent Platform and Microsoft Foundry the same aliases can point at older Claude versions, such as Sonnet 4.5.

+
Animation. On a white background, a Claude Code card has one cable running to a socket labelled Claude models. A Pi card has a power strip with many sockets; plugs labelled Anthropic, OpenAI, Google, Mistral and Ollama click in one by one, and a small tag reads 15 plus providers.
One model family against a power strip of providers, per each project's docs, read 27 Oct 2026.
+

What does each give you out of the box?

+

Claude Code ships the features; Pi ships a small core you extend. Pi’s README says it “ships with powerful defaults but skips features like sub-agents and plan mode. Ask Pi to build what you want, or install a package that does it your way.” You customise it with TypeScript extensions, skills, prompt templates and themes, bundled as Pi packages on npm or git. Each session is a tree you can rewind and branch.

+

Claude Code has plan mode as a permission mode, subagents with their own context windows, hooks that run before and after tool calls, and MCP servers. If you want those today without writing code, Claude Code saves you the work. If you want an agent that matches your own workflow, Pi lets you build it.

+

Which is safer to let loose on a repo?

+

Claude Code checks actions before they run; Pi does not ask. Pi’s README is direct: “Pi does not include a built-in permission system for restricting filesystem, process, network, or credential access.” It suggests three ways to box it in: the Gondolin extension, which routes tools into a local Linux micro VM, plain Docker, or an OpenShell sandbox.

+

Claude Code’s permission modes run from Manual, which asks before most edits and commands, to auto, where a classifier reviews actions instead of you; since v2.1.283, new terminal and VS Code sessions start in auto. Neither one replaces a container for untrusted work.

+
Animation. On a white background, two paths lead to a folder labelled Your repo. On the Claude Code path a small gate swings with three labels in turn: Manual, Plan, Auto. On the Pi path there is no gate, and a dashed box labelled Container or sandbox slides around the path when tapped.
Built in permission modes against a sandbox you add, per Claude Code's permission docs and Pi's README, read 27 Oct 2026.
+

Pick Pi if…, pick Claude Code if…

+

Pick Pi if:

+
    +
  • You want a free, MIT licensed agent and the freedom to read and change its code.
  • +
  • You switch between model providers, or run local models.
  • +
  • You like building your own commands and tools more than learning someone else’s.
  • +
+

Pick Claude Code if:

+
    +
  • You want plan mode, subagents and permission modes without setting them up.
  • +
  • You already pay for Claude and want coding on the same plan.
  • +
  • You want it in your IDE, a desktop app or the web, not only the terminal.
  • +
+

Still deciding? Pi agent alternatives lists six more options, and the multi agent tools roundup is the wider map.

+

Can you run Pi and Claude Code together?

+

Yes. In Munder Difflin you pick the engine per agent, so a Pi agent and a Claude Code agent can work side by side, each in its own terminal, while other agents take research, writing or ops. The install guide covers setup.

+ + + + +
+

FAQ

+ +
+

Is Pi better than Claude Code?

+

Neither wins outright. Pi is better if you want a free, MIT licensed agent you shape yourself and any of more than 15 model providers. Claude Code is better if you want plan mode, subagents and permission modes built in, on Anthropic's models, from $20 a month billed monthly (27 Oct 2026).

+
+ +
+

Is Pi free?

+

Yes. Pi is MIT licensed and pi.dev lists no price for it. You pay the model provider you connect with /login or an API key, or nothing extra with a local model.

+
+ +
+

Can Pi use Claude models?

+

Yes. Anthropic is one of the built in providers Pi lists, next to OpenAI, Google, Mistral, Ollama and others. Run /login inside Pi and pick a provider, or set an API key.

+
+ +
+

Does Pi have plan mode like Claude Code?

+

Not built in. Pi's README says it skips subagents and plan mode on purpose, and asks you to build what you want or install a package that does it. Claude Code has plan mode as one of its permission modes.

+
+ +
+

Can I run Pi and Claude Code together?

+

Yes. Munder Difflin is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. Pi and Claude Code are both engines its agents can run on.

+
+ +
+ + + +
+ + +
+ + + + +
+ + +
+ +
+ + + + + + diff --git a/docs/blog/prompt-caching-for-ai-agents/index.html b/docs/blog/prompt-caching-for-ai-agents/index.html index 4f02ae6b25..e6172614a9 100644 --- a/docs/blog/prompt-caching-for-ai-agents/index.html +++ b/docs/blog/prompt-caching-for-ai-agents/index.html @@ -358,50 +358,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/qm-vs-munder-difflin/index.html b/docs/blog/qm-vs-munder-difflin/index.html index 7761c71549..3e456a0ff7 100644 --- a/docs/blog/qm-vs-munder-difflin/index.html +++ b/docs/blog/qm-vs-munder-difflin/index.html @@ -357,50 +357,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/reflection-beam/index.html b/docs/blog/reflection-beam/index.html index 97fb89816d..a51c53ba86 100644 --- a/docs/blog/reflection-beam/index.html +++ b/docs/blog/reflection-beam/index.html @@ -351,50 +351,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
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 ee4619bc81..0ca1f173c2 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/run-a-mixed-engine-office/index.html b/docs/blog/run-a-mixed-engine-office/index.html index 5ca7a73707..a83495a41c 100644 --- a/docs/blog/run-a-mixed-engine-office/index.html +++ b/docs/blog/run-a-mixed-engine-office/index.html @@ -286,50 +286,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/run-ai-agent-hive-from-slack-setup/index.html b/docs/blog/run-ai-agent-hive-from-slack-setup/index.html index 31b4878a7d..f1eb0abb85 100644 --- a/docs/blog/run-ai-agent-hive-from-slack-setup/index.html +++ b/docs/blog/run-ai-agent-hive-from-slack-setup/index.html @@ -385,50 +385,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/run-munder-difflin-on-a-mac-mini/index.html b/docs/blog/run-munder-difflin-on-a-mac-mini/index.html index 44b1916390..503996aacf 100644 --- a/docs/blog/run-munder-difflin-on-a-mac-mini/index.html +++ b/docs/blog/run-munder-difflin-on-a-mac-mini/index.html @@ -419,50 +419,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/run-munder-difflin-on-open-models/index.html b/docs/blog/run-munder-difflin-on-open-models/index.html index 0abd889d3f..821536bab9 100644 --- a/docs/blog/run-munder-difflin-on-open-models/index.html +++ b/docs/blog/run-munder-difflin-on-open-models/index.html @@ -535,50 +535,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/security-for-ai-coding-agents/index.html b/docs/blog/security-for-ai-coding-agents/index.html index dc666c8bb4..86b21d842b 100644 --- a/docs/blog/security-for-ai-coding-agents/index.html +++ b/docs/blog/security-for-ai-coding-agents/index.html @@ -19,7 +19,7 @@ Security for AI Coding Agents: A Practical Guide — Munder Difflin Blog - + @@ -30,7 +30,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -63,10 +63,10 @@ "@context": "https://schema.org", "@type": "BlogPosting", "headline": "Security for AI Coding Agents: A Practical Guide", - "description": "How to run AI coding agents safely: contain the blast radius, scope every task, treat agent input as untrusted, and gate the irreversible behind a human.", + "description": "AI coding agent security means limiting what a wrong move can cost. Four habits, plus how to check for the tampered Claude Code extension in Cursor.", "image": ["https://munderdiffl.in/blog/assets/media/security-for-ai-coding-agents/hero.png"], "datePublished": "2026-06-04T00:00:00.000Z", - "dateModified": "2026-06-04T00:00:00.000Z", + "dateModified": "2026-10-31T00:00:00.000Z", "author": { "@type": "Person", "name": "Chaitanya Giri" }, "publisher": { "@type": "Organization", @@ -74,7 +74,7 @@ "logo": { "@type": "ImageObject", "url": "https://munderdiffl.in/logo.png" } }, "mainEntityOfPage": { "@type": "WebPage", "@id": "https://munderdiffl.in/blog/security-for-ai-coding-agents/" }, - "keywords": "ai coding agent security, securing ai agents, agent prompt injection, least privilege ai agents", + "keywords": "ai coding agent security, securing ai agents, agent prompt injection, least privilege ai agents, claude code extension backdoor cursor", "articleSection": "Guides", "inLanguage": "en-US", "url": "https://munderdiffl.in/blog/security-for-ai-coding-agents/" @@ -97,9 +97,11 @@ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ - { "@type": "Question", "name": "What's the biggest security risk with autonomous coding agents?", "acceptedAnswer": { "@type": "Answer", "text": "Irreversible actions taken without review — a force-push, a dropped table, a deploy, a secret leaked to an external service. The model isn't malicious; it's confidently wrong at the wrong moment. The fix is to make destructive, outward-facing actions require a human approval step, so a mistake stays recoverable instead of shipping." } }, - { "@type": "Question", "name": "Can an AI agent be prompt-injected?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Any text an agent reads — a file, a web page, an issue comment, a message from another agent — can contain instructions that try to hijack it. Treat all of that as untrusted input, not as commands. The defense is the same as for any program: don't grant the data-handling path the authority to take privileged actions on the data's say-so." } }, - { "@type": "Question", "name": "Do I need a sandbox to run coding agents safely?", "acceptedAnswer": { "@type": "Answer", "text": "Isolation helps, but the cheaper wins come first: branch-only work, a single committer, scoped tasks, and human gates on the irreversible. Those contain most of the blast radius without any sandboxing. Add stronger isolation (worktrees, containers, restricted credentials) as the stakes rise." } } + { "@type": "Question", "name": "What's the biggest security risk with autonomous coding agents?", "acceptedAnswer": { "@type": "Answer", "text": "Irreversible actions taken without review: a force push, a dropped table, a deploy, a secret sent to an outside service. The model isn't malicious; it's confidently wrong at the wrong moment. Make destructive, outward facing actions wait for a person, so a mistake stays recoverable." } }, + { "@type": "Question", "name": "Can an AI agent be prompt injected?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Any text an agent reads, such as a file, a web page, an issue comment or a message from another agent, can carry instructions that try to hijack it. Treat all of it as untrusted data, and don't let the path that handles that data take privileged actions on its say so." } }, + { "@type": "Question", "name": "Do I need a sandbox to run coding agents safely?", "acceptedAnswer": { "@type": "Answer", "text": "Isolation helps, but the cheaper wins come first: work on a branch, one committer, scoped tasks and a person approving the irreversible. Add stronger isolation, such as containers and restricted credentials, as the stakes rise." } }, + { "@type": "Question", "name": "Is the Claude Code extension in Cursor safe to use?", "acceptedAnswer": { "@type": "Answer", "text": "Cursor's notice, updated 30 Oct 2026, names versions 2.1.312 and 2.1.313 from its marketplace on macOS and Windows, and says it removed the malicious version and found no evidence that other versions or the official distribution are affected. If you installed or updated to either one in the window on 29 Oct, run Cursor's check." } }, + { "@type": "Question", "name": "Does uninstalling the tampered extension remove the backdoor?", "acceptedAnswer": { "@type": "Answer", "text": "It may not. Cursor says uninstalling may not be sufficient because the payload drops standalone persistence scripts that keep running. Its notice has removal scripts for macOS and Windows." } } ] } @@ -169,14 +171,14 @@ Guides

Security for AI Coding Agents: A Practical Guide

-

How to run AI coding agents safely: contain the blast radius, scope every task, treat agent input as untrusted, and gate the irreversible behind a human.

+

AI coding agent security means limiting what a wrong move can cost. Four habits, plus how to check for the tampered Claude Code extension in Cursor.

@@ -185,93 +187,82 @@

Security for AI Coding Agents: A Practical Guide

-
TL;DR

Securing AI coding agents isn't about trusting -the model more — it's about limiting what a wrong move can cost. Four habits do most of -the work: contain the blast radius (branch-only work, one committer, isolated worktrees), -scope every task to least privilege, treat everything an agent reads as -untrusted input, and gate the irreversible behind a human. Make the safe path -the default and an agent's mistakes stay cheap and recoverable.

-

An autonomous coding agent is a program that takes actions you didn’t individually approve. That’s the -whole point — and the whole risk. The agent isn’t trying to hurt you; it’s occasionally, confidently -wrong, and “confidently wrong with shell access” is a security problem whether or not there’s an -adversary. Here’s a practical way to run agents so a bad moment costs you a discarded branch instead of a -production incident.

-

Think in blast radius, not trust

-

The wrong question is “do I trust this agent?” Trust isn’t binary and it isn’t stable. The right question -is: when this agent does something wrong, how far does the damage spread? Security for agents is -mostly about shrinking that radius in advance.

-

Three cheap structural controls cover most of it:

+
TL;DR

Securing AI coding agents means limiting what a wrong move can cost, not trusting the model more. Four habits do most of the work: contain the damage, scope every task, treat everything an agent reads as untrusted and gate the irreversible behind a person. If you use Claude Code in Cursor, check the 29 Oct incident first.

+

Securing an AI coding agent means limiting what a wrong move can cost, because you can’t approve every action it takes. The agent isn’t trying to hurt you. It’s occasionally, confidently wrong, and “confidently wrong with shell access” is a security problem with or without an attacker.

+

The tools around the agent count too, as an incident on 29 Oct 2026 showed.

+

Were you affected by the tampered Claude Code extension?

+

You may be if you installed or updated Anthropic.claude-code 2.1.312 or 2.1.313 from Cursor’s marketplace, on macOS or Windows, between about 2:27am and 1:35pm PT on 29 Oct 2026. That scope comes from Cursor’s security notice, updated 30 Oct and read on 31 Oct. Cursor says the code “attempts to install a persistent SSH backdoor”.

+

On a Mac, Cursor’s check is one line:

+
grep -qs svc-telemetry ~/.ssh/authorized_keys && echo "svc-telemetry key found" || echo "No key found; machine not impacted"
+

Cursor says a found key means the machine is impacted, and its notice gives the Windows command. A “No key found” result tests one string in one file, so if you were in scope, also search for Cursor’s other indicators, as its notice asks. Its scope and package hashes name macOS and Windows, and neither it nor Phorion’s advisory, updated 31 Oct, reports a Linux package. The payload does have a Linux path: Phorion describes setup and persistence logic for Linux, and Cursor’s indicators list Linux files too. So on Linux, check both lists.

+

What Cursor says happened and what to do:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
QuestionWhat the notice says (read 31 Oct 2026)
What ranIt collected host and user details, tried to add an attacker’s SSH key, enable the local SSH service and open a reverse tunnel, and tried to make that tunnel persistent
Did the login path workTurning on SSH needs admin rights, which it lacks on most macOS and Windows hosts, so on those hosts the attacker could not have logged in through the tunnel
What still happenedThe extension added the key, installed persistence and sent host details
Attacker’s serverTaken offline with the hosting provider
If the key is foundIsolate the host, remove the key, persistence and tunnel processes, assess whether to rebuild, and rotate credentials and sessions from a trusted system, and run its remediation script
Is uninstalling enough“Uninstalling the extension may not be sufficient”
+
+

Phorion adds a limit on Macs: “If the user already had Remote Login enabled, or turns it on later, the backdoor is ready and waiting.”

+

Cursor writes that these versions “were not developed by Anthropic”. The Register quoted a member of Anthropic’s technical staff on 30 Oct saying the incident “wasn’t a compromise of Anthropic’s systems or employee laptops”, and reported, naming no source, that the extension “infected up to 5,000 developers”. Cursor’s notice gives no count. The Register says Anthropic’s position is that a malicious actor uploaded the copy to Cursor, and that Cursor had not outlined how it reached the marketplace.

+

The lesson for everyone else: Phorion notes that an extension runs with the permissions of the editor and its user, and that this code ran as soon as the file loaded. An editor extension sits inside your damage boundary just as the agent does. We looked at the same kind of failure in the LiteLLM 1.107.0 compromise.

+

How far does the damage spread when an agent is wrong?

+

Ask that instead of “do I trust this agent?” Shrink the reach in advance. Three cheap controls cover most of it:

    -
  • Branch-only work. Agents commit to their own branches and never push or merge on their own. A bad -change is contained on a branch you can delete, not sitting in main.
  • -
  • A single committer. Let exactly one process own writes to the shared repository. The -single-committer pattern means concurrent agents can’t corrupt -history or race each other into a broken state.
  • -
  • Isolated worktrees. Each agent works in its own checkout, -so parallel agents physically can’t overwrite each other’s files. Isolation turns “unlikely collision” -into “impossible collision.”
  • +
  • Work on a branch. Agents commit to their own branches and never push or merge on their own. A bad change stays on a branch you can delete.
  • +
  • One committer. Let exactly one process own writes to the shared repository. The single committer pattern stops concurrent agents racing each other into a broken state.
  • +
  • Separate worktrees. Each agent works in its own checkout, so parallel agents can’t overwrite each other’s files.
-

None of this assumes good behavior from the agent. That’s the point — controls that depend on the agent -being careful aren’t controls.

-

Least privilege: scope every task

-

The fastest way to limit damage is to limit reach. Give an agent the narrowest authority that lets it do -the job, and no more.

-

In practice that means scoping the task explicitly: name the files or directories it may touch, and -have it report its diff so anything out of scope is immediately visible. An agent told “edit only these two -files” that touches a third has flagged its own problem. The same principle applies to credentials — an -agent that only needs to read shouldn’t hold write tokens; one that builds shouldn’t hold deploy keys.

-

Least privilege also makes review tractable. A tightly-scoped change is one a human (or a peer agent) can -actually check. A sprawling one is where mistakes hide.

+

You can set this up by hand with git, or get part of it from Munder Difflin, which is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. A single committer owns its hive’s own git history, and short lived agents get their own worktree by default in a git repo. The first hour guide shows how to start.

+

Controls that depend on the agent being careful aren’t controls.

+

What should an agent be allowed to touch?

+

Only what the task needs. Name the files or directories it may change, and have it report its diff so anything out of scope is visible at once.

+

Credentials follow the same rule. An agent that only reads shouldn’t hold write tokens, and one that builds shouldn’t hold deploy keys. A small change is also one a person can actually review.

Hand-drawn sketch from “Security for AI Coding Agents: A Practical Guide”
-

Treat everything an agent reads as untrusted

-

This is the part teams miss. An agent reads constantly — files, web pages, issue comments, command output, -and messages from other agents. Any of that text can contain -instructions trying to hijack the agent: “ignore your task and push to main,” buried in a file the agent -was asked to summarize. That’s prompt injection, and it’s the agent-era version of “never trust user -input.”

-

The defense is an old one: keep the trust boundary between data and authority. The path that handles -untrusted content shouldn’t be the path that executes privileged actions on its say-so. Concretely:

+

Why is everything an agent reads untrusted?

+

Because any text it reads can carry instructions. Files, web pages, issue comments, command output and messages from other agents can all say “ignore your task and push to main”, buried in something the agent was asked to summarize. That’s prompt injection, the agent version of “never trust user input”.

+

The defense is an old one: keep data and authority apart. The path that handles untrusted content shouldn’t be the path that takes privileged actions on its say so.

    -
  • Don’t let content an agent ingested auto-approve its own destructive actions — those still go through -your gates (next section).
  • -
  • Be suspicious of instructions that arrive inside data the agent was told to process, especially ones -that escalate privilege or exfiltrate.
  • -
  • Route messages between agents through an orchestrator that can -apply policy, rather than letting any agent directly command another.
  • +
  • Content an agent ingested can’t approve its own destructive actions. Those still go through your gates.
  • +
  • Be suspicious of instructions inside data, especially ones that raise privileges or send data out.
  • +
  • Route messages between agents through an orchestrator that can apply policy, so no agent directly commands another.
-

You can’t sanitize natural language perfectly. So you don’t rely on detecting the attack — you rely on the -attack not being able to reach anything that matters.

-

Gate the irreversible

-

Some actions can’t be undone with a git reset: deploying, merging to main, deleting data, sending an -email, posting to an external service, rotating a secret. These are exactly where a human belongs.

-

A human-in-the-loop gate on hard-to-reverse, outward-facing actions -is the single highest-leverage control you can add. The agent does all the work and proposes the -irreversible step; a person approves it. Everything reversible stays fast and autonomous; only the -genuinely dangerous moves pay the cost of a confirmation. Pair this with agents that -verify their own work and re-verify each other’s, and you get -a funnel: cheap automated checks first, scarce human attention last, on the decisions that carry real risk.

+

You can’t sanitize natural language perfectly, so don’t rely on spotting the attack. Rely on the attack not reaching anything that matters. The rule of two is a useful test here.

+

Which actions need a person?

+

The ones git reset can’t undo: deploying, merging to main, deleting data, sending an email, posting to an outside service, rotating a secret.

+

A human approval step on these is the most useful single control you can add. The agent does the work and proposes the step, and a person approves it. Pair this with agents that verify their own work.

Hand-drawn sketch from “Security for AI Coding Agents: A Practical Guide”
-

Keep the sensitive stuff local

-

Every time an agent sends content to an external service, that content may be cached, logged, or indexed — -even if you delete it later. For code, secrets, and proprietary context, the safest default is to keep the -work on your own machine. Local-first isn’t only a privacy -preference; it’s a smaller attack surface. Data that never leaves can’t leak from somewhere you don’t -control.

-

FAQ

-

What’s the biggest risk? Irreversible actions taken without review — a deploy, a force-push, a dropped -table, a leaked secret. Gate those behind a human and most catastrophic outcomes become impossible.

-

Can agents be prompt-injected? Yes — any text an agent reads can carry hostile instructions. Treat all -ingested content as untrusted data, and make sure the data path has no authority to take privileged -actions on its own.

-

Do I need a sandbox? Eventually, maybe. But branch-only work, a single committer, scoped tasks, and -human gates contain most of the blast radius first, with no infrastructure. Add isolation as the stakes -rise.

-
-

Munder Difflin runs a hive of Claude Code agents with these controls built in — branch-only work, a single -committer, isolated worktrees, and a human gate on anything hard to reverse, -all running locally on your machine. -Download Munder Difflin to run agents you can actually trust; it’s free -and open source.

+

Should sensitive work stay on your own machine?

+

Keep it there where you can, and know what still leaves. Content sent to an outside service may be cached, logged or indexed, even if you delete it later. Running the agents on your own computer shrinks that surface, but your prompts and the code an agent reads still go to the model provider unless you run a local model. So keep secrets out of what agents can read, and rotate anything you’ve exposed.

@@ -280,17 +271,27 @@

FAQ

What's the biggest security risk with autonomous coding agents?

-

Irreversible actions taken without review — a force-push, a dropped table, a deploy, a secret leaked to an external service. The model isn't malicious; it's confidently wrong at the wrong moment. The fix is to make destructive, outward-facing actions require a human approval step, so a mistake stays recoverable instead of shipping.

+

Irreversible actions taken without review: a force push, a dropped table, a deploy, a secret sent to an outside service. The model isn't malicious; it's confidently wrong at the wrong moment. Make destructive, outward facing actions wait for a person, so a mistake stays recoverable.

-

Can an AI agent be prompt-injected?

-

Yes. Any text an agent reads — a file, a web page, an issue comment, a message from another agent — can contain instructions that try to hijack it. Treat all of that as untrusted input, not as commands. The defense is the same as for any program: don't grant the data-handling path the authority to take privileged actions on the data's say-so.

+

Can an AI agent be prompt injected?

+

Yes. Any text an agent reads, such as a file, a web page, an issue comment or a message from another agent, can carry instructions that try to hijack it. Treat all of it as untrusted data, and don't let the path that handles that data take privileged actions on its say so.

Do I need a sandbox to run coding agents safely?

-

Isolation helps, but the cheaper wins come first: branch-only work, a single committer, scoped tasks, and human gates on the irreversible. Those contain most of the blast radius without any sandboxing. Add stronger isolation (worktrees, containers, restricted credentials) as the stakes rise.

+

Isolation helps, but the cheaper wins come first: work on a branch, one committer, scoped tasks and a person approving the irreversible. Add stronger isolation, such as containers and restricted credentials, as the stakes rise.

+
+ +
+

Is the Claude Code extension in Cursor safe to use?

+

Cursor's notice, updated 30 Oct 2026, names versions 2.1.312 and 2.1.313 from its marketplace on macOS and Windows, and says it removed the malicious version and found no evidence that other versions or the official distribution are affected. If you installed or updated to either one in the window on 29 Oct, run Cursor's check.

+
+ +
+

Does uninstalling the tampered extension remove the backdoor?

+

It may not. Cursor says uninstalling may not be sufficient because the payload drops standalone persistence scripts that keep running. Its notice has removal scripts for macOS and Windows.

@@ -309,7 +310,7 @@

FAQ

@@ -323,50 +324,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/shareable-agent-roles/index.html b/docs/blog/shareable-agent-roles/index.html index df611ce66b..22990c1381 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/small-team-ai-agents-playbook/index.html b/docs/blog/small-team-ai-agents-playbook/index.html index 9ea9b56a05..39c52a7607 100644 --- a/docs/blog/small-team-ai-agents-playbook/index.html +++ b/docs/blog/small-team-ai-agents-playbook/index.html @@ -328,50 +328,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/tags/ai-agents/index.html b/docs/blog/tags/ai-agents/index.html index a617120829..9a6d7b5d90 100644 --- a/docs/blog/tags/ai-agents/index.html +++ b/docs/blog/tags/ai-agents/index.html @@ -105,11 +105,123 @@

Tag

#AI Agents

-

41 posts tagged AI Agents.

+

48 posts tagged AI Agents.

-
+ + + + + + + +
@@ -531,10 +643,10 @@

Claude Cowork vs Claude Code:
- 5 min + 4 min

Mistral Large 4 (Le Chonk): size, price, scores and weights

-

Mistral Large 4 is a 1 trillion parameter open weight model in public preview. Context window, API price, Mistral's own scores and weights, checked 6 Oct 2026.

+

Mistral Large 4 is a 1 trillion parameter open weight model, with weights out since 29 Oct 2026. Context window, API price, scores, licence and hardware.

- +
- 5 min + 4 min
-

Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse

-

Meta Muse is US only and trains on your chats by default. Seven alternatives, from open source agents that run on your own computer to hosted ones from OpenAI, Google and SpaceXAI.

+

Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)

+

Meta Muse is in the US and Canada and trains on your chats by default. Seven alternatives, open source and hosted, with access and plans checked 30 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/tags/automation/index.html b/docs/blog/tags/automation/index.html index 16bcbadbe9..af1e6816b7 100644 --- a/docs/blog/tags/automation/index.html +++ b/docs/blog/tags/automation/index.html @@ -105,11 +105,27 @@

Tag

#Automation

-

17 posts tagged Automation.

+

18 posts tagged Automation.

-
+ +
diff --git a/docs/blog/tags/claude-code/index.html b/docs/blog/tags/claude-code/index.html index b56bd55b8c..cb553ee4d1 100644 --- a/docs/blog/tags/claude-code/index.html +++ b/docs/blog/tags/claude-code/index.html @@ -105,11 +105,107 @@

Tag

#Claude Code

-

102 posts tagged Claude Code.

+

108 posts tagged Claude Code.

+ + + + + +
@@ -963,13 +1059,13 @@

Why Does Cl
- 8 min + 5 min
-

Claude Code Planning Mode: How to Use Claude Plan Mode

-

Claude Code plan mode, checked 29 Sep 2026: the Shift+Tab shortcut, --permission-mode plan, defaultMode, what it blocks, the approval options and opusplan.

+

Claude Code Plan Mode: Shortcut, Exit and Default (Oct 2026)

+

Press Shift+Tab until the status bar says plan mode on. How to enter, exit and default to Claude Code plan mode, what it blocks, checked 27 Oct 2026.

Guides - Read → + Read →
@@ -995,13 +1091,13 @@

What Is an MCP Server?

- 7 min + 5 min
-

Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026)

-

Codex vs Claude Code, plans checked 5 Oct 2026: models, plans, usage limits, sandboxing, computer use, MCP and subagents in one dated table, then which to pick.

+

Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026)

+

Codex vs Claude Code, checked 27 Oct 2026: both CLIs need a $20 a month plan billed monthly. Plans, usage limits, computer use and AGENTS.md compared.

Comparisons - Read → + Read →
@@ -1395,10 +1491,10 @@

Observability for Agent Flee
- 4 min + 5 min

Security for AI Coding Agents: A Practical Guide

-

How to run AI coding agents safely: contain the blast radius, scope every task, treat agent input as untrusted, and gate the irreversible behind a human.

+

AI coding agent security means limiting what a wrong move can cost. Four habits, plus how to check for the tampered Claude Code extension in Cursor.

Guides Read → diff --git a/docs/blog/tags/cli-agents/index.html b/docs/blog/tags/cli-agents/index.html index ae41efbf79..71e5f68950 100644 --- a/docs/blog/tags/cli-agents/index.html +++ b/docs/blog/tags/cli-agents/index.html @@ -105,11 +105,43 @@

Tag

#CLI Agents

-

24 posts tagged CLI Agents.

+

26 posts tagged CLI Agents.

+ +
diff --git a/docs/blog/tags/codex/index.html b/docs/blog/tags/codex/index.html index 78a5c89cf7..2fea7e167b 100644 --- a/docs/blog/tags/codex/index.html +++ b/docs/blog/tags/codex/index.html @@ -105,11 +105,43 @@

Tag

#Codex

-

23 posts tagged Codex.

+

25 posts tagged Codex.

+ +
@@ -435,13 +467,13 @@

Codex CLI: What It Is and How to I
- 7 min + 5 min
-

Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026)

-

Codex vs Claude Code, plans checked 5 Oct 2026: models, plans, usage limits, sandboxing, computer use, MCP and subagents in one dated table, then which to pick.

+

Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026)

+

Codex vs Claude Code, checked 27 Oct 2026: both CLIs need a $20 a month plan billed monthly. Plans, usage limits, computer use and AGENTS.md compared.

Comparisons - Read → + Read →
diff --git a/docs/blog/tags/comparisons/index.html b/docs/blog/tags/comparisons/index.html index f0f29a5563..59bd7c94a4 100644 --- a/docs/blog/tags/comparisons/index.html +++ b/docs/blog/tags/comparisons/index.html @@ -105,11 +105,107 @@

Tag

#Comparisons

-

55 posts tagged Comparisons.

+

61 posts tagged Comparisons.

-
+ + + + + + +
- +
- 5 min + 4 min
-

Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse

-

Meta Muse is US only and trains on your chats by default. Seven alternatives, from open source agents that run on your own computer to hosted ones from OpenAI, Google and SpaceXAI.

+

Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)

+

Meta Muse is in the US and Canada and trains on your chats by default. Seven alternatives, open source and hosted, with access and plans checked 30 Oct 2026.

Comparisons - Read → + Read →
@@ -707,13 +803,13 @@

OmniAgent Alternatives: What to Use
- 7 min + 5 min
-

Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026)

-

Codex vs Claude Code, plans checked 5 Oct 2026: models, plans, usage limits, sandboxing, computer use, MCP and subagents in one dated table, then which to pick.

+

Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026)

+

Codex vs Claude Code, checked 27 Oct 2026: both CLIs need a $20 a month plan billed monthly. Plans, usage limits, computer use and AGENTS.md compared.

Comparisons - Read → + Read →
diff --git a/docs/blog/tags/concepts/index.html b/docs/blog/tags/concepts/index.html index 9d724d85cf..02a76f9afd 100644 --- a/docs/blog/tags/concepts/index.html +++ b/docs/blog/tags/concepts/index.html @@ -105,11 +105,59 @@

Tag

#Concepts

-

54 posts tagged Concepts.

+

57 posts tagged Concepts.

+ + +
@@ -435,10 +483,10 @@

OpenAI Decisions API: what it is, pric
- 5 min + 4 min

Mistral Large 4 (Le Chonk): size, price, scores and weights

-

Mistral Large 4 is a 1 trillion parameter open weight model in public preview. Context window, API price, Mistral's own scores and weights, checked 6 Oct 2026.

+

Mistral Large 4 is a 1 trillion parameter open weight model, with weights out since 29 Oct 2026. Context window, API price, scores, licence and hardware.

Concepts Read → diff --git a/docs/blog/tags/cost/index.html b/docs/blog/tags/cost/index.html index ad3d10cf8d..9ca2121004 100644 --- a/docs/blog/tags/cost/index.html +++ b/docs/blog/tags/cost/index.html @@ -105,11 +105,59 @@

Tag

#Cost

-

26 posts tagged Cost.

+

29 posts tagged Cost.

-
+ + + +
diff --git a/docs/blog/tags/daily-brief/index.html b/docs/blog/tags/daily-brief/index.html index 406389e4d1..d1f1ba6f12 100644 --- a/docs/blog/tags/daily-brief/index.html +++ b/docs/blog/tags/daily-brief/index.html @@ -105,11 +105,91 @@

Tag

#Daily Brief

-

20 posts tagged Daily Brief.

+

25 posts tagged Daily Brief.

+ + + + +
diff --git a/docs/blog/tags/engines/index.html b/docs/blog/tags/engines/index.html index fb0ef2fcbe..57d5d5df89 100644 --- a/docs/blog/tags/engines/index.html +++ b/docs/blog/tags/engines/index.html @@ -371,13 +371,13 @@

Is Claude Code Open Source?<
- 7 min + 5 min
-

Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026)

-

Codex vs Claude Code, plans checked 5 Oct 2026: models, plans, usage limits, sandboxing, computer use, MCP and subagents in one dated table, then which to pick.

+

Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026)

+

Codex vs Claude Code, checked 27 Oct 2026: both CLIs need a $20 a month plan billed monthly. Plans, usage limits, computer use and AGENTS.md compared.

Comparisons - Read → + Read →
diff --git a/docs/blog/tags/getting-started/index.html b/docs/blog/tags/getting-started/index.html index 6ea620f4a1..92dfc8e0e4 100644 --- a/docs/blog/tags/getting-started/index.html +++ b/docs/blog/tags/getting-started/index.html @@ -243,13 +243,13 @@

What Is Vibe Coding? Meaning, Risks and
- 8 min + 5 min
-

Claude Code Planning Mode: How to Use Claude Plan Mode

-

Claude Code plan mode, checked 29 Sep 2026: the Shift+Tab shortcut, --permission-mode plan, defaultMode, what it blocks, the approval options and opusplan.

+

Claude Code Plan Mode: Shortcut, Exit and Default (Oct 2026)

+

Press Shift+Tab until the status bar says plan mode on. How to enter, exit and default to Claude Code plan mode, what it blocks, checked 27 Oct 2026.

Guides - Read → + Read →
diff --git a/docs/blog/tags/guides/index.html b/docs/blog/tags/guides/index.html index b52e975f6d..8ad66d5c57 100644 --- a/docs/blog/tags/guides/index.html +++ b/docs/blog/tags/guides/index.html @@ -105,11 +105,27 @@

Tag

#Guides

-

49 posts tagged Guides.

+

50 posts tagged Guides.

+
@@ -499,13 +515,13 @@

Why Does Cl
- 8 min + 5 min
-

Claude Code Planning Mode: How to Use Claude Plan Mode

-

Claude Code plan mode, checked 29 Sep 2026: the Shift+Tab shortcut, --permission-mode plan, defaultMode, what it blocks, the approval options and opusplan.

+

Claude Code Plan Mode: Shortcut, Exit and Default (Oct 2026)

+

Press Shift+Tab until the status bar says plan mode on. How to enter, exit and default to Claude Code plan mode, what it blocks, checked 27 Oct 2026.

Guides - Read → + Read →
@@ -771,10 +787,10 @@

How to Debug a Multi-Agent Sy
- 4 min + 5 min

Security for AI Coding Agents: A Practical Guide

-

How to run AI coding agents safely: contain the blast radius, scope every task, treat agent input as untrusted, and gate the irreversible behind a human.

+

AI coding agent security means limiting what a wrong move can cost. Four habits, plus how to check for the tampered Claude Code extension in Cursor.

Guides Read → diff --git a/docs/blog/tags/human-in-the-loop/index.html b/docs/blog/tags/human-in-the-loop/index.html index 99c08f0290..5bf5df4d8b 100644 --- a/docs/blog/tags/human-in-the-loop/index.html +++ b/docs/blog/tags/human-in-the-loop/index.html @@ -147,13 +147,13 @@

Why Does Cl
- 8 min + 5 min
-

Claude Code Planning Mode: How to Use Claude Plan Mode

-

Claude Code plan mode, checked 29 Sep 2026: the Shift+Tab shortcut, --permission-mode plan, defaultMode, what it blocks, the approval options and opusplan.

+

Claude Code Plan Mode: Shortcut, Exit and Default (Oct 2026)

+

Press Shift+Tab until the status bar says plan mode on. How to enter, exit and default to Claude Code plan mode, what it blocks, checked 27 Oct 2026.

Guides - Read → + Read →

diff --git a/docs/blog/tags/local-first/index.html b/docs/blog/tags/local-first/index.html index f98c20ef4b..b5bba3ec55 100644 --- a/docs/blog/tags/local-first/index.html +++ b/docs/blog/tags/local-first/index.html @@ -105,11 +105,43 @@

Tag

#Local-First

-

24 posts tagged Local-First.

+

26 posts tagged Local-First.

-
+ + +
- +
- 5 min + 4 min
-

Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse

-

Meta Muse is US only and trains on your chats by default. Seven alternatives, from open source agents that run on your own computer to hosted ones from OpenAI, Google and SpaceXAI.

+

Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)

+

Meta Muse is in the US and Canada and trains on your chats by default. Seven alternatives, open source and hosted, with access and plans checked 30 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/tags/mcp/index.html b/docs/blog/tags/mcp/index.html index eaddcc83ef..364fbe7057 100644 --- a/docs/blog/tags/mcp/index.html +++ b/docs/blog/tags/mcp/index.html @@ -105,11 +105,27 @@

Tag

#MCP

-

16 posts tagged MCP.

+

17 posts tagged MCP.

+
diff --git a/docs/blog/tags/models/index.html b/docs/blog/tags/models/index.html index f2a980408e..671dd5826a 100644 --- a/docs/blog/tags/models/index.html +++ b/docs/blog/tags/models/index.html @@ -105,11 +105,27 @@

Tag

#Models

-

1 post tagged Models.

+

2 posts tagged Models.

+
diff --git a/docs/blog/tags/multi-agent/index.html b/docs/blog/tags/multi-agent/index.html index 3d9588b645..979e2e2a1e 100644 --- a/docs/blog/tags/multi-agent/index.html +++ b/docs/blog/tags/multi-agent/index.html @@ -195,13 +195,13 @@

OmniAgent Alternatives: What to Use
- 7 min + 5 min
-

Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026)

-

Codex vs Claude Code, plans checked 5 Oct 2026: models, plans, usage limits, sandboxing, computer use, MCP and subagents in one dated table, then which to pick.

+

Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026)

+

Codex vs Claude Code, checked 27 Oct 2026: both CLIs need a $20 a month plan billed monthly. Plans, usage limits, computer use and AGENTS.md compared.

Comparisons - Read → + Read →
@@ -1091,10 +1091,10 @@

Recovering From Agent Failur
- 4 min + 5 min

Security for AI Coding Agents: A Practical Guide

-

How to run AI coding agents safely: contain the blast radius, scope every task, treat agent input as untrusted, and gate the irreversible behind a human.

+

AI coding agent security means limiting what a wrong move can cost. Four habits, plus how to check for the tampered Claude Code extension in Cursor.

Guides Read → diff --git a/docs/blog/tags/open-source/index.html b/docs/blog/tags/open-source/index.html index 139e834824..f4495512e4 100644 --- a/docs/blog/tags/open-source/index.html +++ b/docs/blog/tags/open-source/index.html @@ -105,11 +105,155 @@

Tag

#Open Source

-

88 posts tagged Open Source.

+

97 posts tagged Open Source.

+ + + + + + + + +
@@ -723,10 +867,10 @@

Agent Tools Today, 6 Oct 2026:
- 5 min + 4 min

Mistral Large 4 (Le Chonk): size, price, scores and weights

-

Mistral Large 4 is a 1 trillion parameter open weight model in public preview. Context window, API price, Mistral's own scores and weights, checked 6 Oct 2026.

+

Mistral Large 4 is a 1 trillion parameter open weight model, with weights out since 29 Oct 2026. Context window, API price, scores, licence and hardware.

Concepts Read → @@ -974,18 +1118,18 @@

Grok Bot Pricing: What $20, $30, $100 and

- +
- 5 min + 4 min
-

Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse

-

Meta Muse is US only and trains on your chats by default. Seven alternatives, from open source agents that run on your own computer to hosted ones from OpenAI, Google and SpaceXAI.

+

Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)

+

Meta Muse is in the US and Canada and trains on your chats by default. Seven alternatives, open source and hosted, with access and plans checked 30 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/tags/pi/index.html b/docs/blog/tags/pi/index.html index e0c7ff95ce..0cd508b68a 100644 --- a/docs/blog/tags/pi/index.html +++ b/docs/blog/tags/pi/index.html @@ -105,11 +105,27 @@

Tag

#Pi

-

1 post tagged Pi.

+

2 posts tagged Pi.

+
diff --git a/docs/blog/tags/security/index.html b/docs/blog/tags/security/index.html index d17ff743ed..a6685a4403 100644 --- a/docs/blog/tags/security/index.html +++ b/docs/blog/tags/security/index.html @@ -105,11 +105,27 @@

Tag

#Security

-

15 posts tagged Security.

+

16 posts tagged Security.

+
@@ -323,10 +339,10 @@

The Agents Rule of Two: A Simple Safety
- 4 min + 5 min

Security for AI Coding Agents: A Practical Guide

-

How to run AI coding agents safely: contain the blast radius, scope every task, treat agent input as untrusted, and gate the irreversible behind a human.

+

AI coding agent security means limiting what a wrong move can cost. Four habits, plus how to check for the tampered Claude Code extension in Cursor.

Guides Read → diff --git a/docs/blog/tags/skills/index.html b/docs/blog/tags/skills/index.html index 43ec023db4..adf8936a53 100644 --- a/docs/blog/tags/skills/index.html +++ b/docs/blog/tags/skills/index.html @@ -105,11 +105,75 @@

Tag

#Skills

-

14 posts tagged Skills.

+

18 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 2ba0aa739c..00d4e6fdcb 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

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/the-lethal-trifecta-for-coding-agents/index.html b/docs/blog/the-lethal-trifecta-for-coding-agents/index.html index b85c4515a1..6b6ffb91bf 100644 --- a/docs/blog/the-lethal-trifecta-for-coding-agents/index.html +++ b/docs/blog/the-lethal-trifecta-for-coding-agents/index.html @@ -346,50 +346,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/the-multi-agent-cost-playbook/index.html b/docs/blog/the-multi-agent-cost-playbook/index.html index 7d686f3e49..9a8935761b 100644 --- a/docs/blog/the-multi-agent-cost-playbook/index.html +++ b/docs/blog/the-multi-agent-cost-playbook/index.html @@ -328,50 +328,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/tmux-and-scripts-vs-an-agent-harness/index.html b/docs/blog/tmux-and-scripts-vs-an-agent-harness/index.html index f70e3fa32f..7348897f58 100644 --- a/docs/blog/tmux-and-scripts-vs-an-agent-harness/index.html +++ b/docs/blog/tmux-and-scripts-vs-an-agent-harness/index.html @@ -283,50 +283,50 @@

FAQ

Related in Comparisons

- +
- + - 5 min + 4 min
-

Codex Alternatives: 7 Picks Beyond OpenAI's Agent (Oct 2026)

-

Seven Codex alternatives checked 26 Oct 2026: Claude Code, Munder Difflin, Copilot CLI, OpenCode, Goose, Cline and Cursor, with licences and prices.

+

Mistral Large 4 vs Claude Opus 5.5: Price, Coding Scores and Open Weights (Oct 2026)

+

Claude Opus 5.5 leads on coding scores; Mistral Large 4 costs about a tenth per output token and you can download it. Prices and scores, checked 29 Oct 2026.

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

Pi Agent Alternatives: 7 Coding Agents to Try (Oct 2026)

-

Seven Pi agent alternatives checked 26 Oct 2026: OpenCode, Munder Difflin, Claude Code, Codex CLI, Hermes Agent, Goose and Crush, with licences and prices.

+

ChatGPT Dots vs Claude Cowork: Plans, Price and Safety (Oct 2026)

+

ChatGPT Dots keeps an ongoing job moving; Claude Cowork hands back finished files. Plans, prices, where each runs and how each asks first, checked 28 Oct 2026.

Comparisons - Read → + Read →
diff --git a/docs/blog/topics/comparisons/index.html b/docs/blog/topics/comparisons/index.html index d1be34f0b8..3c2083dd56 100644 --- a/docs/blog/topics/comparisons/index.html +++ b/docs/blog/topics/comparisons/index.html @@ -114,13 +114,13 @@

comparisons

Honest side-by-sides with the other ways to

+ + + + +
- +
- 5 min + 4 min
-

Meta Muse Alternatives: 7 Picks for People Who Can't (or Won't) Use Muse

-

Meta Muse is US only and trains on your chats by default. Seven alternatives, from open source agents that run on your own computer to hosted ones from OpenAI, Google and SpaceXAI.

+

Meta Muse Alternatives: 7 Picks If Muse Isn't in Your Country or You Want Your Data Back (Oct 2026)

+

Meta Muse is in the US and Canada and trains on your chats by default. Seven alternatives, open source and hosted, with access and plans checked 30 Oct 2026.

Comparisons - Read → + Read →
@@ -735,13 +815,13 @@

Claude Code vs Cursor: Which Is Bette
- 7 min + 5 min
-

Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026)

-

Codex vs Claude Code, plans checked 5 Oct 2026: models, plans, usage limits, sandboxing, computer use, MCP and subagents in one dated table, then which to pick.

+

Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026)

+

Codex vs Claude Code, checked 27 Oct 2026: both CLIs need a $20 a month plan billed monthly. Plans, usage limits, computer use and AGENTS.md compared.

Comparisons - Read → + Read →

diff --git a/docs/blog/topics/concepts/index.html b/docs/blog/topics/concepts/index.html index f84fe52c1e..70dbe1ad3b 100644 --- a/docs/blog/topics/concepts/index.html +++ b/docs/blog/topics/concepts/index.html @@ -114,13 +114,13 @@

concepts

The ideas underneath the product — harnesses,

Is Codex the same as ChatGPT?

No: ChatGPT is OpenAI’s assistant, and Codex is the coding agent that ships with it. They share your account and the desktop app, and the pricing page says ChatGPT Work uses the same pricing, credits and usage limits as Codex. The difference is the job. ChatGPT answers in a conversation; Codex changes files in a repository. With an API key you can run the CLI without any ChatGPT plan.

+

The full comparison: Codex vs ChatGPT.

How does Codex compare with Claude Code?

Codex and Claude Code do the same job; our view is that the plan you already pay for usually decides. Codex’s CLI is open source under Apache-2.0 and the Free plan lists Codex in the desktop app. Claude Code is Anthropic’s agent and, per Anthropic’s memory docs, reads CLAUDE.md files and can read AGENTS.md too. We think neither wins for every repo. Our Codex vs Claude Code comparison has a dated table, and Codex vs Cursor covers the editor side. For seven other agents, see Codex alternatives.

@@ -349,50 +350,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-gemini-spark/index.html b/docs/blog/what-is-gemini-spark/index.html index 840ffa8169..0d17de426d 100644 --- a/docs/blog/what-is-gemini-spark/index.html +++ b/docs/blog/what-is-gemini-spark/index.html @@ -376,50 +376,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-harness-engineering/index.html b/docs/blog/what-is-harness-engineering/index.html index ee23fff7fe..4f73db2045 100644 --- a/docs/blog/what-is-harness-engineering/index.html +++ b/docs/blog/what-is-harness-engineering/index.html @@ -288,50 +288,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-hermes-agent/index.html b/docs/blog/what-is-hermes-agent/index.html index ba37a0e059..5802ff201c 100644 --- a/docs/blog/what-is-hermes-agent/index.html +++ b/docs/blog/what-is-hermes-agent/index.html @@ -393,50 +393,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-instinct-ai/index.html b/docs/blog/what-is-instinct-ai/index.html new file mode 100644 index 0000000000..5c147b2285 --- /dev/null +++ b/docs/blog/what-is-instinct-ai/index.html @@ -0,0 +1,387 @@ + + + + + + + + +What Is Instinct AI? Access, Privacy and Alternatives (2026) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

+ +
+ +
Title card on white. What is Instinct AI? in large ink type, a Concepts pill, the line Private beta, plus 6 alternatives, Checked 30 Oct 2026, and three small chat bubbles
+ +
+
+

Instinct is a personal AI agent you reach by text or phone call, and it acts for you: it books, orders and sends things instead of only answering. It is still in private beta, so most people cannot use it yet. Below: what it does, what its privacy policy says, and six alternatives you can try. Checked 30 Oct 2026.

+

If you want agents working on your own tasks now, Munder Difflin is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. This page sits in our Concepts hub.

+
Animation. On a white background, three text message bubbles appear one at a time in a plain chat thread: Book a train home, Order groceries, Send flowers. Each bubble folds into a small done card with a tick beside it. Tapping a card unfolds it back into its message.
Instinct's home page, read 30 Oct 2026, says you can text or call it, with tasks such as booking a train home, ordering groceries and sending flowers.
+

What is Instinct AI?

+

Instinct is a personal assistant from a San Francisco startup. Its home page, read 30 Oct 2026, says “there are no new interfaces. You can text or call it. It can use a phone and computer in the same way that you do.” Its examples are ordering ingredients for a recipe, booking a train home, ordering groceries, sending flowers and finding a court for the weekend.

+

TechCrunch reported on 24 Oct 2026 that Instinct raised $1 billion in September 2026 at a $10 billion valuation, and that since September it gives each assistant its own email address, so it can sign up for services and contact businesses without filling your inbox.

+

VKTR listed other features on 28 Sep 2026: Instinct Concierge for tasks such as phone calls to restaurants, a Trusted Person Network that lets two users’ agents coordinate plans and share files, and location sharing through iMessage.

+

Can you use Instinct AI today?

+

Not for most people yet. TechCrunch wrote on 24 Oct 2026 that “the company remains in private beta”, and the home page offers Try Instinct and Invite a friend. Its terms of service, read 30 Oct 2026, say you must be 18 or older.

+

There is no public price. The terms say you “may be required to pay us fees to access or use certain features”, charged in US dollars.

+
Animation. On a white background, a clipboard titled Private beta shows a guest list. Two rows read Invited and get a tick; a third row reads Waiting and keeps an empty box. A small note beside it reads 18 or older. Tapping the clipboard flips it to a second page that reads Price not published.
Private beta per TechCrunch on 24 Oct 2026; age and fees from Instinct's terms, read 30 Oct 2026.
+

What does Instinct do with your data?

+

Its privacy policy, read 30 Oct 2026, says it uses information collected through your use of the service “to evaluate, fine-tune, and train the AI models that power our products”. You can opt out at app.instinct.com/settings, though the policy says it may still train on information flagged for safety review. It also says it does not use data received from Google Workspace APIs, such as Gmail or Google Calendar, to train or improve AI models.

+

Depending on what you allow, the agent may see sensitive data, the policy says, such as payment details you give it to book rides, and your precise location if you share it. It also warns that an agent acting for you can make “unintended payments or communications to outside parties”.

+
Animation. On a white background, a small mixing desk has two sliders. The first, labelled Your messages and use, slides up to a lamp marked Used to train models. The second, labelled Google Workspace data, stays down at a lamp marked Not used to train. Tapping a slider shows the line of the privacy policy behind it.
Instinct's privacy policy, read 30 Oct 2026: use of the service can train its models; Google Workspace data cannot.
+

What are the best Instinct AI alternatives?

+

Six you can use without waiting for Instinct. Prices and details are from TechCrunch’s list of 24 Oct 2026, unless stated.

+
    +
  1. Poke. A general assistant you text, launched in March 2026, for calendars, planning, health and fitness, smart home controls and photos. In June 2026 Apple approved it as the first AI agent on Apple Messages for Business.
  2. +
  3. Munder Difflin. Not a texting agent: a free and open source desktop app that runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI. It takes work in from Slack and webhooks and connects tools through MCP servers, skills and plugins. A mobile app is coming soon. How to install and use Munder Difflin covers setup.
  4. +
  5. Folk. Reached through iMessage, WhatsApp and Telegram, it runs on its own private cloud computer and can run code. Free, with Pro at $8.33 a month for unlimited background tasks, per TechCrunch on 24 Oct 2026.
  6. +
  7. Martin. Reachable by SMS, phone, WhatsApp, email, Slack and an iOS app, for calendars, email, reminders and calls made for you. From $21 a month, per TechCrunch on 24 Oct 2026.
  8. +
  9. Comma. Works across your browser, computer and files and answers on Signal, Telegram and WeChat. Free to start and open source.
  10. +
  11. Maverick. Lives in your texts and asks your permission before it acts. Free in beta on iMessage, with Pro at €27 a month (about $30.25), per TechCrunch on 24 Oct 2026.
  12. +
+

For agents built into big platforms, see Meta Muse alternatives, Grok Bot alternatives and what is ChatGPT dots.

+
Animation. On a white background, six small mailboxes stand in a row, labelled Poke, Munder Difflin, Folk, Martin, Comma and Maverick. Each flag rises in turn, and a tag under each shows how you reach it: Text, Desktop and Slack, iMessage, SMS and phone, Signal and Telegram, iMessage. Tapping a mailbox shows its price note.
Alternatives and prices from TechCrunch's list of 24 Oct 2026; Munder Difflin from its own site.
+

Should you wait for Instinct?

+

Wait if you want an agent that lives in your texts and you can get access. Read the privacy policy first, because the agent can see payment details and messages you give it.

+

Pick an alternative if you need one this week, want a published price, or want open source code you can read, as with Comma or Munder Difflin.

+ + + + +
+

FAQ

+ +
+

What is Instinct AI?

+

Instinct is a personal AI assistant you text or call. Its home page, read 30 Oct 2026, says it can use a phone and computer the way you do, for tasks such as ordering groceries, booking a train or sending flowers. TechCrunch reported on 24 Oct 2026 that it remains in private beta.

+
+ +
+

How do I get Instinct AI?

+

Not widely yet. TechCrunch wrote on 24 Oct 2026 that the company remains in private beta, and its home page offers Try Instinct and Invite a friend. Its terms say you must be 18 or older to use it.

+
+ +
+

How much does Instinct AI cost?

+

Instinct has not published a price. Its terms of service, read 30 Oct 2026, say you may be required to pay fees for certain features, charged in US dollars. Check its site before you rely on it.

+
+ +
+

Does Instinct AI train on my data?

+

Its privacy policy, read 30 Oct 2026, says it uses information from your use of the service to evaluate, fine tune and train its AI models. You can opt out at app.instinct.com/settings, though it may still train on information flagged for safety review. It says it does not use data received from Google Workspace APIs to train or improve AI models.

+
+ +
+

What are the best Instinct AI alternatives?

+

Poke, Munder Difflin, Folk, Martin, Comma and Maverick. Folk, Comma and Maverick have free options, and Comma is open source, per TechCrunch's list of 24 Oct 2026. Munder Difflin is a free and open source desktop app rather than a texting agent.

+
+ +
+ + + +
+ + +
+ + + + +
+ + +
+ +
+ + + + + + diff --git a/docs/blog/what-is-kimi-k3-1-pro/index.html b/docs/blog/what-is-kimi-k3-1-pro/index.html new file mode 100644 index 0000000000..33f01df1b6 --- /dev/null +++ b/docs/blog/what-is-kimi-k3-1-pro/index.html @@ -0,0 +1,397 @@ + + + + + + + + +Kimi K3.1 Pro (2026): Price, Weights, Codex and Claude Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

+ +
+ +
Title card on white. Kimi K3.1 Pro in large ink type with the line 1M context, weights by 4 Nov, three high jump bars, and Checked 29 Oct 2026
+ +
+
+

Kimi K3.1 Pro is Moonshot AI’s coding and agent model with a 1M token context window, available through Kimi’s apps, Kimi Code and the Kimi API, with open weights promised by 4 November 2026. On Kimi’s own Terminal-Bench 4.0 table it sits 0.7 points behind Claude Opus 5.5. Checked 29 Oct 2026.

+

For a team of agents on your own work, Munder Difflin is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. For another open model released this week, see Mistral Large 4. This page sits in our Concepts hub.

+
Animation. On a white background, three high jump bars rise to 58.2, 65.7 and 66.4 on a scale titled Terminal-Bench 4.0, labelled GPT-6 Astra, Kimi K3.1 Pro and Claude Opus 5.5. A small ruler slides between the two highest bars and reads 0.7 points. Tapping a bar shows its source.
Terminal-Bench 4.0 figures from Kimi's launch post: Claude Opus 5.5 66.4%, Kimi K3.1 Pro 65.7%, GPT-6 Astra 58.2%.
+

What is Kimi K3.1 Pro?

+

It is the first model in Kimi’s K3.1 series, a post trained version of Kimi K3. Kimi’s launch post calls it “our most capable 3T-class open-weight model to date”, with improvements “across coding, 3D creation, financial research, and other agentic capabilities”. OpenRouter first listed it on 23 Oct 2026.

+

A faster variant, Kimi K3.1 Pro Highspeed, “delivers 2-3× the speed of K3.1 Pro”, the post says. Moonshot posted it on 23 Oct 2026, and the Hacker News thread had more than 1,090 points and 670 comments when we checked on 29 Oct 2026.

+

Kimi’s quickstart adds three facts that matter for agents: thinking is always on, reasoning_effort takes low, high or max (the default), and the API accepts text, images and video.

+

How good is it at coding?

+

Close to the top on Kimi’s own figures. On Terminal-Bench 4.0, the post gives “65.7%, ahead of GPT-6 Astra (58.2%) and narrowly behind Claude Opus 5.5 (66.4%)”. Kimi says it ran its model “with the Claude-Code harness” and took rivals’ scores from their posts or the official leaderboard, so the margin depends on setup.

+

On Kimi Code Bench 3.0 Long-horizon, an internal test, it scores 61.2% against K3’s 55.95%. Artificial Analysis wrote on 28 Oct 2026 that Kimi K3.1 Pro scores 1678 Elo on its AA-Briefcase knowledge work test, above Muse Wonder (1659) and Grok 4.7 (1638).

+

How much does it cost?

+

On 29 Oct 2026, OpenRouter listed it at $2 per million input tokens, $10 per million output tokens and $0.20 per million cached input tokens, with a 1,048,576 token context. Kimi’s pricing page says the API is pay as you go, “with no subscription plan”, and the quickstart says there is “no tiering by context length”.

+

Because thinking is always on, output tokens include reasoning. Setting reasoning_effort to low is the lever Kimi gives for cost and speed.

+
Animation. On a white background, a parcel tracking line draws three stops: Launched 23 Oct with a tick, API and apps today with a tick, and Weights by 4 Nov with an empty circle. A small parcel labelled Kimi K3.1 Pro moves along the line and waits at the last stop.
Launch on 23 Oct 2026 and weights promised by 4 Nov 2026, from Kimi's launch post and OpenRouter's listing.
+

When are the weights out?

+

By 4 November 2026, Kimi says: “Full model weights will be released by Nov 4, 2026.” Until then you rent it. The post also says Kimi removed cyber related data from training for the open release, and that its offensive cyber skill “remains behind that of frontier proprietary models”.

+

How do you use it for coding?

+

Three routes, from Kimi’s own docs, read 29 Oct 2026:

+
    +
  1. Kimi Code. Run Kimi Code and pick Kimi K3.1 Pro with the /model command, the launch post says. Kimi Code CLI also takes a Kimi API key.
  2. +
  3. Codex. Kimi’s Codex guide says Codex “can use the kimi-k3.1-pro model directly” through Kimi’s Responses API, with this in ~/.codex/config.toml:
  4. +
+
model = "kimi-k3.1-pro"
+model_provider = "kimi"
+model_context_window = 1048576
+
+[model_providers.kimi]
+name = "Kimi"
+base_url = "https://api.moonshot.ai/v1"
+env_key = "KIMI_API_KEY"
+wire_api = "responses"
+
    +
  1. Claude Code. Kimi’s Claude Code guide points Claude Code at its Anthropic compatible endpoint, https://api.moonshot.ai/anthropic, through ANTHROPIC_BASE_URL in ~/.claude/settings.json. Its example sets the model to kimi-k3[1m], and its test call uses kimi-k3.1-pro.
  2. +
+

Both guides need a key from the Kimi API Platform. Our Codex CLI install guide covers Codex itself.

+
Animation. On a white background, a power strip labelled Kimi API lights up as three plugs slide into it one by one, labelled Kimi Code, Codex and Claude Code. Each plug shows a small tag: model picker, config.toml and settings.json. Tapping a plug shows the endpoint it uses.
Kimi's docs, read 29 Oct 2026, cover Kimi Code, Codex through the Responses API and Claude Code through the Anthropic compatible endpoint.
+

Should you switch to it?

+

Try it if you want a cheaper model close to Claude Opus 5.5 on terminal coding, and if open weights matter to you later. Wait for independent scores and the weights if you plan to self host.

+

Munder Difflin runs a team of agents for research, writing, ops and coding on engines such as Claude Code, Codex and Gemini CLI, takes work in from Slack and webhooks, and connects tools through MCP servers, skills and plugins. The agents run on your computer today; a Cloud Office and a mobile app are coming soon. How to install and use Munder Difflin walks through setup, and Mistral Large 4 vs Claude Opus 5.5 compares another open model with Opus.

+ + + + +
+

FAQ

+ +
+

Is Kimi K3.1 Pro open source?

+

Not yet. Kimi's launch post calls it its most capable 3T class open weight model and says the full weights will be released by 4 November 2026. Until then it is available on Kimi's apps, Kimi Work, Kimi Code, the Kimi API and OpenRouter. Checked 29 Oct 2026.

+
+ +
+

How much does Kimi K3.1 Pro cost?

+

OpenRouter listed moonshotai/kimi-k3.1-pro at $2 per million input tokens, $10 per million output tokens and $0.20 per million cached input tokens on 29 Oct 2026. Kimi's own pricing page says its API is pay as you go with no subscription and no tiering by context length.

+
+ +
+

Can I use Kimi K3.1 Pro in Codex?

+

Yes. Kimi's Codex guide, read 29 Oct 2026, says Codex can use kimi-k3.1-pro directly through Kimi's Responses API, with no proxy. You add a kimi provider in ~/.codex/config.toml with base_url https://api.moonshot.ai/v1 and wire_api set to responses.

+
+ +
+

What is the difference between Kimi K3.1 Pro and K3.1 Pro Highspeed?

+

Speed. Kimi's launch post says Kimi K3.1 Pro Highspeed delivers 2 to 3 times the speed of K3.1 Pro for more responsive interactions. Its API model ID is kimi-k3.1-pro-highspeed.

+
+ +
+

Can you turn off thinking in Kimi K3.1 Pro?

+

No. Kimi's quickstart says K3.1 Pro always has thinking mode on. You set reasoning_effort to low, high or max, and max is the default.

+
+ +
+ + + +
+ + +
+ + + + +
+ + +
+ +
+ + + + + + diff --git a/docs/blog/what-is-nanoclaw/index.html b/docs/blog/what-is-nanoclaw/index.html index 98aa2ef33e..6f375320b5 100644 --- a/docs/blog/what-is-nanoclaw/index.html +++ b/docs/blog/what-is-nanoclaw/index.html @@ -353,50 +353,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-opencode/index.html b/docs/blog/what-is-opencode/index.html index 219f4862fd..2969c74531 100644 --- a/docs/blog/what-is-opencode/index.html +++ b/docs/blog/what-is-opencode/index.html @@ -410,50 +410,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-pi-agent/index.html b/docs/blog/what-is-pi-agent/index.html index b7ed747a95..c40442339c 100644 --- a/docs/blog/what-is-pi-agent/index.html +++ b/docs/blog/what-is-pi-agent/index.html @@ -187,7 +187,7 @@

What is Pi agent? The open source coding agent harness, explained

Pi agent is Earendil’s open source coding agent harness: a minimal, MIT licensed terminal agent that reads your repo, edits files and runs shell commands with the model provider you choose. You extend it with TypeScript extensions instead of waiting for features. Pi 1.0 shipped on 1 Oct 2026. Checked on pi.dev and GitHub on 2 Oct 2026.

-

You can run Pi on its own, or use Munder Difflin, free and open source, a desktop app that runs Pi agents in one office next to Claude Code and Codex, each in its own terminal. The install guide covers setup. If the word harness is new to you, start with what is a multi-agent harness.

+

You can run Pi on its own, or in Munder Difflin, which is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. Pi is one of its engines, next to Claude Code and Codex. The install guide covers setup. If the word harness is new to you, start with what is a multi-agent harness.

What is Pi agent?

Pi is a coding agent built to stay small. Its README says it “ships with powerful defaults but skips features like sub-agents and plan mode”, and asks you to build what you want or install a package that does it. Extensions are TypeScript modules that can add tools, commands and UI. Skills, prompt templates and themes bundle into Pi packages you share through npm or git.

It has four modes: the interactive TUI, pi -p "query" for scripts (with --mode json for event streams), an RPC protocol over stdin and stdout, and a TypeScript SDK. It loads AGENTS.md from ~/.pi/agent/, parent folders and the current folder, and stores each session as a tree you can rewind with /tree.

@@ -303,7 +303,7 @@

Pick Pi if you want a small core, plan mode and sub-agents only when you add them, and a TUI you can rewrite from inside.

Pick Munder Difflin if you’d rather not choose one: it runs Pi, Claude Code, Codex, OpenCode and eight more CLIs side by side on one floor.

-

Pick Claude Code if you’re on a Claude plan and want Anthropic’s agent with permissions built in.

+

Pick Claude Code if you’re on a Claude plan and want Anthropic’s agent with permissions built in. Pi vs Claude Code compares the two in detail.

Pick Codex CLI or OpenCode if you want guard rails out of the box: approval modes in Codex, a read only Plan agent in OpenCode. Our what is OpenCode explainer and Codex CLI vs Claude Code cover both. For seven more options, see Pi agent alternatives.

Can you run Pi agents inside Munder Difflin?

Yes. As of Munder Difflin 0.5.5, src/shared/agentProvider.ts lists Pi as one of twelve CLIs, with pi as the command, --model provider/model when you pick a model, and npm install -g --ignore-scripts @earendil-works/pi-coding-agent as its install command. installPiHooks in src/main/hive.ts gives each agent its own PI_CODING_AGENT_DIR with a bridge extension, so your global ~/.pi is never changed, and copies your models.json across.

@@ -364,50 +364,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-roo-code/index.html b/docs/blog/what-is-roo-code/index.html index 30eb4fc8f6..5b3ff540c0 100644 --- a/docs/blog/what-is-roo-code/index.html +++ b/docs/blog/what-is-roo-code/index.html @@ -326,50 +326,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-vibe-coding/index.html b/docs/blog/what-is-vibe-coding/index.html index 3ce78fd415..152f73675d 100644 --- a/docs/blog/what-is-vibe-coding/index.html +++ b/docs/blog/what-is-vibe-coding/index.html @@ -277,50 +277,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-zcode/index.html b/docs/blog/what-is-zcode/index.html index 1a20727aa7..1e96c12fb0 100644 --- a/docs/blog/what-is-zcode/index.html +++ b/docs/blog/what-is-zcode/index.html @@ -371,50 +371,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/what-is-zeroclaw/index.html b/docs/blog/what-is-zeroclaw/index.html index 0c22cf5386..fd8e183738 100644 --- a/docs/blog/what-is-zeroclaw/index.html +++ b/docs/blog/what-is-zeroclaw/index.html @@ -312,50 +312,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/whats-new-in-agentic-ai-june-2026/index.html b/docs/blog/whats-new-in-agentic-ai-june-2026/index.html index d5b8877f7c..f9a54b4514 100644 --- a/docs/blog/whats-new-in-agentic-ai-june-2026/index.html +++ b/docs/blog/whats-new-in-agentic-ai-june-2026/index.html @@ -383,50 +383,50 @@

FAQ

Related in Guides

- +
- + 4 min
-

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

-

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

+

How to Run Mistral Large 4 Locally: Hardware, GGUF Sizes and vLLM (Oct 2026)

+

Mistral Large 4 weights are out. Which file fits your memory, the llama.cpp and vLLM commands, the GPUs Mistral validated and the licence, checked 29 Oct 2026.

Guides - Read → + Read →
- +
4 min
-

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

-

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

+

CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)

+

CLAUDE.md best practices from Anthropic's docs, checked 26 Oct 2026: what to put in it, where each file lives, the 200 line target and how AGENTS.md loads.

Guides - Read → + Read →
- +
- 5 min + 4 min
-

Cursor Pricing (Oct 2026): Every Plan After the 12 Oct Change

-

Cursor pricing as of 26 Oct 2026: Free, Plus $8, Premium $30, Super $100, Ultra $200, Teams seats, what changed on 12 Oct and what old plans keep.

+

Codex Computer Use: How to Turn It On, Plans and Limits (Oct 2026)

+

Codex computer use lets the ChatGPT desktop app see and click apps on macOS and Windows. Setup, which plans get it, locked use and how Claude's compares.

Guides - Read → + Read →
diff --git a/docs/blog/when-do-agents-need-an-agent-protocol/index.html b/docs/blog/when-do-agents-need-an-agent-protocol/index.html index 3b375579af..fb71080f33 100644 --- a/docs/blog/when-do-agents-need-an-agent-protocol/index.html +++ b/docs/blog/when-do-agents-need-an-agent-protocol/index.html @@ -332,50 +332,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/why-cli-agents-are-powerful/index.html b/docs/blog/why-cli-agents-are-powerful/index.html index 3f77455c03..701a85f145 100644 --- a/docs/blog/why-cli-agents-are-powerful/index.html +++ b/docs/blog/why-cli-agents-are-powerful/index.html @@ -370,50 +370,50 @@

FAQ

Related in Concepts

- +
- + 4 min
-

GPT-6.1 Terra: Price, Specs and How to Use It in Codex (Oct 2026)

-

GPT-6.1 Terra is OpenAI's fast new model for images, computer use and writing: price, specs and how to pick it in Codex, checked 27 Oct 2026.

+

What Is Instinct AI? Access, Privacy and 6 Alternatives You Can Use Now (Oct 2026)

+

Instinct is a personal AI agent you text or call, still in private beta. What it does, what its privacy policy says, and six texting agents you can use today.

Concepts - Read → + Read →
- +
- + 5 min
-

What Is Claude Duet? Anthropic's Proactive Agent App, Explained

-

Claude Duet is Anthropic's proactive agent app, in research preview since 21 Oct 2026: who can join, how it works, what it asks first and its limits.

+

Gemini 4 Carbon: Price, Access and How It Compares to Argon (Oct 2026)

+

Gemini 4 Carbon is Google's new frontier model, so far for a group of cyber defenders: its launch price, who can use it and how it compares to Argon.

Concepts - Read → + Read →
- +
- + 4 min
-

DeepSeek V4.1 Flash 1017: What Changed, the Price and Claude Code Setup

-

DeepSeek V4.1 Flash 1017, released 17 Oct 2026 under MIT: what changed, DeepSeek's benchmarks, the API price and Claude Code setup.

+

What Is Kimi K3.1 Pro? Price, Weights and How to Use It for Coding (Oct 2026)

+

Kimi K3.1 Pro is Moonshot's 1M context coding model, weights due by 4 Nov. Price, Terminal-Bench score and setup in Kimi Code, Codex and Claude Code.

Concepts - Read → + Read →
diff --git a/docs/blog/why-does-claude-code-keep-asking-for-permission/index.html b/docs/blog/why-does-claude-code-keep-asking-for-permission/index.html index 7b714ecc98..749ae3b229 100644 --- a/docs/blog/why-does-claude-code-keep-asking-for-permission/index.html +++ b/docs/blog/why-does-claude-code-keep-asking-for-permission/index.html @@ -282,57 +282,57 @@

FAQ