diff --git a/blog/src/_data/media.json b/blog/src/_data/media.json index 1f77259780..5311465c2a 100644 --- a/blog/src/_data/media.json +++ b/blog/src/_data/media.json @@ -5315,6 +5315,17 @@ }, "inline": {} }, + "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": {} + }, "claude-md-best-practices": { "title": "CLAUDE.md Best Practices: What to Write, Where It Lives, How Long (Oct 2026)", "category": "guides", 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/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/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/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/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-tools-today-2026-10-26/index.html b/docs/blog/agent-tools-today-2026-10-26/index.html index 9c9050095d..725b7e5dc6 100644 --- a/docs/blog/agent-tools-today-2026-10-26/index.html +++ b/docs/blog/agent-tools-today-2026-10-26/index.html @@ -235,7 +235,7 @@

How this list is built diff --git a/docs/blog/assets/media/pi-vs-claude-code/box.png b/docs/blog/assets/media/pi-vs-claude-code/box.png new file mode 100644 index 0000000000..7962689596 Binary files /dev/null and b/docs/blog/assets/media/pi-vs-claude-code/box.png differ diff --git a/docs/blog/assets/media/pi-vs-claude-code/gate.png b/docs/blog/assets/media/pi-vs-claude-code/gate.png new file mode 100644 index 0000000000..7ac1973eab Binary files /dev/null and b/docs/blog/assets/media/pi-vs-claude-code/gate.png differ diff --git a/docs/blog/assets/media/pi-vs-claude-code/hero.png b/docs/blog/assets/media/pi-vs-claude-code/hero.png new file mode 100644 index 0000000000..909d4d2663 Binary files /dev/null and b/docs/blog/assets/media/pi-vs-claude-code/hero.png differ diff --git a/docs/blog/assets/media/pi-vs-claude-code/motion.css b/docs/blog/assets/media/pi-vs-claude-code/motion.css new file mode 100644 index 0000000000..c20c172be2 --- /dev/null +++ b/docs/blog/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/docs/blog/assets/media/pi-vs-claude-code/motion.js b/docs/blog/assets/media/pi-vs-claude-code/motion.js new file mode 100644 index 0000000000..4cfbdfa7fb --- /dev/null +++ b/docs/blog/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/docs/blog/assets/media/pi-vs-claude-code/plugs.png b/docs/blog/assets/media/pi-vs-claude-code/plugs.png new file mode 100644 index 0000000000..7b2d6d274e Binary files /dev/null and b/docs/blog/assets/media/pi-vs-claude-code/plugs.png differ diff --git a/docs/blog/best-ai-coding-agents/index.html b/docs/blog/best-ai-coding-agents/index.html index a994005922..cc9afaa566 100644 --- a/docs/blog/best-ai-coding-agents/index.html +++ b/docs/blog/best-ai-coding-agents/index.html @@ -468,6 +468,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/best-claude-code-multi-agent-tools/index.html b/docs/blog/best-claude-code-multi-agent-tools/index.html index 6239ad3e22..38dba2cfda 100644 --- a/docs/blog/best-claude-code-multi-agent-tools/index.html +++ b/docs/blog/best-claude-code-multi-agent-tools/index.html @@ -436,6 +436,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/chatgpt-dots-alternatives/index.html b/docs/blog/chatgpt-dots-alternatives/index.html index 0cb399558b..f7fdd63bfa 100644 --- a/docs/blog/chatgpt-dots-alternatives/index.html +++ b/docs/blog/chatgpt-dots-alternatives/index.html @@ -350,6 +350,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/claude-code-alternatives/index.html b/docs/blog/claude-code-alternatives/index.html index cf427d8789..18317682a3 100644 --- a/docs/blog/claude-code-alternatives/index.html +++ b/docs/blog/claude-code-alternatives/index.html @@ -360,6 +360,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/claude-code-orchestration-tools-compared/index.html b/docs/blog/claude-code-orchestration-tools-compared/index.html index b92bd2ded1..989a880ee5 100644 --- a/docs/blog/claude-code-orchestration-tools-compared/index.html +++ b/docs/blog/claude-code-orchestration-tools-compared/index.html @@ -334,6 +334,22 @@

Matching tools to priorities

Related in Comparisons

+ -
diff --git a/docs/blog/claude-code-vs-antigravity/index.html b/docs/blog/claude-code-vs-antigravity/index.html index c655cb9c1d..d304152536 100644 --- a/docs/blog/claude-code-vs-antigravity/index.html +++ b/docs/blog/claude-code-vs-antigravity/index.html @@ -275,6 +275,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/claude-code-vs-cursor/index.html b/docs/blog/claude-code-vs-cursor/index.html index e4011e590f..f2580ffedf 100644 --- a/docs/blog/claude-code-vs-cursor/index.html +++ b/docs/blog/claude-code-vs-cursor/index.html @@ -353,6 +353,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/claude-cowork-vs-claude-code/index.html b/docs/blog/claude-cowork-vs-claude-code/index.html index 815dc856ee..1fcf084648 100644 --- a/docs/blog/claude-cowork-vs-claude-code/index.html +++ b/docs/blog/claude-cowork-vs-claude-code/index.html @@ -347,6 +347,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/claude-duet-alternatives/index.html b/docs/blog/claude-duet-alternatives/index.html index c7d542b36b..84fce8e306 100644 --- a/docs/blog/claude-duet-alternatives/index.html +++ b/docs/blog/claude-duet-alternatives/index.html @@ -313,6 +313,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/claude-duet-for-developers/index.html b/docs/blog/claude-duet-for-developers/index.html index 2c5e14c2a6..ae2e9a64bc 100644 --- a/docs/blog/claude-duet-for-developers/index.html +++ b/docs/blog/claude-duet-for-developers/index.html @@ -264,6 +264,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/claude-duet-vs-munder-difflin/index.html b/docs/blog/claude-duet-vs-munder-difflin/index.html index d3f1d7c298..96e23a2eee 100644 --- a/docs/blog/claude-duet-vs-munder-difflin/index.html +++ b/docs/blog/claude-duet-vs-munder-difflin/index.html @@ -310,6 +310,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/claude-squad-alternative/index.html b/docs/blog/claude-squad-alternative/index.html index cb2e9a9bf7..8c5482f37b 100644 --- a/docs/blog/claude-squad-alternative/index.html +++ b/docs/blog/claude-squad-alternative/index.html @@ -270,6 +270,22 @@

Which should you pick? + - diff --git a/docs/blog/claude-squad-vs-munder-difflin/index.html b/docs/blog/claude-squad-vs-munder-difflin/index.html index efbaddc6f0..27fa320b22 100644 --- a/docs/blog/claude-squad-vs-munder-difflin/index.html +++ b/docs/blog/claude-squad-vs-munder-difflin/index.html @@ -359,6 +359,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/cline-alternatives/index.html b/docs/blog/cline-alternatives/index.html index 64e29bd0be..06df4f13f9 100644 --- a/docs/blog/cline-alternatives/index.html +++ b/docs/blog/cline-alternatives/index.html @@ -338,6 +338,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/cline-vs-munder-difflin/index.html b/docs/blog/cline-vs-munder-difflin/index.html index db4021d7b8..0c9bd73920 100644 --- a/docs/blog/cline-vs-munder-difflin/index.html +++ b/docs/blog/cline-vs-munder-difflin/index.html @@ -326,6 +326,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/codex-alternatives/index.html b/docs/blog/codex-alternatives/index.html index 513435365e..0283f59898 100644 --- a/docs/blog/codex-alternatives/index.html +++ b/docs/blog/codex-alternatives/index.html @@ -351,6 +351,22 @@

FAQ

Related in Comparisons

+ -
diff --git a/docs/blog/codex-cli-vs-claude-code/index.html b/docs/blog/codex-cli-vs-claude-code/index.html index 6969a2c675..e5a2ab6fcf 100644 --- a/docs/blog/codex-cli-vs-claude-code/index.html +++ b/docs/blog/codex-cli-vs-claude-code/index.html @@ -18,8 +18,8 @@ -Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026) — Munder Difflin Blog - +Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026) — Munder Difflin Blog + @@ -29,8 +29,8 @@ - - + + @@ -48,8 +48,8 @@ - - + + @@ -63,11 +63,11 @@ { "@context": "https://schema.org", "@type": "BlogPosting", - "headline": "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.", + "headline": "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.", "image": ["https://munderdiffl.in/blog/assets/media/codex-cli-vs-claude-code/hero.png"], "datePublished": "2026-09-10T00:00:00.000Z", - "dateModified": "2026-10-05T00:00:00.000Z", + "dateModified": "2026-10-27T00:00:00.000Z", "author": { "@type": "Person", "name": "Chaitanya Giri" }, "publisher": { "@type": "Organization", @@ -88,7 +88,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": "Codex vs Claude Code: Plans, Limits and Computer Use (Sep 2026)", "item": "https://munderdiffl.in/blog/codex-cli-vs-claude-code/" } + { "@type": "ListItem", "position": 3, "name": "Codex vs Claude Code: Plans, Limits and Computer Use (Oct 2026)", "item": "https://munderdiffl.in/blog/codex-cli-vs-claude-code/" } ] } @@ -98,12 +98,12 @@ "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ - { "@type": "Question", "name": "Is Codex better than Claude Code?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, - { "@type": "Question", "name": "Is Codex CLI free?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, - { "@type": "Question", "name": "Which has higher usage limits, Codex or Claude Code?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, - { "@type": "Question", "name": "Does Claude Code read AGENTS.md?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, - { "@type": "Question", "name": "Does Codex CLI have computer use?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, - { "@type": "Question", "name": "Can I run Codex and Claude Code together?", "acceptedAnswer": { "@type": "Answer", "text": "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." } } + { "@type": "Question", "name": "Is Codex better than Claude Code?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, + { "@type": "Question", "name": "Is Codex CLI free?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, + { "@type": "Question", "name": "Which has higher usage limits, Codex or Claude Code?", "acceptedAnswer": { "@type": "Answer", "text": "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)." } }, + { "@type": "Question", "name": "Does Claude Code read AGENTS.md?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, + { "@type": "Question", "name": "Does Codex CLI have computer use?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, + { "@type": "Question", "name": "Can I run Codex and Claude Code together?", "acceptedAnswer": { "@type": "Answer", "text": "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." } } ] } @@ -172,15 +172,15 @@ / Comparisons -

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.

@@ -189,9 +189,9 @@

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

-

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.

-

You can also skip the choice: switch between the two by hand, or run both in Munder Difflin, 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.

-

Codex vs Claude Code at a glance (checked 29 Sep 2026)

+

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. 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, 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 27 Oct 2026)

@@ -203,19 +203,14 @@

Code

- - - - - - - + + - - + + @@ -224,50 +219,30 @@

Code

- + - - - - - - - - - - - - + + - - - - - - - - - - - - + + - +
Where it runsCLI, IDE extension, ChatGPT desktop app, web, iOSCLI, IDE extensions, desktop app, web
SourceCLI is Apache-2.0 on GitHubClosed, Anthropic commercial termsCLI is Apache 2.0 on GitHubClosed; the repo says use is subject to Anthropic’s Commercial Terms
ModelsGPT-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 miniOpus 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 tierGPT-6 Astra, GPT-6.1 Sol, GPT-6.1 Terra, GPT-6 Sol, GPT-6 Luna, and the GPT-5.6 familyOpus 5.5 by default on the Anthropic API, plus Sonnet 5.5 and Haiku 5.5
First plan that lists the CLI
Heavy plansPro at $100, $200 or $500 a month; Astra Ultrafast on the $500 plan only (checked 5 Oct 2026)Pro at $100, $200 or $500 a month; Ultrafast mode on Pro $500 only Max 5x at $100, Max 20x at $200
LimitsPublished ranges per model per 5 hours, weekly limits may apply, credits after5 hour session limit plus a weekly limit, no published message counts, credits after
SandboxOn by default: Seatbelt on macOS, bubblewrap on Linux and WSL2, native Windows sandboxBuilt in Bash sandbox (Seatbelt, bubblewrap), set up with /sandbox. No native Windows
Approval controls--sandbox and --ask-for-approval, two flagsOne --permission-mode with six modesPublished ranges per model per five hours on Plus, weekly limits may apply, credits afterPer session usage plus a weekly limit, no published message counts
Computer useChatGPT desktop app on macOS and Windows, background on macOS, not in the CLIIn the CLI on macOS, research preview, Pro and Max only. Desktop app: macOS and Windows
MCPYes, STDIO and streamable HTTPYes, local stdio and remote HTTP
SubagentsOn by default in current releases, plus custom agentsBuilt in and custom, each in its own context windowChatGPT desktop app on macOS and Windows, background on macOS; OpenAI’s docs list no CLI supportIn the CLI on macOS, research preview, Pro and Max only
Project instructions AGENTS.mdCLAUDE.md. Reads AGENTS.md only when no CLAUDE.md exists, by defaultCLAUDE.md; reads AGENTS.md only when no CLAUDE.md exists, by default
-

Sources: OpenAI’s Codex pricing page, Anthropic’s Max plan article 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, Anthropic’s Max plan article and Claude Code’s model configuration docs, 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:

@@ -286,6 +261,10 @@

Wh

+ + + + @@ -296,32 +275,17 @@

Wh

15 to 160
GPT-6.1 Terra35 to 285
GPT-6 Sol 15 to 150
-

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.

-

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 cover how to stretch it, and the 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, 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 is over. If you burn through Pro 100, step up, buy credits, or use an API key.

+

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. 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 cover how to stretch it, and the Codex Max plan tips do the same for OpenAI’s side.

+

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, 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, 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:

-
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 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.

+

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, 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.

+

Claude Code’s computer use docs, 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.

Hand-drawn sketch from “Codex CLI vs Claude Code”

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, 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.

Hand-drawn sketch from “Codex CLI vs Claude Code”

Pick Codex if…, pick Claude Code if…

Pick Codex if:

@@ -329,18 +293,17 @@

Pick Codex if…, pick
  • 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 is the wider map, and Claude Code vs Antigravity covers Google’s agent.

    +

    If you are still choosing between whole categories of tools, the multi agent tools roundup is the wider map, and 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.

    @@ -349,32 +312,32 @@

    FAQ

    Is Codex better than Claude Code?

    -

    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.

    +

    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.

    Is Codex CLI free?

    -

    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.

    +

    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.

    Which has higher usage limits, Codex or Claude Code?

    -

    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.

    +

    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).

    Does Claude Code read AGENTS.md?

    -

    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.

    +

    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.

    Does Codex CLI have computer use?

    -

    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.

    +

    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.

    Can I run Codex and Claude Code together?

    -

    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.

    +

    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.

    @@ -393,7 +356,7 @@

    FAQ

    @@ -407,6 +370,22 @@

    FAQ

    Related in Comparisons

    + -
    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..15a6f0a795 100644 --- a/docs/blog/codex-vs-claude-code-usage-limits/index.html +++ b/docs/blog/codex-vs-claude-code-usage-limits/index.html @@ -341,6 +341,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/codex-vs-cursor/index.html b/docs/blog/codex-vs-cursor/index.html index 67872d7170..e7a1b2d9f8 100644 --- a/docs/blog/codex-vs-cursor/index.html +++ b/docs/blog/codex-vs-cursor/index.html @@ -347,6 +347,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/codex-vs-gemini-cli/index.html b/docs/blog/codex-vs-gemini-cli/index.html index 8c591970da..bfbb6b5e89 100644 --- a/docs/blog/codex-vs-gemini-cli/index.html +++ b/docs/blog/codex-vs-gemini-cli/index.html @@ -331,6 +331,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/conductor-claude-code-alternative/index.html b/docs/blog/conductor-claude-code-alternative/index.html index fd93f0b634..a3b7f650ab 100644 --- a/docs/blog/conductor-claude-code-alternative/index.html +++ b/docs/blog/conductor-claude-code-alternative/index.html @@ -272,6 +272,22 @@

    Conductor vs an orchest

    Related in Comparisons

    + -
    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..7d7232bcd2 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,6 +296,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/crystal-claude-code-alternative/index.html b/docs/blog/crystal-claude-code-alternative/index.html index ad3a4ad3d2..cca0b9254d 100644 --- a/docs/blog/crystal-claude-code-alternative/index.html +++ b/docs/blog/crystal-claude-code-alternative/index.html @@ -268,6 +268,22 @@

    Crystal vs a memory-backe

    Related in Comparisons

    + -
    diff --git a/docs/blog/cursor-alternatives/index.html b/docs/blog/cursor-alternatives/index.html index 8ac37005bb..ac407e9878 100644 --- a/docs/blog/cursor-alternatives/index.html +++ b/docs/blog/cursor-alternatives/index.html @@ -367,6 +367,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/cursor-vs-cline/index.html b/docs/blog/cursor-vs-cline/index.html index d85e9cdd03..de2cd1b314 100644 --- a/docs/blog/cursor-vs-cline/index.html +++ b/docs/blog/cursor-vs-cline/index.html @@ -327,6 +327,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/feed.xml b/docs/blog/feed.xml index 2d4e0d4bc3..5f1d6df785 100644 --- a/docs/blog/feed.xml +++ b/docs/blog/feed.xml @@ -15,6 +15,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 @@ -479,12 +487,4 @@ 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-vs-claude-opus-5-5/index.html b/docs/blog/gemini-4-argon-vs-claude-opus-5-5/index.html index eb77f4a650..7091f68cbe 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 @@ -452,6 +452,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/gemini-cli-vs-claude-code/index.html b/docs/blog/gemini-cli-vs-claude-code/index.html index 4676efa429..cd013ecf2a 100644 --- a/docs/blog/gemini-cli-vs-claude-code/index.html +++ b/docs/blog/gemini-cli-vs-claude-code/index.html @@ -335,6 +335,22 @@

    FAQ

    Related in Comparisons

    + -
    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..9401bda004 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,6 +397,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/gpt-6-1-terra/index.html b/docs/blog/gpt-6-1-terra/index.html index 8417454557..2c78140d87 100644 --- a/docs/blog/gpt-6-1-terra/index.html +++ b/docs/blog/gpt-6-1-terra/index.html @@ -377,7 +377,7 @@

    FAQ

    diff --git a/docs/blog/grok-bot-pricing/index.html b/docs/blog/grok-bot-pricing/index.html index 7d3dd96e73..564ca0a868 100644 --- a/docs/blog/grok-bot-pricing/index.html +++ b/docs/blog/grok-bot-pricing/index.html @@ -370,6 +370,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/herdr-alternatives/index.html b/docs/blog/herdr-alternatives/index.html index 2f5caaec14..0a5989db56 100644 --- a/docs/blog/herdr-alternatives/index.html +++ b/docs/blog/herdr-alternatives/index.html @@ -286,6 +286,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/hermes-agent-alternatives/index.html b/docs/blog/hermes-agent-alternatives/index.html index d83ace3b5f..5dc5b86d05 100644 --- a/docs/blog/hermes-agent-alternatives/index.html +++ b/docs/blog/hermes-agent-alternatives/index.html @@ -357,6 +357,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/hermes-agent-vs-openclaw/index.html b/docs/blog/hermes-agent-vs-openclaw/index.html index d2dfd9660c..cad103f3a2 100644 --- a/docs/blog/hermes-agent-vs-openclaw/index.html +++ b/docs/blog/hermes-agent-vs-openclaw/index.html @@ -353,6 +353,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/how-ai-answer-engines-choose-sources/index.html b/docs/blog/how-ai-answer-engines-choose-sources/index.html index fabb10da2c..97c025b5d1 100644 --- a/docs/blog/how-ai-answer-engines-choose-sources/index.html +++ b/docs/blog/how-ai-answer-engines-choose-sources/index.html @@ -322,6 +322,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/how-much-does-claude-code-cost/index.html b/docs/blog/how-much-does-claude-code-cost/index.html index 73bc256ace..3bb5d7bf20 100644 --- a/docs/blog/how-much-does-claude-code-cost/index.html +++ b/docs/blog/how-much-does-claude-code-cost/index.html @@ -395,7 +395,7 @@

    FAQ

    diff --git a/docs/blog/how-to-use-claude-code-plan-mode/index.html b/docs/blog/how-to-use-claude-code-plan-mode/index.html index 4e898f2869..6e28c917d5 100644 --- a/docs/blog/how-to-use-claude-code-plan-mode/index.html +++ b/docs/blog/how-to-use-claude-code-plan-mode/index.html @@ -18,8 +18,8 @@ -Claude Code Planning Mode: How to Use Claude Plan Mode — Munder Difflin Blog - +Claude Code Plan Mode: Shift+Tab, Exit and Default Setting (Oct 2026) + @@ -29,8 +29,8 @@ - - + + @@ -47,8 +47,8 @@ - - + + @@ -62,11 +62,11 @@ { "@context": "https://schema.org", "@type": "BlogPosting", - "headline": "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.", + "headline": "Claude Code Plan Mode: Shortcut, Exit and Default (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.", "image": ["https://munderdiffl.in/blog/assets/media/how-to-use-claude-code-plan-mode/hero.png"], "datePublished": "2026-09-11T00:00:00.000Z", - "dateModified": "2026-09-29T00:00:00.000Z", + "dateModified": "2026-10-27T00:00:00.000Z", "author": { "@type": "Person", "name": "Chaitanya Giri" }, "publisher": { "@type": "Organization", @@ -87,7 +87,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": "Claude Code Planning Mode: How to Use Claude Plan Mode", "item": "https://munderdiffl.in/blog/how-to-use-claude-code-plan-mode/" } + { "@type": "ListItem", "position": 3, "name": "Claude Code Plan Mode: Shortcut, Exit and Default (Oct 2026)", "item": "https://munderdiffl.in/blog/how-to-use-claude-code-plan-mode/" } ] } @@ -98,11 +98,11 @@ "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "What is Claude Code plan mode?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, - { "@type": "Question", "name": "What is the shortcut for plan mode in Claude Code?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, + { "@type": "Question", "name": "What is the shortcut for plan mode in Claude Code?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, { "@type": "Question", "name": "How do you exit plan mode in Claude Code?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, - { "@type": "Question", "name": "Can Claude run shell commands in plan mode?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, - { "@type": "Question", "name": "Which model does Claude Code use in plan mode?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, - { "@type": "Question", "name": "Does plan mode use more tokens?", "acceptedAnswer": { "@type": "Answer", "text": "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." } } + { "@type": "Question", "name": "Can Claude run shell commands in plan mode?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, + { "@type": "Question", "name": "Which model does Claude Code use in plan mode?", "acceptedAnswer": { "@type": "Answer", "text": "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." } }, + { "@type": "Question", "name": "Which Claude Code version made auto mode the starting mode?", "acceptedAnswer": { "@type": "Answer", "text": "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." } } ] } @@ -171,15 +171,15 @@ / Guides -

    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.

    @@ -188,40 +188,31 @@

    Claude Code Planning Mode: How to Use Claude Plan Mode

    -

    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".

    -

    You can do all of this by hand, or use Munder Difflin, 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 <mode>'
    -  --permission-mode <mode>              Permission mode to use for the session
    -                                        (choices: "acceptEdits", "auto",
    -                                        "bypassPermissions", "manual",
    -                                        "dontAsk", "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.

    +

    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. Its Claude Code agents can plan first too; the last section shows how. Everything below was checked against Anthropic’s permission modes docs 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 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.

    - + - + - - + + - + @@ -235,14 +226,9 @@

    What is the Cl

    - - - -
    Way in or out (Claude Code 2.1.284, checked 29 Sep 2026)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 modesCycles auto, Manual, accept edits, plan, then any optional modes
    /plan or /plan fix the auth bugEnters plan mode; with a description it starts on that task/plan fix the auth bugPlans that one prompt
    claude --permission-mode planStarts the session in plan mode; works with -p tooStarts the session in plan mode
    "defaultMode": "plan" under permissions in .claude/settings.jsonApprove the plan Leaves plan mode and switches to the mode you picked
    Shift+Tab againLeaves 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, checked 29 Sep 2026). Guides that say “Normal mode” describe the old label.

    How do you make plan mode the default?

    Put it in the project’s settings file. Terminal sessions started in that folder then open in plan mode:

    {
    @@ -250,103 +236,72 @@ 

    How do you make pla "defaultMode": "plan" } }

    -

    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.

    +

    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.

    Hand-drawn sketch from “How to Use Claude Code Plan Mode”
    -

    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, 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.

    Hand-drawn sketch from “How to Use Claude Code Plan Mode”

    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, 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 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, read 27 Oct 2026). A Haiku session moves up to Sonnet for planning. The 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 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 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.
    • Pick auto mode if it’s a long task you’ve already planned and you’d rather not click through prompts.

    If one risky command is the real worry, a PreToolUse hook blocks just that call, and why Claude Code keeps asking for permission explains the prompts you’ll see in Manual mode. New to the tool? Start with how to use Claude Code.

    -

    What changed in plan mode in the last six months?

    -

    The mechanics held steady; the names and defaults around them moved. From the Claude Code changelog, with release dates from npm, checked 29 Sep 2026:

    +

    What changed in plan mode recently?

    +

    The names and defaults moved, per the changelog read 27 Oct 2026:

    - - - - - - - - - + - - - - - - - + - - + -
    VersionReleased Change
    2.1.2003 Jul 2026 default mode renamed Manual; manual accepted as an alias
    2.1.21216 Jul 2026Fixed plan mode running touch, rm and similar without a prompt
    2.1.21822 Jul 2026Classifier, not a prompt, judges commands it can’t prove read-onlyClassifier, not a prompt, judges commands it can’t prove read only
    2.1.2224 Aug 2026Ultraplan removed, along with its approval option
    2.1.28022 Sep 2026VS Code gains a typed /planUltraplan removed
    2.1.28325 Sep 2026Auto start extended to third party providers and telemetry off sessionsAuto start on third party providers and telemetry off sessions
    2.1.28428 Sep 2026 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.

    -

    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.

    +

    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, 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.

    @@ -360,7 +315,7 @@

    FAQ

    What is the shortcut for plan mode in Claude Code?

    -

    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.

    +

    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.

    @@ -370,17 +325,17 @@

    FAQ

    Can Claude run shell commands in plan mode?

    -

    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.

    +

    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.

    Which model does Claude Code use in plan mode?

    -

    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.

    +

    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.

    -

    Does plan mode use more tokens?

    -

    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.

    +

    Which Claude Code version made auto mode the starting mode?

    +

    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.

    @@ -399,7 +354,7 @@

    FAQ

    diff --git a/docs/blog/index.html b/docs/blog/index.html index 5a4e51c99a..b31d28a00f 100644 --- a/docs/blog/index.html +++ b/docs/blog/index.html @@ -135,13 +135,13 @@

    The Munder Difflin Blog.

    building a self-coordinating hive of agents with a GOD orchestrator you talk to.

    +
    -
    + +
    + + + + + - +
    - 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/multi-agent/index.html b/docs/blog/tags/multi-agent/index.html index 3d9588b645..4e4fa67642 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 →
    diff --git a/docs/blog/tags/open-source/index.html b/docs/blog/tags/open-source/index.html index 139e834824..4073e2f1bf 100644 --- a/docs/blog/tags/open-source/index.html +++ b/docs/blog/tags/open-source/index.html @@ -105,11 +105,27 @@

    Tag

    #Open Source

    -

    88 posts tagged Open Source.

    +

    89 posts tagged Open Source.

    -
    + +
    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/tmux-and-scripts-vs-an-agent-harness/index.html b/docs/blog/tmux-and-scripts-vs-an-agent-harness/index.html index f70e3fa32f..ee7b8cf4fe 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,6 +283,22 @@

    FAQ

    Related in Comparisons

    + -
    diff --git a/docs/blog/topics/comparisons/index.html b/docs/blog/topics/comparisons/index.html index d1be34f0b8..218d4e5f38 100644 --- a/docs/blog/topics/comparisons/index.html +++ b/docs/blog/topics/comparisons/index.html @@ -118,7 +118,7 @@

    comparisons

    Honest side-by-sides with the other ways to concepts57 - comparisons55 + comparisons56 news21 @@ -185,6 +185,22 @@

    OmniAgent Alternatives: What to Use

    +
    @@ -735,13 +751,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..0bfbcd0b42 100644 --- a/docs/blog/topics/concepts/index.html +++ b/docs/blog/topics/concepts/index.html @@ -118,7 +118,7 @@

    concepts

    The ideas underneath the product — harnesses, concepts57 - comparisons55 + comparisons56 news21 diff --git a/docs/blog/topics/guides/index.html b/docs/blog/topics/guides/index.html index 8078a49229..22b9e0d562 100644 --- a/docs/blog/topics/guides/index.html +++ b/docs/blog/topics/guides/index.html @@ -118,7 +118,7 @@

    guides

    Step-by-step walkthroughs you can follow today concepts57 - comparisons55 + comparisons56 news21 @@ -559,13 +559,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/topics/index.html b/docs/blog/topics/index.html index baa2ccc887..6d218192ec 100644 --- a/docs/blog/topics/index.html +++ b/docs/blog/topics/index.html @@ -135,7 +135,7 @@

    concepts

    comparisons

    -

    55 posts.

    +

    56 posts.

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

    memory

    diff --git a/docs/blog/topics/internals/index.html b/docs/blog/topics/internals/index.html index 93c5351375..9112be00ee 100644 --- a/docs/blog/topics/internals/index.html +++ b/docs/blog/topics/internals/index.html @@ -118,7 +118,7 @@

    internals

    How the machine actually works: postmortems, a concepts57 - comparisons55 + comparisons56 news21 diff --git a/docs/blog/topics/memory/index.html b/docs/blog/topics/memory/index.html index d7378ef951..2ef78233ab 100644 --- a/docs/blog/topics/memory/index.html +++ b/docs/blog/topics/memory/index.html @@ -118,7 +118,7 @@

    memory

    How agents remember across sessions — and how a concepts57 - comparisons55 + comparisons56 news21 diff --git a/docs/blog/topics/news/index.html b/docs/blog/topics/news/index.html index 91388619b4..e03cc32a32 100644 --- a/docs/blog/topics/news/index.html +++ b/docs/blog/topics/news/index.html @@ -118,7 +118,7 @@

    news

    Agent Tools Today: a daily brief of the top five la concepts57 - comparisons55 + comparisons56 news21 diff --git a/docs/blog/topics/orchestration/index.html b/docs/blog/topics/orchestration/index.html index 68a54bcdf4..f4f4d73802 100644 --- a/docs/blog/topics/orchestration/index.html +++ b/docs/blog/topics/orchestration/index.html @@ -118,7 +118,7 @@

    orchestration

    Patterns for making one boss agent run a f concepts57 - comparisons55 + comparisons56 news21 diff --git a/docs/blog/topics/story/index.html b/docs/blog/topics/story/index.html index 1eac16113e..a6eb168761 100644 --- a/docs/blog/topics/story/index.html +++ b/docs/blog/topics/story/index.html @@ -118,7 +118,7 @@

    story

    Launches, releases, and the occasional confession concepts57 - comparisons55 + comparisons56 news21 diff --git a/docs/blog/topics/use-cases/index.html b/docs/blog/topics/use-cases/index.html index f869f75235..5f0054aa84 100644 --- a/docs/blog/topics/use-cases/index.html +++ b/docs/blog/topics/use-cases/index.html @@ -118,7 +118,7 @@

    use-cases

    Real workflows the hive actually runs — writ concepts57 - comparisons55 + comparisons56 news21 diff --git a/docs/blog/vibe-kanban-alternative/index.html b/docs/blog/vibe-kanban-alternative/index.html index f129ef5b18..9e83517326 100644 --- a/docs/blog/vibe-kanban-alternative/index.html +++ b/docs/blog/vibe-kanban-alternative/index.html @@ -273,6 +273,22 @@

    Board or hive? How to choose

    Related in Comparisons

    + -
    diff --git a/docs/blog/what-is-an-mcp-server/index.html b/docs/blog/what-is-an-mcp-server/index.html index ef52d0029a..2f971c6e01 100644 --- a/docs/blog/what-is-an-mcp-server/index.html +++ b/docs/blog/what-is-an-mcp-server/index.html @@ -285,8 +285,8 @@

    FAQ