- β
- β
- October 10, 2026
-
π backnotprop/plannotator v0.28.10 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.9 | Large Inbox messages throughplannotator inbox mcpfixed, an Inbox sidebar you can close and resize, Edit Mode in reviews of several files, the new Pi logo
v0.28.8 | The Plannotator Inbox (preview): messages, questions, files and guided reviews from your agents in one local window
v0.28.7 | Ask this session keeps your drafts as drafts, image comments survive a reload, hostname check on every server
v0.28.6 | Ask AI names the lines you selected, reorder quick labels and edit their emoji, Pi fixed-port crash fixed, OpenCode 2 subagent notice fixed
v0.28.5 | Several files in one review, theplannotatortool on Pi and OpenCode 2, decisions name the exact file, Ask this session reconnects after sleep
v0.28.4 | Comments come back after the agent edits a file, the agent can list and close its reviews, PR-description feedback no longer dropped, Pi thinking levels
v0.28.3 | Typing into your agent while it answers an Ask no longer streams into Plannotator
v0.28.2 | Question cards show wrapped choices and tables, pinned images named by their file, Done with nothing to send starts no agent turn
v0.28.1 | Ask AI from diagram comments, pinned images named for the agent, OpenCode 1 URL toasts and one reply per feedback, folder feedback sent once
v0.28.0 | Ask this session in Claude Code, Pi and OpenCode 2, Claude Code mod on by default, Pi plan review no longer blocks, first-run demo
v0.27.25 | Code review works withcolor.diff = always, Bitbucket review fixes, wide tables no longer collapse in Firefox, install script fix
v0.27.24 | Image previews stay in the all-files view, PR comment previews open on the commented lineWhat's New in v0.28.10 A small Inbox release. You can now open the Inbox from your other devices over Tailscale, images in agent messages load, and a click anywhere on an attachment tile opens the file. Open the Inbox over your tailnet The Inbox only listens on this computer, so until now the only way to reach it from a phone or another machine was to set up tailscale serve by hand, which let every device on the tailnet in, including the agent connection. Now one flag does it: plannotator inbox --tailscale The command prints an address such as https://studio.tail1234.ts.net:52817/. Open it on any device signed in to your tailnet. Tailnet only, never public. The Inbox stays bound to this computer. tailscale serve publishes it over HTTPS inside your tailnet. The Inbox never uses tailscale funnel. Only your own login gets in. The Inbox lets in the Tailscale login that owns this computer and refuses everyone else, including tagged devices. To let in another login, add it to ~/.plannotator/config.json: { "inboxTailscaleAllow": ["you@example.com"] }. An allowed login can reply and send New messages, and those become turns in your live agent sessions on this computer, where agents run commands. Allow only people you would let run your agents. Agent connections stay local. MCP and the reply wake answer only on this computer, never over the tailnet. On for one run or for good. --tailscale publishes until the Inbox stops, and works with --background and --no-open. If the Inbox is already running, the command asks it to publish. To publish at every start, including when an agent starts the Inbox, turn on Over your tailnet in the Inbox's Settings (or set { "inboxTailscale": true } in config.json). PLANNOTATOR_INBOX_TAILSCALE=0 keeps it off whatever the flag or the switch says. Tailscale missing or signed out? The Inbox still runs on this computer, and Settings and the terminal say why it could not publish. The address uses the Inbox's own port and is removed when the Inbox stops or restarts. If the Inbox is killed (kill -9, a reboot), the address stays in Tailscale until the next start removes it; run tailscale serve --https=<port> off to remove it sooner. Full details: plannotator.ai/docs/reference/inbox. #1818, requested by an Inbox user who wanted to reach it over their tailnet Images in agent messages load An agent's message with ! showed a broken image, because the Inbox had no route for it. Images in messages now load when the file is inside the message's project: a path relative to the folder the agent sent from, or an absolute path inside the project. This covers markdown images, <img> tags and images in question context. PNG, JPEG, GIF, WebP, SVG, AVIF, BMP and ICO files up to 10 MB are served. The Inbox serves only images the message itself references, so the route cannot be used to read other files. Images from the web (https://β¦) still do not load. #1819, closing #1813 reported by @hexsprite Additional Changes
- Click anywhere on an attachment tile. The tiles under an agent message opened only from the small "Open" text. The whole tile now opens the file, and keyboard focus outlines the whole tile (#1817)
Behavior changes
/mcpneeds a loopback address with the Inbox's own port. An HTTP MCP client must reachhttp://127.0.0.1:<port>/mcpdirectly. Anssh -Lforward to a different local port is now refused.plannotator inbox mcpover stdio is unaffected.- Use
--backgroundto keep a published Inbox running.nohup plannotator inbox --tailscale &stops when the terminal closes while the Inbox is published. Runplannotator inbox --tailscale --backgroundinstead.
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/pluginβ Installed β plannotator β Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- Inbox over your tailnet: plannotator inbox --tailscale (owner-only) by @backnotprop in #1818
- Inbox: images in agent messages load (fixes #1813) by @backnotprop in #1819
- Inbox: clicking anywhere on an attachment tile opens it by @backnotprop in #1817
Community
- @hexsprite reported that images in Inbox messages never loaded in #1813, with the exact repro and the cause traced to the missing route.
Full Changelog :
v0.28.9...v0.28.10 -
π obra/superpowers v7.0.0 release
We rebuilt brainstorming from scratch so it does a much better job of what it was always for: helping you work out what you actually want and put it into words before anything gets built. The new skill asks you to describe what you're after and why, plays back what it heard so you can correct it, and keeps asking good questions until the picture is clear. Then it matches the process to the work, from just doing it to writing a full design.
This release also adds a native plugin manifest for the Antigravity Marketplace and fixes Windows hook discovery, Git Bash paths, Hermes skill descriptions, and several smaller bugs.
Brainstorming
- Brainstorming draws out what you want before it proposes anything. Its first message offers to skip the questions and asks one open question about a real moment or a concrete picture. It offers a menu only when you're stuck. Along the way, it offers to look at prior art, your project, or the web. As it understands each part, it plays that part back in a few hundred words and marks its guesses as guesses. (#2463)
- It sizes the work after it understands what you want, and says so in plain words. It does a quick, clear task right away, agrees a small change with you in chat, and writes a design document for a project. You can override its call, and it steps up a size if the work grows. (#2463)
- A builder check replaces the spec-document reviewer. A fresh subagent reads the design as the person who'll build it and lists what they'd still need to ask. Brainstorming answers what it can, makes the minor calls itself and marks them as its own, and brings you the questions that change what gets built, in one round. (#2463)
- It finds out which choices about how the thing gets made you want to own. Platform, language, libraries, medium: if you have strong views, it talks them through; if you hand them over, it picks sensible defaults and tells you what it picked. It does this even when you skip the questions. We made this change after a session designed an iOS app, never asked about platform, and built a web app. (#2482, #2483)
- It offers the visual companion whenever seeing would help more than reading: screens, layouts, flows, options that look different, diagrams. The offer drops its token-cost warning. (#2463)
- The visual companion now shows screens containing
$',$&, and similar sequences intact. The server inserted content withString.replace, which treats those sequences as replacement patterns. It now inserts content literally. Thanks @andrew-yian for the report and @luochen211 for the fix. (#2362, #2364)
Antigravity
agy plugin install https://github.com/obra/superpowersnow installs Superpowers as a native Antigravity plugin. We added.antigravity-plugin/plugin.jsonwith the Marketplace display name, logo, and suggested prompts. Previously, agy fell back to importing the repo as a Gemini CLI extension, then rejected the copied Claude-format hooks file on every session withinvalid hook "hooks": command hook must specify 'command'. The install command stays the same. (#2479)- Superpowers bootstraps on Antigravity through skill discovery. Antigravity has no session-start hook event, but it shows the model each installed skill's description, and
using-superpowers' "Use when starting any conversation" prompts the model to load it. We verified this on agy 1.3.1 across 12 runs: "Let's make a react todo list" and "add a settings page" triggered brainstorming before any code, and a failing test triggered systematic-debugging before any edit. We also corrected the README and porting guide, which described a session-start hook and install script that never existed. (#2479)
Hooks
- SessionStart now works when the harness launches it with a broken
PATH. The hooks no longer look updirname,cat, orbashonPATH, so a startupPATHthat can't resolve them (anthropics/claude-code#43127) no longer drops the bootstrap. Thanks @kannan983 for the report and Ada Sen for the fix. (#2310, #2349) - Windows:
run-hook.cmdfinds per-user Git for Windows installs and skips WSL launchers. It now checks%LOCALAPPDATA%\Programs\Git, and when it searchesPATH, it skips the WSLbash.exelaunchers, which fail without a Linux distro. Thanks @jp5247 for the report, and @citizen204 (#1864) and @KaiyiQuan (#2365) for the fixes we combined here. (#1863, #2393) - Windows:
run-hook.cmdignoresbashandwherein the current directory. Previously, a repository could plantbash.cmdorwhere.batand have it run at session start. (#2393) - Windows:
run-hook.cmdnow passes hook exit codes to the harness. It used to report success even when the hook failed. (#2393)
Subagent-Driven Development
sdd-workspaceleaves a repo's own.superpowers/sdd/.gitignorealone. It used to overwrite the file with*on every run, reverting any version a repo committed (for example, to trackprogress.mdledgers). It now writes the default only when no file exists. Thanks @aruizcu1989 for the fix. (#2161, #2399)- Plan markers stay repo-relative on Windows. On Git Bash,
sdd-workspacecomparedgit rev-parse'sC:/β¦root with the plan's/c/β¦path, so every workspace marker recorded an absolute, machine-specific path. It now resolves the root the same way as the plan path. We found this while landing @t0domanh's Windows test fixes (#2149).
Executing Plans
task-donenow records tasks whose test command passes silently. When a passing command printed nothing,task-doneexited 1 without writing the ledger line, so a finished task looked unfinished. It now recordsβ (no output). Thanks @KenM-BT for the report and Ada Sen for the fix. (#2385, #2388)
Requesting Code Review
- The example's base-SHA command survives skill arguments. Claude Code replaces
$1in a skill body with the second argument word, so invoking the skill with arguments turnedawk '{print $1}'intoawk '{print <word>}'. The example now usescut -d' ' -f1, which contains no$. Thanks @errmakov for the report and @klemens-floege for the fix. (#2311, #2361)
Systematic Debugging
- The multi-layer diagnostic example no longer prints the secret it checks for.
${IDENTITY:+SET}${IDENTITY:-UNSET}andenv | grep IDENTITYboth echoed the signing identity's value into logs. The example now reports only whether the variable is set. Thanks @kennyg-g for the report and @m2dumpling for the fix. (#2375, #2380)
Hermes Agent
- Hermes' skill list now shows Superpowers skill descriptions. Hermes lists each plugin skill with the description passed to
register_skill, which defaults to empty. The plugin passed only a name and path, so every skill appeared blank and the model had nothing to choose from. The plugin now passes each skill's frontmatter description. Thanks @pepijn-blom for the fix. (#2284)
-
π Ampcode News Use Your Claude Plan in Amp rss
You can now use your Claude Pro/Max subscription in Amp. It's free and available for everyone now.
When creating a new thread, just pick Mode > Claude Code. It'll ask to link your Claude sub if you haven't already done that.

Under the hood, this mode uses the Claude Agent SDK instead of Amp's own agent. But we made it all work: orbs and runners, thread sharing, portals, multiplayer, thread-to-thread messaging and orchestration, etc.
See the Claude sub docs for more information.
-
- October 09, 2026
-
π smol-machines/smolvm smolvm v1.25.4 release
What's Changed
- Remove pack staging directories left behind by a killed pack by @BinSquare in #1631
- Refuse a rootfs extraction that lost sbin/init instead of booting it by @NickyHeC in #1228
- Resolve a guest's DNS from the host so a blocked public resolver still works by @NickyHeC in #1226
- agent: pull cold images through one crane process by @BABTUNA in #1523
- CUDA fork: fix forking a CUDA golden failing with "rebase guest RAM: Device or resource busy" by @BinSquare in #1373
- Add host-mediated egress policy and decision protocol by @BinSquare in #1434
- Keep cache disk layers a branch still reads when collecting unused fork layers by @BinSquare in #1633
- Bump version to 1.25.4. by @BinSquare in #1634
- Keep machine execs alive when the image's workload exits by @BinSquare in #1632
Full Changelog :
v1.25.3...v1.25.4 -
π backnotprop/plannotator v0.28.9 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.8 | The Plannotator Inbox (preview): messages, questions, files and guided reviews from your agents in one local window
v0.28.7 | Ask this session keeps your drafts as drafts, image comments survive a reload, hostname check on every server
v0.28.6 | Ask AI names the lines you selected, reorder quick labels and edit their emoji, Pi fixed-port crash fixed, OpenCode 2 subagent notice fixed
v0.28.5 | Several files in one review, theplannotatortool on Pi and OpenCode 2, decisions name the exact file, Ask this session reconnects after sleep
v0.28.4 | Comments come back after the agent edits a file, the agent can list and close its reviews, PR-description feedback no longer dropped, Pi thinking levels
v0.28.3 | Typing into your agent while it answers an Ask no longer streams into Plannotator
v0.28.2 | Question cards show wrapped choices and tables, pinned images named by their file, Done with nothing to send starts no agent turn
v0.28.1 | Ask AI from diagram comments, pinned images named for the agent, OpenCode 1 URL toasts and one reply per feedback, folder feedback sent once
v0.28.0 | Ask this session in Claude Code, Pi and OpenCode 2, Claude Code mod on by default, Pi plan review no longer blocks, first-run demo
v0.27.25 | Code review works withcolor.diff = always, Bitbucket review fixes, wide tables no longer collapse in Firefox, install script fix
v0.27.24 | Image previews stay in the all-files view, PR comment previews open on the commented line
v0.27.23 | Bitbucket Cloud PR review, Question UI for answering agents in place, opt-in auto-update, viewed files remembered, review another repo or worktreeWhat's New in v0.28.9
A patch release that follows up on the Inbox, which launched in v0.28.8. It fixes large messages sent through
plannotator inbox mcp, gives the Inbox a sidebar you can close and resize, and smooths several rough edges found since the launch. It also turns on Edit Mode in reviews of several files and includes a first contribution from @h-jennings.Large messages through
plannotator inbox mcpAn agent connected through the stdio command (
plannotator inbox mcp, the setup the Inbox shows for Codex, Gemini CLI and other MCP clients) could not send a message larger than 4 MiB. The Inbox refused it, but the refusal carried no request id, so the agent's MCP client never matched it to its request and waited until its own 60-second timeout. Messages now go through up to 128 MiB, and anything larger is refused at once with an error that names the limit. Claude Code, Pi and OpenCode report the same limit in the same words.A sidebar you can close and resize
The Inbox sidebar now closes and opens from a toggle at the start of each page header, or with βB (Ctrl+B), and the Inbox remembers your choice. βB does nothing while you type in the reply box, so it never takes your focus away. While the sidebar is closed, resting the pointer on the left edge shows it for a moment. Drag its edge to change the width (the Inbox remembers that too), drag it narrow to close it, or click the edge to collapse it. In a narrow window it opens as a sheet over the list. Opening a file beside a thread closes the sidebar to make room and leaves your saved choice alone.
Smaller Inbox fixes
- Newest first in every section. Each section of the list (Stopped on you, Holding up work, Waiting on you, Sent, New since you looked, Quiet) is now ordered by the thread's latest message, so the time column reads down in order. Before, some sections put the oldest waiting question first (#1800)
- Rows show delivery without a reload. After your reply reached the agent, the thread said "Delivered" while the list row kept saying "Saved for " until you reloaded. The row now updates in place, and rows still change position only when you act (#1772)
- Agents that get your reply automatically end their turn.
send_messageandsubmit_guidetold every agent to callwait_for_reply, which could hold a Claude Code, Pi or OpenCode 2 session for up to 50 seconds per call even though your reply arrives there by itself. Those agents are now told to end their turn. OpenCode 1 and other MCP clients keep thewait_for_replyadvice (#1771) - A stale tab says Inbox. An Inbox tab left open after the Inbox restarted used to say "This review was replaced". It now says the Inbox page is out of date and nothing was saved (#1773)
- Attachments look like Plannotator. Markdown, text and diagram attachments follow the Grid or Clean look you chose in Plannotator's Settings (#1796)
Edit Mode in reviews of several files
plannotator annotate a.md b.md c.mdopens one review of all the listed files, but that review had no Edit Mode, so an agent asked to set up documents for direct editing had to open a folder instead. Each file in such a review now has Edit Mode exactly when it would have it opened by itself: markdown,.mdxand.txtfiles can be edited and saved to disk, while raw HTML, diagram sources and data files stay read-only. Files linked from the review, and anything outside it, cannot be written. This works the same in the CLI and in Pi.- #1802, from a report by @bendrucker in #1774
Additional Changes
- Drag a toast away. Pressing on a toast and dragging it used to select its text and leave it on screen, most often with the update notices. A drag now dismisses it, in plan review, annotate and code review (#1792 by @h-jennings)
- The new Pi logo. Plannotator now draws Pi's new three-colour logo from pi.dev wherever it shows the Pi mark: the Ask AI provider bar, AI settings, the Agents tab, and the Inbox list, threads and first-run cards (#1808)
- The Inbox on plannotator.ai. plannotator.ai/inbox now has a short film of the Inbox, alongside the launch post The age of the Inbox (#1770, #1811)
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/pluginβ Installed β plannotator β Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- Inbox MCP: large messages through the stdio shim no longer time out by @backnotprop in #1794
- Inbox: the Workspaces sidebar (close, open, peek, βB) by @backnotprop in #1810
- Inbox: every section of the list reads newest first by @backnotprop in #1800
- Inbox: a held row's state follows a delivery; only the order waits for an action by @backnotprop in #1772
- Inbox: send result says to end the turn when the caller's wake delivers the reply by @backnotprop in #1771
- Inbox: a stale tab's 409 says Inbox, not review by @backnotprop in #1773
- Inbox: the attachment pane follows Plannotator's Grid/Clean plan look by @backnotprop in #1796
- Edit Mode in reviews of several files (annotate bundles) by @backnotprop in #1802
- fix(ui): a mouse drag dismisses a toast instead of selecting its text by @h-jennings in #1792
- Pi mark: the new pi.dev logo by @backnotprop in #1808
- Marketing: the Inbox is launched (INBOX_LAUNCHED on) by @backnotprop in #1770
- Marketing: the Inbox film on the Inbox page by @backnotprop in #1811
- Claude Code mod harness: expect the inbox-wakes _meta on plannotator_inbox calls by @backnotprop in #1793
- test: fix the restart-to-update and review-directory flakes by @backnotprop in #1783
- ci: manual sign-and-notarize check for an upcoming macOS app by @backnotprop in #1799
- iPhone app groundwork, included but not enabled in this release, across #1775, #1776, #1777, #1778, #1779, #1780, #1781, #1782, #1785, #1788, #1789, #1790, #1791, #1795, #1797, #1798, #1801, #1806, #1809 and #1812 by @backnotprop
New Contributors
- @h-jennings made their first contribution in #1792
Community
- @h-jennings fixed toasts that selected their text instead of dismissing when dragged (#1792), with before and after recordings in the PR. First contribution to the project.
- @bendrucker found that a review of several files had no Edit Mode and opened #1774 to point agents at the folder form instead. That report is why #1802 turned Edit Mode on for those reviews.
Full Changelog :
v0.28.8...v0.28.9 -
π smol-machines/smolvm smolvm v1.25.3 release
What's Changed
- Return 400 when an image archive is not a container image by @BinSquare in #1625
- fix(agent): propagate file-level fsnotify events from macOS directory changes by @Vishv07 in #1626
- Start every command in a machine with the machine's environment, secrets and workdir by @BinSquare in #1628
- Let a running machine's egress allow list be changed without a restart by @BinSquare in #1627
- Start every command in a machine with the machine's environment, secrets and workdir by @BinSquare in #1629
- Bump version to 1.25.3 by @BinSquare in #1630
Full Changelog :
v1.25.2...v1.25.3 -
π r/LocalLLaMA OpenAI's math findings built on stolen user data rss
| submitted by /u/CuTe_M0nitor
[link] [comments]
---|--- -
π r/LocalLLaMA Qwen/Qwen-Image-2.1-Turbo Β· Hugging Face rss
| submitted by /u/chocofoxy
[link] [comments]
---|--- -
π Simon Willison A new feature for my blog, built using my voice rss
I shipped a new feature for my blog today: the Newsletters page, which offers an index of all of the newsletters I've sent out, both my free weekly Substack and my monthly sponsors-only updates. I built the feature almost entirely using my voice, chatting away to my laptop while I cooked dinner.
Codex voice mode
I used the ChatGPT desktop app for this, in the Codex tab, using the voice conversation mode, running against a local development environment. Here's what that looks like:

I started the session against my local simonwillisonblog checkout by typing:
Start dev server and open in browserThis gave me a preview of the site that it would be working on, and meant that I could later ask it to show me the new pages so I could visually track its progress.
Then I clicked the "Start new voice chat" button - that's not the microphone button, it's the one to the right of it - and set my laptop up in the kitchen so I could talk to it while I cooked.
Talking to my computer
I had a pretty good idea of what I wanted to build, and it's a simple enough Django feature that I was certain the model (in this case GPT-6 Astra High) would be able to do it. A new model, a migration, some view code, templates, and a couple of import functions to populate the database from external sources.
Here's an extract of my voice transcript that was captured by Codex:
Um, they do not. Um, this is going to be a new type of content. Um, it's not going to show up... Oh, hold on. Yeah, no- I do not want this to show up in my, um, tag pages and date archive pages and... Actually, no, I think... I don't want it on the tag pages. I don't want it on the, um, blog index page. But I think I do want it to show up on the date-based pages. You know, if you navigate to September the 19th, and I sent a newsletter on that page, I think I want that to show up. So... this is- so I think we probably need a new model. The other thing is that I want them searchable, uh the Substack ones are not searchable, because those are actually just copies of other s- on content on my blog. These monthly ones do contain unique content, and spe- and once they're... published, like once they're made public a month after they've gone out, I want them to show up on my search results.
Apparently this was clear enough that the model knew what I wanted to build! You can read the full transcript, disfluencies and all, in this Gist.
We went on like this for about half an hour (the time it took to cook dinner). The model would reply and occasionally ask clarifying questions, then get to work modifying the code.
What we built
We got a surprisingly long way entirely by voice:
- A new model and migration to represent imported newsletters in Django, plus Django Admin configuration for that
- Four working imports:
- The most recent Substack items via RSS
- Every other Substack item via their undocumented API, which GPT-6 Astra knew about (it tried
/api/v1/archivedirectly) and then ran a search to figure out how to paginate it and found this article by Karen Spinner - All of my published monthly newsletters from my simonw/monthly-newsletter-archive GitHub repository
- My most recent private sponsors-only newsletter from a private repository
- The /newsletters/ and /newsletters/2026/ public archive pages
- Newsletters showing up on day and month archive pages too, but not on tag pages or my homepage
- Weekly Substack newsletters link to Substack; archived monthly newsletters have their own pages
- Integration with my site search engine
It was almost ready to ship. The catch was the imports: Astra offered to export data from my local copy so I could import that into production, but I wanted it to work like my other import scripts. Since some of the data lived in a private GitHub repository, this would involve creating a new API key, and for that I knew I'd have to sit at the keyboard for a while.
Finishing it with a review
Once I had finished cooking and judged it mostly feature-complete, I had Codex create a branch and open a pull request.
I reviewed the code in the GitHub PR interface. It was nearly what I needed, except it had chosen to use Git in a subprocess for one of the import scripts. I needed one of the imports to pull from a private Git repository, so I figured the API would be a better bet. I switched to typing and had Codex swap that out for an API-based import instead.
You can see the changes I made during the review in the extra commits on the PR. I fixed the import mechanism and made a few tweaks to the display of those public pages. It took an additional half hour of typing-based prompting to get to the point where I was happy to deploy it to production by landing the PR.
The end result
You can see the end result at the new newsletters index page, or view the page for a previous monthly newsletter.

The index page shows my most recent Substack weekly newsletters and GitHub sponsors monthly newsletters mixed together in reverse chronological order. Further down the page are links to my by-year archive pages.
GPT-6 Astra designed the page, and then tweaked that design based on my vocal feedback from glancing at the local preview across the kitchen.
Better for multi-tasking than as a daily driver
OpenAI love using voice-driven demos like this one for things like DevDay - and they do work well in that environment. I don't think this is going to be a daily driver for me though.
I've written before about how much "work" I get done using ChatGPT voice mode on my phone while walking the dog - mostly research and brainstorming, but occasionally actual development work by having ChatGPT write and test out snippets of code.
This feels different. The addition of the visual preview, plus being able to type or paste things in via the keyboard when I need to communicate something that doesn't work vocally, makes this a much more powerful way of interacting with a coding agent.
I still switch back to typing once I get down to the details of things though. Being able to paste in examples and error messages, or directly highlight the code or feature that needs changing, remains more efficient than trying to describe it in words.
I mainly work from home, which is good because there's no way I'd want to talk to my computer like this in a shared workspace!
The killer feature for me is the ability to multi-task. I usually cook with a podcast or TikTok running; now I can actually build stuff instead.
You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.
-
π streamyfin/streamyfin v0.55.1 release
What's Changed
0.55.1 is a bug fix release for 0.55.0. Nothing new to learn here: most of it comes straight out of the crash and error reports the new version sent back, plus the issues you filed in the first days after the release
Thanks to everyone who reported a problem, and to @Simon- Eklundh and @whoopsi- daisy for their fixes!
β¨ Highlights
- Crash when leaving the player on iOS and tvOS 27 is fixed (#2139)
- Resume points are kept when you leave the player before playback has started (#2154)
- Sheets that would not open work again: track options, add to playlist, playlist sort, and the PIN and password prompt for a saved account (#2194)
- Cancelled and failed downloads clean up after themselves , instead of leaving subtitles, trickplay images and partial videos on the device (#2168, #2169, #2170)
- Sharper artwork , with logos, backdrops and cards requested at the pixel size of the screen (#2176, #2177)
- Awards show up again on movie and series pages (#2136)
π¬ Player
- Fixed a crash when leaving the player on iOS and tvOS 27 (#2139)
- Leaving the player before playback starts no longer resets the resume position on the server (#2154)
- Audio and subtitle languages are matched by region, script and variant, so
pt-BRis no longer mixed up withpt-PT, orzh-Hanswithzh-Hant(#2152, #2174) - Items with nothing to play, like a book, a season or a plugin channel, show a notice instead of a Play button that fails (#2141)
- "Play from here" sent from another client starts at the item you picked instead of the top of the list (#2147)
- Subtitle search tells you when your account is not allowed to search, instead of saying no provider is set up (#2159)
- Chromecast subtitle URLs are signed the way Jellyfin 12 accepts by default (#2158)
- Android: leaving the player while subtitles load no longer freezes the app (#2160)
- Android TV: the ExoPlayer engine tries once more when an audio track fails to start, before showing an error (#2162)
- Watch progress is no longer reported in bursts when the app has been busy (#2190)
πΊ TV
- A series or season tile on the TV home screen (Apple TV Top Shelf, Android TV recommendations) opens the series page, with the right season selected (#2146)
- Back returns to Home after opening a page from the TV home screen (#2150)
- A saved account whose credential has gone missing is removed and asks you to sign in again, instead of showing a connection error (#2157)
β¬οΈ Downloads
- Cancelling a download removes its subtitles, trickplay images and partial video, and so does a download that fails (#2168, #2169)
- Cancel holds when you press it right as a download starts or finishes (#2170)
- Android: fixed a crash when a download is started shortly after the device has rebooted (#2186)
- Deleting the last downloaded episode of a season moves to another season, and leaves the page when nothing is left (#2155)
- Values sent by the server are cleaned before they are used in download file names (#2172, #2175)
- The total download size is worked out without an extra render pass (#2163)
π Fixes
- Track options, add to playlist, new playlist, playlist sort, and the PIN and password prompt for a saved account open again, and the sheets that only opened once keep working (#2194)
- Logos, backdrops and card artwork are requested at device pixel size, so they are no longer soft on high density screens (#2176, #2177)
- Awards load again on movie and series pages (#2136)
- Library filter chips stay below the navigation bar after changing a filter or the sort order on iOS (#2193)
- The "Is Favorite Or Liked" library filter is sent under the name the server expects (#2191)
- Favorites "See all" no longer draws its first row under the header on Android (#2167)
- Movie pages use the right header height when the device orientation is unknown (#2181)
- Local network URL: an address the app cannot use is rejected instead of crashing the app at launch, and the field says clearly whether the address was saved (#2140, #2148, #2149, #2151)
- Plugin settings and admin locks are kept when refreshing them fails, for example right after coming back online (#2187)
- Seerr no longer attempts a password sign-in with an empty password when Quick Connect does not go through (#2188)
- Seerr Discover no longer crashes when the server answers with something other than its settings, such as a proxy login page (#2182)
- Seerr logo sized and aligned with the other rows in the intro sheet (#2164, #2180)
- Android: fixed a crash at launch from the music player's media session (#2161)
π§ Build & Infra
- Crash reporting sends less: expected responses and repeats of the same failure are skipped, and server addresses and host names are kept out of reports (#2142, #2144, #2156, #2189)
- Tab bar labels and the search button are correct when the app is built with the iOS 27 SDK, ahead of moving the builds to Xcode 27 (#2196)
- axios 1.20.0 security update (#2134), plus routine dependency updates (#2098, #2099, #2183, #2184, #2185)
- CI and test stability (#2143, #2165, #2179)
π Support & Reporting Bugs
- Bugs and feature requests: open an issue. Search existing issues first and add to a match if there is one.
- Questions and help: Discord
Include in bug reports: app version, platform and device, OS version, Jellyfin server version, direct play or transcoding, the media's codecs and subtitle format, which player you used (native or standard), steps to reproduce, and logs or a screen recording if possible.
Full Changelog :
v0.55.0...v0.55.1 -
π HexRaysSA/plugin-repository commits sync repo: +4 releases, -2 releases rss
sync repo: +4 releases, -2 releases ## New releases - [ida-bochs-binaries](https://github.com/hexrayssa/ida-bochs-binaries): 2.0.0, 1.0.5 - [ida-mcp](https://github.com/hexrayssa/ida-mcp): 20261008.0.1 - [ida-nexus](https://github.com/hexrayssa/ida-nexus): 0.13.4 ## Changes - [ida-mcp](https://github.com/hexrayssa/ida-mcp): - removed version(s): 0.8.1 - [ida-nexus](https://github.com/hexrayssa/ida-nexus): - removed version(s): 0.7.0 -
π smol-machines/smolvm smolvm v1.25.2 release
What's Changed
- Add a command that prints shell completion scripts by @0xprames in #1612
- Install system-wide as root and refuse to serve when per-VM uids cannot reach smolvm by @BinSquare in #1616
- Cache S3 mount lookups and small files, and serve requests concurrently by @BinSquare in #1618
- Copy disk templates without writing their zero runs and resize storage before moving /dev by @BinSquare in #1619
- Let exec refuse to boot a stopped machine with autoStart false, and keep serve on /workspace inside a smol machine by @BinSquare in #1615
- Bump libkrun so frozen branches of a continued source and branchable clones work correctly and fast by @BinSquare in #1622
- Record a directory entry's owner on Windows, so packed layers extract by @WynandVStaden in #1617
- Add cache disk slots, so one checkpoint can be restored with a different cache mounted for each machine by @BinSquare in #1621
- Bump version to 1.25.2 by @BinSquare in #1623
- Mount a restored cache slot only into the machine's own containers by @BinSquare in #1624
New Contributors
- @0xprames made their first contribution in #1612
- @WynandVStaden made their first contribution in #1617
Full Changelog :
v1.25.1...v1.25.2 -
π New Music Releases The Pineapple Thief - Far and Wide rss
The Pineapple Thief - a new release is available:
- 2026-10-09: Far and Wide (Album)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
- October 08, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-10-08 rss
IDA Plugin Updates on 2026-10-08
New Releases:
Activity:
- disrobe
- 4dbfc019: chore(xtask): regenerate the published figures
- 457ad9ee: style(dotnet): drop the source comments the comment gate rejects
- 2ea56d1e: test(passes): record census rows for the new dotnet and native fixtures
- 2f390a8a: fix(dotnet): detect clr images whose directory size bitmono zeroed
- ecb5b7af: test(dotnet): add real confuserex 1.0.0 and bitmono 0.45.0 fixtures
- 7d962401: ci(fixtures): resolve jsobfu gem dependencies and probe ant correctly
- 1f3a038a: fix(dotnet): recover confuserex, obfuscar and bitmono by re-execution
- 0391c3ad: fix(binfmt): fallible ppmd model memory and standard brotli windows
- be163695: test(binfmt): consolidate integration targets and bound the xar toc
- distro
- ida-mcp
- ida-nexus
- idamcp
- naikuai
- pea-shootin-pete-decomp
- d975f615: Seven Percent
- tomsons_RE_scripts
- 8a896d4b: Backport CFS to 7.0
- disrobe
-
π r/LocalLLaMA Strata rewrote their Github history to wipe evidence of Claude-authoring rss
Just noticed this today when I went to run the built-in "UPDATE" script and git failed because there was no common ancestor.
Looked into why, and apparently every historical commit has been re-written to strip the "Co-Authored by Claude" text from the descriptions.
Personally I think that's pretty gross. I'm struggling to think of any reason to do this other than an intention to be dishonest about the origins of the project.
submitted by /u/dasbin
[link] [comments] -
π @HexRaysSA@infosec.exchange IDA 9.5 adds a licensing API. mastodon
IDA 9.5 adds a licensing API.
Everything the License Manager dialog does is now available from code, in the C++ SDK, IDAPython and IDA Domain.
Handy for plugins, headless scripts and shared-license pipelines.
π https://hex-rays.com/blog/ida-9.5-managing-ida-licenses-through-the- api -
π Hex-Rays Blog IDA 9.5: Managing IDA Licenses Through the API rss
IDA plugins used to be small scripts that ran inside one analyst's session. Today many are products in their own right: add-ons with their own UI, headless tools built on idat or idalib, and pipelines that run IDA on a license shared by a whole team. All of them depend on what the IDA underneath is licensed for. Is the ARM64 decompiler included? Is Lumina? Is there a usable license at all? And what if you need a different one?

-
π r/LocalLLaMA $2800 rig with 8x Radeon Pro V620 (256 GB VRAM) + custom vLLM fork = Qwen3.8-Flash-Next at 60 to 100 t/s decode and 3000+ t/s prefill rss
| Post title is slightly misleading, I don't think you can get these for $350 each anymore but they're still pretty cheap all things considered. They're Radeon Pro V620's which are older RDNA2 enterprise cloud gaming cards with 32 GB VRAM. (Ignore the RTX 4090 on the side, it's just used for stuff like image/video gen models, no LLMs) But I bought these cards a couple months ago as a gamble to see if I could build a big VRAM rig with usable speed for relative peanuts. I was struggling with llama.cpp for a long time, but the prefill was pretty bad (around 350-450 t/s average with this same model) and vLLM just didn't work on the cards. Plus llama.cpp just sucks at concurrency. I'd been planning to sell the cards lately because this wasn't going to work for my use case, but then decided to see if I (Claude) could make a vLLM fork that both works with the cards and actually gets good speeds out of them. I had it build/test/iterate on custom RDNA2 kernels. Problem solved! It worked out way better than I expected. I thought maybe I'd hit 1000 t/s prefill with QFN at best, but this is something like 800% faster than llama.cpp was managing. Couldn't be happier with the results! GPU sale plan canceled lol. I'm going to have it continue optimizing and see how it goes, and make sure DeepSeek and GLM-5.3-Flash work as well. llama-benchy results below with concurrency = 1 and vLLM running with PP=4 (no tensor parallel here) with orcarouter's uncensored QFN which I quantized. Routed experts are W4A16 and everything else remains at BF16. MTP enabled with 3 token drafting. It gets 40 to 50 t/s decode with MTP disabled. https://preview.redd.it/4223w82yz9uh1.png?width=666&format=png&auto=webp&s=a15e5d1f5664fcb894a746a54a501eb8f6637a57 submitted by /u/TheWolfOfWalmart
[link] [comments]
---|--- -
π The Pragmatic Engineer The Pulse: Firebaseβs global outage & poor response rss
Hi, this is Gergely with a bonus, free issue of the Pragmatic Engineer Newsletter. In every issue, I cover Big Tech and startups through the lens of senior engineers and engineering leaders. Today, we cover one out of four topics from last week 's issue of The Pulse . Full subscribers received the article below seven days ago. If you 've been forwarded this email, you can subscribe here .
Firebase - built by Google - has had a nasty outage this week with shockingly poor incident management at odds with how Google itself usually deals with high-severity incidents.
The outage started on Tuesday (29 Sep) at 5:41pm (PDT), when iOS apps using the Firebase SDK started to crash upon first opening; every iOS app that uses the Firebase SDK with analytics enabled was affected in this way. Developers of affected apps opened a GitHub ticket, in the absence of much else to do. On the ticket, the message "it's crashing for me too!" was oft- repeated.
Devs
reporting their apps crashing.
Source:GitHub6:51pm (PDT): acknowledgement. An hour and ten minutes after the crashes started, an engineer on the Firebase team acknowledged that they were aware of the outage.
Just
over an hour into the incident, the Firebase team became aware of the outage.
Source:GitHubIt's unclear if the Firebase team was alerted via this ticket with 100+ comments by devs, or if Google's own monitoring tool showed the issue. I asked Google/Firebase two days ago and haven 't had a response.
Not having anything better to do than wait for Google to resolve the issue, the memes began:
Memes
while
waiting
More memesOthers attempted to help the Firebase team by pinpointing the potential issue. Indeed, before a Google engineer acknowledged the incident, an external developer found the root cause at 6:37pm PDT; it was a zero-length entry that was crashing the SDK:

Given the flags are shipped by the backend, the offending change was a backend one, and the easiest resolution would be to roll it back, which the community practically begged Google to do:
Frustrating:
Understanding the problem and how to solve it, but nothing to do but post.
Source:GitHubHere's a neat summary of the incident from another dev:
Summarizing
the incident better than any Google dev ever did.
Source:GitHub7:24pm (PDT): rollback starting. An hour-and-a-half into the incident, the Firebase team started rolling back the offending backend change:
Finally - the rollback started!
Source:GitHub8:16pm (PDT): rollback complete. And the rollback completed ~50 minutes later:
Rollback
complete, minus the caching problem.
Source:GitHubSoftware engineer, Nick Cooke, on the Firebase team posted a summary with more accurate timestamps:
Source:GitHubWhat we can deduce from this:
- TTD (time to detect): one hour? The Firebase team never shared how long it took them to detect that practically all iOS apps using Firebase had started to crash. On the GitHub ticket, they acknowledged the incident 70 minutes after it started. Update: in the postmortem, later published by the team, they wrote how the team was alerted 20 minutes after the rollout, via crash alerts and GitHub issues. Good question why it took another 50 minutes to acknowledge the issue, though?.
- TTM (time to mitigate): 2-6 hours. It took two hours and eleven minutes to roll out the fix, but due to caching (apps that had cached the incorrect server response served this cache for additional four hours, and so kept crashing for up to six hours.)
Incident management basics
The Firebase team itself closed the outage with a short report effectively saying that there had been an outage, but they'd resolved it now, so thanks for your patience and have a nice day.
This handling of a high-impact incident is absolutely not typical of Google, the company that coined the term 'Site Reliability Engineer' and wrote the SRE book.
For one, Firebase never bothered updating its status page. Oddly enough, the official Firebase status page showed all systems green - despite the acknowledgement of the outage. Indeed, during it and afterward, they didn't update the status page to indicate the lengthy outage:
A
global outage was never recorded on the status page.
Source:FirebaseBut status pages exist for good reasons, including:
- To communicate with customers during and after an outage
- Offer transparency on the stability of the service
It's worth asking: if an outage that takes down most (or all?) iOS apps using Firebase doesn't warrant an update to the status page, then what does!
Google published a postmortem four days later, answering questions on how the outage happened. On Friday, 2 October, Google published a postmortem on the Firebase blog. It was a configuration change that crashed so many iOS apps. From the postmortem:
"On September 28, 2026, a routine configuration cleanup unexpectedly caused a large number of iOS applications using the Google Analytics for Firebase (GA4F) SDK to crash.
2026β09β28 17:38 (PST): A stale, legacy configuration flag was cleaned up.
2026β09β28 17:41 (PST): The malformed configuration payload begins rolling out globally to production servers. Outage begins: Clients fetching the new payload start crashing on launch.The SDK missed validating that a flag's name was not nil, ultimately causing the crash. Backend data anomalies should not cause app-side crashes."
In the postmortem, Google noted that engineers were alerted to the outage through both GitHub reports coming from external developers, as well as their internal monitoring. It took another hour to pinpoint the cause being a legacy configuration flag cleanup.
Firebase says they have no way to update their status page for client-side outages. In the postmortem, Google explained that there is no place to indicate client-side outages on their dashboard (emphasis mine):
"Throughout the outage, both the Firebase and Google Ads status dashboards remained green. Because these dashboards rely primarily on server-side health metrics, they did not register client-side SDK crashes.
Commitment: Moving forward, we are actively working to: integrate SDK- related outage information into our status dashboards, streamline the manual update process, and improve GA4F status representation within the Firebase dashboard."
It's good to see Google not dropping the ball fully, and recognizing that both their dashboards and their incident management process need improvement.
It 's fair to ask though: why did only iOS crash, and not Android? Firebase's Android SDK seems to be hardened more than iOS, as the feature flag removal did not crash Android devices.
Especially that now, with AI, it's easier than ever to compare iOS and Android implementations to ensure they are identical - and it's what Shopify has been doing during their native rewrite - could it have been a missed opportunity for Google to audit the differences between the iOS and Android SDKs? To me, not having an action item here feels like a missed opportunity.
Still, this is a good reminder to anyone and everyone shipping iOS and Android apps: aim to harden them, and when possible, run tests with malformed payloads, then fix crashes those payloads cause.
D eja vu: the 2020 Facebook SDK crash
The last time there was a similar crash was in 2020, with Facebook.**** That May, apps such as Spotify, TikTok, Pinterest, and others also started to suddenly crash due to the Facebook SDK crashing all apps using it. Back then too, devs followed along on a GitHub ticket and they also found that bug: a value that should have been a dictionary but was a boolean:
What caused the 2020 Facebook
crash. Source:GitHubThen as now, there was banter by devs being made to wait for a fix:
One
of the memes from the 2020 crash.
Source:GitHubAnd requests to not move fast and break things any more:
A
plea for prioritizing reliability in the future.
Source:GitHubMaking light of the situation:
Apps
that did not initialize the SDK unconditionally upon startup should not have
crashed - but most did
Source:GitHubAnd also anticipating the resolution:
Some
more memes on the GitHub issueIn the end, Facebook reverted the backend change, but shared even less than the bare minimum details from Google this time. This is all we know about that 2020 outage that was arguably more wide-ranging than the Firebase one:
All
that Facebook shared about their global
outageI wonder if some people think that public-facing incident management is no longer important or valuable, even for developer-facing products. I'm not shocked that Facebook/Meta never bothered to communicate much about their outage because dev tools are not part of the DNA there.
But with Firebase, I am surprised that more than a week later, the postmortem is still not visible on the Firebase status page.
And maybe this is Google "shipping their org chart" playing out, live. The outage technically was caused by Google Analytics (who made the feature flag change), but is the responsibility of the Firebase SDK (whose iOS SDK was not hardened enough to deal with this new payload). The outage itself was buried inside a Google Ads dashboard (!!) which suggests that whatever team is seen responsible for the outage is inside the Google Ads organization.
In the end, despite the Firebase team committing to "improving status dashboard latency and coverage," last week, those teams are in no hurry to carry out this work. AI agents might be making lots of work more efficient, but following up on action items seems to move at the same snail pace at Google, as it did pre-AI!
Read the full issue of The Pulse this is from, or check out this week 's The Pulse. This week's issue covers:
- New trend: building internal vibe-coding platforms at mid-sized companies. Ramp and Stripe built platforms for non-engineers to build internal websites and tools with, and both are taking off in those workplaces. I expect more companies to do the same.
- Do us engineers really enjoy hard problems? Or do we actually like pattern-matching with backend problems? A provocative post by Cloudflare engineer, Sunil Pai, suggests there are other motives.
- New open models launch in the EU and US. Kolibri, Mistral Large 4, and Beam by Reflection could challenge China's dominance in open weight models.
- Industry Pulse. Why Figma doesn't let any agent use its MCP server; Google Cloud adds Swift support on the server side, Anthropic's two-week sprint to speed up Claude Code, Coinbase dumps React Native shortly after Shopify announces doing so, Claude Opus 5.5 formats the C: drive, and more.
-
π smol-machines/smolvm smolvm v1.25.1 release
What's Changed
- Mount a machine's shared pack layers read-only by @BinSquare in #1613
- Bump version to 1.25.1 by @BinSquare in #1614
Full Changelog :
v1.25.0...v1.25.1 -
π exe.dev An Agent Over Your Shoulder rss
The other day I was doing some ops work, live migrating some VMs from one physical host to another, as we sometimes need to do. This process is nearly transparent (except a pause) to our users, but I wanted an extra set of βattention headsβ on it, so I built shoulder (as in βlook over your shoulder.β)
With shoulder, you start a terminal and run shoulder, which runs bash inside of it, but not before offering a bunch of ways to connect to it. If your agent is local, you can connect locally, but you can connect from anywhere with tailcat. The agent can see and control your terminal, which makes it good enough to read your logs and highlight something you may have missed.
Or you can be silly and have Luna play Tetris poorly. That works too.
Your browser does not support the video tag.
My first iteration here had a TUI with a split screen, with the agent on one half and the terminal in the other, much like a custom
tmuxlayout. I tried it and I hated it: my preferred agent is one thing (it happens to be Shelley in a web browser) and my preferred terminal is another (it happens to be Ghostty), and itβs much better to bridge the two! -
π @malcat@infosec.exchange If like me you're curious how well mastodon
-
π MetaBrainz Picard 3.0.1 released rss
Picard 3.0.1 is a maintenance release for the recently released Picard 3.0 with fixes for reported issues and updated translations. In particular this release fixes issues on newer macOS Tahoe and Golden Gate, a possible crash when updating from Picard 2.x and the
picard-cliutility in the Windows package.The latest release is available for download on the Picard download page.
The detailed changes for this maintenance release are below. For an overview of the new features since Picard 2.13 please see our detailed release announcement for Picard 3.0.
Thanks a lot to everyone who gave feedback and reported issues.
Whatβs new?
Bugfixes
- [PICARD-2509] - macOS: No check marks in Options menu in languages other than English
- [PICARD-3411] - macOS: Checkboxes not displaying properly in plugin list and profile settings
- [PICARD-3475] - Windows Store release blocked by "unvirtualizedResources" capability
- [PICARD-3478] - picard-cli crashes with ModuleNotFoundError: No module named 'picard.cli.completions' in packaged builds
- [PICARD-3480] - Picard won't launch after upgrade from v2 with error in config migration
Download
Picard 3.0.1 is available for download from the download page of the Picard website. For Windows 10 and 11 users installing from the Microsoft Store the update to Picard 3.0.1 is now available and can be installed from the Microsoft Store app. Linux users can get the latest Snap package. The Linux Flatpak package is maintained separately and will be updated soon.
Picard is free software and the source code is available on GitHub.
Get in touch
Please use the MetaBrainz community forums and the ticket system to give feedback, suggest new features or report bugs.
Acknowledgements
Code contributions by Philipp Wolfer and Laurent Monin.
Translations were updated by "ApeKattQuest, MonkeyPython" (Norwegian BokmΓ₯l), scientists360 (Chinese (Simplified Han script)) and Philipp Wolfer (German). -
π r/LocalLLaMA Last week some of South Korea's biggest banks were hit by a cyberattack. We now know the entire hack may have been done by a single person. He used a combined stack of an open-source AI penetration tool named ARTEX, DeepSeek v4.1-Flash, GLM-5.3, Grok 4.6, and Claude Code (CrowdStrike) rss
| CrowdStrike report: https://www.crowdstrike.com/en-us/blog/unknown-threat-actor-uses-artex-to-target-south-korean-finance/ From:
Andrew Curran on π: https://x.com/AndrewCurran_/status/2108108695876092323 Jukan βοΈOCP 2026 on π: https://x.com/jukan05/status/2108110513033093369 submitted by /u/Nunki08
[link] [comments]
---|--- -
π Stephen Diehl We Live in the Dependently Typed Future Now rss
We Live in the Dependently Typed Future Now
In the thirty-four days between the fourth of September and the seventh of October, the following things happened. Claude formalized Fermat's Last Theorem in Lean. OpenAI announced a finite-time blowup for the Navier-Stokes equations, found by ten thousand agents in eighty-eight hours, with a Lean formalization attached. A model proved Khot's Unique Games Conjecture. Another multiplied two integers faster than \(n \log n\), with an exponent improvement of \(2^{-182}\) (so maybe don't expect it in GMP anytime soon!). The rational Hodge conjecture fell for CM abelian varieties. Then OpenAI dumped 372 new maths results on GitHub on a Tuesday. And it's only been a month. The question everyone is asking now is how long until the Generalized Riemann Hypothesis folds to the swirling pool of tensors?
Sixteen months ago I wrote that the future of maths may be deeply weird, and then, welp, just like that we're here now in that weird future. And it's f'ing awesome.
Somewhere in a data centre there is now, more or less permanently, a building full of accelerators working the truth mines at the frontier of mathematics, just like in Greg Egan's sci-fi novel Diaspora, tunnelling outward from the three axioms
propext,Quot.sound, andClassical.choice, and hauling results back to the surface around the clock. OpenAI posed its model roughly eight thousand problems (and solved about 5% of them) at an average of three hours of thinking each, and that is the slow, artisanal, normie-friendly version. The industrial version doesn't stop. It will produce results faster than any human community can read them, many of them correct, some of them important, and a growing fraction of them inscrutable. True (for some twisted philosophical definition of truth), machine-checked, and understood by no one. Human understanding of mathematics is about to become a luxury good. Whatever else this world needs, it needs something that can tell the true results from the confabulated ones at the rate the models produce them, and right now that something is dependent types, namely Lean.Let me dwell for a moment on how strange it is that this is the shape the future took. I spent a good portion of my twenties around the London FP community, where dependent types were the thing we talked about over pints at the Crown Tavern in Clerkenwell (some of you will remember). Types that could depend on values, so that a function's signature could say not merely "returns a list" but "returns a sorted permutation of its input," and the compiler would hold you to it. Curry-Howard, the observation that proofs are programs and propositions are types, was the foundational north star. The pitch was always that one day we would write software against specifications and the machine would check them, and the reply was always that this was a lovely idea for people with tenure and no deadlines. Dependent Haskell has been "a few years away" for about fifteen years. Idris and Agda remained boutique. Software engineering still mostly runs on C++, prayer, and the occasional dark incantation. And then the dependently typed future arrived anyway, through the back door.
Mathematics and reinforcement learning got there first. It turns out the killer application for a dependently typed language was using its typechecker as a reward function. A type checker is an oracle that says yes or no to a candidate proof with no partial credit and no opinions, and that is precisely what you need when you want to point a very large optimiser at an open problem and let 'er rip. The thing we dreamed about at the pub is now critical infrastructure at frontier labs, and most of the results above are, in the end, claims that a type checker returned true.
Which is why we need better tooling, and we need it ASAP. The dependent type renaissance is here and the golden age of formalized mathematics is upon us, but the inner loops of these data centres now run dependent type kernels day in and day out, elaborating, checking, discarding, and retrying at breakneck speed, and the thing that certifies their output should run at the same speed. If the search runs at microseconds and the verification runs at minutes, the verification becomes the bottleneck, and bottlenecks in trust have a way of being quietly skipped. We should not be in a position where the most important epistemic question of the decade, "is this proof actually correct," is answered by whichever checker happened to be fast enough to keep up.
Breaking the Mathlib Minute Barrier
Just like the four-minute mile, which went from physiological impossibility to something club runners now train for, formal mathematics has had its own barrier for a while, which is type-checking all of Mathlib from scratch in under a minute. That now turns out to be quite tractable.
nano-lean is a minimal, but complete, type checker for the Lean kernel language, written in Rust on top of my unbound binding library for doing efficient de Bruijn indices for binders. It reads an export of a Lean environment and independently re-checks every declaration from scratch (inductive types, positivity, recursors, quotients, universe levels, projections, structure eta, all of it). It checks all of Mathlib, 718,577 declarations, with zero errors and zero timeouts in 11.85 seconds on an Apple Silicon M5 Max.
A surprising amount of that speed comes from not parsing text. The standard way to get declarations out of Lean is
lean4export, which writes one JSON object per line, and parsing gigabytes of JSON turns out to be a large share of the cost of checking anything. So nano-lean's companion tool olean-export reads the compiled.oleanfiles directly, decoding modules in parallel, about a hundred times faster thanlean4exporton a Mathlib-dependent library, and it can emit blean, a new binary format designed for fast mmapping. Blean is the same record stream as the NDJSON export, in the same order, with nothing left to parse. Every record is a compact postcard encoding, ids are implicit and dense, records only refer to earlier ids, and each expression carries its precomputed hash. The checker mmaps the whole file, tells the operating system it will be read once front to back, and decodes names, levels, and expressions straight off the mapped bytes into its term arena. There is no parsing step at all. The bytes on disk are already very nearly the shape of the data in memory, which is how you check Mathlib in under a minute.The same trick works on the frontier results too. Here is nano-lean checking the full imported environment of each library and proof on an M5 Max with fourteen threads.
Mathlib NavierβStokes CSLib Quasi-Riemann ErdΕs AP Wall time 11.85 s 17.13 s 4.42 s 3.66 s 23.33 s Kernel check 7.55 s 12.11 s 2.75 s 2.58 s 19.11 s Instructions 742.3 G 977.0 G 300.8 G 236.4 G 837.9 G Cycles 352.7 G 471.3 G 136.6 G 122.6 G 550.0 G Peak memory footprint 10.7 GB 12.29 GB 6.92 GB 7.42 GB 26.42 GB Divide Mathlib's kernel time by the declaration count and you get an amortised ten and a half microseconds per declaration. That is the number that matters, because it is the right order of magnitude for a checker that lives deep inside an RL-driven search loop, where it gets called hundreds of billions of times, instead of sitting at the end of a release pipeline. The entire library of human-formalized mathematics, the product of a decade of volunteer effort, is re-verified in less time than it takes to make an espresso.
I also happened to have an
m2-ultramem-416lying around on Google Cloud (416 vCPUs and 12 TB of RAM, as one does), so naturally I pointed nano-lean at it. Yes, it breaks the two-second Mathlib barrier. But Amdahl's law sends its regards, and the curve flattens out hard somewhere past a hundred cores, as the dependency graph runs out of independent work to hand out. Mathlib, it turns out, is too small. I look forward to the day a future Mathlib, or something like Tau Ceti, grows big enough to actually saturate this machine. That's the real future!I wrote it to make a point about where the bottleneck has moved. The kernel is now the hot loop of a new kind of scientific economy, and hot loops deserve to be engineered like hot loops. The whole bargain of formal proof is an asymmetry. Finding a proof can take three hours of frontier-model thinking, or eighty-eight hours of ten thousand agents, but checking it should take microseconds. That asymmetry is what makes it reasonable to trust a result no human has read. It only holds if the checker actually scales, and with Fermat's Last Theorem now weighing in at five times the size of Mathlib, scale is no longer a hypothetical. Mathlib is the small library now.
Caveat emptor, though. nano-lean is a proof of concept, built to show that it can be done with the right amount of low-level Rust-fu. That said, we do use it internally at OneChronos to check our larger Lean proofs of market infrastructure, which have grown quite excessive. It is nowhere near as trustworthy as the official Lean kernel, which has years of scrutiny, a community of experts, and every Mathlib build ever run behind it, and which takes around fifteen minutes to check the same library. The claim is narrower and, I think, more interesting. Checking at this speed is totally possible, so we should stop treating minutes as the natural cost of trust and start building checkers that are both fast and trustworthy. A future version of the Lean compiler could be as blazing fast as rustc or clang.
The Shape of the Future
In my previous post last year I predicted that mathematicians would come to look more like software engineers working through pull requests on GitHub than like Andrew Wiles toiling in his attic. The largest single release of new mathematics in history shipped as a GitHub repository, with a
CONTENTS.md, a Lean library, alean-toolchainfile pinned tov4.34.1, and a promise that "corrections and revisions will be recorded as new versions." So, yup, that happened.I predicted that an AI system would be unleashed on a list of formalized open conjectures in an attempt to systematically push the frontier. Eight thousand problems, three hours each. Check.
I predicted a data centre tasked with the Riemann hypothesis that would come back after weeks with a proof no human could follow. What we got was the quasi-Riemann hypothesis, every Dirichlet \(L\)-function zero-free in \(\Re s > 7/8\), with a Lean page, which is the sort of near miss that would be funny if it weren't so unnerving. And the inscrutability has arrived on schedule. OpenAI released "reasoning summaries" for ten families, which turn out to be summaries of excerpts of reasoning traces, two removes from anything the model actually did.
I joked that the million-dollar Millennium Prize might cover a hundredth of your GPU bill. The Navier-Stokes run reportedly consumed around 130 billion tokens. So definitely yes.
What I got wrong was the timing. Last year I wrote "we're not there yet. Not even close." It was sixteen months. I probably got the chess analogy wrong too. I argued that, as with Stockfish and chess, machines would make mathematics more popular and more accessible rather than less. Maybe in the long run. In the short run the mood among working mathematicians is closer to existential crisis, and the open questions are about career pipelines, PhD students getting scooped by a press release, and the concentration of the most powerful mathematical instrument ever built inside a handful of private companies running unreleased models.
What I missed entirely is that the bottleneck would turn out to be plumbing. I spent paragraphs on GΓΆdel and the epistemology of inscrutable proofs, and the actual first-order problem is that the OpenAI Lean library is over a gigabyte of source across tens of thousands of files, and their README has a section warning that building it may fail because Linux's
vm.max_map_countis too low, with a suggested workaround of recompiling Lean with-DMMAP=OFF. The philosophy is still there. But the frontier of mathematics is currently being held up by a kernel tunable. Which isn't the future we wanted, but maybe it's the future we deserve!Who Checks the Checkers
The obvious objection to everything I've said so far is that a Lean proof is only as trustworthy as Lean. And that's very true!
Lean, like every proof assistant, has a small trusted kernel and a very large untrusted everything else (the elaborator, the tactic framework, the compiler, the build system). The design is sound. The only code that has to be correct is the kernel, which is small enough to read. But "small enough to read" describes the source code. It guarantees nothing about correctness, and Lean's kernel has had soundness bugs before, as has every kernel of every proof assistant in history. Historically that was tolerable, because the adversary was a starving human grad student who wanted their proof to go through and had no interest in hunting for a way to make
Falsetypecheck. That assumption is now obsolete.I wrote last month about reward hacking, the habit optimisers have of satisfying the letter of an objective rather than its intent. An agent told to make a Lean file compile, with enough compute and enough attempts, is an extremely diligent fuzzer pointed at your kernel. It needn't want to cheat. It only needs to stumble on a term that the checker accepts and shouldn't, once, and then the gradient does the rest. When the provers are adversarial optimisers, a single kernel is a single point of failure, and a soundness bug stops being an embarrassing GitHub issue and becomes a mechanism for manufacturing fake theorems at scale.
The answer is the same one the compiler world arrived at. When Csmith started generating random C programs and compiling them with several compilers to compare the results, it found hundreds of bugs in GCC and LLVM that decades of ordinary use had missed. Diversity plus differential testing beats any amount of careful review of a single implementation. For proof checking this means multiple independent kernels, written by different people in different languages with different representations, all consuming the same export format and all required to agree. Mario Carneiro's lean4lean and Chris Bailey's nanoda were early here. nano-lean ships a third tool,
nl-mutate, which takes a valid export, applies small semantics-breaking mutations to it, runs every available checker, and reports any disagreement, shrinking each one down to a minimal reproducing case. Every disagreement is either a bug in someone's kernel or a spec ambiguity in the type theory, and both are worth knowing about before a GPU farm finds them for you.The other half of trust is the statement. A perfectly checked proof of the wrong theorem is worthless, and the most effective way to cheat a proof checker has never been to break the kernel. It's to quietly weaken the statement until the thing being proved drifts away from the thing anyone cares about. OpenAI's repository leans on Comparator, which checks a submitted proof against a separately specified challenge statement inside a sandbox, precisely because this is where the real trust boundary now sits. Anyone who has watched a model grind away at a stubborn goal knows it has a nasty tendency to cheat in the most boring ways available. It will quietly introduce an
axiomthat happens to be exactly the lemma it needed, leave asorryburied three files deep, redefine a notation or macro so the statement on the page no longer means what it appears to mean, or reach fornative_decideand drag the whole compiler into the trusted base. The kernel stays perfectly sound through all of this, because these tricks route around it, and the only defence is to pin the statement down independently and check what the proof actually depends on. Someone has to formalize the conjecture, and someone has to check that the formalization means what the English means. That job will outlast every other part of the process. If anything, it is where human mathematical taste migrates to, away from writing proofs and towards writing and auditing specifications.If you want to see the seed of what this looks like as a way of working, look at Tau Ceti, a Lean library downstream of Mathlib. The division of labour is the whole point. Humans write the roadmaps, as markdown in a separate repository, and humans write the review rubrics. AIs write all the code, open the pull requests, and shepherd them through an AI-driven review process. The rubrics are explicitly adversarial, with instructions to hunt for mis-formalizations, vacuous statements, and "pushing around the lump in the carpet."
What Lean Needs Now
Lean is a superb piece of engineering. But it was designed around a particular user, a starving grad student typing tactics in Emacs, waiting for the infoview to update, building a library at the pace a community of volunteers can review pull requests. The user is now a swarm of agents writing thirteen million lines in eleven days. The tooling has to grow up for its new authors, and the list of what that means is fairly concrete.
A surface formatter. Lean still has no canonical, widely adopted formatter in the spirit of
rustfmtorgofmt, and when your authors are agents producing millions of lines, every one of them invents its own indentation, line breaking, and tactic layout. Diffs fill with noise, reviews get harder, and deduplication across agents misses proofs that differ only in whitespace. This is a surprisingly hard problem, because Lean has grown into a very large language. Its grammar is extensible at runtime, so notation, macros, and entire tactic languages declared in imported files change how later files parse. A formatter cannot just read a fixed grammar. It has to load the environment, run the real parser with every syntax extension in scope, and then pretty-print a syntax tree whose shape depends on user-defined notation, all while round-tripping comments and never changing what the code means. It is a genuinely difficult piece of engineering, and it is now table stakes.A stable, specified export format as a public interface. Independent kernels are only possible if there is a well-defined way to get declarations out of Lean without linking against the C++ runtime and reading the oleans by hand. Tools like
lean4exportand olean-export already produce NDJSON, and blean shows that a binary form of the same stream, designed to be memory-mapped, can make the export nearly free. OpenAI's own verification instructions depend onlean4export. That format should be treated with the seriousness of a wire protocol. Versioned, documented, specified down to the hashing of expressions, and stable across toolchain releases. The export format is the boundary across which trust is established. It deserves a spec.Independent checking as a first-class citizen. Running a second kernel should be as normal as running the linter. Mathlib CI, the Comparator workflow, and any lab publishing formal results should re-check exports with at least two unrelated kernels and refuse to bless anything they disagree on. This is cheap, now that checking all of Mathlib costs less than a minute.
Checkers as libraries, not just executables. The inner loop of a proving agent wants to submit a single candidate declaration and get a verdict back in microseconds, against an environment that is already loaded and hot. Process startup, re-reading oleans, and re-deserializing a few gigabytes of environment are costs that never mattered when a human hit save once a minute. They dominate when a search procedure checks a million candidates an hour. The kernel should be embeddable, with a persistent environment, incremental addition of declarations, and an API that a search harness can call in a tight loop.
Memory and scale. Mathlib needs several gigabytes of memory to check. The FLT formalization is five times bigger, and OpenAI's library is already knocking over Linux virtual memory limits. Lean mmaps every imported module, which is a reasonable design for a library of thousands of files and an unreasonable one for hundreds of thousands. Term sharing, hash-consing across modules, compact on-disk representations, and lazy loading of exactly the declarations a proof depends on are the boring, unglamorous engineering problems that decide whether formal mathematics scales to the next order of magnitude.
Elaboration is the real cost. The kernel is the fast part. The expensive part of building Mathlib from source is the elaborator, with its unification, typeclass resolution,
simp,omega,decide, and the long tail of tactics. A cold build is still measured in CPU-hours, and a mining operation that elaborates candidate proofs at scale pays that cost over and over. Parallel and incremental elaboration, better caching of typeclass instances, and profiling tools that can tell you why a singlesimpcall took four seconds are where most of the wall-clock time in a proving loop actually goes.Clippy-style linters. Mathlib already has a good set of linters, but agents need something closer to Rust's
clippy, a large, opinionated catalogue of lints aimed at the specific ways machine-written Lean goes wrong. Flag the strayaxiom, the buriedsorry, the unnecessarynative_decide, the forty-linesimp onlythat should be a lemma, the theorem whose hypotheses are contradictory and therefore vacuously true, the local notation that shadows something standard, the copy-pasted proof that duplicates one already in the library. Each lint should be cheap, machine-readable, and come with a suggested fix, because the consumer is a search loop that will act on every warning, where a human would skim them. Linters are how you encode taste at scale, and taste is the thing agents most conspicuously lack.Search at machine scale. Moogle, Loogle, and LeanSearch were built to help humans find the lemma they half remember. Agents need the same thing but at a scale where the library grows by millions of lines a week, and where most of what's in it was written by other agents and has never been looked at by a person. The Prove2Me platform Anthropic used for FLT keeps a DAG of theorem statements with natural-language descriptions precisely so that agents can find and reuse each other's work. That idea, a living, searchable index of everything proved so far, needs to become shared infrastructure instead of something each lab rebuilds privately.
Provenance. The current generation of models is notoriously bad at citing the literature for the techniques it uses. A proof term knows exactly which lemmas it depends on but nothing about where its ideas came from. If machine-generated mathematics is going to be integrated into the human literature rather than sitting beside it like an unread appendix, proofs need to carry their history (which model, which run, which prior results, which human-written papers the argument leans on).
None of this is terribly exotic. It's the kind of infrastructure that every other field which industrialised went through. Compilers got test suites and multiple implementations, network protocols got RFCs, databases got formal isolation levels and Jepsen. Proof assistants are the newest member of that club, and they are being industrialised faster than anything before them. If I were a young, ambitious programmer, this is where I would be focusing my early career for the highest return on investment.
Curry-Howard for the Real World
The dependently typed future I was promised at the pub was one where software would be written against specifications and machines would check that it met them. What we actually got is stranger. The specifications are theorem statements, the software is proof terms, the authors are swarms of agents, and the thing being built is the frontier of mathematics itself. Curry-Howard turned out to be industrial infrastructure after all. It just took reinforcement learning to get us there.
And this is only the mathematical half of the story. The same machinery that just checked Fermat's Last Theorem will check anything you can state precisely, and the most obvious next customer is industrial software. I argued last month that software sucks because almost nothing we ship has a specification, let alone a proof. That excuse is evaporating. If an agent swarm can produce thirteen million lines of verified mathematics in under two weeks, we're not far from applying the same techniques in software engineering. The labs are mining mathematics first because it is the cleanest verifiable domain, with no messy real-world spec to negotiate. Software is next, and it will need all the same tooling, namely fast kernels, diverse checkers, honest statements, and infrastructure built for authors who never sleep.
So yes, the future of maths turned out to be deeply weird, and much sooner than I expected. The results are piling up faster than anyone can read them, and many of us will spend the rest of our careers trying to understand theorems that were proved before breakfast by something that cannot explain itself. I find that unsettling, and I also find it thrilling.
One final shameless plug. If you'd rather work on the frontier of mathematical formalization than read blog posts about it, OneChronos is hiring Formal Methods Engineers. We build institutional markets out of combinatorial auctions (descended from the Milgrom and Wilson 2020 Nobel Prize), which turn out to be precisely the right mathematical formulation for a world where traders are increasingly RL loops with very exotic expressive preferences. Our dark pool processes more than 1% of notional U.S. equity market volume, and we've already expanded into many other global asset classes. You'd be joining our new formal methods team, working alongside mathematicians and market structure experts, writing Rust and Lean. Dependent types, numerical optimisation, and Lean applied to moving hundreds of billions of dollars safely every day. If you're that kind of nerd, hit us up.
-
π smol-machines/smolvm smolvm v1.25.0 release
What's Changed
- Let embedded machines bind credentials the way the CLI's --credential does by @BinSquare in #1608
- Keep cache disks through machine run, pause and portable checkpoints by @BinSquare in #1609
- Keep smolvm's state on /workspace when the home is overlayfs, so a default install inside a smol machine can boot VMs by @BinSquare in #1610
- Record a symlink's archived owner for host-unpacked pack layers by @Bnjoroge1 in #1601
- Bump version to 1.25.0 by @BinSquare in #1611
Full Changelog :
v1.24.2...v1.25.0 -
π Console.dev newsletter TanStack Charts rss
SVG and Canvas charts.
What we like: SVG charts by default. Work directly with the points and marks so you can get low level, but still support labels, focus, tooltips, responsiveness. Compiles strict TypeScript. Completely customizable. D3-compatible. Lightweight (32kB) relative to other charting libraries.
What we dislike: Specific βgrammar of graphicsβ approach which delegates layout and rendering to the runtime. This results in superior charts, but is a particular approach you need to adopt.
-
π Console.dev newsletter Flet rss
Multi-platform apps in Python.
What we like: Framework for developing web, mobile, desktop apps using Python. Allows you to use Python libraries across platforms. Supports hot reload. Build command for publishing on web, iOS, Android, macOS, Linux, Windows. Handles auto update, storage, auth, accessibility.
What we dislike: Great for developers, but lacks a native feel for users of each platform.
-
π HexRaysSA/plugin-repository commits sync repo: +3 releases rss
sync repo: +3 releases ## New releases - [augur](https://github.com/0xdea/augur): 1.0.0 - [haruspex](https://github.com/0xdea/haruspex): 1.0.0 - [rhabdomancer](https://github.com/0xdea/rhabdomancer): 1.0.0 -
π Filip Filmar Doom on a RISC-V core written in TxHDL rss
Doom now runs on Vreteno, the RISC-V core written in TxHDL, on an Artix-7 FPGA board. The game draws into a framebuffer in DDR3 memory, the board shows it on HDMI, and the keys come over the serial line. This post shows what runs, how fast, and how the way TxHDL designs are built lets changes like this one go from a plan to the board quickly.
Figure 1: Freedoom's first level, rendered by the same Doom source as the board's, built for the host. The board draws the same frames into its DDR3 framebuffer. What runs on the board
The board is an Alinx AX7A200B with a Xilinx Artix-7 XC7A200T. The design on it is the TxHDL flagship system:
-
π Filip Filmar openxc7 or Vivado: Build Times and Results Measured rss
I built the same three designs with the open toolchain and with Vivado, through the same Bazel rules, and timed every build from cold and warm caches. Small designs build two to three times faster with the open tools. Sixteen RISC-V cores build faster with Vivado, and Vivado’s circuits use about half the logic. Setting up the measurements turned up five problems, three of them in my own rules.
What was compared
rules_openxc7andrules_vivadoshare one target interface:vivado_project,vivado_synthesisandvivado_place_and_route. The first runs Yosys, nextpnr-xilinx and Project X-Ray. The second runs Vivado 2025.2, which Bazel installs from the installer archive on first use. Switching a design between them changes oneloadline.
-
- October 07, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-10-07 rss
IDA Plugin Updates on 2026-10-07
New Releases:
- augur v1.0.0
- haruspex v1.0.0
- oh-my-pi v18.8.3
- oh-my-pi v18.8.2
- oh-my-pi v18.8.1
- oh-my-pi v18.8.0
- rhabdomancer v1.0.0
Activity:
- augur
- disrobe
- 151e06bd: ci(fixtures): add a jsobfu recipe over three levels
- c2e1641c: ci(fixtures): add proguard and yguard recipes
- 28526f9e: fix(xtask): route the dotnet push grader to the consolidated target
- fc3ebfae: fix(xtask): count only module-filtered tests in push grader lists
- dd6bec0d: ci(fixtures): build the bitmono inputs for net9
- ba7f117b: ci(fixtures): use bitmono preset names and plain digests
- dfcef116: ci(fixtures): hash directory inputs and resolve runtime references
- 8cf1b311: ci(fixtures): add confuserex, skidfuscator and bitmono recipes
- 4e947da7: fix(tool-process): refuse memory limits by name on macos
- 18299baf: fix(xtask): skip module-filtered tests when listing push graders
- haruspex
- headless_ida_9.4_claude_skill
- eb10a028: Merge branch 'main' of https://github.com/shefben/headless_ida_9.4_clβ¦
- beacb550: ## 4.0.0-ida9.4
- ida-domain
- 1acb26e2: Add license control methods (#128)
- ida-hcli
- 13b42b24: fix(plugin bundle): download bundle wheels with uv, without IDA
- 6220168a: test: restore a space dropped from an unrelated comment
- 46477b24: refactor(plugin search): take the install hint's host from the query
- 02ed142f: fix(plugin search): qualify the install hint for a colliding plugin name
- b5a09e06: refactor(plugin lint): pass lint result explicitly instead of a globaβ¦
- 295358f1: fix(plugin lint): exit nonzero when lint reports errors
- 2a6aedab: docs: reword ida-install-dir blank-value comment
- dea32066: fix: reject empty and relative ida-install-dir values (#400)
- e25e6b68: fix: run a Linux installer the user cannot make executable (#397)
- 833ca0dc: fix(license install): handle a missing IDA_DIR without a terminal
- 1e915bed: fix: report a missing IDA installation or idat in python doctor and eβ¦
- af4d7f44: fix(ida install): exit 1 when the install dir exists without IDA
- 402dda1c: remove docstring note about -debugtrace
- cb8b6ce3: fix(ida install): do not write the installer debug trace to the curreβ¦
- da228633: docs: show the output hcli plugin lint actually prints (#390)
- aad32dbb: docs: list all six .plugin.platforms values
- 2a71a6ec: docs: list all six platforms that bundle create -platform all selects
- 20e9ec77: fix(ida install): make -dry-run actions match the real install (#399)
- idamcp
- a0458798: Report the type of idapython_eval's result
- f7137458: Seed idapython_eval namespaces with ida_domain
- a5399fe7: Await non-coroutine results of idapython_eval
- bcf7cbe5: Mark the GUI server as started only after its thread starts
- 65ff3fd8: Free a crashed instance's quota slot when it is reopened
- f3a13118: Merge pull request #26 from doomedraven/p21-lock-liveness
- bdbffa2f: Don't kill a headless instance right after starting it
- oh-my-pi
- f84deef3: docs(fork): list patch 35 in AGENTS.md
- 44438c52: docs(fork): record patch 35 (lightweight mode)
- 938ed7e9: feat(cli): -lightweight zero-injection knowledge Q&A mode
- aed59ebd: docs(fork): record the v18.6.0 and v18.8.0 upgrades
- 4d0dcfa3: upgrade/v18.8.0: merge upstream v18.8.0 (via trial/v18.8.0)
- d47da844: test(ai): accept fork block-form user turns in compaction replay and β¦
- 0fa1ff11: fix(catalog): exempt fork patch compat fields from parity and align gβ¦
- 1f9c0ca7: fix(ai): guard compat.extraBetas union against rows without the key
- ffe3067e: Merge upstream v18.8.0 into the fork (trial)
- 8d9f3a63: v18.8.0 upstream source
- rhabdomancer
-
π smol-machines/smolvm smolvm v1.24.2 release
What's Changed
- Stop the serve shutdown tests only once the request is running by @BinSquare in #1604
- Report nested virtualization in /health by @BinSquare in #1605
- Trust a machine's credential CA when pulling images, and stop silently dropping credentials on ephemeral .smolmachine runs by @BinSquare in #1603
- Keep a machine without networking offline when it publishes a port, serving inbound connections only by @BinSquare in #1606
- Bump version to 1.24.2 by @BinSquare in #1607
Full Changelog :
v1.24.1...v1.24.2 -
π backnotprop/plannotator v0.28.8 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.7 | Ask this session keeps your drafts as drafts, image comments survive a reload, hostname check on every server
v0.28.6 | Ask AI names the lines you selected, reorder quick labels and edit their emoji, Pi fixed-port crash fixed, OpenCode 2 subagent notice fixed
v0.28.5 | Several files in one review, theplannotatortool on Pi and OpenCode 2, decisions name the exact file, Ask this session reconnects after sleep
v0.28.4 | Comments come back after the agent edits a file, the agent can list and close its reviews, PR-description feedback no longer dropped, Pi thinking levels
v0.28.3 | Typing into your agent while it answers an Ask no longer streams into Plannotator
v0.28.2 | Question cards show wrapped choices and tables, pinned images named by their file, Done with nothing to send starts no agent turn
v0.28.1 | Ask AI from diagram comments, pinned images named for the agent, OpenCode 1 URL toasts and one reply per feedback, folder feedback sent once
v0.28.0 | Ask this session in Claude Code, Pi and OpenCode 2, Claude Code mod on by default, Pi plan review no longer blocks, first-run demo
v0.27.25 | Code review works withcolor.diff = always, Bitbucket review fixes, wide tables no longer collapse in Firefox, install script fix
v0.27.24 | Image previews stay in the all-files view, PR comment previews open on the commented line
v0.27.23 | Bitbucket Cloud PR review, Question UI for answering agents in place, opt-in auto-update, viewed files remembered, review another repo or worktreeWhat's New in v0.28.8
This release brings the Plannotator Inbox (preview): one local window where your agents leave you messages, questions, files and guided reviews, and where your reply goes back to the session that asked.
The Plannotator Inbox (preview)
Agents often need you for one thing: a choice, a check, a look at a file. Until now that meant a review tab per question, or a question buried in the terminal. The Inbox collects all of it in one window on your machine:
- Threads by project. Each agent conversation is a row, grouped in sections: Stopped on you, Holding up work, Waiting on you, Sent, New since you looked, and Quiet. Filter by project in the sidebar.
- Questions you answer with a click. Agents ask with the same
:::questioncards plan review uses. Pick, add a note, press Send. - Files and annotations. Files an agent attached open beside the thread (markdown, text, HTML, Mermaid, Graphviz). Annotate them as in Plannotator; the annotations go with your reply. If the agent changed a file after sending it, the Inbox says so and can show the version it sent.
- Decisions. A question can record your answer as a project decision, listed on a Decisions page.
- Guided reviews. An agent can send a guided review of a code change into a thread.
- New message. Write to an agent session that is running now, without waiting for it to ask.
- Browser notifications while the tab is in the background, if you allow them.
Your reply wakes the agent that asked. Claude Code (with the Plannotator mod) gets a
plannotator_inboxtool, on by default. Pi and OpenCode 2 get the same tool, off by default because they send every tool's definition with each request: turn it on withPLANNOTATOR_INBOX_TOOL=1. Any other agent can connect through MCP withplannotator inbox mcp; the Inbox's Settings show the exact command for your agent.It is local only: it listens on
127.0.0.1, needs no account, and keeps everything under~/.plannotator/inbox. Start it with:plannotator inboxYou never have to keep it running: an agent starts it in the background when it needs it, without opening a tab.
plannotator uninstall --purgeremoves its data. Full reference: plannotator.ai/docs/reference/inbox.Additional Changes
- Question cards for host apps.
@plannotator/ui0.52.1 can show the "Records a decision" switch on any question and open a host's own decision card from it. Plannotator's own cards are unchanged (#1753).
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/pluginβ Installed β plannotator β Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- The Plannotator Inbox, built across #1745, #1752, #1755, #1756, #1757, #1758, #1759, #1760, #1761, #1763, #1764, #1766, #1767, #1768 and #1769 by @backnotprop
- ui: decision toggle on any question, and a separate opener for the host's decision card by @backnotprop in #1753
Full Changelog :
v0.28.7...v0.28.8 -
π jj-vcs/jj v0.46.0 release
About
jj is a Git-compatible version control system that is both simple and powerful. See
the installation instructions to get started.Release highlights
- Jujutsu can now colocate workspaces besides the default one by creating Git
worktrees. Usejj workspace add --[no-]colocateand the setting
git.colocateto control this.
Breaking changes
-
The minimum supported
gitcommand version is now 2.42.0, up from 2.41.0.
jj workspace addusesgit worktree add --orphan, which was added in
2.42.0. -
The minimum supported Rust version (MSRV) is now 1.97.1.
-
jj bisect runnow runs some consistency checks before proceeding to bisect.
This helps ensure that the command can tell good and bad revisions apart,
and that the working copy does go from bad to good over the provided revset.
Use the new flag--trust-endpointsto disable these checks. -
jj splitnow opens a single editor session to edit descriptions for the
split commits. -
jj undoandjj redonow refuse to undo/redo an operation that was
performed in another workspace. Use--allow-cross-workspaceto undo/redo
it anyway. -
jj workspace list/rootno longer omit unreachable paths. All recorded
paths are now shown, with warnings displayed injj workspace root. -
The
List.get(),.first(), and.last()template functions now return
Option<T>instead of throwing an error on out-of-bounds access.
New features
-
jj workspace addsupports--colocate/--no-colocateflags to control
whether a Git worktree is created alongside the workspace. The default
colocates when the current workspace is colocated and thegit.colocate
config istrue.jj workspace forgetremoves the corresponding Git
worktree when one exists. -
jj git colocation status/enable/disablenow work on child
workspaces.statuscorrectly reports colocation state and includes
the workspace name.enablecreates a Git worktree anddisable
removes it, allowing colocation to be toggled after workspace
creation. -
jj workspace removeremoves a workspace and its directory from disk. The
working-copy state is snapshotted into a commit before removal. -
Added commands
jj file editandjj file deletefor editing files in any
revision without needing to change the working copy. -
jj git pushnow supports pushing to multiple remotes at the same time.
This can be configured viagit.pushset to a string pattern
or array of string patterns, or with the repeatable--remoteflag,
which also accepts string patterns. -
The default target revisions for
jj git pushcan now be configured via
revsets.git-push. -
Added the
TreeEntry.normal_value()template method and theTreeValuetype
to access resolved tree values, formatted as their full object IDs, including
Git submodule commit IDs. -
Diff hunk headers now include nearby source symbols for many common
programming and markup languages. -
fix.tools.<name>.line-range-args(replacesline-range-arg) is an array of
string template args to pass to the fix tool. This is more flexible in cases
where you need to pass multiple arguments to the tool, such as separate args
for the range start and range end. -
jj runnow uses the sparse patterns from the workspace it's run from.
Use the--sparse-patternsoption to control this behavior (evaluated
per eachjj runinvocation). -
jj util diff <path1> <path2>to compare files on disk. -
Aliases now support setting
aliases.<name>.enabled = false, which will
disable them. This can be used to disable built-in aliases or disable aliases
in later layers (such as repo config files). -
ui.editornow supports$pathand$linesubstitution variables. Example:
ui.editor = ["emacs", "+$line", "$path"] -
filltemplate function now supports an additional named parameter
break_words, that allows specifying if the template should break words
longer thanwidthpassed in the input to ensure no words overflow the
specified width. -
The
json()template function now supports map literals:json({'key' => value}) -
The hunk headers of
diff.color-words.conflict = "pair"now include the
conflict labels of the compared terms.
Fixed bugs
-
On Windows,
jjno longer hangs when a subprocess needs to prompt the user,
such assshasking for a key passphrase or for confirmation of an unknown
host key. Subprocesses started from a terminal now inherit its console, rather
than being given an invisible one byCREATE_NO_WINDOWfor the prompt to
disappear into.
#6745
#8547 -
On Windows,
jj git colocation enableandjj git colocation disableno
longer fail with "Access is denied (os error 5)" when the Git repository
contains pack files.
#8661 -
jj undoofjj workspace forgetnow correctly preserves the workspace's
recorded path. Previously the path metadata was lost, leaving the workspace
in a broken state after undo.
#9991 -
at_operation()can now be used with operations that are not ancestors of
the current operation (e.g. sibling operations created by concurrent
commands). Previously, evaluating such expressions failed if they resolved
to commits missing from the current operation's index. -
.gitignorefiles are now respected even if they aren't materialized in the
working copy because they are excluded by the sparse patterns. Previously,
ignored files could become tracked in a sparse working copy.
#2289 -
In-tree ignore files (
.gitignore) are no longer read through symlinks,
matchinggitbehavior. Such files are now silently skipped instead of having
their symlink target applied.$GIT_DIR/info/excludeandcore.excludesFile
are unaffected and still follow symlinks, asgitdoes.
#7161 -
jj workspace listtemplates are now labeled withworkspace name,
workspace root, etc.
Contributors
Thanks to the people who made this release happen!
- Aaron Bies (@slerpyyy)
- Austin Seipp (@thoughtpolice)
- Bartok9 (@Bartok9)
- Brice Figureau (@masterzen)
- Bryan O'Sullivan (@bos)
- Caleb White (@calebdw)
- David Rieber (@drieber)
- Farid Zakaria (@fzakaria)
- Gabriel Goller (@kaffarell)
- Gasper Stukelj (@mirkomartn)
- Jakub Stasiak (@jstasiak)
- JamBalaya56562 (@JamBalaya56562)
- Joseph Lou (@josephlou5)
- Karnajeet Gosavi (@kg290)
- LOG (@logarithmone1128)
- Martin von Zweigbergk (@martinvonz)
- Matt Stark (@matts1)
- Mustafa Officewala (@genericusername2709)
- pederbe (@pederbe)
- Philip Metzger (@PhilipMetzger)
- Pro (@twistedfall)
- Remo Senekowitsch (@senekor)
- Sami Hiltunen (@SamiHiltunen)
- sofia (@badp)
- Stephen Jennings (@jennings)
- Vincent Ging Ho Yim (@cenviity)
- xtqqczze (@xtqqczze)
- Yannik Sander (@ysndr)
- Yuya Nishihara (@yuja)
- Jujutsu can now colocate workspaces besides the default one by creating Git
-
π smol-machines/smolvm smolvm v1.24.1 release
What's Changed
- Bump the Nix package to 1.24.0 by @BinSquare in #1592
- Cache disks: a shared read-only base under each machine's own copy-on-write layer by @BinSquare in #1594
- Let the newest package publish replace an older one instead of queueing behind it by @BinSquare in #1593
- Ride out saturated worker disks, add deferred disk durability, and attach and publish cache disks over the API by @BinSquare in #1596
- Send console logs a read at a time instead of a write per line, read a full log to its end, and update h2 to 0.4.20 by @BinSquare in #1597
- Checkpoint a restored machine as a delta of the checkpoint it was restored from by @BinSquare in #1562
- Export the agent rootfs and packed layers read-only by @JanPokorny in #1599
- Branch concurrent requests from a running source in one batch by @BinSquare in #1600
- Bump version to 1.24.1 by @BinSquare in #1598
New Contributors
- @JanPokorny made their first contribution in #1599
Full Changelog :
v1.24.0...v1.24.1 -
π Simon Willison Claude Haiku 5.5 rss
As previously promised, here's Anthropic's new fast, low cost model: Introducing Claude Haiku 5.5.
The previous Haiku, 4.5, was very much showing its age. It came out almost a year ago, and was priced at $1/million input and $5/million output - relatively expensive even back then, and a full 10x the price of OpenAI's GPT-6 Luna, released last month.
The new Haiku exactly matches the price of GPT-6 Luna - $0.10/$0.50 - up to 100,000 tokens. Beyond 100,000 tokens the price increases 5x to $0.50/$2.50. Luna itself has a price increase at 272,000 tokens but only to $0.20/$0.75.
Haiku 5.5 also uses a new, less generous tokenizer. My Claude Token Counter tool shows that the same long prompt uses around 1.25x as many tokens with Haiku 5.5 compared to Haiku 4.5, so there's a hidden price increase there.
If your workloads fit in 100,000 tokens, Haiku is the same price as Luna and reports higher benchmark scores. Above 100,000 tokens, Luna looks like a much better deal.
The most recent release of llm-anthropic finally fixed it so I don't need to ship a new version of that plugin for every new model. I tested the new model like this:
llm install -U llm-anthropic llm anthropic refresh llm -m claude-haiku-5.5 "Generate an SVG of a pelican riding a bicycle" -o thinking_effort lowPelicans
Here are pelicans for low, medium, high, xhigh, and max. The new Haiku doesn't let you disable reasoning, and defaults to
medium. I got a good bicycle frame for everything beyondlow. The low effort pelican cost 0.0936 cents and took 7 seconds.This
maxeffort pelican (with a reasoning trace that starts "This is the classic pelican-on-bicycle SVG test...") took 5 minutes 9 seconds to generate, but still only cost me 3.3826 cents:
(Since the reasoning trace exhibits awareness of the benchmark, here's Generate an SVG of an armadillo in fishnet tights jaywalking on Mars (on xhigh), and the same prompt against some other recent models. Background on that.)
For comparison, here's the pelican I got a year ago from Haiku 4.5 (for 0.7583 cents - Haiku 4.5 did not support reasoning levels). It sucked at drawing pelicans:

And a generous API credit scheme for subscribers
In addition to Haiku 5.5, Anthropic announced today that they are halving the price of cache reads for Sonnet 5.5. They've also added API credits to subscription plans:
Second, this week, weβll roll out a new monthly API credit to all Max and Team subscribers for use on the Claude Platform. Max 5x users will get $100 in credits per month, Max 20x users will get $200, and Team subscribers will receive up to $500, pooled across their users.
Claiming this is pleasantly easy: navigate to Settings -> Billing and select the API organization that should benefit from the credits every month:

The API credits exactly match the cost of the subscription itself. This is really generous - it makes it much easier for subscribers to use the API. Anthropic also let you disable auto-reload for the API, with the consequence that "API requests will stop when your balance runs out" - exactly what you want if you're planning to burn through those API credits without risk of a nasty billing surprise.
Note that the monthly credits do not roll over - use them or lose them.
OpenAI still allow you to use your Codex subscription for personal API use, which works out as a better deal for heavy API users. This new credit scheme goes at least some way to overcoming that difference.
You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.
-
π r/LocalLLaMA llama.cpp on the stage rss
| https://x.com/ggerganov/status/2107908265032229261 submitted by /u/jacek2023
[link] [comments]
---|--- -
π r/LocalLLaMA llama : add a GPU cache for MoE experts kept in host memory by am17an Β· Pull Request #29887 Β· ggml-org/llama.cpp rss
| Potentially big speedup for MoE models that donβt fully fit in VRAM. Are you GPU Poor? Show your speedups ;) update https://github.com/ggml-org/llama.cpp/pull/30112 MERGED submitted by /u/jacek2023
[link] [comments]
---|--- -
π exe.dev Crossing the Hyper-Thread Boundary rss
Modern processors have multiple CPU cores, and the physical CPU cores in turn have two logical CPU cores. The latter permit the physical core to run two independent programs simultaneously, an approach known as hyper- threading. Hyper-threading uses CPU resources more efficiently, but it exposes transient execution vulnerabilities, in which a program running on one hyper-thread is able to extract data from the program running on the other hyper-thread. An example of such an attack is MDS.
exe.dev runs virtual machines on behalf of different users. We need to protect against the possibility of one user exploiting a vulnerability to extract data from another user running on a different hyper- thread of the same CPU core. Fortunately the Linux kernel supports core scheduling cookies to control which processes are permitted to share a CPU core.
It is straightforward to give each VM an independent cookie, meaning that two different VMs never run on the same CPU core. However, in practice this leads to measurably inefficient use of physical CPU cores. So we instead implemented a more efficient, but still secure, mechanism: the VMs of each team use an independent cookie. This means that two different VMs from a different team (or from a different user for users not on teams) never run on the same CPU core. To put it another way, we assume that different members of the same team trust each other.
Of course, for various reasons, some teams do not have trust among all their VMs. An admin of those teams can run
ssh exe.dev team settings core-sharing offto prevent their VMs from sharing CPU cores. (Currently VMs that do not belong to a team never share cores with other VMs, even VMs from the same user; if that changes someday we will introduce a similar setting for individuals.) -
π backnotprop/plannotator v0.28.7 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.6 | Ask AI names the lines you selected, reorder quick labels and edit their emoji, Pi fixed-port crash fixed, OpenCode 2 subagent notice fixed
v0.28.5 | Several files in one review, theplannotatortool on Pi and OpenCode 2, decisions name the exact file, Ask this session reconnects after sleep
v0.28.4 | Comments come back after the agent edits a file, the agent can list and close its reviews, PR-description feedback no longer dropped, Pi thinking levels
v0.28.3 | Typing into your agent while it answers an Ask no longer streams into Plannotator
v0.28.2 | Question cards show wrapped choices and tables, pinned images named by their file, Done with nothing to send starts no agent turn
v0.28.1 | Ask AI from diagram comments, pinned images named for the agent, OpenCode 1 URL toasts and one reply per feedback, folder feedback sent once
v0.28.0 | Ask this session in Claude Code, Pi and OpenCode 2, Claude Code mod on by default, Pi plan review no longer blocks, first-run demo
v0.27.25 | Code review works withcolor.diff = always, Bitbucket review fixes, wide tables no longer collapse in Firefox, install script fix
v0.27.24 | Image previews stay in the all-files view, PR comment previews open on the commented line
v0.27.23 | Bitbucket Cloud PR review, Question UI for answering agents in place, opt-in auto-update, viewed files remembered, review another repo or worktree
v0.27.22 | Plans open the docs they link to, Claude review jobs locked down, Code Tour on Linux without Claude's sandbox, Pi reviews the latest planWhat's New in v0.28.7
Seven PRs, two from community contributors, one of them a first-time contributor. The main fix stops Ask this session from handing your unsubmitted comments to the agent as instructions. Other changes: comments on images survive a reload, other plugins' commands no longer carry Plannotator's name, and every Plannotator server now checks the hostname it was reached by.
Ask this session keeps your drafts as drafts
When you asked a question through "Ask this session", Plannotator also sent the comments you had not submitted yet, in the same format as submitted feedback. The agent read them as instructions and could act on them before you pressed Submit. In the report, it created GitHub issues from draft comments. On Submit, the same comments then arrived a second time.
Draft comments are now sent once, as a short list clearly marked as drafts you have not submitted, with an instruction not to act on them. Your question always comes last. The list goes again only when it changes. Submit delivers your feedback once, as before. This applies on Claude Code, Pi and OpenCode, and to the annotate agent terminal. The separate Ask AI providers are unchanged. (#1749, closing #1748, reported by @krizman)
Comments on images come back after a reload
In HTML annotate, a pin on an image, video or embedded page that had no
iddisappeared after a reload or an HTML refresh, which made image comments in generated reports hard to keep. Such pins are now found again by the file they show. A pin follows its image when other images are added around it. If the image's source changes, the pin shows as no longer matching. If the same source appears twice, the pin is not saved, so it can never land on the wrong copy. Live-app sessions behave the same way. (#1747 by @pro- vi)Other plugins' commands no longer carry Plannotator's name
With the Plannotator mod on, Claude Code labelled the output of any other plugin's slash command as if Plannotator had helped answer it (for example
plannotator+frontend: β¦). The mod now listens only to its own commands./plannotator-review,/plannotator-annotateand/plannotator-lastwork as before, with or without the Plannotator skills installed. (#1741 by @rushelex, closing #1740)Every server checks the hostname it was reached by
Plannotator's review servers now refuse requests that arrive under an unexpected hostname. A normal local session accepts only
localhostand loopback addresses. Remote mode also accepts IP addresses, your configuredPLANNOTATOR_URL_HOSTand the machine's own name (includingname.local).--tailscalesessions accept their tailnet name, and code-server and Coder proxies are recognised fromVSCODE_PROXY_URI. VS Code, SSH and Docker port forwarding, Codespaces and dev tunnels keep working as before.If you reach a remote-mode session by another DNS name (a server's public name, for example), you now get a 403 that says what to do: set
PLANNOTATOR_URL_HOST, or list the name in the newPLANNOTATOR_ALLOWED_HOSTS(comma-separated;*turns the check off). (#1742)Additional Changes
- OpenCode 2: extra words no longer stop annotate.
/plannotator-annotate . notes.md(orplease notes.md) opened nothing and showed nothing. It now opens the file, and a slash command that fails shows the reason in the session instead of only in OpenCode's log. On OpenCode 1 this applies when the plugin uses the CLI runtime; the default embedded runtime is unchanged (#1739). - Question cards for host apps.
@plannotator/ui0.52.0 lets an app embedding the question cards turn "Records a decision" on and off from the card's header and hide the card's own status tag. Plannotator's own cards are unchanged (#1744).
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/pluginβ Installed β plannotator β Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- Ask this session: unsubmitted annotations are never sent as feedback by @backnotprop in #1749
- fix(annotate): pins on images without an id restore by their source by @pro-vi in #1747
- fix(mod): match command.run by command name by @rushelex in #1741
- Validate the Host header on every request (defense in depth) by @backnotprop in #1742
- OpenCode 2: /plannotator-annotate with extra words opens the file, and failures are shown by @backnotprop in #1739
- ui: host-controlled decision toggle and status tag on question cards by @backnotprop in #1744
- Groundwork for a feature that is not released yet, hidden from help and the agent skill, by @backnotprop in #1745 and #1750
New Contributors
Contributors
@pro-vi found that comments on images without an id were lost on every reload, and wrote the fix that finds them again by their source. @rushelex reported the
+plannotatorlabel on other plugins' commands and fixed it with a one-line matcher. It is their second contribution, after the VS Code clipboard fix in #970.Community:
- @krizman reported the Ask this session draft problem with exact steps, the text the agent received, and the likely cause (#1748).
Full Changelog :
v0.28.6...v0.28.7 - OpenCode 2: extra words no longer stop annotate.
-
π backnotprop/plannotator v0.28.6 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.5 | Several files in one review, theplannotatortool on Pi and OpenCode 2, decisions name the exact file, Ask this session reconnects after sleep
v0.28.4 | Comments come back after the agent edits a file, the agent can list and close its reviews, PR-description feedback no longer dropped, Pi thinking levels
v0.28.3 | Typing into your agent while it answers an Ask no longer streams into Plannotator
v0.28.2 | Question cards show wrapped choices and tables, pinned images named by their file, Done with nothing to send starts no agent turn
v0.28.1 | Ask AI from diagram comments, pinned images named for the agent, OpenCode 1 URL toasts and one reply per feedback, folder feedback sent once
v0.28.0 | Ask this session in Claude Code, Pi and OpenCode 2, Claude Code mod on by default, Pi plan review no longer blocks, first-run demo
v0.27.25 | Code review works withcolor.diff = always, Bitbucket review fixes, wide tables no longer collapse in Firefox, install script fix
v0.27.24 | Image previews stay in the all-files view, PR comment previews open on the commented line
v0.27.23 | Bitbucket Cloud PR review, Question UI for answering agents in place, opt-in auto-update, viewed files remembered, review another repo or worktree
v0.27.22 | Plans open the docs they link to, Claude review jobs locked down, Code Tour on Linux without Claude's sandbox, Pi reviews the latest plan
v0.27.21 | Remote and phone sessions load several times faster, real Request changes on GitHub, model pickers show real names, OpenCode fixesWhat's New in v0.28.6
Six PRs, two of them asked for by the community. This is a fix release: Ask AI tells the agent which lines you selected, quick labels can be reordered and given a new emoji, and a few problems found while testing 0.28.5 on Pi and OpenCode are fixed.
Ask AI says which lines you selected
When you select text in a markdown document and ask a question, the question now names the lines, for example
Source: /path/to/doc.md, line 41, orlines 41β44when the selection spans several lines or blocks. Before, it carried only the file path, so when the same phrase appeared twice the agent could not tell which one you meant. The line numbers are the same ones the exported comment for that selection prints, so the question and your feedback point at the same place. This works in plan review and annotate, including linked documents and folder sessions, and through the side chat, Ask this session and the annotate agent terminal. (#1732, closing #1731, requested by @de-tre)Reorder quick labels and change their emoji
Settings β Labels now has Move up and Move down buttons on each quick label, and the emoji is an editable field. The list order decides which Alt/β₯ number applies a label, and the key hint on every row updates as you move things. The emoji field takes exactly one emoji (flags, skin tones and combined emoji included); anything else is shown as invalid and never saved. Two labels with the same text no longer get mixed up when you edit one of them. Your saved labels keep the same format, so nothing needs migrating. (#1738, closing #1736, requested by @RobertoArtiles)
Pi no longer crashes when a fixed port is busy
With
PLANNOTATOR_PORTset in a local Pi session, opening a second/plannotator-annotatewhile one was already open killed Pi withEADDRINUSE. The new review now takes the port over from the old one, as remote mode already did, and Pi stays up. (#1733)OpenCode 2: a review opened by a background subagent no longer adds a
stray turn
With the
plannotatortool turned on, a background subagent that opened a review posted its "session ready" link into the main session while it was idle. The next time the main session woke up, the model answered that link line as its own turn, and the exchange stayed in every later request. The link now goes to the session that called the tool, while that call is still open, so it never becomes a turn of its own. Decisions were always delivered correctly and still go to the main session. (#1734)Additional Changes
- Review names match what opened. On Claude Code,
/plannotator-annotate . a.mdopens onlya.md, but the mod named the review "2 files: ., a.md" in its reply, status line and decision. Reviews are now named from what the CLI actually opened, on Claude Code and for OpenCode 2's tool (#1737). - Contributors' OpenCode setup left alone. Running
bun installin a Plannotator checkout overwrote the developer's own OpenCode commands and skill. The OpenCode plugin's install step now copies them only when the package is installed undernode_modules, and it works on Windows. SetPLANNOTATOR_OPENCODE_POSTINSTALL=1or0to force it either way (#1735).
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/pluginβ Installed β plannotator β Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- Ask AI: name a text selection's source lines in the question by @backnotprop in #1732
- Settings β Labels: reorder quick labels and edit their emoji by @backnotprop in #1738
- fix(pi): attach the annotate agent terminal after listen so a busy fixed port cannot crash Pi by @backnotprop in #1733
- fix(opencode): a tool launch's session-URL notice never wakes an idle root by @backnotprop in #1734
- fix(mod, opencode): name a review by what the CLI opened, not the typed words by @backnotprop in #1737
- fix(opencode): skip the plugin postinstall inside the monorepo (cross-platform) by @backnotprop in #1735
Community
- @de-tre asked for the selected lines to be included in Ask AI questions, so the agent knows which occurrence of a phrase they meant (#1731).
- @RobertoArtiles asked for a way to reorder quick labels and change their emoji (#1736).
Full Changelog :
v0.28.5...v0.28.6 - Review names match what opened. On Claude Code,
-
π r/LocalLLaMA New LFM to be released today rss
| https://x.com/ramin_m_h/status/2107780594264600801 What size do you want? https://huggingface.co/LiquidAI submitted by /u/jacek2023
[link] [comments]
---|--- -
π smol-machines/smolvm smolvm v1.24.0 release
What's Changed
- Fall back to a synchronous save for a stored checkpoint the VMM cannot defer by @LoganGrasby in #1584
- Pin a fork's golden layers on pause instead of packing them into every artifact by @LoganGrasby in #1585
- Rebuild the image seeds machines used recently when a server starts, so the first machine of each image after an upgrade does not wait for a seed build by @BinSquare in #1586
- Fix private CA registry pulls and image seeds by @BinSquare in #1587
- Wake TCP relay threads on readiness instead of polling every 10 ms by @BinSquare in #1588
- Let exec/interactive take an argument vector and run on pipes by @adam-r-kowalski in #1538
- Refuse pinned branch ports on a machine that publishes none by @BinSquare in #1589
- Let the embedded runtime keep a branch's source frozen as a reusable branch base by @BinSquare in #1590
- Bump version to 1.24.0 by @BinSquare in #1591
New Contributors
- @adam-r-kowalski made their first contribution in #1538
Full Changelog :
v1.23.7...v1.24.0 -
π matklad On Git Refs rss
On Git Refs
Oct 7, 2026
I have recently improved my mental model of Git. Consider these two git commands:
$ git fetch origin master $ git switch -c my-feature origin/masterDo you understand why is it
origin masterin one command, andorigin/masterin the other? I didnβt, until a few weeks ago!My understanding was that git is a content-addressable database. Git stores commits, a commit is identified by the hash of its content, and the content of a commit is, primarily:
- a memory-less snapshot of a state of the codebase at a given point in time,
- a list of (hashes of) parent commits.
That was enough git for me to understand
git logoutput and get me out of any botched rebase without having to re-clone the repo (For roughly half of my career, I was re-cloning the repo. No shame in that! Learning git is useful, but itβs not the highest priority thing to learn when you start).
I now understand that git not only comes with an append-only (βimmutableβ) content-addressable database, but is also a boring mutable key-value store.
Git has a mutable map whose keys are strings, and whose values are content- addressed objects. The keys are conventionally formatted as file system paths, and you can usually inspect the state of the mapping by listing
.git/refsdirectory:$ eza -T .git/refs .git/refs βββ heads β βββ make β βββ master β βββ my-feature β βββ pbd-adt βββ origin βββ remotes β βββ origin β βββ context-switches β βββ gh-pages β βββ HEAD β βββ make β βββ master βββ tags $ cat .git/refs/heads/master b59148228e52f7c615ead7fdd4e91001994ad50f $ git show-ref refs/heads/master b59148228e52f7c615ead7fdd4e91001994ad50f refs/heads/masterWhat makes this
refsKV infrastructure confusing is that:- It powers many distinct user-visible git features, but refs themselves are an implementation detail.
- It is a bit of a leaky abstraction, refs are almost invisible in the day-to-day usage.
- Git CLI uses shorthand notation for refs and many default arguments, which makes it not obvious that a particular CLI argument is a ref.
- And, as usual, git likes to give several names to one thing, and re-uses the same name for distinct things.
Branches, tags, and git notes are all just refs!
The structure becomes much more obvious once you elaborate all CLI shortcuts. The original command
$ git fetch origin masterthen becomes
$ git fetch \ https://github.com/matklad/matklad.github.io \ refs/heads/master:refs/remotes/origin/masterThe first argument of
fetch(https://...) is a location of a remote repository. Git will βdialβ that address, and will transfer some data from that computer locally over the network.The second argument is a
source:targetpair of string keys (refs). Thesourceis a key on the remote repo, thetargetis the name of a local key, and fetch as a whole asks git to read a value from a remote repository and save it locally under a different name.To avoid typing repository URLs all the time, git assigns them symbolic names, with
originbeing the conventional name for the primary remote repository:$ git fetch origin \ refs/heads/master:refs/remotes/origin/masterrefs/heads/masteris a fully elaborated name of a branch on the remote repo. That is, branchmy-featureis just arefs/heads/my-featureref. It could have beenrefs/branch/my-feature, but it isnβt :)I donβt know the specific shorthand rules, but, generally, git allows you to spell only the suffix of a ref:
$ git fetch origin \ master:refs/remotes/origin/masterrefs/remotes/origin/masteris the name of the local ref weβll use to store the result. It would seem natural to just use the same name locally as the one on the remote, but this only works if thereβs a single remote. If there are two upstream repositories (for example, your fork, and the original repo you forked from), their ref names will collide. Thatβs why we want to namespace the refs for remote calledfoounderrefs/remotes/foo. Andoriginis just a conventional name for the remote in simple setups.Again, it would be more natural to directly mirror remote ref structure locally:
refs/ heads/my-branch -> refs/ remotes/origin/ heads/my-branchbut git strips the redundant heads component. And this
-heads,+remotes/$remotemapping is built in, which compresses the command to$ git fetch origin masterItβs worth reflecting why it works this way. Git model is offline first. Whatβs more, it assumes explicit synchronization points. Rather than synchronizing with the remote repository in background when thereβs connectivity, git requires explicit
fetchandpushoperations to transfer bytes over the wire. In this paradigm, it is useful to model the state of the remote party at the moment when we talked to them the last time. Theory of mind!This hopefully deconfuses gitβs concept of local and remote branches. Consider the
mainbranch. It exists on the remote namedoriginasrefs/heads/main. When you synchronize your local repository withorigin, you getrefs/remotes/origin/mainβ you current best knowledge about the the state ofmainon theorigin.And then thereβs your local
refs/heads/main. It typically starts pointing at the same commit asrefs/remotes/origin/main. But, when you make a commit,refs/heads/mainadvances, butrefs/remotes/origin/mainstays the same.When you try to push your local commit to origin, you will get a conflict, if the
mainbranch on theoriginadvanced in the meanwhile. In that case, git automatically updatesrefs/remotes/origin/main(as thatβs just a local mirror of the remote state), but then itβs on you to updaterefs/heads/mainand push it again.Revisiting the full example:
$ git fetch origin master $ git switch -c my-feature origin/masterThe first command looks up the URL for the
originremote in.git/configand makes a network request to that machine. As a result, the localrefs/remotes/origin/mastergets updated to the same commit asrefs/heads/masterremotely (the commit and its ancestors are transferred locally as a result).The second command creates a
refs/heads/my-featureref (a branch), whose starting point isrefs/remotes/origin/master. It is an example of a leaky abstraction.The second argument there is a (shorthand of a) ref, so you can do
$ git switch -c my-feature \ refs/remotes/origin/masterBut, although the first argument creates a ref, it isnβt a ref itself. In other words, if you try to elaborate it as well
$ git switch -c refs/heads/my-feature \ refs/remotes/origin/masteryouβll get
refs/heads/refs/heads/my-featureThatβs all! I am pretty sure this isnβt particularly useful, but maybe it is interesting!
-
π New Music Releases Philip Glass - Philip Glass: Music for Film rss
Philip Glass - a new release is available:
- 2026-10-07: Philip Glass: Music for Film (Album)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-