Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions blog/src/_data/media.json
Original file line number Diff line number Diff line change
Expand Up @@ -3240,6 +3240,18 @@
"inline": {},
"youtube": []
},
"agent-tools-today-2026-11-01": {
"title": "Agent Tools Today, 1 Nov 2026: ChatGPT Share Link Takeover, Prospero, Orkas",
"category": "news",
"hero": {
"file": "assets/media/agent-tools-today/hero.png",
"alt": "Hand drawn sketch: a front page with five numbered lines, a clock, and a yellow character reading it out",
"prompt": "Series hero for the Agent Tools Today daily brief, drawn in code (media-src/topic-tiles.html?t=news). Reused by every brief.",
"status": "ready"
},
"inline": {},
"youtube": []
},
"the-hook-shim-pattern": {
"title": "The Hook Shim Pattern: Wiring Agent Hooks to a Live Process",
"category": "internals",
Expand Down
13 changes: 13 additions & 0 deletions blog/src/assets/media/agent-tools-today-2026-11-01/motion.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/* Bright coded scenes for "Agent tools today, 1 Nov 2026". Pairs with motion.js. */
.prose figure.mg { margin: 42px 0; }
.prose figure.mg img, .mg .mg-svg { display: block; width: 100%; height: auto; border: 1px solid #1A1320; border-radius: 18px; background: #fff; }
.mg figcaption { font: 500 13px/1.5 "Space Grotesk", system-ui, sans-serif; color: #6B5878; padding-top: 10px; text-align: center; }
.mg .mg-svg { touch-action: manipulation; -webkit-tap-highlight-color: transparent; }
.mg .mg-svg text { -webkit-user-select: none; user-select: none; pointer-events: none; }
.mg .mg-hit { cursor: pointer; outline: none; }
.mg [role="slider"] { cursor: grab; touch-action: none; }
.mg .mg-ring { stroke-opacity: 0; transition: stroke-opacity 0.15s; }
.mg .mg-hit:focus-visible .mg-ring { stroke-opacity: 1; }
.mg [role="slider"]:focus-visible circle:nth-child(2) { stroke-width: 5; }
@media (hover: hover) { .mg .mg-hit:hover .mg-ring { stroke-opacity: 0.5; } }
@media (prefers-reduced-motion: reduce) { .mg .mg-ring { transition: none; } }
133 changes: 133 additions & 0 deletions blog/src/assets/media/agent-tools-today-2026-11-01/motion.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
/* Bright coded scenes for "Agent tools today, 1 Nov 2026". Vanilla JS, no library.
<figure class="mg" data-scene="NAME"> holds a still image; this script swaps in a live SVG.
Plays only in view, honours reduced motion, "?mgstill" freezes each scene on its still frame. */
(() => {
const NS = "http://www.w3.org/2000/svg";
const INK = "#1A1320", YEL = "#FFCA54", BLUE = "#6C8EF5", LIL = "#B69CFF", MINT = "#7FD8AE", SKY = "#9AD8FF", SOFT = "#F1ECF9", MUTE = "#7A6A88";
const SANS = '"Space Grotesk", system-ui, sans-serif', MONO = '"JetBrains Mono", ui-monospace, monospace';
const el = (t, a = {}, p) => { const n = document.createElementNS(NS, t); for (const k in a) n.setAttribute(k, a[k]); if (p) p.appendChild(n); return n; };
const txt = (p, x, y, s, a = {}) => { const n = el("text", Object.assign({ x, y, "font-family": SANS, "font-size": 24, "font-weight": 600, fill: INK }, a), p); n.textContent = s; return n; };
const cl = (v, a = 0, b = 1) => Math.max(a, Math.min(b, v));
const seg = (t, a, b) => cl((t - a) / (b - a));
const oc = (x) => 1 - Math.pow(1 - x, 3);
const ob = (x) => { const c = 1.70158; return 1 + (c + 1) * Math.pow(x - 1, 3) + c * Math.pow(x - 1, 2); };
const io = (x) => (x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2);
const tf = (n, x, y, s = 1, r = 0) => n.setAttribute("transform", `translate(${x} ${y}) rotate(${r}) scale(${s})`);
const button = (g, label, fn) => {
g.setAttribute("role", "button"); g.setAttribute("tabindex", "0"); g.setAttribute("aria-label", label); g.classList.add("mg-hit");
g.addEventListener("click", fn);
g.addEventListener("keydown", (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); fn(); } });
};
const strip = (svg, y, w = 680) => {
el("rect", { x: (800 - w) / 2, y, width: w, height: 48, rx: 24, fill: SOFT }, svg);
return txt(svg, 400, y + 31, "", { "text-anchor": "middle", "font-size": 20, "font-weight": 500 });
};

const SC = {};

/* ---- a pop up book lies open and three cards rise out of the fold ---- */
SC.popup = {
dur: 11, still: 8,
build(svg, api) {
const LEAF = [
["M400 118 Q260 90 102 86 L22 536 Q220 536 400 566 Z", BLUE],
["M400 110 Q260 84 110 82 L32 522 Q220 524 400 552 Z", "#fff"],
["M400 102 Q260 76 116 76 L40 508 Q220 510 400 538 Z", SOFT],
];
[false, true].forEach((mirror) => {
const g = el("g", mirror ? { transform: "translate(800 0) scale(-1 1)" } : {}, svg);
LEAF.forEach(([d, fill]) => el("path", { d, fill, stroke: INK, "stroke-width": 3, "stroke-linejoin": "round" }, g));
});
el("path", { d: "M400 102 V538", stroke: INK, "stroke-width": 3, "stroke-linecap": "round" }, svg);

const W = 480, H = 116;
const CARDS = [
{ title: "ChatGPT share link", tag: "Fixed 26 Oct", fill: YEL, base: 138, sc: 0.88 },
{ title: "Prospero", tag: "Native harness", fill: SKY, base: 273, sc: 0.94 },
{ title: "Orkas", tag: "Desktop agent team", fill: MINT, base: 415, sc: 1 },
];
const TIMES = [0.7, 2.9, 5.1], RISE = 0.9, FOLD = 9.4;
let manual = null;
const cards = CARDS.map((c, i) => {
const g = el("g", {}, svg), w = W * c.sc, h = H * c.sc;
const shade = el("rect", { fill: LIL }, g);
const hinges = [-1, 1].map((side) => {
const x = 400 + side * w * 0.3;
return { x, n: el("path", { fill: "#fff", stroke: INK, "stroke-width": 2.5, "stroke-linejoin": "round" }, g) };
});
const body = el("rect", { fill: c.fill, stroke: INK, "stroke-width": 3, rx: 12 }, g);
const face = el("g", {}, g);
txt(face, 0, -H + 46, c.title, { "text-anchor": "middle", "font-family": MONO, "font-size": 34, "font-weight": 700 });
const cw = c.tag.length * 11.4 + 36;
el("rect", { x: -cw / 2, y: -H + 60, width: cw, height: 36, rx: 18, fill: "#fff", stroke: INK, "stroke-width": 2 }, face);
txt(face, 0, -H + 85, c.tag, { "text-anchor": "middle", "font-size": 20 });
const ring = el("rect", { fill: "none", stroke: INK, "stroke-width": 2.5, "stroke-dasharray": "3 7", rx: 17, class: "mg-ring" }, g);
const hit = el("rect", { x: 400 - w / 2 - 8, width: w + 16, fill: "#fff", "fill-opacity": 0 }, g);
const card = { ...c, g, w, h, shade, hinges, body, face, ring, hit, k: 0 };
button(g, `${c.title}: ${c.tag}`, () => {
const now = api.now();
if (!manual) manual = cards.map((o) => ({ from: o.k, to: o.k > 0.01 ? 1 : 0, at: now }));
const m = manual[i];
m.from = card.k; m.to = m.to >= 0.5 ? 0 : 1; m.at = now;
api.poke();
});
return card;
});
const place = (c, k) => {
c.k = k;
const s = 0.09 + 0.91 * k, xs = 1 - 0.05 * (1 - cl(k)), w = c.w * xs, ch = c.h * s, x = 400 - w / 2, y = c.base - ch, lift = cl(k), ht = 6 + 14 * lift;
c.body.setAttribute("x", x); c.body.setAttribute("y", y); c.body.setAttribute("width", w); c.body.setAttribute("height", ch);
c.ring.setAttribute("x", x - 7); c.ring.setAttribute("y", y - 7); c.ring.setAttribute("width", w + 14); c.ring.setAttribute("height", ch + 14);
const top = Math.min(y, c.base - 50);
c.hit.setAttribute("y", top); c.hit.setAttribute("height", c.base + 22 - top);
c.shade.setAttribute("x", 400 - w / 2 + 6); c.shade.setAttribute("y", c.base - 2); c.shade.setAttribute("width", w - 12); c.shade.setAttribute("height", 2 + 8 * lift);
c.hinges.forEach((n) => n.n.setAttribute("d", `M${n.x - 22} ${c.base} H${n.x + 22} L${n.x + 30} ${c.base + ht} H${n.x - 30} Z`));
c.face.setAttribute("transform", `translate(400 ${c.base}) scale(${c.sc * xs} ${c.sc * s})`);
c.face.setAttribute("opacity", seg(s, 0.12, 0.34));
c.g.setAttribute("aria-pressed", String(k > 0.5));
};
return (t, now) => {
cards.forEach((c, i) => {
if (manual) {
const m = manual[i], e = calm ? 1 : seg(now, m.at, m.at + 0.7);
place(c, m.from + (m.to - m.from) * (m.to > m.from ? ob(e) : io(e)));
} else {
const f = FOLD + (2 - i) * 0.2;
place(c, ob(seg(t, TIMES[i], TIMES[i] + RISE)) * (1 - io(seg(t, f, f + 0.8))));
}
});
};
},
};

/* ---- player ---- */
const q = new URLSearchParams(location.search), frozen = q.has("mgstill"), fixed = parseFloat(q.get("mgstill"));
const calm = matchMedia("(prefers-reduced-motion: reduce)").matches;
const mount = (fig) => {
const sc = SC[fig.dataset.scene], img = fig.querySelector("img"); if (!sc || !img) return;
const W = sc.w || 800, H = sc.h || 600;
const svg = el("svg", { viewBox: `0 0 ${W} ${H}`, class: "mg-svg", role: "group", "aria-label": img.alt || "" });
svg.style.aspectRatio = `${W} / ${H}`;
el("rect", { width: W, height: H, fill: "#fff" }, svg);
img.replaceWith(svg);
let off = 0, raf = 0, seen = false, held = calm;
const base = performance.now(), clock = () => (performance.now() - base) / 1000;
let draw = () => {};
const frame = () => { const now = clock(); draw(held ? sc.still : (((now + off) % sc.dur) + sc.dur) % sc.dur, now); };
const tick = () => { cancelAnimationFrame(raf); frame(); if (seen && !held) raf = requestAnimationFrame(tick); };
const api = { now: clock, seek: (s) => { off = s - clock(); held = false; tick(); }, poke: () => { held = false; tick(); } };
draw = sc.build(svg, api);
if (frozen) { draw(isNaN(fixed) ? sc.still : fixed, 0); return; }
new IntersectionObserver(([e]) => {
seen = e.isIntersecting;
if (seen) { tick(); if (!fig.dataset.sent && window.posthog) { fig.dataset.sent = 1; window.posthog.capture("blog_scene_view", { slug: location.pathname.split("/").filter(Boolean).pop(), scene: fig.dataset.scene }); } }
else cancelAnimationFrame(raf);
}, { threshold: 0.25 }).observe(fig);
svg.addEventListener("click", () => { if (!fig.dataset.hit && window.posthog) { fig.dataset.hit = 1; window.posthog.capture("blog_scene_interact", { slug: location.pathname.split("/").filter(Boolean).pop(), scene: fig.dataset.scene }); } });
frame();
};
const go = () => document.querySelectorAll("figure.mg[data-scene]").forEach(mount);
const fonts = document.fonts && document.fonts.load ? Promise.all([document.fonts.load('700 32px "Space Grotesk"'), document.fonts.load('500 20px "Space Grotesk"'), document.fonts.load('700 20px "JetBrains Mono"')]).catch(() => {}) : Promise.resolve();
const start = () => fonts.then(go, go);
if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", start); else start();
})();
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
57 changes: 57 additions & 0 deletions blog/src/posts/agent-tools-today-2026-11-01.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
title: "Agent Tools Today, 1 Nov 2026: ChatGPT Share Link Takeover, Prospero, Orkas"
seoTitle: "Agent Tools Today (1 Nov 2026): Launches, Skills, MCP Servers"
description: "The top launches, skills, multi agent moves, rising repos and arguments in AI agents from 29 Oct to 1 Nov 2026, each with its source and date."
date: 2026-11-01
category: news
categoryLabel: News
type: Non-technical
series: agent-tools-today
primaryKeyword: "agent tools today 1 nov 2026"
secondaryKeywords: ["chatgpt share link account takeover", "prospero coding harness", "orkas ai", "hex 3.0 voice dictation", "crush 0.99.0", "opencode claude agent"]
tags: ["Daily Brief", "Claude Code", "Skills", "Security"]
---

Agent tools today, 1 Nov 2026, in one line: researchers showed how one shared ChatGPT link could take over an account (OpenAI has fixed it), Prospero arrived as a native coding harness, and Orkas climbed GitHub trending. It covers 29 Oct to 1 Nov, checked 1 Nov. An earlier edition is [31 Oct](/blog/agent-tools-today-2026-10-31/).

[Munder Difflin](https://harnessmd.com/download) is free and open source: a desktop app that runs a team of AI agents for all kinds of knowledge work, coding included, on your own computer. It is not ranked in the lists below.

<figure class="mg" data-scene="popup"><img src="/blog/assets/media/agent-tools-today-2026-11-01/popup.png" width="1600" height="1200" loading="lazy" decoding="async" alt="Animation. On a white background, a pop up book lies open and three cards rise out of it one at a time. The first reads ChatGPT share link with a tag Fixed 26 Oct. The second reads Prospero with a tag Native harness. The third reads Orkas with a tag Desktop agent team. Tapping a card folds it down or back up."><figcaption>The day's three lead items, from Parameter's write up, the Prospero announcement and the Orkas README, read 1 Nov 2026.</figcaption></figure>

## Top 3 launches

1. **Prospero.** A native coding harness for Windows, macOS and Linux, written in C++ with a Dear ImGui interface. Its author says a harness "is essentially curl glued to popen()" and that Prospero uses "around two orders of magnitude fewer resources" than others. No model provider is built in, and "You can't use your Claude subscription". The free Community Edition is on GitHub under the Unlicense. A paid Professional Edition adds the headless engines for remote deployment. Announced 31 Oct, more than 180 points on Hacker News on 1 Nov. [Source](https://nullprogram.com/blog/2026/10/31/)
2. **agent-desktop 1.0.2.** From Vercel Labs, a CLI and C library that lets an agent read and operate desktop apps through the operating system's accessibility tree, "with no pixel matching". It runs on macOS, Windows and Linux. Its README warns that snapshots and screenshots "can contain private desktop content". Apache 2.0, published 30 Oct, more than 4,500 stars on 1 Nov. [Source](https://github.com/vercel-labs/agent-desktop/releases/tag/v1.0.2)
3. **Hex 3.0 and 3.1.** Local voice dictation from Anomaly, whose GitHub organisation also hosts OpenCode. It transcribes on your machine and pastes the text. Its [homepage](https://anoma.ly/hex/) offers Mac, Windows and Linux, while the README still labels Windows and Linux as beta. Version 3.0 starts fresh: it imports nothing, and 2.3.1 does not update to it by itself. MIT, published 31 Oct and 1 Nov, more than 2,100 stars on 1 Nov. [Source](https://github.com/anomalyco/hex/releases/tag/v3.0.0)

## Top 3 skills, MCP servers and plugins

1. **reanimate.** A Claude Code skill that records an animation from a live site, a screen recording, an mp4, a gif or a Lottie file, rebuilds it in your code, records the copy and compares the two, "so the agent keeps going until the numbers match". MIT, created 29 Oct, more than 490 stars on 1 Nov. [Source](https://github.com/NiazMorshed2007/reanimate)
2. **teardown.** A Claude Code skill "that turns any machine into a 3D simulator you can take apart", built as one offline HTML page. MIT, created 30 Oct, more than 480 stars on 1 Nov. [Source](https://github.com/elvarofficial/teardown)
3. **Cheap Agent.** An MCP server for Claude Code: "Opus plans, a dirt-cheap model writes every line, and tests decide what ships." Its own side by side run shows 154k Opus tokens alone against 57k with it, 63% fewer. Its repo description claims "50x your Claude usage", far more than that run shows. MIT, created 28 Oct, more than 140 stars on 1 Nov. [Source](https://github.com/muaaz9329/cheap-ag)

## Top 3 moves from multi agent tools

1. **OpenCode 2.2.4.** Published 30 Oct. It adds a guided setup for the Claude Agent provider that arrived in [2.2.3](https://github.com/anomalyco/opencode/releases/tag/v2.2.3), which uses "your Claude Code login and models": copy `claude auth login`, install Claude Code, verify the connection. OpenCode's [providers page](https://opencode.ai/docs/providers/), read 1 Nov, still says of plugins for Claude Pro and Max that "Anthropic explicitly prohibits this", and the release notes do not say how the two fit together. See [OpenCode alternatives](/blog/opencode-alternatives/). [Source](https://github.com/anomalyco/opencode/releases/tag/v2.2.4)
2. **Crush 0.99.0.** Published 29 Oct. Hooks "can now follow the whole run: sessions, turns, permissions and more". An app that hosts Crush can theme it, tell it which files are open and answer its permission prompts with `CRUSH_PERMISSIONS_PIPED=1`. [Source](https://github.com/charmbracelet/crush/releases/tag/v0.99.0)
3. **Orca 1.4.245.** Published 30 Oct. On a Mac, agents can now work in Chrome, Blender and other apps "while you keep using your mouse and keyboard", though "Some actions still need the app brought forward". [Source](https://github.com/stablyai/orca/releases/tag/v1.4.245)

## Top 3 rising repos

1. **Orkas.** "An open-source team of AI agents on your desktop", for macOS and Windows. A Commander turns your goal into tasks and coordinates 16 built in specialist agents plus Claude Code, Codex, OpenCode, OpenClaw and Hermes. It competes with Munder Difflin, so weigh our mention accordingly. MIT, more than 6,500 stars, and 1,044 stars in a day on GitHub trending on 1 Nov. [Source](https://github.com/Orkas-AI/Orkas)
2. **claude-mem.** "Persistent Context Across Sessions for Every Agent": it captures what your agent does, compresses that with AI and injects the relevant parts into later sessions. Apache 2.0, more than 108,000 stars, and 1,723 stars in a day on GitHub trending on 1 Nov. [Source](https://github.com/thedotmack/claude-mem)
3. **Lightpanda.** It calls itself "the headless browser designed for AI and automation". AGPL 3.0, more than 39,000 stars, and 929 stars in a day on GitHub trending on 1 Nov. [Source](https://github.com/lightpanda-io/browser)

Stars can rise for reasons other than use: names to watch, not picks.

## Top 3 things people are arguing about

1. **Could opening one link cost you a ChatGPT account?** Until OpenAI's fix on 26 Oct, yes, says Parameter's write up of 28 Oct. A public ChatGPT share could run attacker code in the signed in session of whoever opened it, through a math keyboard library that accepted messages from any web address. The researchers confirmed it could list conversations, read a private one and send data from it to an outside server: "Opening the shared link was the only required action." OpenAI raised it to P1 on 21 Oct and awarded a $5,000 bounty on 26 Oct, the post says. The post does not say whether anyone else used the flaw. More than 310 points on Hacker News on 1 Nov. See [security for AI coding agents](/blog/security-for-ai-coding-agents/). [Source](https://www.parameter.ai/labs/we-found-a-gap-at-openai)
2. **Is Claude refusing ordinary game and reverse engineering work?** Tom's Hardware reported on 31 Oct that users claim Claude Code or Opus 5.5 blocks such tasks, including runs of the REA tool, and that issues about game work are arriving on Claude Code's GitHub. It says a rule text quoted online has no confirmation, and that there is "no official statement" from Anthropic so far. More than 60 points on Hacker News on 1 Nov. [Source](https://www.tomshardware.com/tech-industry/artificial-intelligence/anthropics-ai-model-is-now-blocking-attempts-at-video-game-recreation-and-cloning-users-also-claim-non-malicious-generic-reverse-engineering-tasks-are-blocked)
3. **What does one engineer do with unlimited tokens?** Cisco's president, Jeetu Patel, told Fortune he gave a 27 year old former founder "unlimited tokens" to refactor code, with a final goal of 98% of Cisco's legacy code within 24 months. Published 30 Oct, more than 300 points on Hacker News on 1 Nov. [Source](https://fortune.com/2026/10/30/cisco-president-jeetu-patel-gen-z-27-year-old-unlimited-ai-tokens-rewrite-legacy-code-entry-level-jobs/)

## How this list is built

For this edition, covering 29 Oct to 1 Nov, we read the GitHub releases of tracked tools, vendor blogs and changelogs, GitHub trending, and the Hacker News front page. We also took leads from a read of X, but nothing here rests on a post there. We did not use Reddit for it. A name only makes a list with a link that was opened and a signal that can be shown: points, stars or a dated release. Repos are checked against the GitHub API before they appear. New here? Start with the [install guide](/blog/how-to-install-and-use-munder-difflin/).

<link rel="stylesheet" href="/blog/assets/media/agent-tools-today-2026-11-01/motion.css"><script defer src="/blog/assets/media/agent-tools-today-2026-11-01/motion.js"></script>
Loading
Loading