🏡


  1. October 23, 2026
    1. 🔗 plannotator/herdr-annotate rust-lite-v0.2.2 release

      What's Changed

      • feat: make the native runtime the only lite runtime by @backnotprop in #47
      • fix(skill): name the annotate plugin in the raw pane command by @backnotprop in #55
      • feat: add the windows-full manifest variant by @timo-tigges in #49
      • chore: pin plannotator-tui 0.9.0 by @backnotprop in #56
      • feat: add a last-newest review action by @mshddev in #48
      • fix: add last-newest to the windows-full manifest; plugin 0.5.0 by @backnotprop in #58
      • chore: pin plannotator-tui 0.9.1 by @backnotprop in #59
      • chore: pin plannotator-tui 0.9.2 by @backnotprop in #60
      • chore: pin plannotator-tui 0.9.3 by @backnotprop in #63
      • docs: mention the send-and-close key by @mshddev in #61
      • feat: annotate.terminal action; pin plannotator-tui 0.9.4; plugin 0.6.0 by @backnotprop in #64
      • feat: paste-archive and send-archive actions by @mshddev in #65
      • fix: hand off annotations in document order, in Plannotator's format; helper 0.2.0; plugin 0.8.0 by @backnotprop in #67
      • fix: make Ctrl-click link capture opt-in (#69) by @backnotprop in #71
      • fix: refetch an installed binary that cannot run on this host; plugin 0.9.1 by @emo-eth in #72
      • fix: keep non-ascii text intact through the windows clipboard by @nickgitrabbit in #74
      • fix: check windows downloads with .NET SHA256 instead of Get-FileHash by @backnotprop in #77
      • fix: ship the utf-8 windows clipboard read; helper 0.2.1; plugin 0.9.2 by @backnotprop in #78
      • feat: edit saved annotations from manager by @graemefolk in #73

      New Contributors

      Full Changelog : rust-lite-v0.1.0...rust- lite-v0.2.2

    2. 🔗 plannotator/herdr-annotate rust-lite-v0.2.1 release

      What's Changed

      • feat: make the native runtime the only lite runtime by @backnotprop in #47
      • fix(skill): name the annotate plugin in the raw pane command by @backnotprop in #55
      • feat: add the windows-full manifest variant by @timo-tigges in #49
      • chore: pin plannotator-tui 0.9.0 by @backnotprop in #56
      • feat: add a last-newest review action by @mshddev in #48
      • fix: add last-newest to the windows-full manifest; plugin 0.5.0 by @backnotprop in #58
      • chore: pin plannotator-tui 0.9.1 by @backnotprop in #59
      • chore: pin plannotator-tui 0.9.2 by @backnotprop in #60
      • chore: pin plannotator-tui 0.9.3 by @backnotprop in #63
      • docs: mention the send-and-close key by @mshddev in #61
      • feat: annotate.terminal action; pin plannotator-tui 0.9.4; plugin 0.6.0 by @backnotprop in #64
      • feat: paste-archive and send-archive actions by @mshddev in #65
      • fix: hand off annotations in document order, in Plannotator's format; helper 0.2.0; plugin 0.8.0 by @backnotprop in #67
      • fix: make Ctrl-click link capture opt-in (#69) by @backnotprop in #71
      • fix: refetch an installed binary that cannot run on this host; plugin 0.9.1 by @emo-eth in #72
      • fix: keep non-ascii text intact through the windows clipboard by @nickgitrabbit in #74
      • fix: check windows downloads with .NET SHA256 instead of Get-FileHash by @backnotprop in #77

      New Contributors

      Full Changelog : rust-lite-v0.1.0...rust- lite-v0.2.1

    3. 🔗 r/LocalLLaMA Introducing Kimi K3.1 Pro: Advancing Open Intelligence rss

      Introducing Kimi K3.1 Pro: Advancing Open Intelligence | submitted by /u/Recoil42
      [link] [comments]
      ---|---

    4. 🔗 r/LocalLLaMA Vibecoding your own inference engine is easy they said rss

      Vibecoding your own inference engine is easy they said | guys, you better just clone llama.cpp I swear.
      this thing is running gguf q4 paged into webgl2 embedded compute buffers via glsl right inside html, and tokenizer/vocab is just part of the endless debug hell. submitted by /u/CodeMichaelD
      [link] [comments]
      ---|---

    5. 🔗 backnotprop/plannotator v0.28.29 release

      Follow @plannotator on X for updates

      Missed recent releases? Release | Highlights
      ---|---
      v0.28.27 | Jump to open questions, files side by side or full screen, image zoom in the Inbox, empty To field, text size for plan review and annotate
      v0.28.26 | Action items and reply drafts in the Inbox, one decision button for plan review, Enter to save a comment, a custom code font
      v0.28.25 | Re-ask open questions, delivery ticks on the list, a count of new messages on the tab, right-click a thread, click Inbox to refresh
      v0.28.24 | A new look for the Inbox, Send now, tag agents, comment on an agent's message, much smaller reads for agents, links in HTML pages
      v0.28.23 | Inbox replies reach sessions with background subagents, dictated text no longer goes missing, 👍 Looks good reaches the agent, notifications that never fail silently
      v0.28.22 | 👍 Looks good, full view for files, one viewer for a thread's images and files, every session prints its URL, PLANNOTATOR_BROWSER=none opens nothing
      v0.28.21 | Message an agent from the Inbox, video attachments, Open in for attachments, Code / Tests / Generated in code review, writes from other websites refused
      v0.28.20 | Inbox search (⌘K), real folder names for projects, data files open in the code view, word-only replies leave questions open
      v0.28.19 | Ask this session in T3 Code, folder sessions load shared stylesheets and images, the agent note asked once per agent, Copy connect prompt
      v0.28.18 | plannotator inbox connects your agents, agents are told when to use the Inbox, rendered Markdown in code review, Inbox Settings in sections
      v0.28.17 | The Inbox on iPads and narrow windows, the reply bar no longer cuts off "Keep open", a Pi crash on /reload fixed
      v0.28.16 | The Inbox on a phone, a doorbell for new questions, Mark read, step through a thread's files, replies when the asking session ended

      What's New in v0.28.29

      A patch release: plan review now opens on OpenCode 2, a DOMPurify security update, and two skill fixes. (v0.28.28 was never published; its release was stopped by the security check this update fixes.)

      Plannotator

      Plan review works on OpenCode 2

      On OpenCode 2, the plan agent wrote its plan into the chat and never sent it for review. OpenCode 2 adds its own Plan mode note telling the model to discuss the plan in the conversation, and Plannotator didn't recognize that wording. Plannotator now replaces the note, so the plan agent calls submit_plan and the review opens. Tested on OpenCode 2.0.19 and 2.1.2. OpenCode 1 is unchanged.

      Smaller changes

      • Closing a review without feedback stops the agent on every agent, not only Claude Code. Closing is not approval. #2099, closing #2097
      • The visual-explainer skill asks before installing its third-party dependency. #2099, closing #2098
      • DOMPurify 3.4.17 fixes a critical sanitizer advisory (GHSA-cg2g-xh64-v4q7). Mermaid's copy is updated too. #2104
      • Guided Reviews can carry an overview with an optional diagram (guide format version 2). Nothing creates one yet; this is groundwork. Existing guides are unchanged. #2095

      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: The plugin and the plannotator binary update separately, so run the install script above as well. In a terminal:

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

      Then restart Claude Code. Inside Claude Code, run /plugin marketplace update plannotator, then open /plugin → Installed → plannotator → Update now.

      Pi:

      pi update --extensions
      

      OpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.

      What's Changed

      Community

      Full Changelog : v0.28.27...v0.28.29

    6. 🔗 backnotprop/plannotator v0.28.28 release

      chore: bump version to 0.28.28

    7. 🔗 OmniNull/OmniWM Canary 20261023-0937 (28ded16c) release

      Automated canary build of main. It is signed and notarized like a release but skips the owner review, so treat it as unstable.

      See the canary guide to install, update, or return to stable. For everyday use, download the latest stable release.

      • Commit: 28ded16c88ef
      • Base tag: canary-20261022-0439-39721295344-1

      Changes since canary-20261022-0439-39721295344-1

      • 28ded16 Merge pull request #959 from dappermint/fix/toolchain-cache-recovery
      • 810a195 ci: start from a clean toolchain when its cache restore fails
      • 0e0bf3c Merge PR #958: Add Fluxer community chat links
      • 9f35cdf docs: add fluxer community chat links
      • 4450248 Update SwiftFormat to 0.64.1
      • 9bfd535 Merge pull request #921 from dappermint/test/qa-suite-hardening
      • 4eba57f style(hidden-bar): drop the trailing comma swiftformat 0.63 rejects
      • 931a291 Merge pull request #957 from hezhizhen/codex/fix-hidden-native-cross-display
      • c532780 test(hidden-bar): stop depending on the finder extension setting
      • ba39913 test(shell): give bundled widget renders a 1 s cpu budget
      • 2b4cf58 test(shell): wait for the bar before counting its widgets
      • 18427da test(support): let until name the condition it waited for
      • 958bbfd fix: discard deferred native moves for hidden windows
      • 22b8f6c Translate the new swipe-edge and cross-display drag settings
      • 92ca342 Merge pull request #952 from brdoney/swipe-edge-behavior
      • b7b10dd Merge pull request #933 from hezhizhen/codex/native-titlebar-cross-display
      • 47d8df0 Merge pull request #949 from brdoney/fill-left-reserve-space
      • 6b608a4 Merge pull request #956 from brdoney/fix-nil-layer-border
      • dc5117e Merge pull request #951 from hezhizhen/codex/fix-notification-api-reference
      • a89d802 fix(shell): draw no border when a widget sets a width without a color
      • dafebd0 Update fill-left reserve docs and reuse the overlapping case
      • c24495e Add configurable workspace swipe behavior at the edges
      • 56dd4a4 fix(docs): include notification types in the Luau reference
      • bc403f5 fix: retain deferred native drag correction obligations
      • 44459e7 fix: ignore managed frames during native cross-display adoption
      • f71c0a6 feat: opt in to native title-bar moves across displays
      • 9fc6374 Merge pull request #940 from hezhizhen/codex/fix-wallpaper-region-crop
      • 672f8ff Reserve workspace bar space in Fill Left of Notch mode
      • cf3599e Merge PR #945: Check widget option declarations and add Nocturne options
      • 97b8aaa test(shell): match whole option names in the declaration check
      • efb89c7 fix: crop full-window wallpaper captures before region fallback
      • 80dca94 feat(shell): declare scratchpad, calendar and weather options for nocturne
      • 37f7889 test(shell): check bundled widgets declare the options they read
      • f8cddb7 Merge pull request #941 from dappermint/fix/touch-count-provider-rewrap
      • ddc5e5c Merge origin/main while preserving notification support
      • 10455b5 Merge pull request #943 from rickythefox/feat/942-focus-rank
      • d61a7d3 Dismiss notifications through their native Close action
      • bacd0e5 Add native notification actions and capture diagnostics
      • 2ebfb50 feat(ipc): expose window focus history via query windows
      • 0aa1470 Match Notifications to OmniShell styles
      • 4953efe Add retained notifications to OmniShell
      • 31d4e80 fix(input): stop the touch count provider growing on every read
    8. 🔗 r/LocalLLaMA Models disappearing from Huggingface rss

      Models disappearing from Huggingface | I've been noticing a lot of my downloads stopping suddenly and being unable to resume. When I checked the models it seemed like they were gone. Here's the ones I can see are missing:

      • dealignai/MiMo-V2.6-Pro-RL-UNCENSORED
      • audnai/penclaw-GLM-5.3-abliterated-for-offensive-cyber
      • huihui-ai/Huihui-Kimi-K2.7-Code-abliterated-GGUF

      and somehow not a single Alliterated Deepseek-R1. Does anyone know what's going on and where else the vanished models might be found? submitted by /u/umarmnaq
      [link] [comments]
      ---|---

    9. 🔗 smol-machines/smolvm smolvm v1.31.4 release

      What's Changed

      • chore(nix): bump flake to 1.31.3 by @github-actions[bot] in #1949
      • Boot a pack prepared on a machine's storage from that storage instead of its source image's archive, and keep .wh. files in a pack's only layer by @BinSquare in #1950
      • Refuse to branch a source still running the engine from before an upgrade by @BinSquare in #1952
      • Keep agent unit tests off the storage disk of the machine they run on by @BinSquare in #1955
      • Grow RAM live on CLI-started machines when no cgroup limit is in the way by @BinSquare in #1956
      • Bump smolvm to 1.31.4 by @BinSquare in #1954

      Full Changelog : v1.31.3...v1.31.4

    10. 🔗 r/LocalLLaMA MiniMax-M3.1-Flash rss
    11. 🔗 backnotprop/plannotator v0.28.27 release

      Follow @plannotator on X for updates

      Missed recent releases? Release | Highlights
      ---|---
      v0.28.26 | Action items and reply drafts in the Inbox, one decision button for plan review, Enter to save a comment, a custom code font
      v0.28.25 | Re-ask open questions, delivery ticks on the list, a count of new messages on the tab, right-click a thread, click Inbox to refresh
      v0.28.24 | A new look for the Inbox, Send now, tag agents, comment on an agent's message, much smaller reads for agents, links in HTML pages
      v0.28.23 | Inbox replies reach sessions with background subagents, dictated text no longer goes missing, 👍 Looks good reaches the agent, notifications that never fail silently
      v0.28.22 | 👍 Looks good, full view for files, one viewer for a thread's images and files, every session prints its URL, PLANNOTATOR_BROWSER=none opens nothing
      v0.28.21 | Message an agent from the Inbox, video attachments, Open in for attachments, Code / Tests / Generated in code review, writes from other websites refused
      v0.28.20 | Inbox search (⌘K), real folder names for projects, data files open in the code view, word-only replies leave questions open
      v0.28.19 | Ask this session in T3 Code, folder sessions load shared stylesheets and images, the agent note asked once per agent, Copy connect prompt
      v0.28.18 | plannotator inbox connects your agents, agents are told when to use the Inbox, rendered Markdown in code review, Inbox Settings in sections
      v0.28.17 | The Inbox on iPads and narrow windows, the reply bar no longer cuts off "Keep open", a Pi crash on /reload fixed
      v0.28.16 | The Inbox on a phone, a doorbell for new questions, Mark read, step through a thread's files, replies when the asking session ended
      v0.28.15 | Long Inbox threads fold to what is new, "Skipped N questions" replies, Inbox list and sidebar fixes

      What's New in v0.28.27

      A jump list for a thread's open questions, files side by side or full screen, image zoom everywhere, text size for plan review and annotate, and a run of fixes from your reports.

      Plannotator Inbox

      Jump to open questions

      When a thread has questions you haven't answered, a button in its foot says how many. It lists them, and choosing one opens its message and takes you to the card.

      Side by side or full screen, remembered

      An open file has a Side by side | Full screen switch in its header. The Inbox remembers the one you picked.

      Zoom and pan images

      Images in the Inbox zoom with a trackpad pinch or Ctrl/⌘ + wheel, pan by dragging, and switch between Fit and 2× on a double-click. ← → still step to the next file while zoomed, and a comment's drawing stays on the image at any zoom.

      Action items as a checklist

      An agent's action items show as one checklist card: tick each off, open it for the details, and see "2 of 3 done" at a glance.

      Smaller changes

      • New messages start with To empty , so a message can't go to the wrong agent. The last agent you used is listed first. #2089
      • Attached files always show in the Clean look. #2092
      • A thread's draft status sits to the right of its buttons. #2083
      • Agent icons come in one set of sizes , and tooltips are borderless and quicker to appear. #2078, #2079
      • Phone sheets have rounder top corners. #2076

      Plannotator

      Text size

      Settings → Display → Text size makes plan review and annotate text smaller or larger.

      Zoom images

      The image viewer zooms with the mouse wheel or a pinch and pans by dragging. Actual size now really shows the image at its own size.

      Smaller changes

      • The tab title and header name the open file in annotate. #2075, closing #2061
      • Comment Edit and Delete buttons show on screens without hover (Chrome on some Linux setups, touch screens). #2065, closing #2062
      • HTML pages you annotate can open alert, confirm and prompt dialogs. #2071, closing #2063
      • Mermaid labels in Chinese, Japanese and Korean no longer wrap their last character onto a new line. #2072, closing #2064
      • Ask AI answers show tables. #2070, closing #2069
      • Back from a linked document returns to where you were reading. #2084, closing #2082
      • Links with an underscore are linked in full , not cut off at the first _. #2088
      • Pi and Oh My Pi: after updating Plannotator while Pi is running, you're now told to restart, instead of seeing a confusing error. #2087, closing #2085

      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: The plugin and the plannotator binary update separately, so run the install script above as well. In a terminal:

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

      Then restart Claude Code. Inside Claude Code, run /plugin marketplace update plannotator, then open /plugin → Installed → plannotator → Update now.

      Pi:

      pi update --extensions
      

      OpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.

      What's Changed

      Community

      Most of this release came from your reports. Thank you:

      Full Changelog : v0.28.26...v0.28.27

    12. 🔗 New Music Releases O.A.R. - Three Tinted Windows rss

      O.A.R. - a new release is available:

      • 2026-10-23: Three Tinted Windows (Album)

      Amazon: Canada | Deutschland | France | United Kingdom | United States

      Visit muspy for more information.

    13. 🔗 New Music Releases Polyphia - BE NOT AFRAID rss

      Polyphia - a new release is available:

      • 2026-10-23: BE NOT AFRAID (Album)

      Amazon: Canada | Deutschland | France | United Kingdom | United States

      Visit muspy for more information.

  2. October 22, 2026
    1. 🔗 IDA Plugin Updates IDA Plugin Updates on 2026-10-22 rss

      IDA Plugin Updates on 2026-10-22

      Activity:

      • binsync
        • 901af52d: fix(ui): keep host view focus after Open/New dialog errors; reject em…
      • ida-settings
        • 31bf35ed: Merge pull request #31 from williballenthin/fix-pyside6-first
        • d1042cb2: prefer PySide6 over PyQt5 so IDA 9.2+ doesn't show the PyQt5 shim dialog
      • mcrit-plugin
        • 75e83537: Merge pull request #59 from familiary/refactor/core-presentation
        • 9ee44127: Merge pull request #58 from familiary/feature/ghidra-plugin
        • e351304b: Address the Ghidra review follow-ups: console Reset, bridge compile, …
        • d2f040bc: Merge feature/ghidra-plugin into refactor/core-presentation
        • 40772287: Fix the Ghidra review findings: CFG colors, rejected labels, spinner …
        • 8b2097ce: Escape YARA wildcards for the report's architecture
        • 41f28926: Count Block Scope's headline functions like its families and samples
        • 770d70f3: Share the match views' logic between the Qt widgets and Ghidra
        • a49b6061: Tint Ghidra matches with transient markers, fix the GUI runner deadlock
    2. 🔗 anthropics/claude-code v2.1.309 release

      What's changed

      • Fixed sandboxed Bash commands on macOS and Linux running the shell's startup files outside the sandbox before each command
      • Fixed macOS sandbox denyWrite glob patterns not applying at a path's real location when the pattern's folder is reached through a symlink
      • Fixed sandboxed commands and auto-accepted edits being able to modify the MCP config file passed with --mcp-config
      • Fixed a disabled MCP server being reconnected by a later permission prompt in print and SDK sessions
      • Fixed the Bash permission check trusting a variable set by a command whose redirect can fail to open
      • Fixed Bash permission checks not prompting for some compound commands that change directory before running git when the cd is wrapped or prefixed, as they do for a plain cd
      • Fixed an Edit(path) deny rule not blocking a Bash redirect to that path in some commands that also held a subshell
      • Fixed worktree-isolated sessions accepting some locale-prefixed commands the isolation guard should refuse
      • Fixed worktree-isolated sessions on zsh accepting some arithmetic commands that the isolation guard should refuse
      • Fixed worktrees and branch checkouts that Claude Code creates so they ignore git replace refs, as its other git operations already do
      • Fixed profile store write protection not applying when the config directory is reached through a symlink
      • Fixed sessions compacting repeatedly after reading files under a very large nested CLAUDE.md; a nested CLAUDE.md over the size limit now loads only its start
      • Fixed ctrl+enter (send now) only queuing a message when pressed before the response had started, and restarting a prompt's hooks while leaving the message queued when pressed while those hooks were running
      • Fixed key-bound slash commands running in the shell from ! mode
      • Fixed ctrl+o not showing messages from other agents and sessions that are still waiting to be delivered; they now appear in full under the transcript, marked as waiting
      • Fixed long tool output previews being cut through an emoji, leaving session transcripts that jq could not parse
      • Fixed Read reporting "File does not exist" for PDF page ranges in Linux sandboxes that share the parent's /proc
      • Fixed messages from a Claude Desktop-hosted session sometimes being lost when its connection refreshed
      • Fixed features missing from Claude Code sessions in the Claude desktop app when the terminal on the same computer was signed in to a different account or organization
      • Fixed the claude remote-control status line showing HEAD as the branch for a folder that is not in a git repository
      • Fixed split-pane agent teammates not inheriting the tool deny and --tools rules given on the leader's command line
      • Fixed sessions renamed with /rename appearing to other sessions under a generated name after a VS Code window reload or a non-interactive --resume
      • Fixed the /rewind list showing "No code changes" for a turn that changed checkpointed files through /code-review --fix, a subagent or a shell command
      • Fixed /privacy-settings showing an out-of-date "Help improve our AI models" value; it now also says when the setting can't be fetched
      • Fixed feedback saying "try again later" when your organization does not accept feedback; it now shows the server's reason and where to report a bug
      • Fixed oversized /feedback reports failing instead of being resent without the transcript
      • Fixed a skill in an --add-dir folder being unreachable when another skill already held its name; it is now offered as <folder>:<name>
      • Fixed /verify and /code-review not finding a nested package's own skill when its files were changed from the shell
      • Fixed the /claude-api skill saying that ant beta:worker poll --on-work passes trace context to the command
      • Fixed the /claude-api skill's C# tracing setup missing spans from the cloud platform clients
      • Fixed the /claude-api skill saying that API spans for requests to Claude Platform on AWS can't join the caller's trace
      • Fixed hooks that run in PowerShell not blocking when the hook's program exits with code 2, and on Windows PreToolUse and PermissionRequest hooks with "shell": "powershell" failing open when Git for Windows isn't installed
      • Fixed a mod's turn.step hook that names a model by alias, such as haiku, failing every request with a model error: the alias now resolves to its model
      • Fixed plugins and skills synced from claude.ai being removed, sometimes mid-session, after a disk read error
      • Fixed artifact publishes and updates being refused for some ordinary pages, such as pages with certain minified scripts or artifacts Claude could not read first
      • Fixed Claude asking for permission on each artifact update for the rest of a turn after the conversation was compacted in that turn
      • Fixed fine-grained tool streaming staying off on Amazon Bedrock when ANTHROPIC_BEDROCK_BASE_URL is set to the default bedrock-runtime.<region>.amazonaws.com endpoint
      • Fixed the "Waiting for API response" hint flickering behind gateways that send only keepalive pings: routes off Anthropic's backend now wait 45 seconds
      • Fixed Claude notifying unrelated GitHub users by writing role names and placeholders as mentions in PRs, issues and comments
      • Linux: Fixed sandbox write denies lifting when a background command outlived the session
      • Windows: Fixed PowerShell permission checks auto-approving some Set-Location or cd commands that target the current directory and carry extra arguments; these now prompt for approval
      • macOS: Fixed the "Install Command Line Developer Tools" dialog opening each time Claude Code starts on a Mac without Xcode or the Command Line Tools
      • Self-hosted runner: Fixed --startup-timeout-min stopping a session whose first prompt, such as /code-review, was still working in a subagent; a frozen process is still stopped
      • Improved the speed of many git commands Claude Code runs for itself on Windows; on every platform, errors from those commands now show in English even when git is set to another language
      • Improved the error when a hooks module is nested too deep to load: it now names the file instead of showing a bare stack-overflow message
      • Improved disk-full handling: a Bash command cut off by a full disk now says so and names the folder to free up, and starting on a full temp volume prints a clear message, not a raw ENOSPC error
      • Improved the /claude-api skill to offer API tracing alongside SDK tracing when asked to add OpenTelemetry
      • Improved the /claude-api skill to check the live docs before saying a feature is unsupported
      • Self-hosted runner: Improved sessions that move to a new runner: Claude now sees the tool call that was interrupted, marked as outcome unknown
      • Updated the bundled dataviz skill to accept APCA as a text-contrast measure (keeping WCAG 2 ratios where AA conformance is required), add an apca(text, background) function to its palette validator scripts, and say whether a label inside a colored chart fill should be white or near-black
      • Updated the /claude-api skill: service account keys and Workload Identity Federation tokens can now manage OpenTelemetry destinations
      • Changed sed -i to get the standard Bash prompt and run as written, not a simulated file-edit preview; like other Bash edits, it is no longer restored by /rewind
      • Changed claude ultrareview to require workspace trust: it asks on a terminal, else refuses; scripts pass --trust-workspace, which takes no value (put a PR number or base branch before it), or set CLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1
      • Changed the dangerous rm and rmdir prompt in bypass permissions mode in the Desktop app and VS Code to deny the command at once with a rewrite hint, so unattended sessions keep going
      • Changed commands the settings exclude from the sandbox to ask before writing to its write-list paths while the sandbox is enabled but cannot run; the unsandboxed fallback is refused there
      • Changed worktree creation and reuse so git no longer fetches objects on demand, in ordinary clones and in partial clones with a Bash sandbox configured; such a partial clone fetches them first
      • Changed the /claude-api skill to build Managed Agents subagent teams on multiagent_20261001 with dynamic workflows on by default, instead of coordinator
      • [VSCode] Added a log warning that says what to do when dictation or the extension's own requests fail certificate verification, such as behind a TLS-inspecting proxy
      • [VSCode] Fixed the Claude panel staying blank after the editor cached an incomplete copy of its files; it now recovers by itself, or says what went wrong and how to fix it
      • [VSCode] Fixed Session history filling up with empty "Untitled" sessions each time you start a new session without sending a message
      • [VSCode] Fixed long slash-command messages such as /goal filling the chat panel; they now fold behind Show more like other prompts (#97469)
      • [VSCode] Fixed long messages not folding behind Show more after the chat panel is made narrower
      • [VSCode] Fixed Ctrl+J in the chat input always inserting a newline: it is now left to VS Code and the OS when "ctrl+j" is set to null in the Chat context of ~/.claude/keybindings.json
      • [VSCode] Fixed a mod's "From the … plugin" label above the prompt being drawn over the slash command and @-mention menus (#102981)
      • [VSCode] Fixed an empty list item, paragraph or code block, and list items renumbered from 1, when pasting copied LaTeX math
      • [VSCode] Fixed the feedback error showing only an HTTP status when your organization does not accept feedback
      • [VSCode] Improved Edit and Write speed in the chat panel: the wait for new problems after each edit is now 0.75 seconds in most cases, down from 1 to 1.5 seconds
      • [Cloud sessions] Fixed the Add connector list in routine forms saying no connectors were available while they were still loading
      • [Cloud sessions] Fixed the cloud environment editor shuffling environment variables and adding backslashes to values that contain both kinds of quote
      • [Cloud sessions] Fixed the self-hosted environment details dialog in admin settings so its title, tabs and buttons stay in view while only the content scrolls
      • [Cloud sessions] Fixed the "read documentation" tool row in cloud sessions, which showed escaped JSON instead of a readable page
      • [Cloud sessions] Improved a cloud session's Changes pane, which now says when it lists only pushed commits or only Claude's edits
      • [Claude Tag] Fixed Claude in Slack posting a draft you approved for a channel into your DM by mistake; a post with no channel is now refused so it can go to the approved channel
      • [Claude Tag] Fixed Allow and Deny on Claude's approval cards in Slack doing nothing when the session had stopped; your answer now restarts the session
      • [Claude Tag] Fixed Claude ignoring untagged messages in a Slack channel after its workspace moved to a different Claude organization, including unshared channels on Enterprise Grid
      • [Claude Tag] Fixed Claude in a Slack channel posting a threaded reply before reading a newer message someone had just added to that thread
      • [Claude Tag] Fixed the Slack page in Claude Tag admin settings saying no workspaces were connected when the list failed to load; it now shows an error with a Retry button
      • [Code Review] Fixed a finished review showing no check on the pull request when earlier tries to create it failed; a final try now adds a completed check
      • [Code Review] Fixed a push queued behind a running review still starting a review after @claude review stop; its check now closes and says why
    3. 🔗 smol-machines/smolvm smolvm v1.31.3 release

      What's Changed

      • chore(nix): bump flake to 1.31.2 by @github-actions[bot] in #1937
      • Allow nested branches 256 generations deep instead of 32 by @BinSquare in #1938
      • Speed up first macOS pack imports with reusable storage seeds by @BinSquare in #1939
      • Fix Smolfile init steps running twice during cached machine run by @NickyHeC in #1945
      • Show init output when cached machine run fails by @NickyHeC in #1946
      • Let --allow-udp open chosen UDP destinations, also under an egress interceptor by @AlixANNERAUD in #1941
      • Bump smolvm to 1.31.3 by @BinSquare in #1947

      Full Changelog : v1.31.2...v1.31.3

    4. 🔗 @HexRaysSA@infosec.exchange Hex-Rays has completed its acquisition of HexAI. The HexAI team has joined mastodon

      Hex-Rays has completed its acquisition of HexAI. The HexAI team has joined Hex-Rays to bring IDA technology into its agentic platform for cybersecurity research.

      Read more: https://hex-rays.com/blog/hex-rays-completes-acquisition-of- hexai

    5. 🔗 exe.dev Give Your Agents Less Internet rss

      The old Yahoo 101 billboard, but modified. It says "exe.dev, A nice place
for your agents to stay off the Internet", with "on" crossed out and replaced
by "off". A marquee sign below it reads "egress your-vm
integrations".

      Without the Internet, agents are useless. With the Internet, they're dangerous.

      One approach is to allow Internet access, but through carefully controlled sippy straws. Let through only requests to destinations that you trust and deny all of the rest.

      exe now makes this easy.

      TL;DR: Run ssh exe.dev egress YOUR-VM integrations, or click the Network Access button on a VM's detail page. This will limit YOUR-VM's outbound internet access to any specific integrations you have attached to that VM.

      Exe integrations provide VMs access to other services, injecting credentials at the network edge so that secrets stay off the VM.

      Diagram: an exe VM's direct connections to a random website and to a trusted
service are both blocked. The VM reaches the trusted service only through an
exe integration. The Network access dialog for a VM, with two options: All destinations
(unrestricted internet access) and Integrations only (allow attached
integrations; block other outbound connections). Below them is the equivalent
command, egress exfoliate all.

      Controlled Ingress, Controlled Egress

      Exe manages both ingress and egress. Incoming connections are private by default; you choose who can access your VM.

      Outgoing connections are open by default, with integrations providing credentials for connected services. Now you can restrict outbound traffic to just those integrations, giving agents access to the services they need while blocking the rest of the internet.

      How It Works

      Egress filtering happens at a network packet level. Anything higher level than that is subject to an end run by agents: they have memorized DNS and they can find proxies to convert traffic from one shape to another. We run our own DNS servers to prevent DNS request smuggling. And when you switch egress to integrations-only, we disable server-side web tools on requests sent through our LLM gateway.

      People used to say things like "I'm sure it's not secure against a nation- state attacker." Frontier models are the new nation-states. But unlike nation- states, we can pen test ourselves using actual frontier models.

      The agents found a bunch of escapes, all through clever use of server-side tools from Anthropic and OpenAI. There were a surprising number of them. Models are clever and persistent. And—when multiple are running on a single VM concurrently—happy to claim credit for the discoveries of others. (Here’s to you, Grok.)

      As a result, we closed that entire pathway for requests using our LLM gateway. The rest of our system survived the trial by fire. We believe that we have closed all escape routes straightforwardly discoverable by current models. We will continue to probe in-house as new models are released and harden as needed.

      Threat Model

      Turning off general-purpose Internet access does make your VM more secure, but this is intended to protect against accidents, not an APT.

      Also, it remains incumbent on you to think carefully about what an agent could do via the integrations you have attached. Are they usable as proxies for other purposes? Every read request from your agent is a write to someone else’s logs; are those writes acceptable? Put another way, your trust envelope now includes those external services.

      The traditional startup advice is to offer painkillers, not vitamins. Consider this to be Xanax; running agents should not fill you with anxiety that one mistake on their part will have disastrous consequences.

      Advanced Mode

      Our integrations give you high level access controls: connect to this Postgres server, connect to GitHub, connect to this website. If you want more control, consider setting up a proxy VM for yourself. Then set up a peer integration that allows your controlled VM to talk to your proxy VM. The proxy VM can then run arbitrary software to inspect requests and filter, augment, or forward them.

      There are no problems that cannot be solved with another layer of indirection except needing an infinite number of layers of indirection.

      Sample Transcript

      Create a new VM:

      $ ssh exe.dev new --name=no-net
      Creating no-net using image boldsoftware/exeuntu...
      
      Coding agent
      https://no-net.shelley.exe.xyz
      
      App (HTTPS proxy → :8000)
      https://no-net.exe.xyz
      
      SSH
      ssh no-net.exe.xyz
      

      It has full internet access:

      $ ssh no-net.exe.xyz curl -fsS https://exe.dev
      Agent docs: https://exe.dev/llms.txt
      Human docs: https://exe.dev/docs
      

      Limit its internet access to integrations only:

      $ ssh exe.dev egress no-net integrations
      Set egress policy for "no-net" to integrations
      

      Now the same request is rejected:

      $ ssh no-net.exe.xyz curl -fsS https://exe.dev
      curl: (6) Could not resolve host: exe.dev
      

      Create an integration that provides access:

      $ ssh exe.dev integrations add http-proxy --name inception --target https://exe.dev --no-auth
      Added integration inception
      
      To use this integration, attach it to a VM first:
        integrations attach inception vm:<vm-name>
      
      Usage from a VM:
        curl https://inception.int.exe.xyz/
      

      Attach it to our VM:

      $ ssh exe.dev integrations attach inception vm:no-net
      Attached inception to vm:no-net
      

      Access works via the integration:

      $ ssh no-net.exe.xyz curl -fsS https://inception.int.exe.xyz/
      Agent docs: https://exe.dev/llms.txt
      Human docs: https://exe.dev/docs
      
    6. 🔗 Hex-Rays Blog Hex-Rays Completes Acquisition of HexAI to Expand Its Agentic Platform Offering for Cybersecurity Research rss

      Hex-Rays Completes Acquisition of HexAI to Expand Its Agentic Platform
Offering for Cybersecurity Research

      HexAI's team joins Hex-Rays, the company behind IDA Pro, to bring IDA technology into its agentic security research platform.

    7. 🔗 The Pragmatic Engineer The Pulse: Anthropic builds its own source control system 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 .

      Interesting information from Anthropic about why the company moved off Git and built its own custom source control system. From their engineering blog (emphasis mine):

      "At Anthropic, coding is no longer the bottleneck to building systems or doing research. Claude is able to autonomously iterate on research loops, micro-optimize complex programs, and build new services from the ground up at a speed and scale we haven't seen before. The bottleneck, now, is all of the developer infrastructure built for human scale: source control, builds, and CI.

      In May 2026, Anthropic averaged around 2,500 code changes merged per day; as of September, we merged over 30,000 per day. We don't expect this rate of growth to slow down anytime soon; the latent demand for merging code is practically infinite, and every bottleneck we remove immediately leads to a further increase in the amount of code we produce."

      altAnthropic saw PRs merged per day snowball 10x in less than 4 months ' time. Source: Anthropic

      That's a 12x increase in PRs in a four-month period! Interestingly, just a year ago, I shared how I had gathered Google was preparing for a similar tenfold increase across its broader infrastructure. From the deepdive published in July 2025:

      "Google is preparing for 10x more code to be shipped. A former Google Site Reliability Engineer (SRE) told me: 'What I'm hearing from SRE friends is that they are preparing for 10x the lines of code making their way into production.'

      If any company has data on the likely impact of AI tools, it's Google. 10x as much code generated will likely also mean 10x more code reviews, deployments, feature flags and source control footprint."

      Back to Anthropic, a few things about the company are different from many other tech businesses:

      • Use of a monorepo. Like most large tech companies, Anthropic has a massive monorepo, where the working copy itself is 25GB in size.
      • 25 million git checkouts per day, just for CI! All ~3,000 staff extensively use parallel Claude agents - typically 10-15 per engineer - so a lot of pull requests are created; somewhere in the region of 30,000 per day. All these PRs trigger a massive number of checkouts, mostly from the CI system.
      • Nearly all clients are always online. Git was built on the assumption that clients go offline at various times, and that when they come back up, they need to catch up with branches and merge their changes into the repo. However, when clients are always connected to the corporate internet - like at Anthropic - this assumption no longer holds. Design decisions to accommodate offline clients mean inefficient checkouts and more data transferred than necessary.
      • Hard to horizontally scale git. Scaling git is done by running git mirrors: replicating git repositories across several mirror nodes. A primary git server accepts the writes, pushes out to all mirrors, and clients fetch from various mirrors. Anthropic ran hundreds of git mirrors, but found that once their repo outgrew the mirrors' disk capacity, they could no longer scale the repo.

      So, Anthropic created a new source control system, which is called**** 'Scion' internally. It's closed source, and Anthropic has shared the high- level design principles and data structures used, but no code details. The problem with having your own source control system (and moving off Git and GitHub) is that GitHub's code review system is lost! So, Anthropic also had to build a new code review and code management system, which they call 'Antique.'

      I reached out to the team building Scion and Antique to learn more about how Scion works. Here's what they told me:

      Technical details

      The design of Scion is pretty simple: stand up "server" nodes (that contain the whole repository), store changesets inside of Google Spanner (Google's distributed, highly available database) and blobs (large files) in the highly durable Google Cloud Storage:

      altScion's architecture, at a high level

      I asked Nick G - one of the authors of the original blog posts - about additional details and here's what he told me:

      • Rust : the language that Scion's server and client are written in.
      • Go + React: Antique, Anthropic's new code review and code management platform has its backend in Go and frontend written in React. It works nicely with Scion.
      • More resilient replication strategy : by default, Google Spanner offers multi-zone replication with three replicas. Anthropic has increased the number of replicas (they didn't tell me the exact number, but an educated guess could be five or more replicas), and switched to multi-region replication. All these changes make sense, given how critical code is and that it 's sensible to reduce the likelihood of losing any data - even at the cost of higher write latencies.
      • Backups : on top of replication, Anthropic keeps full backups of the database and soft deletes on the blob storage where file contents live. Spanner's point-in-time recovery also lets Anthropic restore from a bad write. Smart!

      Scaling is an interesting topic. I asked Nick if the system autoscales or scales manually. He told me:

      "Every component can autoscale, but so far it hasn't needed to, even as our merge volume grew more than 10x this year. The data is content-addressed and never changes once it's stored, so the caching tiers do most of the work."

      A team of seven engineers builds and maintains all of this :

      • Four worked on the core Scion server and client
      • Three were split between building code search, merge queues, etc.

      100% of Anthropic 's monorepo has moved off Git. This was no small feat to pull off! Nick gave me more details about the migration:

      "The migration was not simple, but Claude was instrumental in getting it done. It's also 'self-healing' in a way: if we get all the important use cases migrated and have something like 99% coverage, we can just force the cutover and Claude can help us fix anything that actually mattered.

      100% of our monorepo is off of git. A few smaller repos that were never in the monorepo are migrating now, and they're much simpler.

      All of our community resources continue to live on GitHub: skills, plugins, Claude Code's public repo, etc. And last week we launched OSS Scanner, which gives open-source projects free security audits using our strongest models (inspired by Google's OSS- Fuzz)."

      Big Tech moved off Git long ago

      My take is that Anthropic has "Big Tech problems" much earlier than most of Big Tech had to tackle them. Anthropic employs around 3,500 staff, but their coding output - thanks to each person using around 10 agents all the time - is closer to that of a tech company with 35,000-70,000 staff! That's a Meta or Google-sized company by the number of engineers.

      Google and Meta have long since moved off Git because it did not scale for them.

      Google built its own version control that took inspiration from Perforce. Git itself was created by Linus Torvalds in 2005, seven years after Google was founded. So git was not an option for Google to use in the early years: the company chose Perforce instead. It was around 2011-2012 that Google had ran into scaling issues with Perforce and built its own source control system called 'Piper.' It's also a centralized version control model and still works well enough for the search giant. It's no surprise to know that Piper was inspired by Perforce, and Google built Piper to be more performant for their use cases than Perforce was. We covered more on Google 's internal stack in the deepdive Inside Google 's Engineering Culture .

      Meta found that git and other systems could not scale as needed, and so built 'Sapling.' Meta initially moved over to Mercurial, and then custom- built and open sourced Sapling for itself. As the company shared at the time:

      "Sapling began 10 years ago [around 2012] as an effort to make Meta's monorepo scale in the face of ever-increasing engineering growth. Publicly available source control systems were not, and still are not, capable of handling repositories of this size. Instead of moving away from the monorepo and sacrificing engineering velocity, we decided to build the source control system we needed.

      Along the way we realized there were also large opportunities to increase developer velocity by improving the source control experience. By investing in new UX, we've made it possible for even new engineers to understand their repository and do things that were previously only possible for power users."

      Sapling itself is more of a client-server architecture. From the documentation:

      "Sapling started from Mercurial as a distributed source control system, it then transitioned to a client-server architecture to solve the challenges. The server can utilize distributed storage and pre-build various kinds of indexes to provide more efficient operations.

      While Sapling is less "distributed", we tried to make the difference transparent to the user. For example, our lazy commit graph implementation does not require extra commands to "deepen" the graph. The user sees the full history.

      That said, we do drop support of pulling from a lazy repo. Commit cloud covers these use-cases."

      Did Anthropic secretly rip off Sapling 's and Mononoke server

      I asked Anthropic why it doesn't open source Scion. Nick G's reply:

      "Mostly bandwidth! Even a no-support code drop takes a lot of work to do well. We have a small team building and running Scion. While the principles we used to build it are durable, the underlying code changes very frequently. For example, we're still removing git-compatibility layers we only needed for the migration. We'd rather put that time into sharing what we learned, and as the post says, into working with GitHub, GitLab and the OSS community on scaling git.

      To emphasize that point: most teams don't need to leave git! But we think there are things git could benefit from, mainly change sets, derived data, and the checkout protocol. Our goal was to inspire conversation and collaboration around those ideas."

      The explanation, on one end, makes sense. On the other, Meta themselves also emphasized how most teams don't need to leave git, and still open sourced Sapling for anyone to use, or take inspiration from.

      One key component of Sapling is Monoke: the also open source server meant to scale up accepting thousands of commits every hour, across millions of files, written in Rust.

      Could have Anthropic avoided open sourcing Scion, because it might have shown how much they copied from existing open source projects? The creator of Monoke wrote a post accusing of the Anthropic team of ripping off Monoke -- and the Bonsai data model -- writing:

      "This [Scion] was a ripoff. My post yesterday was trying to be as charitable as possible given what I knew, and in particular that the similarity to Mononoke was mostly unintentional and the lack of credit was the result of not doing due diligence. However, after publishing the post I privately received confirmation that Scion intentionally and blatantly ripped off Mononoke, and in particular that there was overlap in personnel. There is no chance that this was an unintentional homage. This is something I had a hunch about but was not comfortable saying yesterday, given what I knew back then.

      The resemblance is much deeper than just the notion of derived data. Some people pointed out that derived data is just an index, which is a well-known concept. I want to clarify that derived data was merely the most striking resemblance. It goes much deeper than that, and extends to the entire data model, as well as a number of the structures built around it."

      Anthropic did not give credit to Monoke in their original post, and only added a small attribution after the complaint.

      To be clear, the point of open source is that you can do what you want with the software without much limitations (save for what the license contains): but it's poor form that it took a public complaint for Anthropic to admit that the clever data structure they presented in their blog post heavily derived for an existing and open source data strucutre.

      Will central VCs stay a niche, or expland beyond Big Tech?

      Big Tech has preferred centralized version control systems (VCS), and I wonder how niche of a trend central VCSs will remain. As we've seen since well before AI, some of the largest tech companies dropped git because they did not like the performance degradation from offline support they no longer need.

      My question is that even with agents, how many companies will see git "break" similarly to how it has at Anthropic? When this happens, how many will find git's mirroring functionality inadequate for their own needs?

      There's a new batch of vendors positioning themselves as git-compatible version control solutions built for AI scale: Entire, founded by GitHub's last CEO, Thomas Dohmke (a current podcast season sponsor), Cursor Origin by SpaceX, and Code Storage by The Pierre Company. At the same time, GitHub itself seems to be investing a lot more in making its platform more reliable and scalable.

      My hunch is that very few companies will go through the trouble of building yet another source control system. In this way, Anthropic reminds me a bit of Google, which has been known to build custom internal systems which are not publicly available, to address the company's internal needs. This can be disorienting for Google engineers after they leave the company and find they've become out of touch with industry-standard tools.


      Read the full issue of The Pulse this is from, or check out this week 's The Pulse. This week's issue covers:

      1. Do we need to rethink software security because of AI? Half a dozen of high-profile security incidents and breaches on a single day: and many of them are connected to AI (or sped up because of it). Attackers are gaining unfair advantages with AI, and defenders will have to react.
      2. Is Anthropic 's new version control system "a rip off"? The creator of Mononoke (an open source, high throughput version control server) accused Anthropic for ripping off their design, and not giving credit, presenting their work like it was novel. Not a good look on the AI lab.
      3. Industry Pulse. Saudi Arabia made a "problematic" offer to pay alleged OpenAI spy's bail, Shopify builds tooling for self-healing software, Foursquare's sale disappoints, Claude Code gets a major speed boost with gzip, and more.
      4. Predictions on the future of software development. Some bold predictions from software engineer and Amp cofounder Thorsten Ball, like how open source doesn't make sense in its current form anymore.
    8. 🔗 r/LocalLLaMA Qwen4 and Kimi3.1 on Arena apperantly rss

      Im so hyped for qwen4 flash

      submitted by /u/thatscoolbutno123
      [link] [comments]

    9. 🔗 Console.dev newsletter Sponsor: Falconer rss

      Monitor your docs like your code. Falconer finds and fixes doc issues before they mislead agents.

      Visit Falconer

    10. 🔗 Console.dev newsletter Pele rss

      Mermaid diagram render.

      What we like: Renders Mermaid syntax to SVG. Colors and fonts are customizable through CSS. Zero dependencies. Responsive layouts and very fast render times (under 1ms).

      What we dislike: Doesn’t support all diagram types or Mermaid plugins.

    11. 🔗 Console.dev newsletter KiviDB rss

      Redis/Valkey alternative.

      What we like: Redis-compatible protocol, including search, vectors, and Lua scripting. Commands run on every core rather than one thread. Claims faster performance than Redis, including better p99 latency. Runs on a different port by default. Written in Rust.

      What we dislike: Licensed under AGPL.

    12. 🔗 Console.dev newsletter Sponsor: BuildKite rss

      Better CI

      Visit BuildKite

    13. 🔗 backnotprop/plannotator v0.28.26 release

      Follow @plannotator on X for updates

      Missed recent releases? Release | Highlights
      ---|---
      v0.28.25 | Re-ask open questions, delivery ticks on the list, a count of new messages on the tab, right-click a thread, click Inbox to refresh
      v0.28.24 | A new look for the Inbox, Send now, tag agents, comment on an agent's message, much smaller reads for agents, links in HTML pages
      v0.28.23 | Inbox replies reach sessions with background subagents, dictated text no longer goes missing, 👍 Looks good reaches the agent, notifications that never fail silently
      v0.28.22 | 👍 Looks good, full view for files, one viewer for a thread's images and files, every session prints its URL, PLANNOTATOR_BROWSER=none opens nothing
      v0.28.21 | Message an agent from the Inbox, video attachments, Open in for attachments, Code / Tests / Generated in code review, writes from other websites refused
      v0.28.20 | Inbox search (⌘K), real folder names for projects, data files open in the code view, word-only replies leave questions open
      v0.28.19 | Ask this session in T3 Code, folder sessions load shared stylesheets and images, the agent note asked once per agent, Copy connect prompt
      v0.28.18 | plannotator inbox connects your agents, agents are told when to use the Inbox, rendered Markdown in code review, Inbox Settings in sections
      v0.28.17 | The Inbox on iPads and narrow windows, the reply bar no longer cuts off "Keep open", a Pi crash on /reload fixed
      v0.28.16 | The Inbox on a phone, a doorbell for new questions, Mark read, step through a thread's files, replies when the asking session ended
      v0.28.15 | Long Inbox threads fold to what is new, "Skipped N questions" replies, Inbox list and sidebar fixes
      v0.28.14 | Agents can replace an earlier question, comment on a guided review in the Inbox, issue numbers link to the repository

      What's New in v0.28.26

      Action items and reply drafts in the Inbox, one decision button for plan review, Enter to save a comment, a custom code font, and many fixes. 35 PRs, 9 of them from 8 outside contributors, 5 of whom are first-timers.

      Plannotator Inbox

      Action items

      An agent can ask you to go do something: run a command, sign in somewhere, check a page. It shows as a card in the thread with Done , Can't do it and Add note , and your answer goes back to the agent.

      Reply drafts

      What you type in a reply box is kept per thread. It comes back when you reopen the thread, after a reload, and after a restart. A thread with an unsent draft is marked Draft in the list.

      Replies to a busy agent go in on their own

      If the agent is in a long turn, the line under your reply shows how long it has waited, and after 5 minutes the reply goes into the running turn by itself, as if you'd pressed Send now.

      Smaller changes

      • A Send skips a question only when you press Skip. Questions you leave alone stay open. #2058
      • Answers you pick while writing a reply show in the reply box right away. #2051
      • A skipped question keeps its note in the reply. #2034
      • Several Inbox tabs share one connection to the Inbox. #2057
      • Subjects stay on one line , and stray tool-call text never becomes a title. #2053
      • A thread that fails to load tries again and says so. #2054
      • Faster over your tailnet : the window is sent compressed. #2042
      • Long issue numbers link as issues , not colour swatches. #2040
      • Restart help leads with/reload-plugins. #2035
      • Works behind a local reverse proxy (nginx, Caddy). #2060

      Plannotator

      One decision button for plan review

      Plan review's header now works like annotate and code review. With nothing to send it shows Approve. Once you add comments it becomes Send Feedback. Other choices, such as Request changes or Approve with notes, are under the arrow.

      Enter to save a comment

      Turn on Settings → General → Enter saves a comment , and Enter saves while Shift+Enter adds a new line. It's off by default.

      Your own code font

      Settings → Display → Code Font → Custom… takes the name of any font on your machine for code review.

      Start a new Ask AI chat

      A New chat button clears the Ask AI panel and starts fresh, in plan review, annotate and code review.

      Jump between changes in code review

      N and P jump to the next and previous change. Commenting from the gutter now covers every line you selected, not just the one you clicked.

      Smaller changes

      • A code review an agent waits on hears your Approve (Claude Code). #2047
      • Annotate picks up a file changed on disk in its version diff. #2049
      • A plan reviewed across midnight keeps its versions. #1681 by @aomalov
      • Images in a folder session load from the open document's folder. #2033 by @xiaofeilovecoding
      • Sidebar shortcuts stay visible next to the Agent TUI. #1019 by @leoreisdias
      • Afile.ts:42 link opens at line 42. #1909 by @Totopo27
      • Triple-click no longer highlights into the next line. #1408 by @dca123
      • Ticking a Guided Review section marks its files viewed. #2044
      • Very large diffs from git textconv are never drawn. #2041
      • Pi: review opened and closed events, and long checklists keep the next item in view. #2050
      • OpenCode: the agent-switch choice is saved, and Ask AI no longer hangs. #2045, #1413 by @danowicz
      • Claude Code Team/Enterprise: a plan is approved once, not twice. #2043
      • The install script works on machines withoutgh. #1995 by @viniciusestevam

      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: The plugin and the plannotator binary update separately, so run the install script above as well. In a terminal:

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

      Then restart Claude Code. Inside Claude Code, run /plugin marketplace update plannotator, then open /plugin → Installed → plannotator → Update now.

      Pi:

      pi update --extensions
      

      OpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.

      What's Changed

      New Contributors

      Contributors

      • @FNDEVVE: full-range gutter comments and hunk jumps in code review.
      • @leoreisdias: sidebar shortcuts beside the Agent TUI.
      • @dca123: the triple-click highlight fix.
      • @Totopo27: line-accurate code links, and the Inbox behind a local reverse proxy.
      • @aomalov: reported and fixed plans that lost their versions at midnight.
      • @danowicz: the OpenCode Ask AI hang.
      • @xiaofeilovecoding: folder images from the open document.
      • @viniciusestevam: reported and fixed the installer without gh.

      Thanks to everyone who reported issues or asked for features in this release:

      Full Changelog : v0.28.25...v0.28.26

    14. 🔗 pydantic/monty v1.3.0 - 2026-10-21 release

      What's Changed

      New Contributors

      Full Changelog : v1.2.0...v1.3.0

    15. 🔗 smol-machines/smolvm smolvm v1.31.2 release

      What's Changed

      • chore(nix): bump flake to 1.31.0 by @github-actions[bot] in #1917
      • Never lower a branch source's memory ceiling below what its cgroup still holds by @BinSquare in #1921
      • chore(nix): bump flake to 1.31.1 by @github-actions[bot] in #1923
      • Fix flaky branchpoint lease test by @BinSquare in #1918
      • Let machine monitor flags override the Smolfile health settings by @RaphaelFakhri in #1920
      • Give a new disk volume the image's ownership and bind nested volumes after their parents by @BinSquare in #1870
      • ci: run every Linux job on smol machines by @BinSquare in #1916
      • Change ports live on machines without virtio-net through a vsock port forwarder by @BinSquare in #1875
      • Add Chinese, Japanese and Korean READMEs by @BinSquare in #1871
      • Pass the guest path to ns-file and stage on scratch for streamed container uploads by @Vishv07 in #1925
      • Isolate filesystem unit tests from the CI runner overlay by @BinSquare in #1927
      • agent: unit tests never resolve paths through the machine they run on by @BinSquare in #1926
      • Checkpoint a source frozen as a branch base without resuming it, so its branches can move to another node by @BinSquare in #1928
      • Keep cache disk bases within a byte budget, evicting the least recently used by @BinSquare in #1930
      • Bump smolvm to 1.31.2 by @BinSquare in #1929
      • Put /tmp on disk, regrow /dev/shm after a RAM grow, match GitHub runner limits and LANG by @BinSquare in #1931
      • Record why a machine's VMM ended, OOM kill and seccomp included by @BinSquare in #1884
      • Fix inherited disk-chain compaction by @BinSquare in #1933
      • Move a live-published host port to another guest port without rebinding it, and close removed ports before the change returns by @BinSquare in #1935
      • Unpack a .smolmachine once per pack on macOS and clone it for each machine, and let no create leave its data behind when it fails or its client disconnects by @BinSquare in #1934
      • Keep a machine's disk durability across checkpoint restore and let machine update change it by @BinSquare in #1932
      • Answer a branch at the disk chain limit with 409 instead of 500 by @BinSquare in #1936

      New Contributors

      Full Changelog : v1.31.0...v1.31.2

    16. 🔗 OmniNull/OmniWM Canary 20261022-0439 (8ecdfbff) release

      Automated canary build of main. It is signed and notarized like a release but skips the owner review, so treat it as unstable.

      See the canary guide to install, update, or return to stable. For everyday use, download the latest stable release.

      • Commit: 8ecdfbff1327
      • Base tag: canary-20261020-1054-39408104600-1

      Changes since canary-20261020-1054-39408104600-1

      • 8ecdfbf Merge pull request #938 from dappermint/fix/command-palette-shortcuts
      • 20204d2 Merge pull request #937 from dappermint/fix/live-wallpaper-capture
      • 6f734a5 Merge pull request #936 from dappermint/perf/idle-1019
      • ae50dec Merge branch 'main' into perf/idle-1019
      • 223c61e Merge pull request #935 from dappermint/perf/input-1019
      • f1adb34 fix(palette): match shortcuts by key position on non-qwerty layouts
      • ca21cc4 fix(wallpaper): keep live wallpaper captures already clipped to the display
      • 480451b test(input): check captured drags still reach main, keep the forward private
      • 91a3049 fix(wallpaper): keep the crop at the display size for fractional window origins
      • 0e9b55d test(shell): assert both backdrop filters survive a fill only repaint
      • 49a3955 fix(wallpaper): capture live wallpapers drawn above the desktop level
      • c20322e Merge upstream/main into perf/idle-1019
      • 76364c3 Merge upstream/main into perf/input-1019
      • d2a6d2f Merge pull request #934 from OmniNull/dependabot/npm_and_yarn/website/npm_and_yarn-63f9813d79
      • e81e6f1 build(deps): bump vite
      • 707d37d Keep settled tab rail moves on SkyLight after animation moves
      • 0b5fa2b Skip tab rail relayout when its size is unchanged
      • 2b75644 Check screenshot selection once per pointer-validated focus handoff
      • 19980a7 Merge pull request #931 from dappermint/test/stabilise-shell-ui-tests
      • 6af545c test(shell): wait for the drawer package before toggling its popout
      • faa6219 fix(surface): ignore registrations whose window was deallocated
      • 39bcaaa Pass query options instead of a window count to SkyLight queries
      • 7de1437 Render launcher icons in the system icon style
      • bdeeddb Skip clipboard items that macOS excludes from history
      • 5b1beb0 Read window fullscreen state in the admission attribute batch
      • 1059fa2 Query a dragged window's identity off the main connection
      • 2736ce5 Merge pull request #927 from CallMeLaNN/fix-zsh-completion
      • 55a2737 docs: initialize compinit before evaluating zsh completions
      • 023b7b3 test: cover zsh completion eval registration and autoload paths
      • 4b0d1f4 test: wrap long completion harness lines
      • d1f28f2 test: call zsh completer explicitly in completion harnesses
      • 2aeb8d9 Merge pull request #914 from hezhizhen/codex/dwindle-native-live-resize
      • 8b1b400 fix: use AX fallback for final native resize frames
      • bf662ab perf: avoid duplicate native resize renders on release
      • 7f33a6c fix: avoid world commits for rejected native resizes
      • 416f198 feat: resize Dwindle neighbours during native edge drags
      • eaf668c fix: zsh completions for eval based on official doc
      • 9481efe test(shell): cover fill-only repaint keeping backdrop filters
      • 4c18d61 perf(input): stop captured drags from blocking on the main thread
      • a792655 perf(idle): cut idle wakeups and redundant layer work
    17. 🔗 anthropics/claude-code v2.1.308 release

      What's changed

      • Bug fixes and reliability improvements
    18. 🔗 r/LocalLLaMA Kitten-TTS 2: New Open-source SOTA 1.58 bit TTS (CPU-only with voice cloning, multilingual, emotion control) rss

      Kitten-TTS 2: New Open-source SOTA 1.58 bit TTS (CPU-only with voice cloning, multilingual, emotion control) | KittenML has just released code and weights of Kitten-TTS 2, which is a super-efficient frontier TTS model, and the world's first 1.58-bit TTS model. It runs in real time on just a CPU, with zero-shot voice cloning, multilingual support, and expressive / emphasis control. Code and weights are open-source. Ternary(1.58-bit) Weights means it can run locally or be self-hosted for super-cheap. Github: https://github.com/KittenML/KittenTTS
      Hugging Face: https://huggingface.co/KittenML/kitten-tts-2
      KittenML's Discord: https://discord.com/invite/VJ86W4SURW Key features and Advantages

      1. Ternary TTS: Every linear weight in the body is one of three values (-1, 0, +1) with group size of 128 for scales. Tiny footprint and fast CPU inference. The model has 1.7B parameters.
      2. Real-time on CPU and consumer GPU's too : No GPU needed for real-time generation. Optimized ternary kernels for CPU inference provided.
      3. Expressive voice cloning : zero-shot cloning from less than 5 seconds of reference audio, and it keeps the expressivity, accent information etc. No fine-tuning needed.
      4. Multilingual TTS: Model supports voice cloning in 20+ languages. Cross-language voice cloning can be used to create accented speech too.
      5. Expressive / emphasis control: you can steer the delivery and stress specific words, not just pick a voice. Details in the Readme.
      6. Open source (hell yeah!) : code and weights are open-source and free to use. It's an oss alternative to elevenlabs for gpu-poor folks. easy to self-deploy or run locally.

      7. What changed from V0.8 to 2: higher quality. Completely new architecture, natural sounding speech, ternary weights, zero-shot voice cloning, multilingual, and emphasis/emotion control. submitted by /u/ElectricalBar7464
      [link] [comments]
      ---|---

    19. 🔗 Ampcode News Self-Hosted Orbs rss

      You can now self-host orbs. You provide the compute and Amp turns it into orbs.

      If you have compute that can

      • quickly start new machines
      • put them to sleep and resume them equally fast
      • keep them around for a long time
      • scale them to zero, so no one has to worry about having a lot of them sleeping

      then you are now able to replicate the orb experience within your own infrastructure.

      How It Works

      You run amp orb provider inside your infrastructure. The orb provider then reaches out to Amp and waits for requests to spawn, pause, or delete orbs. Like this:

      1. amp orb provider opens a connection to ampcode.com. 2. Amp sends events to the provider. 3. The provider spawns an orb per thread. 4. Each orb runs in your infrastructure and connects back to its thread on ampcode.com. No inbound ports are needed.

      How you satisfy those requests is up to you, because amp orb provider will dispatch the requests for orb operations (spawn to create or resume orbs, pause, and delete) to a program that you provide, like so:

      $ amp orb provider ./dispatch.sh
      

      In that program, you can do whatever works best for your infrastructure. Here are some illustrative examples:

      #!/usr/bin/env bash
      # dispatch.sh
      set -euo pipefail
      
      case "$ORB_OPERATION" in
          spawn)
              docker start "$ORB_ID" 2>/dev/null ||
                  docker run --platform linux/amd64 -d --name "$ORB_ID" \
                      "$ORB_IMAGE" sleep infinity
              docker exec -d --env ORB_TOKEN "$ORB_ID" amp orb bootstrap
              ;;
          pause)
              docker stop "$ORB_ID"
              ;;
          delete)
              docker rm -f "$ORB_ID"
              ;;
      esac
      

      Install the E2B CLI and the e2b package, set E2B_API_KEY, and build a template:

      echo 'FROM us-central1-docker.pkg.dev/amp-prod-0/amp-orb/amp-orb:latest' \
          > e2b.Dockerfile
      e2b template create amp-orbs --dockerfile e2b.Dockerfile \
          --cpu-count 4 --memory-mb 8192 --ready-cmd true
      export E2B_TEMPLATE=amp-orbs
      
      #!/usr/bin/env node
      // dispatch.mjs
      import { Sandbox } from 'e2b'
      
      const {
          ORB_OPERATION, ORB_ID, ORB_TOKEN, AMP_URL, E2B_TEMPLATE,
      } = process.env
      const metadata = { orbId: ORB_ID }
      const [existing] = await Sandbox.list({
          query: { metadata, state: ['running', 'paused'] },
      }).nextItems()
      
      if (ORB_OPERATION === 'spawn') {
          const timeoutMs = 60 * 60 * 1000
          const sandbox = existing
              ? await Sandbox.connect(existing.sandboxId, { timeoutMs })
              : await Sandbox.create(E2B_TEMPLATE, {
                  metadata, timeoutMs, lifecycle: { onTimeout: 'pause' },
              })
          const envs = { ORB_TOKEN }
          if (AMP_URL) envs.AMP_URL = AMP_URL
          const bootstrap = await sandbox.commands.run('amp orb bootstrap', {
              user: 'user', envs, background: true, timeoutMs: 0,
          })
          await bootstrap.disconnect()
      } else if (ORB_OPERATION === 'pause' && existing) {
          await Sandbox.pause(existing.sandboxId)
      } else if (ORB_OPERATION === 'delete' && existing) {
          await Sandbox.kill(existing.sandboxId)
      }
      
      #!/usr/bin/env bash
      # dispatch.sh
      set -euo pipefail
      export PATH="/usr/local/bin:/opt/homebrew/bin:$PATH"
      
      # "$ORB_IMAGE" is the Amp orb image.
      
      ids=$(container list --all --quiet)
      exists() { grep -Fxq "$ORB_ID" <<<"$ids"; }
      
      case "$ORB_OPERATION" in
          spawn)
              if exists; then
                  container start "$ORB_ID"
              else
                  container run --detach --init --rosetta \
                      --platform linux/amd64 --cpus 4 --memory 8G \
                      --name "$ORB_ID" "$ORB_IMAGE" sleep infinity
              fi
              # A bare --env NAME copies the value from the host.
              container exec --detach --env ORB_TOKEN --env AMP_URL \
                  "$ORB_ID" amp orb bootstrap
              ;;
          pause)
              if exists; then
                  container stop "$ORB_ID"
              fi
              ;;
          delete)
              if exists; then
                  container delete --force "$ORB_ID"
              fi
              ;;
          *)
              exit 1
              ;;
      esac
      
      #!/usr/bin/env python3
      # dispatch.py
      import os
      
      import modal
      
      # Needs `pip install modal` plus MODAL_TOKEN_ID and MODAL_TOKEN_SECRET.
      APP = "amp-orbs"
      app = modal.App.lookup(APP, create_if_missing=True)
      snapshots = modal.Dict.from_name("amp-orb-snapshots", create_if_missing=True)
      orb_id = os.environ["ORB_ID"]
      
      try:
          sandbox = modal.Sandbox.from_name(APP, orb_id)
      except modal.exception.NotFoundError:
          sandbox = None
      
      match os.environ["ORB_OPERATION"]:
          case "spawn":
              if sandbox is None:
                  # Modal has no pause, so resume from the last snapshot.
                  snapshot = snapshots.get(orb_id)
                  if snapshot:
                      image = modal.Image.from_id(snapshot)
                  else:
                      image = modal.Image.from_registry(os.environ["ORB_IMAGE"])
                  sandbox = modal.Sandbox.create(
                      "sleep", "infinity", app=app, name=orb_id, image=image,
                      cpu=4, memory=(16384, 16384), timeout=24 * 60 * 60,
                  )
              # Modal execs run as root; point bootstrap at the image user's home.
              bootstrap = "setsid amp orb bootstrap </dev/null >/dev/null 2>&1 &"
              sandbox.exec(
                  "bash", "-c", bootstrap,
                  env={
                      "ORB_TOKEN": os.environ["ORB_TOKEN"],
                      "AMP_URL": os.environ.get("AMP_URL"),
                      "HOME": "/home/user", "USER": "user",
                  },
              ).wait()
          case "pause":
              if sandbox:
                  image_id = sandbox.snapshot_filesystem(timeout=120).object_id
                  snapshots[orb_id] = image_id
                  sandbox.terminate()
          case "delete":
              if sandbox:
                  sandbox.terminate()
              snapshots.pop(orb_id, None)
      
      #!/usr/bin/env node
      // dispatch.mjs
      import { APIError, Sandbox, Snapshot } from '@vercel/sandbox'
      
      const { ORB_OPERATION, ORB_ID, ORB_IMAGE, ORB_TOKEN, AMP_URL } = process.env
      const credentials = {
          token: process.env.VERCEL_TOKEN,
          teamId: process.env.VERCEL_TEAM_ID,
          projectId: process.env.VERCEL_PROJECT_ID,
      }
      
      if (ORB_OPERATION === 'spawn') {
          const sandbox = await Sandbox.getOrCreate({
              ...credentials,
              name: ORB_ID,
              // Copy Amp's image to VCR, then set ORB_IMAGE to its VCR URL.
              image: ORB_IMAGE,
              resources: { vcpus: 4 },
              timeout: 60 * 60 * 1000,
              persistent: true,
              snapshotExpiration: 0,
              keepLastSnapshots: { count: 1, expiration: 0, deleteEvicted: true },
          })
          const setup = await sandbox.runCommand({
              cmd: '/bin/bash',
              args: ['-c', 'hostname localhost && mkdir -p /vercel/sandbox'],
              sudo: true,
          })
          if (setup.exitCode !== 0) throw new Error(await setup.stderr())
          await sandbox.runCommand({
              cmd: '/usr/bin/setpriv',
              args: [
                  '--reuid=user', '--regid=user', '--init-groups', '--',
                  '/usr/bin/env', `ORB_TOKEN=${ORB_TOKEN}`,
                  ...(AMP_URL ? [`AMP_URL=${AMP_URL}`] : []),
                  'HOME=/home/user', 'USER=user', '/bin/bash', '-lc',
                  'exec amp orb bootstrap',
              ],
              sudo: true,
              detached: true,
          })
      } else if (ORB_OPERATION === 'pause' || ORB_OPERATION === 'delete') {
          try {
              const sandbox = await Sandbox.get({
                  ...credentials, name: ORB_ID, resume: false,
              })
              if (ORB_OPERATION === 'delete') {
                  if (sandbox.status === 'running') await sandbox.stop()
                  for await (const saved of await sandbox.listSnapshots()) {
                      if (saved.status !== 'created') continue
                      const snapshot = await Snapshot.get({
                          ...credentials, snapshotId: saved.id,
                      })
                      await snapshot.delete()
                  }
                  await sandbox.delete()
              } else if (sandbox.status === 'running') await sandbox.stop()
          } catch (error) {
              if (!(error instanceof APIError && error.response.status === 404)) {
                  throw error
              }
          }
      }
      
      #!/usr/bin/env python3
      # dispatch.py
      import os
      from uuid import uuid4
      from daytona import (
          Daytona, DaytonaNotFoundError, CreateSandboxFromImageParams,
          Resources, SessionExecuteRequest, SandboxState,
      )
      
      daytona = Daytona()
      operation = os.environ['ORB_OPERATION']
      try:
          sandbox = daytona.get(os.environ['ORB_ID'])
      except DaytonaNotFoundError:
          sandbox = None
      
      if operation == 'spawn':
          if sandbox is None:
              sandbox = daytona.create(CreateSandboxFromImageParams(
                  name=os.environ['ORB_ID'], image=os.environ['ORB_IMAGE'],
                  os_user='user', resources=Resources(cpu=4, memory=8, disk=10),
                  auto_stop_interval=0, auto_delete_interval=-1,
              ), timeout=240)
          elif sandbox.state != SandboxState.STARTED:
              sandbox.start()
          env = {key: os.environ[key] for key in ('ORB_TOKEN', 'AMP_URL')
                 if key in os.environ}
          sandbox.update_env(env, unset=['AMP_URL'])
          session = str(uuid4())
          sandbox.process.create_session(session)
          sandbox.process.execute_session_command(session, SessionExecuteRequest(
              command="bash -lc 'exec amp orb bootstrap'", run_async=True,
          ))
      elif operation == 'pause' and sandbox:
          if sandbox.state == SandboxState.STARTED:
              sandbox.stop()
      elif operation == 'delete' and sandbox:
          sandbox.delete()
      
      #!/usr/bin/env bash
      # dispatch.sh
      set -euo pipefail
      
      # Pause/resume currently requires access enabled by exe.dev support.
      status=$(ssh exe.dev ls "$ORB_ID" --json |
          jq -r --arg id "$ORB_ID" '.vms[] | select(.vm_name == $id) | .status')
      
      case "$ORB_OPERATION" in
          spawn)
              if [[ -z "$status" ]]; then
                  ssh exe.dev new --name="$ORB_ID" --image="$ORB_IMAGE" \
                      --cpu=2 --memory=8G --no-email
              elif [[ "$status" == paused ]]; then
                  ssh exe.dev resume "$ORB_ID"
              fi
              {
                  printf 'export ORB_TOKEN=%q\n' "$ORB_TOKEN"
                  if [[ -n "${AMP_URL:-}" ]]; then
                      printf 'export AMP_URL=%q\n' "$AMP_URL"
                  fi
                  cat <<'BOOTSTRAP'
      sudo -u user --preserve-env=ORB_TOKEN,AMP_URL bash -lc \
          'cd "$HOME"; nohup amp orb bootstrap </dev/null >.amp-bootstrap.log 2>&1 &'
      BOOTSTRAP
              } | ssh "$ORB_ID.exe.xyz" bash -s
              ;;
          pause)
              if [[ "$status" == running ]]; then
                  ssh exe.dev pause "$ORB_ID"
              fi
              ;;
          delete)
              if [[ -n "$status" ]]; then
                  ssh exe.dev rm "$ORB_ID"
              fi
              ;;
      esac
      

      Use Amp's Helm chart to run orbs on GKE, EKS, or AKS. Under the hood, it runs amp orb provider with a supplied dispatch program that handles spawning, pausing, and deleting orbs. You don't need to write a dispatch script yourself.

      1. Create a custom orb provider in your Amp workspace and copy its token.
      2. Prepare a dedicated cluster with worker nodes and snapshot storage. Paused orbs are saved to storage and can resume on another worker node.
      3. Download the Kubernetes setup files. The ZIP includes gke.md, eks.md, and aks.md with the setup and Helm commands for each cloud, plus Terraform examples. Use the instructions for your cloud to install the chart and test your first orb.

      These examples use Amp's pre-built ORB_IMAGE, which includes the Amp CLI and other dependencies. You can use a different Linux image as long as you can start amp orb bootstrap in it (and it has the dependencies for other features). That process connects the orb to Amp so Amp can set up the environment and run the agent's tools.

      Once you have your dispatch program, go to your workspace settings (individuals can create a workspace for free), add a Custom Orb Provider, copy the token, and run amp orb provider:

      $ chmod +x dispatch.sh
      $ export AMP_ORB_PROVIDER_TOKEN="<copied-token>"
      $ amp orb provider ./dispatch.sh
      

      Once that runs, open ampcode.com or the Amp macOS or iOS applications and create a new thread. Expand Orb and choose your provider under Self-Hosted.

      The full new thread composer with the executor picker open and our-k8s-orbs highlighted and selected under Self-Hosted The full new thread composer with the executor picker open and our-k8s-orbs highlighted and selected under Self-Hosted

      And then submit your prompt. Amp will send a request to your provider to spawn an orb, clone your repository, run your setup files, and start the agent.

      And thus begins, as they say, orbin' time. Self-hosted.

      You Probably Shouldn't Self-Host Orbs

      All that said: you probably shouldn't self-host orbs.

      We built self-hosted orbs for enterprises that can't use the orbs we host, because regulations might restrict where their code runs, because they need access to internal networks, or because they need custom hardware attached.

      If you're on an Enterprise plan, let us know and we'll help you set it up.

      That's why the interface is so open: we want to support all the infrastructure our enterprise customers might have, as long as it meets the qualitative requirements above (fast-to-start, resumable machines that scale to zero, etc.). But that also means we only support our end of the contract, not every possible piece of infrastructure you can plug in.

      Pricing

      Self-hosted orbs are free for individuals and teams. Enterprises will be charged standard orb pricing starting October 29. Until then, self-hosted orbs are free for every workspace.

      Getting Started

      For more information on self-hosted orbs and how to run self-hosted orbs on Kubernetes, see the documentation.

  3. October 21, 2026
    1. 🔗 IDA Plugin Updates IDA Plugin Updates on 2026-10-21 rss

      IDA Plugin Updates on 2026-10-21

      New Releases:

      Activity:

      • capa
      • ida-cli
        • 1a885505: Isolate reused runtime evidence and serialize helper test observations
        • da5b7d90: Normalize the launch grant root through system symlink prefixes
        • 219fd999: Remove obsolete absence-settlement descriptions and dead scan helper
        • 5dde33db: Witness complete journal retirement before releasing the late worker
        • a173256b: Preserve authorization fences after confirmed shutdown in cleanup gui…
        • 72b01ed6: Correct the documented five-patch chain enumeration
        • 28571682: Record the actual late-worker denial exit code in regression evidence
        • 3537f5e6: Add an exact helper-signed before-Rust-ACK W1 test barrier
        • d3d5c37b: Reject legacy absence-only facts at the target journal boundary
        • 917f8e07: Cover unreadable argv with a complete live process status
        • 6b6d4231: Prove late workers cannot open after revocation and document upgrade …
        • 8e9c4efc: Remove the obsolete elapsed exec margin from launch settlement
        • 338ea084: Settle unclaimed launches using atomic revocation instead of process …
        • 8964f207: Gate SDK worker IDB access on a durable revocable launch permit
        • 51179df8: Document feasibility and durable launch authorization design
        • adb16e4f: Align bridge entrance refusal retry advice with recovery metadata
        • ae36b935: Restrict bridge-loss retries to whole-request entrance refusals
        • 7b238081: Let the unarmed bridge-loss test settle before the next case opens
        • 142be433: Let a daemon with a lost Nexus bridge leave by itself and let the CLI…
        • 55bb8c87: Settle a signed launch whose owner never existed after the bridge was…
      • ida-domain
        • 2e956294: Publish to PyPI with PEP 740 attestations (#140)
      • ida-nexus
        • a5fe4f0a: Merge pull request #72 from HexRaysSA/feat/attribute-error-suggestions
      • idalib
        • 48e57f76: fix: require Function, Segment, and CFunction to be dropped bef…
      • mcrit-plugin
        • 38f9bac7: Make the Ghidra tab headers clickable
        • 36b42d36: Add a MCRIT plugin for Ghidra
      • oh-my-dump
        • ef5c3544: Merge pull request #5 from nevergiveupcpp/chore/codeowners
        • aa1ea5c9: chore: add code owners
        • 746e06bb: Merge pull request #4 from nevergiveupcpp/ci/node24-actions
        • ea489431: ci: update actions to node 24
        • c757dc98: Merge pull request #3 from nevergiveupcpp/build/multiplatform-support
        • 534968dd: chore: bump version to 1.0.17
        • 08426719: docs: update installation and configuration reference
        • 0404f7ac: build: add linux, macos and windows arm64 support
        • 42f38960: fix: resolve export filter type name collision
      • pyrrha
        • ca62056a: all: bump version
        • 938fbb59: fix(tests): fix export parameter in fs-cg
        • 1e196af4: fix: realign the backend-free test suite with dev
        • b9ee8715: tests: update decomp tests to check last features
        • f0ea1ce5: tests: update test_fw to test for inheritance mapping for cpp fw
        • 94fe53a4: mapper: remove thunk from decomp mapper and move imports into a dedic…
        • ec397228: mappers: remove cache system in intercg_mapper
        • 301bd45b: tests: update decomp tests to check last features
        • fa350f9d: mappers: do not decompile imported funcs
        • c3b93e3c: fix(main): options
        • 63c312fe: fix(cli): add missing debug flag
        • 158e80f3: cli: refactorize and improve documentation
        • 9ed490ec: fix(tests): adapt expected results to add new cpp binaries
        • d3f42a91: fix(tests): add new symlinks to expected results
        • 8032f12f: fix(ci): gitlab ci was not detecting correctly version given by a tag
        • 912f9c31: test(cli): cover C++ binaries in the fs-cg tests
        • df1f0eb2: fix(mappers): PLT stubs no longer shadow the functions they forward to
        • 79910ae4: feat(backend): expose thunk targets and import status
    2. 🔗 earendil-works/pi v1.4.0 release

      New Features

      • Image input for classifiers : codemode models.classify() accepts images for TypeSafe's Jev and Cloudflare's Clef models on typesafe, cloudflare-workers-ai, and OpenRouter. See Use classifier models and Codemode.
      • Models Configuration reference : every provider, model, model override, and compatibility field of models.json, generated from its schema. See Models Configuration.
      • Summaries without a fixed output cap : compaction and branch summaries use the model's output limit, so long reasoning no longer makes them fail. See Compaction.
      • Codemode waits for a free worker : parallel scripts and in-process subagents queue instead of failing, and PI_CODEMODE_MAX_WORKERS raises the limit. See Codemode limits.
      • Rex terminal support : OSC 8 hyperlinks, truecolor, and inline images.

      Added

      • Added a Models Configuration reference generated from the models.json schema, listing all provider, model, model override, and compatibility fields (#10790)
      • Codemode models.classify() now accepts images for TypeSafe's Jev and Cloudflare's Clef models on typesafe, cloudflare-workers-ai, and OpenRouter, and lists Clef Omni and Jev 1.14 on Workers AI.
      • Provider-level compat in models.json now also applies to classifier models, with the System One fields imageInput and sendImageOptInHeader for proxies that serve another service's classifiers. Extension classifier models accept compat too.
      • Added MiniMax-M3.1-Flash to the minimax and minimax-cn providers, with thinking levels low through max (#11121)
      • Added support for the Rex terminal: OSC 8 hyperlinks, truecolor, and inline images (#11131, #11150 by @petrroll, #11183 by @nihaals)

      Changed

      • Provider attribution headers now come from pi-ai's client identity. Extensions' before_provider_headers handlers no longer see the OpenRouter, NVIDIA NIM, and OpenCode attribution headers; returning null for one still removes it. Cloudflare requests send pi's detailed User-Agent instead of pi-coding-agent, as do GitHub release checks for tool downloads, and OpenCode requests send x-opencode-client whenever attribution is enabled, not only with a session.
      • generateSummary() and generateSummaryWithUsage() now ignore their reserveTokens parameter. Summary requests use the model's output limit instead.
      • Changed the default GitHub Copilot model from gpt-5.4, which Copilot retired, to gpt-6.1-sol.
      • Changed the default NVIDIA model to nvidia/nemotron-3.5-super-vl-120b-a12b (#10910 by @cv)
      • Changed the default Xiaomi model to mimo-v2.6-pro for the xiaomi and Xiaomi Token Plan providers, since mimo-v2.5-pro left the catalog.
      • Grok 4.3 and Grok 4.5 on the xai provider now offer the xhigh thinking level.
      • Sign in with ChatGPT: ChatGPT Business workspace usage-limit errors are not retried and tell the user to ask their workspace admin to increase the limit.

      Fixed

      • Fixed compaction and branch summaries failing with "generation hit the token cap" when reasoning used most of the fixed summary output limit. Summaries now use the model's output limit, and compaction.reserveTokens only controls when compaction starts (#9512, #9075).
      • Fixed models.schema.json missing descriptions for provider and model fields, so editors showed no hints for them (#10790)
      • Fixed pi update failing with "Managed install marker is missing or invalid" when managed-install.json starts with a UTF-8 BOM, which Windows PowerShell 5.1 adds when it rewrites the file.
      • Fixed HTML export showing literal asterisks for Markdown bold and italic next to CJK punctuation (#3353, #10154)
      • Fixed the terminal staying in mouse-tracking, focus-reporting, Kitty keyboard, and alternate-screen modes when pi exits without its normal terminal teardown, which flooded the shell prompt with escape sequences (#11170)
      • Fixed concurrent extension select/confirm/input/editor dialogs and inline custom() components in interactive mode: a second dialog replaced the first and the first promise never settled; closing the visible dialog now shows the previous one again (#11166, #9909)
      • Fixed pasting in the shell hanging after copying text in pi and suspending it with Ctrl+Z on Linux: the background wl-copy/xclip/xsel process that keeps serving the clipboard was suspended along with pi (#11179)
      • Fixed codemode scripts failing immediately when both codemode workers are busy, for example with parallel codemode calls or in-process subagents. Scripts now wait up to 60 seconds for a free worker, and PI_CODEMODE_MAX_WORKERS raises the limit of two workers (#11184)
      • Fixed extensions failing to load when importing @earendil-works/pi-ai/models (e.g. for clampThinkingLevel) by exposing the subpath through the extension loader aliases and virtual modules (#11156)
      • Fixed mcp.json files that start with a UTF-8 BOM failing to parse, which skipped all their MCP servers and made pi mcp add/pi mcp remove fail (#11191)
      • Fixed /compact <instructions> ignoring the instructions when summarizing the start of a turn that compaction splits. When the split turn was the only new content since the last compaction, the instructions were ignored entirely (#11058)
      • Fixed resumed sessions and /tree navigation leaving extension tools inactive when the branch recorded its tools before they were registered, such as tools from extensions installed after the session started. Extension tools the branch never added or removed are now active unless they are registered with defaultActive: false (#11062, #11075)
      • Fixed sessions breaking after recovery from a response cut off at the output limit: the truncated tool call was omitted but its tool results were kept, so providers rejected every later request (#11227, #11233 by @petrroll)
      • Fixed the grep tool following RIPGREP_CONFIG_PATH, where options such as --fixed-strings silently changed regex searches into literal ones. The tool now runs rg --no-config (#11203, #11230 by @petrroll)
      • Fixed Windows shell detection rejecting runnable Microsoft Store shell aliases (#9504 by @petrroll)
      • Fixed Windows shell detection missing PowerShell outside PATH and the legacy WSL bash.exe launcher when Windows is not installed in C:\Windows. pi now checks %ProgramFiles%\PowerShell\7, %SystemRoot%\System32\WindowsPowerShell\v1.0, and %SystemRoot% (#9501 by @petrroll)
      • Fixed GitHub Copilot sessions with large request bodies, such as many images, failing with HTTP 413 failed to parse request instead of compacting and retrying (#11016 by @petrroll)
      • Fixed the openai-codex provider offering gpt-5.5 and gpt-5.3-codex-spark, which always fail for ChatGPT accounts (#11173 by @lucasmeijer)
      • Fixed whitespace-only tool output (for example a bare \r\n from bash) making OpenAI Completions, OpenAI Responses, and Google requests fail with a 400 (#8720)
      • Fixed automatic retry not triggering for more gateway upstream failures, stream disconnected before completion errors relayed by Codex CLI proxies, and transient Google Vertex OAuth token refresh failures, and retrying errors because of digits inside request ids or byte counts (#10920, #11057, #10996)
      • Fixed OpenAI Responses models losing the prompt cache on every deferred tool load after a tool was removed (#10940)
      • Fixed Cloudflare Workers AI classifier pricing: Clef Flash costs $0.038 and Jev $0.042 per million input tokens instead of Jev being listed as free.
      • Fixed an unclosed $$ display-math block swallowing or corrupting every Markdown table after it (#11159)
      • Fixed Markdown bold and italic not rendering next to CJK punctuation (#10730 by @theBucky)
      • Fixed @ file autocomplete returning no results for queries containing regex metacharacters such as [ or ( (#10972)
    3. 🔗 anthropics/claude-code v2.1.307 release

      What's changed

      • Added /claude-api api-version to move Claude API code to API version 2026-10-21
      • Added the claude_code.safety_event OpenTelemetry event for each tool call a permission rule, auto mode, a safety check, a hook or the sandbox stopped, prompted or sent back
      • Fixed requests failing with a model-not-found error when CLAUDE_CODE_DISABLE_1M_CONTEXT is set and the model is an alias with the [1m] suffix, such as opus[1m]
      • Fixed the prompt-caching-scope beta header being sent behind custom ANTHROPIC_BASE_URL gateways and on Foundry, where it has no effect
      • Fixed MCP servers showing "needs authentication" in claude -p on macOS while the login keychain was locked; they now say why, and the next run after an unlock connects without a new sign-in
      • Fixed MCP servers being reported as timed out, and staying failed in headless runs, when a macOS or Linux computer went to sleep while they were connecting
      • Fixed HTTP MCP tool calls being sent twice when the connection closed mid-call; only read-only or idempotent tools are now retried
      • Fixed a turn sometimes starting without an SDK MCP server's latest tools when a background task was running
      • Fixed some "Autocompact is thrashing" errors in turns that read many PDF pages, images or other large tool results
      • Fixed /autocompact in cloud sessions going back to the default window after the session restarted
      • Fixed a conversation cleared with /clear sometimes coming back when a cloud or self-hosted runner session restarted
      • Fixed CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS being ignored in Claude apps gateway sessions
      • Fixed telemetry from Claude Desktop sessions behind a Claude apps gateway being rejected when OTEL_EXPORTER_OTLP_HEADERS is set
      • Fixed /permissions > Recently denied not showing the denied shell command, and auto mode's local classifier ignoring an approval from there when it checks a retried command; approving a row now names the command, not its description
      • Fixed /help and the / command menu showing long model-facing descriptions for bundled skills such as /claude-api instead of their short descriptions
      • Fixed subagent transcripts recording placeholder token usage and an empty stop reason for streamed responses
      • Fixed model switches through the Agent SDK's setModel(), and apps built on it, being refused when the API took more than 5 seconds to confirm the model; Claude Code now waits up to 15 seconds
      • Fixed a background command stopped through a connected app (such as the desktop app archiving an idle session) being reported to Claude as stopped by the user; the notice now names its output file
      • Fixed WebFetch in Cowork cloud sessions reporting a tool error when a site answered with a 4xx status or a robots.txt refusal; it is now a normal result, as in local sessions
      • Fixed write tools on a directly configured GitHub MCP server showing a form that closed without creating anything in the desktop app's Code tab
      • Fixed Artifact tool reads failing with a connection reset when the server had closed a reused connection
      • Self-hosted runner: Fixed sessions with --use-anthropic-git-proxy committing a .claude/settings.local.json left in the clone by an earlier session
      • Self-hosted runner: Fixed archiving or requeueing a session, or stopping the runner, during its checkout hook leaving the hook's processes running and the runner's slot held
      • Improved recovery from unparseable tool calls: Claude Code now retries the call up to twice before ending the turn with an error
      • Improved fork subagents launched together: each is now told which launch is its own, so forks are much less likely to try to start each other's work
      • Improved browser sign-in: the success page now appears as soon as sign-in completes, without waiting for your account profile to load
      • Improved web search errors in cloud and self-hosted runner sessions: a search refused with a 403 that gives a reason now shows that reason instead of a generic "Authentication error"
      • Improved the time to the first reply in cloud sessions when one of the desktop app's MCP servers can't connect
      • Improved Remote Control connect time for sessions whose transcript contains large pasted images or PDF reads
      • Changed the notice Claude gets when the WebSearch budget is used up to also tell it not to query search engines in a browser or through computer use
      • Changed the axScreenReader setting and CLAUDE_AX_SCREEN_READER in a settings env block to apply only from user, managed or --settings settings (since 2.1.305)
      • Self-hosted runner: Changed checkout hooks to be stopped after 30 minutes by default, failing the session's setup; if yours needs longer, raise --checkout-hook-timeout-min or set it to 0
      • Self-hosted runner: Changed the certificate file built for Anthropic-managed git to filter its trusted certificates as the CLI does; a [runner:warn] line gives the number left out
      • [VSCode] Added a notice on the microphone button when voice dictation stops by itself (15 seconds without recognized speech, or the 2-minute limit), saying why and that the text so far is kept
      • [VSCode] Fixed a long prompt expanded with Show more covering the whole chat panel: a pinned prompt is now capped at 40% of the panel and scrolls
      • [VSCode] Fixed part of a list item or table cell with LaTeX math pasting as a new list or table in rich text editors
      • [VSCode] Fixed dictation failing behind a TLS-inspecting proxy when NODE_EXTRA_CA_CERTS is set only in ~/.claude/settings.json; it now also follows CLAUDE_CODE_CERT_STORE
      • [VSCode] Changed the "still open somewhere else" notice to also cover a Claude process left over from an extension restart, which usually ends on its own within about 10 minutes
      • [VSCode] Changed voice dictation to filter its trusted certificates as the CLI does
      • [VSCode] Changed the extension's own requests to filter their trusted certificates as the CLI does, and to trust the NODE_EXTRA_CA_CERTS file named in the environment or in user settings
      • [Cloud sessions] Fixed the repository picker saying "No repositories match" while a search was still running; it now shows "Searching…" until the results arrive
      • [Cloud sessions] Fixed the "Waiting for a runner" status on self-hosted environments being cut off; with on-demand runners it now counts up from your last message and shows failed attempts
      • [Code Review] Added @claude review stop (also off and pause) to Code Review, ending an @claude review always subscription on a pull request without starting a new review
    4. 🔗 Quarkslab's blog State of Post-Quantum Cryptography implementations rss

      Introduction

      One of the internship offers of the 2025-2026 season aimed to test Post- Quantum Cryptography (PQC) implementations with an internal differential fuzzing tool. As such, a list of targets had to be defined, and a state-of- the-art review of the featured PQC algorithms in popular open-source cryptographic libraries was done. Before presenting these implementations, let's first do a quick reminder on PQC.

      Post-Quantum Cryptography

      Cryptographic algorithms are based on problems that have historically been hard to solve with classical computers. However, among these problems, integer factorisation and the discrete logarithm problem can be solved efficiently by quantum computers, via Shor's algorithm. Although current quantum computers show progress, they are not yet capable of breaking the intended cryptographic algorithms. The main concern and motive for imminent replacement of quantum vulnerable algorithms is the "Harvest now, decrypt later" threat. An adversary can store sensitive data that was encrypted with quantum vulnerable algorithms, and decrypt it once quantum computers are able to.

      As a result, new cryptographic algorithms had to be designed, such that their security relies on problems that are not efficiently solvable by quantum algorithms. These new algorithms form what we call Post-Quantum Cryptography (PQC). In 2016, the US National Institute of Standards and Technology (NIST) launched a competition to standardize PQC algorithms, open to researchers from all over the world. They announced the first round of algorithms in 2022, with three signature schemes and one Key Encapsulation Mechanism (KEM). A new phase resulted in the selection of a second KEM, while an additional process to standardize more signature schemes continues.

      Post-Quantum migration timelines have been set by government agencies such as ANSSI and NSA. Major tech companies such as Google are planning for full post- quantum replacement as early as 2029. If you are interested in the PQC transition process, check out this blogpost by Angele Bossuat which explains Signal's PQC upgraded ratcheting mechanism.

      Post-Quantum algorithms

      To choose which algorithms to include for the fuzzing campaign, we focused on the ones standardized by NIST, as well as some others that were implemented for practical use.

      Key Encapsulation Mechanisms

      The Harvest now, Decrypt later threat specifically targets classical key exchange schemes. In consequence, PQC algorithms were designed for a cryptographic scheme called Key Encapsulation Mechanism (KEM). In this asymmetric scheme, Alice possesses a key pair and Bob wants to establish a shared secret with Alice. Bob uses Alice's public key to compute a ciphertext and a shared secret. This first step is called Encapsulation. Bob then sends Alice the ciphertext, and Alice performs the second step called Decapsulation. In this step Alice derives the shared secret from the ciphertext, using her private key.

      Diagram of a Key Encapsulation Mechanism, where Alice generates a key
pair, Bob uses her encapsulation key to generate a shared secret and
ciphertext, and Alice uses her decapsulation key to recover the shared secret
from the
ciphertext.

      Diagram of a KEM from FIPS 203.

      The first KEM standardized by NIST is the Module-Lattice-Based Key- Encapsulation Mechanism (ML-KEM), specified in FIPS 2031. Its security relies on the Module Learning With Errors (MLWE) problem, a lattice-based problem with a particular polynomial ring setting. Its encryption and decryption mechanism is reminiscent of the ElGamal encryption scheme, utilizing randomness and replacing the discrete logarithm part with an MLWE instance.

      Since some of the post-quantum algorithms are relatively new, the possibility of discovering a way to classically break them is non-negligible. As a result, NIST decided to standardize a second KEM based on a different problem. This backup algorithm to ML-KEM is called Hamming Quasi-Cyclic (HQC)2. Its security relies on the Quasi-Cyclic Syndrome Decoding problem, based on error- correcting codes.

      There are other PQ KEM algorithms that were not standardized by NIST. Two of them are also lattice-based algorithms. The first one is FrodoKEM3. Its security is based on the standard Learning With Errors (LWE) problem. The main difference with ML-KEM is the absence of the polynomial ring structure. While the polynomial ring structure grants ML-KEM performance optimizations compared to standard LWE schemes, it also leverages additional hardness assumptions. This is the main motive behind the use of FrodoKEM, which is strongly considered by European government agencies.

      Part of the N-th degree Truncated polynomial Ring Units (NTRU) Prime project, Streamlined NTRU Prime (SNTRUP)4 is another lattice-based KEM. The NTRU Prime project aims to reduce the attack surface of NTRU lattice-based schemes by using a different polynomial ring structure.

      One more code-based algorithm was targeted, Classic McEliece5. It is the oldest code-based cryptosystem (1978). Its security relies on the standard Syndrome Decoding problem, which does not have a quasi-cyclic structure unlike HQC. It was not chosen by NIST for standardization due to its large public and private keys, leading to a costlier key generation, as explained in NIST IR 85456. However, it performs better for encapsulation and decapsulation. This can be advantageous in contexts where a single key pair is reused multiple times. Note however that due to recent advancement in its cryptanalysis, Germany's Office for Information Security (BSI) advises against using Classic McEliece.

      Another way to reduce the risk associated with the novelty of PQC algorithms and implementations is to use a hybrid scheme. This type of scheme combines a traditional and mature pre-quantum algorithm with a post-quantum one. It benefits from both the proven security of the former against classical attackers, and the conjectured security of the latter against quantum attackers. For example, in a KEM context, a shared secret key from each algorithm is generated. These two keys are then combined into one by using a Key Derivation Function (KDF). The security of a hybrid scheme also relies on the security of the hybridization technique used. Hybrid schemes are recommended by ANSSI for their PQC migration plan7. I chose to study the hybrid algorithm called X- Wing8. This algorithm combines the X25519 elliptic curve key exchange with ML-KEM, more precisely its ML-KEM-768 parameter set.

      Digital Signatures

      Module-Lattice-Based Digital Signature (ML-DSA), specified in FIPS 2049, was standardized by NIST along with ML-KEM. Its security also relies on the MLWE problem. Just like its KEM counterpart, its structure is similar to a previous discrete logarithm based scheme. Here ML-DSA is reminiscent of Schnorr signatures. They both follow the Fiat-Shamir paradigm, turning a zero-knowledge proof non- interactive by utilizing randomness and hash functions.

      Fast-Fourier Transform over NTRU-Lattice-Based Digital Signature Algorithm (FN-DSA) was one of the three signature schemes selected at the third round of the NIST competition. It is based on the Gentry, Peikert, and Vaikuntanathan (GPV) framework10, instantiated over NTRU lattices and a new technique called Fast Fourier sampling. While the other selected algorithms have already been standardized, FN-DSA's standardization is still ongoing. As such, current implementations of the algorithm may not be compatible with the final standardized version. In consequence this algorithm was not targeted for the fuzzing campaign.

      Another set of post-quantum signature algorithms is what we call hash-based signatures. Their security relies on the one-way assumption of hash functions. They are what we call Few-Times Signatures schemes (FTS), meaning they have a limited amount of signatures possible. They use One-Time Signatures (OTS) and Merkle trees' structure to convert them into an FTS scheme.

      We distinguish two types of hash-based signature algorithms, the stateless ones and the stateful ones. Stateful algorithms require maintaining a state. They must keep track of which OTS key pairs have been used. This can be a drawback in specific contexts such as distributed systems. However, stateful algorithms tend to have better performance and signature sizes than stateless ones. In NIST SP 800-20811, NIST recommended the use of two stateful algorithms. Leighton-Micali Signature system (LMS), specified in RFC 855412, is the first one. It uses Leighton-Micali One-Time Signatures (LM-OTS), based on Winternitz OTS schemes. The other recommended stateful algorithm is the eXtended Merkle Signature Scheme (XMSS) specified in RFC 839113. Its main difference with LMS is the use of another Winternitz OTS variant called WOTS+, where bitmasks are used.

      The third signature algorithm selected in the competition, and later standardized by NIST, is Stateless Hash-Based Digital Signature Algorithm (SLH-DSA), specified in FIPS 20514. It is based on two other few-times signatures, FORS and XMSS. Its use of a very large number of FORS key pairs and a hypertree of XMSS Merkle trees allows it to have a stateless property.

      Implementations

      OpenSSL

      Founded in 1998, the OpenSSL project maintains a library that provides implementations of Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, relying on their own implementations of cryptographic algorithms. It is most notably used by web servers for their secure HTTP connections. Written in C, OpenSSL has been forked to form other widely used open source cryptographic libraries. In 2025, they started featuring the following self-implemented Post-Quantum algorithms.

      • ML-KEM, standardized FIPS 203 version.
      • ML-DSA, standardized FIPS 204 version.
      • SLH-DSA, standardized FIPS 205 version.
      • LMS, standardized RFC 8554 version. Only the verification function is implemented. The author specifies that the stateful property is problematic for software implementations, and should rather be used for hardware ones.

      BoringSSL

      In 2014, Google decided to fork OpenSSL to build a cryptography library that specifically meets their needs. Before 2014, Google were using OpenSSL, but their accumulated number of patches in different copies of the library pushed them to create their own. BoringSSL is the current SSL library for Chrome, Android, and other apps and programs. BoringSSL announced their own post- quantum implementations when the first algorithms were standardized by NIST.

      • ML-KEM, standardized FIPS 203 version.
      • ML-DSA, standardized FIPS 204 version.
      • SLH-DSA, only two parameter sets out of twelve are available (SLH-DSA-SHA2-128s and SLH-DSA-SHAKE-256f). Other missing features from standardized version are internal vectors, pre-hash vectors, key generation from a seed, and deterministic signing.
      • X-Wing, version 02 of the RFC draft8.

      wolfSSL

      wolfSSL is a C library that implements SSL/TLS. It is designed for embedded systems which confers its portable, small, and fast attributes. Its cryptography is provided by the wolfCrypt library. Founded in 2004, it has been included in a variety of applications and devices such as smart automobile devices, mobile phones or credit card scanners. Their post-quantum support was originally based on the liboqs library. However, they replaced this integration with their own implementations, aiming for a reduction in code size and easier maintenance.

      • ML-KEM, standardized FIPS 203 version, along with x86_64 and ARM optimizations.
      • FrodoKEM, as specified in the draft15.
      • ML-DSA, standardized FIPS 204 version, along with x86_64 and ARM optimizations.
      • SLH-DSA, standardized FIPS 205 version.
      • LMS, standardized RFC 8554 version.
      • XMSS, standardized RFC 8391 version.

      liboqs

      liboqs is a collection of implementations of post-quantum algorithms written in C. It was created in 2018 as part of the Open Quantum Safe (OQS) project, which aims to support the PQC transition. It provides a common API for these algorithms as well as a test harness and benchmarking routines.

      • ML-KEM, standardized FIPS 203 version. Imported from PQ Code Package's mlkem-native implementation 16. Liboqs also features a GPU-optimized implementation from NVIDIA cuPQC17.
      • HQC, imported from the reference implementation18.
      • FrodoKEM, imported from PQCrypto-LWEKE, the reference implementation19.
      • Streamlined NTRU Prime, imported from the implementation used in OpenSSH20, itself based on the reference implementation21.
      • Classic McEliece, imported from the PQClean library22.
      • ML-DSA, standardized FIPS 204 version. Imported from PQ Code Package's mldsa-native implementation 23. Liboqs also features a GPU-optimized implementation from NVIDIA cuPQC17.
      • SLH-DSA, standardized FIPS 205 version. Imported from PQ Code Package's slhdsa-c implementation24.
      • LMS, imported from the RFC 8554 reference implementation25, by Cisco Systems.
      • XMSS, imported from the RFC 8391 reference implementation26.

      Libsodium

      Forked from the NaCl library in 2013 and maintained by Frank Denis, libsodium provides a wide range of cryptographic implementations. Written in C, its API prioritizes ease of integration. It is used in a wide variety of software, from communication platforms such as Discord or Wire, to cryptocurrencies like Zcash and text editors like Vim. Libsodium recently started featuring PQC in 2026 with the following algorithms:

      • ML-KEM, standardized FIPS 203 version, based on the reference implementation. Only the ML-KEM-768 parameter set is featured.
      • X-Wing, as specified in 8.

      AWS-LC

      AWS-LC is the general purpose cryptography library maintained and used by Amazon Web Services. It started around 2020 as a fork of BoringSSL. They announced fully deployed and production ready post-quantum implementations after NIST's first standardization process. PQC is notably integrated in their TLS implementation.

      • ML-KEM, standardized FIPS 203 version. Implementation imported from PQ Code Package's mlkem-native.
      • ML-DSA, standardized FIPS 204 version. Implementation imported from PQ Code Package's mldsa-native.

      OpenSSH

      Developed since 1999 by OpenBSD, OpenSSH is the most widely used tool for the SSH remote login protocol. It relies on various cryptographic algorithms implemented in their portable library written in C. OpenSSH features two hybrid key agreement protocols, each one combining an ECDH instance with respectively the following PQC algorithms:

      • ML-KEM, standardized FIPS 203 version. Implementation from Cryspen's Libcrux library written in Rust. The Rust code was translated to C using Eurydice, a Rust to C compiler. Only the ML-KEM-768 parameter set is featured.
      • SNTRUP, reference code is used. It is the same implementation liboqs currently uses.

      pqm4

      The pqm4 library is a benchmarking and testing framework that started in 2018 from the PQCRYPTO project, funded by the European Commission through the Horizon 2020 program. This library targets the ARM Cortex-M4 family of microcontrollers. It imports implementations from the PQClean library, but it also provides implementations with specific optimizations written in assembly for Cortex-M4. Here are listed the implementations that feature the M4 optimizations.

      • ML-KEM, standardized FIPS 203 version.
      • FrodoKEM, available in the Round3 release.
      • SNTRUP, available in the Round3 release.
      • ML-DSA, standardized FIPS 204 version.

      Nettle

      Nettle is a cryptographic library created in 2001 and developed by Niels Moller. It provides self-developed low level implementations of cryptographic algorithms, with a simple and general API to fit a variety of applications. Being a GNU package since 2009, it is used in several software such as GnuTLS. Since February 2026, Nettle features post-quantum cryptography with the following algorithm:

      • SLH-DSA, standardized FIPS 205 version.

      Lean Crypto

      Started in 2022 by Stephan Mueller, the leancrypto library exclusively provides self-developed PQC implementations in C. It targets constrained environments such as embedded systems, bare-metal environments, and Linux kernels. For example, the Shim bootloader, used by Linux, supports post- quantum cryptography for secure boot through LeanCrypto.

      • ML-KEM, standardized FIPS 203 version. Derived in parts from reference implementation.
      • HQC, derived in parts from PQClean's implementation.
      • ML-DSA, standardized FIPS 204 version. Derived in parts from reference implementation.
      • SLH-DSA, standardized FIPS 205 version. Derived in parts from reference implementation.

      Libgcrypt

      Libgcrypt is the cryptographic library provided for GnuPG, a PGP software. But its usage is independent of GnuPG. It was first released in 2001 and is written in C. It has featured post-quantum cryptography since 2024. Their post-quantum implementations derive from the reference implementations of each algorithm.

      • ML-KEM, standardized FIPS 203 version, based on reference implementation.
      • Classic McEliece, based on reference implementation.
      • Streamlined NTRU Prime, based on reference implementation.
      • ML-DSA, standardized FIPS 204 version, based on reference implementation.

      SymCrypt

      Started in 2006, SymCrypt is Microsoft's core cryptographic library, written in C. Originally intended for symmetric cryptographic operations, it has since 2015 been the primary cryptography library for all algorithms in Windows and other Microsoft products and services. In 2024 it started incorporating their own PQC implementations.

      • ML-KEM, standardized FIPS 203 version.
      • ML-DSA, standardized FIPS 204 version.
      • SLH-DSA, standardized FIPS 205 version. Code is not available in public git repository.
      • LMS, standardized RFC 8554 version.
      • XMSS, standardized RFC 8391 version.

      TrustCore SDK

      TrustCore SDK is a library that provides cross-platform security tools such as certificate-based authentication, encryption, and secure communications. Founded in the early 2000s, it was acquired in 2022 and made open-source by DigiCert, a certificate authority. Its usage targets IoT applications, embedded software, and safety-critical systems. TrustCore started integrating self-developed post-quantum implementations in 2025.

      • ML-KEM, standardized FIPS 203 version.
      • ML-DSA, standardized FIPS 204 version.
      • SLH-DSA, standardized FIPS 205 version.

      RustCrypto

      The RustCrypto project provides pure Rust implementations of cryptographic algorithms. It is widely used across Rust frameworks. For example, Rustls, the most popular Rust TLS implementation, features a RustCrypto provider. Though not yet audited, RustCrypto has various PQC implementations.

      • ML-KEM, standardized FIPS 203 version.
      • FrodoKEM, as specified in 27.
      • HQC, as specified in 2.
      • ML-DSA, standardized FIPS 204 version.
      • SLH-DSA, standardized FIPS 205 version.
      • LMS, standardized RFC 8554 version.
      • XMSS, standardized RFC 8391 version.
      • X-Wing, version 06 of the RFC draft8.

      Libcrux

      Libcrux is a cryptographic library developed in Rust by Cryspen (now pereq) since 2023. Many of their implementations use formally verified code from the HACL* project28. As for PQC, they entirely implement algorithms in Rust and formally verify their implementations with their tool called Hax29. Libcrux is most notably used by Signal for their Sparse Post-Quantum Ratchet (SPQR) protocol.

      • ML-KEM, standardized FIPS 203 version.
      • ML-DSA, standardized FIPS 204 version.
      • X-Wing, version 06 of the RFC draft8.

      Crypto (Go)

      The Go programming language includes a crypto package which contains self- developed cryptographic implementations in Go. Developed since the creation of Go in 2007 at Google, this standard library is used across many applications based in Go. It first introduced support for PQC in 2024.

      • ML-KEM, standardized FIPS 203 version.
      • ML-DSA, standardized FIPS 204 version. Internal implementation only.

      CIRCL

      First released in 2019, CIRCL is a collection of cryptographic primitives written in Go. Developed by Cloudflare, its goal is to experiment on the deployment of PQC and elliptic curve cryptography. It is used across Cloudflare's infrastructure. Their PQC implementations are independent of other Go cryptographic libraries.

      • ML-KEM, standardized FIPS 203 version.
      • FrodoKEM, heavily inspired from PQClean's implementation30. Only the parameter set FrodoKEM-640-SHAKE is featured.
      • ML-DSA, standardized FIPS 204 version.
      • SLH-DSA, standardized FIPS 205 version.
      • X-Wing, version 05 of the RFC draft8.

      Trail of Bits

      Trail of Bits is a cybersecurity research and consulting firm. Their cryptography team has implemented PQC algorithms in Go. These implementations are also self-audited by Trail of Bits, and aim for constant-time.

      • ML-DSA, standardized FIPS 204 version.
      • SLH-DSA, standardized FIPS 205 version.
      • LMS, standardized RFC 8554 version.

      Botan

      Botan is a C++ cryptography library that began in the early 2000s. Developed by Jack Lloyd and a community of contributors, it aims to be the best option for production cryptography. The German Federal Office for Information Security (BSI) has funded Botan for various projects, aiming to improve documentation, resilience, and features of the library. PQC features were added since 2023.

      • ML-KEM, standardized FIPS 203 version. Based on the reference implementation.
      • FrodoKEM, based on the reference implementation.
      • Classic McEliece, based on reference implementation.
      • ML-DSA, standardized FIPS 204 version. Based on the reference implementation.
      • SLH-DSA, standardized FIPS 205 version. Based on reference implementation.
      • LMS, standardized RFC 8554 version.
      • XMSS, standardized RFC 8391 version.

      Bouncy Castle

      Founded in 2000 in Australia, Bouncy Castle provides pure implementations in both Java and C# programming languages. Widely used for its Java and C# API, the Android operating system notably forked Bouncy Castle. Having experimented with PQC since 2013, algorithms were integrated after NIST standardization.

      • ML-KEM, standardized FIPS 203 version.
      • HQC, not featured in Bouncy Castle C#.
      • FrodoKEM, as specified in 3.
      • Streamlined NTRU Prime, as specified in 4.
      • Classic McEliece, as specified in specified in 5.
      • ML-DSA, standardized FIPS 204 version.
      • SLH-DSA, standardized FIPS 205 version.
      • LMS, standardized RFC 8554 version.
      • XMSS, standardized RFC 8391 version.
      • X-Wing, not featured in Bouncy Castle C#.

      corecrypto

      Developed and used by Apple, corecrypto is a library that provides self- developed implementations of cryptographic primitives. Formal verification is performed on their implementations through the use of the formal language Cryptol31 and formal verification tools Isabelle32 and Software Analysis Workbench (SAW)33. CoreCrypto notably features PQC that has been deployed in Apple's messaging app iMessage. - ML-KEM, standardized FIPS 203 version. - ML-DSA, standardized FIPS 204 version.

      Intel Cryptographic Primitives

      The Intel Cryptographic Primitives library offers self-developed cryptographic implementations that are optimized for different Intel CPUs and instruction set architectures. Post-Quantum algorithm started being featured in 2023.

      • ML-KEM, standardized FIPS 203 version.
      • ML-DSA, standardized FIPS 204 version.
      • LMS, standardized RFC 8554 version.
      • XMSS, standardized RFC 8391 version.

      Mbed TLS

      The Mbed TLS library provides implementations of cryptographic primitives, X.509 certificate handling as well as the SSL/TLS and DTLS protocols. It was specifically designed to be well suited for embedded systems. Post-Quantum cryptography is not yet fully supported as some algorithms are still in the library's road map. However, one specific PQC algorithm is already featured.

      • LMS, standardized RFC 8554 version. It is self-implemented and only features the LMS_SHA256_M32_H10 parameter set.

      Summary of libraries and implemented algorithms

      The table summarises the contents of this section: it lists the open
source projects studied, along with the PQC algorithms they support or
not.

      Non-exhaustive table of the feature PQC algorithms in open source libraries.

      Differential Fuzzing results

      The goal of the internship was to test the listed implementations to find vulnerabilities. There are several approaches to test cryptographic implementations. One is to use test vectors to compare operations results to defined standards. The open-source tool crypto- condor automatically performs compliance testing through test vectors. To learn more, you can refer to this blogpost by Julio Loayza Meneses.

      Another approach to test cryptographic implementations is through differential fuzzing, which was the approach used during the internship. To learn more on differential fuzzing and its applications in cryptography, you can refer to this blogpost by Celian Glenaz. Quarkslab has developed an internal closed-source differential fuzzer called DeltAFLy. It allows one to assess in- depth functional correctness (for edge cases not covered with test vectors), memory safety, and constant-time behavior of cryptographic implementations. DeltAFLy had already been used to test PQC implementations, you can find out more in this blogpost. Plenty of new PQC targets from the ones listed above remained to be tested with DeltAFLy.

      DeltAFLy's logo features a red and gold delta symbol with a pair of
wings.

      DeltAFLy's logo.

      ML-DSA and ML-KEM key checks

      The first implementation discrepancies I found were on the signature algorithm ML-DSA. OpenSSL rejects some private key inputs while liboqs accepts them and successfully returns corresponding signatures. These discrepancies come from additional private key checks that OpenSSL includes in its key parsing function. When an ML-DSA private key is parsed, the following parameters are decoded: (ρ,K,tr,s1,s2,t0)(\rho, K, \mathit{tr}, s_1, s_2, t_0). In particular, s1s_1 and s2s_2 are vectors of polynomials whose coefficients should be in a specific interval. For math enthusiasts, algebraically, s1∈Rq&ells_1 \in R_q^\ell and s2∈Rqks_2 \in R_q^k, with Rq=Zq[X]/(X256+1)R_q = \mathbb{Z}_q[X]/(X^{256}+1). When the fuzzer mutates valid inputs and gives a private key with out-of-range coefficients for the polynomials in s1s_1 or s2s_2, OpenSSL detects the malformation of the key and rejects the input. However, other libraries such as liboqs do not perform any key checks (see the next sub-section for a discussion on the consequences of this). Additionally, OpenSSL also recomputes the vector t0t_0 and the hash value tr\mathit{tr} from the decoded vectors s1s_1 and s2s_2. It then compares the recomputed values to the ones that were decoded.

      The specification of ML-DSA does not define any of these key checks, nor does it impose the requirement to check the validity of a key pair before use. As a result, libraries such as OpenSSL, BoringSSL, and SymCrypt choose to add the key checks described above, while others that thoroughly follow the specification do not.

      Similarly to ML-DSA, we found discrepancies related to key checks in ML-KEM. In this case, the key checks are defined in Section 7.1 of the specification1. Some of them are mandatory to perform before encapsulation and decapsulation, but one key check in particular is noted as optional. It is the pairwise consistency check (PCT). It consists in encapsulating with the public key, decapsulating the resulting ciphertext with the private key, and then verifying whether the two computed shared secrets correspond. Some libraries include this check in their key parsing function, while others do not. Consequently, the fuzzer generates inputs that do not pass the PCT, resulting in discrepancies.

      Illustrates the pair-wise consistency check. First, a call to encapsulate
returns a ciphertext and shared secret 1. Decapsulating the ciphertext with
the corresponding secret key yields a second shared secret. The check verifies
is both shared secrets are equal or
not.

      Diagram of a pair-wise consistency check.

      Another difference between some implementations arises from whether the mandatory key checks are performed in the encapsulation and decapsulation functions or in a separate, dedicated key check function. For example, libcrux's implementation of ML-KEM chooses the latter approach. The function validate_public_key(pk) performs the mandatory Encapsulation key check on the public key, defined in Section 7.2 of the specification. The function validate_private_key(sk, ct) performs the Decapsulation input check on the private key and the ciphertext, defined in Section 7.3 of the specification.

      Consequences of using malformed ML-KEM and ML-DSA key pairs

      If one were to use a corrupted ML-KEM key pair that is detectable by a PCT, the resulting shared secrets would differ, and symmetric encryption would fail. For ML-DSA, regarding out-of-range s1s_1 and s2s_2 coefficients, the specification states the following: "This can be a concern when running SimpleBitUnpack and BitUnpack on inputs that may come from an untrusted source."9. However, these specific concerns are not mentioned again nor explained further in detail in the specification.

      The secret vector s1s_1 is used in the computation of the challenge-response:

      z=y+c⋅s1z = y + c \cdot s_1 with c∈Rqc \in R_q the public challenge, y∈Rq&elly \in R_q^\ell the private nonce, and z∈Rq&ellz \in R_q^\ell. To avoid a bias towards s1s_1 in the response zz, the coefficients of s1s_1 must fall within the relatively short range [−η,η][-\eta, \eta], and zz is accepted and returned only if its polynomial coefficients fall inside the range:

      W1=[−γ1+β+1, γ1−β−1]W_1 = [-\gamma_1 + \beta + 1,\ \gamma_1 - \beta - 1] with γ1\gamma_1 and β\beta depending on the parameter set. This process is called rejection sampling and makes the returned zz independent of s1s_1 if the latter has in-range coefficients. Similarly, the following value is biased towards the secret vector s2s_2:

      r=w−c⋅s2r = w - c \cdot s_2 with w∈Rqkw \in R_q^k the commit of yy sent by the signer along with the signature. During signing, another rejection sampling is applied to rr. Its values are to be accepted only if its polynomial coefficients fall inside the range W2=[−γ2+β+1, γ2−β−1]W_2 = [-\gamma_2 + \beta + 1,\ \gamma_2 - \beta - 1] with again γ2\gamma_2 and β\beta depending on the parameter set.

      ML-DSA's key generation ensures that the coefficients of s1s_1 and s2s_2 fall inside the required range. However, the private key's encoded format allows for coefficients of s1s_1 and s2s_2 to be outside of the required range if the right bits are flipped. In such cases, some values in the acceptance ranges W1W_1 and W2W_2 can never be reached by respectively zz and rr. As a result, the accepted zz and rr are no longer independent of s1s_1 and s2s_2, which leaks secret information and compromises the security of the algorithm. Moreover, there exists a fault injection attack34 that specifically targets the coefficients of s1s_1, underlining why these coefficients must be in range. A reporting of missing ML-KEM and ML-DSA key checks in liboqs can be found here.

      A table summarising which libraries implement ML-KEM pair-wise consistency
check and ML-DSA's additional checks. From the projects listed in the table,
only OpenSSL, BoringSSL, and SymCrypt implement
them.

      Summary table of the key checks included in the tested libraries.

      XMSS OID parsing bug in RustCrypto

      Another discrepancy found was in the implementation of XMSS in RustCrypto. This discrepancy is caused by an actual implementation bug. Some parameter sets of XMSS use a hypertree of XMSS Merkle trees to achieve a larger amount of signatures possible. These specific parameter sets are called Multi-Tree XMSS (XMSSMT). The first four bytes of an XMSS/XMSSMT public key correspond to a parameter set identifier that the specification calls the OID. XMSS and XMSSMT's OIDs are defined separately, meaning they both start from zero and hence have colliding OIDs.

      RustCrypto's implementation distinguishes XMSS and XMSSMT's OIDs by adding an offset to XMSSMT's OIDs, in the definition of an enum defined as XmssOid. When verifying signatures using a public key imported as raw bytes, the public key has to be parsed into the library's VerifyingKey&lt;P&gt; type, with P specifying the parameter set used. This is done by using the method VerifyingKey::&lt;P&gt;::try_from(bytes). This method begins by calling the function parse_oid_and_params(bytes), which parses the XmssOid from the first four bytes of the imported public key.

      /// Parses the OID and initializes params from the first bytes of a key.
      /// Tries XMSS OIDs first, then falls back to XMSSMT.
      fn parse_oid_and_params(bytes: &[u8]) -> XmssResult<(XmssOid, XmssParams)> {
          if bytes.len() < XMSS_OID_LEN {
              return Err(Error::InvalidOid(0));
          }
          let mut raw_oid: u32 = 0;
          for i in 0..XMSS_OID_LEN {
              raw_oid |= (bytes[XMSS_OID_LEN - i - 1] as u32) << (i * 8);
          }
          let oid = XmssOid::try_from(raw_oid).or_else(|_| XmssOid::from_xmssmt_raw_oid(raw_oid))?;
          let mut params = XmssParams::default();
          oid.initialize(&mut params)?;
          Ok((oid, params))
      }
      

      In the above code snippet, we can see that parse_oid_and_params(bytes) first attempts to parse the OID as an XMSS one, by directly calling the method XmssOid::try_from(value). If this first call fails, it will fall back to XmssOid::from_xmssmt_raw_oid(oid) which attempts to parse the OID as an XMSSMT one. This method will add the XMSSMT OID offset before calling XmssOid::try_from(value) again.

      The problem arises when importing an XMSSMT public key whose OID collides with an XMSS one. Since parse_oid_and_params(bytes) attempts to parse the OID as an XMSS one first, it will wrongly return the XmssOid of the colliding XMSS parameter set, instead of the actual XMSSMT one with the added offset. As a result, when VerifyingKey::&lt;P&gt;::try_from(bytes) later compares the parsed OID to the expected one that P specifies, as shown in the code snippet below, the check will wrongly fail.

      impl<P: XmssParameter> TryFrom<&[u8]> for VerifyingKey&lt;P&gt; {
          type Error = Error;
      
          fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
              let (oid, params) = parse_oid_and_params(value)?;
              let expected_oid = P::oid();
              if oid != expected_oid {
                  return Err(Error::InvalidOid(oid.raw_oid()));
              }
      ...
      

      XMSSMT parameter sets that have an OID that collides with an XMSS one cannot be used if the public key is imported.

      The library's tests only include one XMSSMT parameter set. It has a colliding OID but the test uses a public key generated from the library's key generation function, and not a raw bytes one that has to be parsed. The reporting of this bug can be found here.

      Conclusion

      With recent PQC migration timelines set by state agencies and major tech companies, open source cryptographic libraries are progressively including PQC algorithms. With more and more implementations being developed, making sure that they can safely be deployed for practical usage is a big part of the post-quantum transition process.

      In this blog post, we listed and documented the featured PQC algorithms in some of the most widely used open-source cryptographic libraries. We also showed that our tool DeltAFLy is capable of finding bugs and implementation discrepancies.

      While implementation bugs arise from mistakes that must be corrected, implementation discrepancies often come from a permissive algorithm specification. In the latter case, the implementation discrepancy is a distinct choice from the library, which often comes down to good practices like in the case of the ML-DSA and ML-KEM key checks.

      Acknowledgements

      I want to personally thank Julio Loayza Meneses for supervising my internship, Celian Glenaz for helping me understand and use his tool DeltAFLy, and Quarkslab for the great experience and opportunity I had.


      1. NIST FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard &larrhk&larrhk

      2. Hamming Quasi-Cyclic (HQC) specification &larrhk&larrhk

      3. FrodoKEM: Learning With Errors Key Encapsulation, Algorithm Specifications And Supporting Documentation &larrhk&larrhk

      4. NTRU Prime: round 3 submission &larrhk&larrhk

      5. Classic McEliece: conservative code-based cryptography, cryptosystem specification &larrhk&larrhk

      6. Status Report on the Fourth Round of the NIST Post-Quantum Cryptography Standardization Process &larrhk

      7. Avis de l'ANSSI sur la migration vers la cryptographie post-quantique &larrhk

      8. X-Wing: General-Purpose Hybrid Post-Quantum KEM &larrhk&larrhk&larrhk&larrhk&larrhk&larrhk

      9. NIST FIPS 204: Module-Lattice-Based Digital Signature Standard &larrhk&larrhk

      10. Trapdoors for Hard Lattices and New Cryptographic Constructions &larrhk

      11. Recommendation for Stateful Hash-Based Signature Schemes &larrhk

      12. RFC 8554: Leighton-Micali Hash-Based Signatures &larrhk

      13. RFC 8391: XMSS, eXtended Merkle Signature Scheme &larrhk

      14. NIST FIPS 205: Stateless Hash-Based Digital Signature Standard &larrhk

      15. FrodoKEM: Key Encapsulation from Learning with Errors , version 03 &larrhk

      16. Pq-Code-Package/Mlkem-Native &larrhk

      17. NVIDIA cuPQC &larrhk&larrhk

      18. HQC reference implementation &larrhk

      19. PQCrypto-LWEKE: FrodoKEM implementation &larrhk

      20. Openssh-Portable/Sntrup761.c &larrhk

      21. NTRU Prime: Software &larrhk

      22. PQClean implementation of Classic McEliece &larrhk

      23. Pq-Code-Package/Mldsa-Native &larrhk

      24. Pq-Code-Package/Slhdsa-c &larrhk

      25. Cisco/Hash-Sigs : LMS reference implementation &larrhk

      26. XMSS reference implementation &larrhk

      27. FrodoKEM, ISO standard &larrhk

      28. HACL*: A High-Assurance Cryptographic Library &larrhk

      29. hax: A high assurance translations tool &larrhk

      30. PQClean implementation of FrodoKEM &larrhk

      31. Cryptol: The Language of Cryptography &larrhk

      32. Isabelle: a generic proof assistant &larrhk

      33. SAW: The Software Analysis Workbench &larrhk

      34. Correction Fault Attacks on Randomized CRYSTALS-Dilithium &larrhk

    5. 🔗 @HexRaysSA@infosec.exchange 🍎 IDA 9.5 brings better DriverKit support for reversing Apple drivers: mastodon

      🍎 IDA 9.5 brings better DriverKit support for reversing Apple drivers:
      • Types for every DriverKit SDK from 19 to 25
      • Classes, layouts and vtables recovered, including private-framework classes
      • Kernel calls named, even in stripped drivers and arm64 kernelcaches

      👉 https://hex-rays.com/blog/ida-9.5-apple-driverkit-shared- cache

    6. 🔗 microsoft/markitdown Version 0.1.9 release

      What's Changed

      New Contributors

      Full Changelog : v0.1.8...v0.1.9

    7. 🔗 Hex-Rays Blog IDA 9.5: Apple DriverKit Shared Cache rss

      IDA 9.5: Apple DriverKit Shared Cache

      IDA 9.5: Reversing Apple DriverKit Drivers

      Apple is moving third-party drivers out of the kernel and into DriverKit. A DriverKit driver, or dext , is the kernel's C++ driver framework, IOKit, compiled into a user-space library. It is still built from C++ classes with virtual methods, and it gets work done by sending the kernel messages.

    8. 🔗 HexRaysSA/plugin-repository commits sync repo: +2 releases rss
      sync repo: +2 releases
      
      ## New releases
      - [IDA-MCP-Hub](https://github.com/captain-ai-hub/ida-mcp): 0.9.8
      - [oh-my-dump](https://github.com/nevergiveupcpp/oh-my-dump): 1.0.17
      
    9. 🔗 r/LocalLLaMA When will we see these changes? --> China Is Doubling RAM Production to Keep Everyday Gadget Prices from Skyrocketing rss

      When will we see these changes? --> China Is Doubling RAM Production to Keep Everyday Gadget Prices from Skyrocketing | submitted by /u/chemist_slime
      [link] [comments]
      ---|---

    10. 🔗 r/LocalLLaMA OK, fine, Qwen 3.8 Flash Next is nice rss

      I held off as long as I could, but finally gave in and set up strata.

      I am pretty blown away. 3.8 27b at Q6 kv8 was my driver before and that works super well, but Flash Next in strata IQ4 xs is really winning me over.

      Its not perfect, but it feels like models I was using professionally last year, which were/are good enough to do just about anything.

      You all are a bad influence.

      submitted by /u/sshwifty
      [link] [comments]

    11. 🔗 r/LocalLLaMA RecursiveSI/flint (40B A2.5B) · Hugging Face rss

      RecursiveSI/flint (40B A2.5B) · Hugging Face | submitted by /u/coder543
      [link] [comments]
      ---|---

    12. 🔗 smol-machines/smolvm smolvm v1.31.1 release

      What's Changed

      • chore(nix): bump flake to 1.31.0 by @github-actions[bot] in #1917
      • Never lower a branch source's memory ceiling below what its cgroup still holds by @BinSquare in #1921

      New Contributors

      • @github-actions[bot] made their first contribution in #1917

      Full Changelog : v1.31.0...v1.31.1

    13. 🔗 smol-machines/smolvm smolvm v1.31.0 release

      What's Changed

      • Improve Linux checkpoint extraction with sequential read advice by @BinSquare in #1852
      • Let a paused machine's export and resume read the same artifact by @BinSquare in #1854
      • Prepare SmolVM v1.30.2 for release by @BinSquare in #1855
      • Overlap a cache disk publish's sync with its hash and upload, and report the sync's progress by @BinSquare in #1856
      • Keep a checkpoint's resolver options on restore and let machine update set them by @BinSquare in #1857
      • Keep image pull progress flowing while one large layer downloads by @BinSquare in #1859
      • Bring PTY streamed exec to parity with framed, non-blocking pipe exec by @Vishv07 in #1825
      • Give uploads without an explicit owner to the workload container's user by @BinSquare in #1862
      • Harden virtio devices against out-of-range guest input by @BinSquare in #1865
      • Keep an image's symlinked resolv.conf and hosts instead of writing through them by @BinSquare in #1863
      • Remove the retired guest DNS proxy and stop starting its host listener by @BinSquare in #1866
      • Size /dev/shm like a VM, add --shm-size, and raise inotify limits by @BinSquare in #1864
      • Say the guest agent is outdated when it rejects a request it does not know by @BABTUNA in #1214
      • feat(cli): support credential set-header (#1860) by @azrod in #1861
      • Add --deny-cidr as deny egress rules by @BABTUNA in #1212
      • Document shipped features that had no docs by @BinSquare in #1878
      • Read secrets from the host keychain with --secret-keychain by @BinSquare in #1876
      • Hash cache bases with ring instead of sha2 by @BinSquare in #1883
      • Accept file uploads up to 1 GiB when the Content-Length is declared by @BinSquare in #1882
      • Record stratum handshakes and match TLS server names against the egress watchlist by @BinSquare in #1885
      • Fail a fork whose clone exited right after boot instead of reporting it running by @BinSquare in #1872
      • List the Go SDK in the README's embeddable install commands. by @BinSquare in #1891
      • Wait for a branch source's checkpoint in proportion to its RAM, and answer a timeout with a retryable 503 by @BinSquare in #1892
      • Size the shared extraction cache under the shared lock so a trim no longer stalls branches for seconds by @BinSquare in #1899
      • Serialize preparing a chunked checkpoint for restore so overlapping restores of one fresh checkpoint stop deleting each other's half-built tree by @BinSquare in #1900
      • Make the shared machine JSON builder public by @BinSquare in #1893
      • Say a start may be in progress when exec finds no agent by @BinSquare in #1894
      • Document that registry images boot without network by @BinSquare in #1895
      • Check for the agent rootfs before compiling, and build bundles nightly by @BinSquare in #1896
      • Add a --state-dir flag on Linux by @BinSquare in #1897
      • Report the branch memory reserve and per-child overhead in /capacity by @BinSquare in #1898
      • Pin libkrun at the vsock muxer guard fix and rebuild every bundled libkrun by @BinSquare in #1901
      • Update rustls-webpki and webpki-roots past the distrusted emSign roots by @BinSquare in #1902
      • Mount the agent's root overlay with index=off so a restart cannot lose hardlinked files by @BinSquare in #1890
      • Replace a dangling resolv.conf link instead of failing every exec after systemd-resolved is installed by @BinSquare in #1889
      • Keep a large file write's finalize from timing out the host by @BinSquare in #1881
      • Keep supplementary groups on exec, let uploads set owner and mode, add --no-wait-ready to batch branches by @BinSquare in #1904
      • Handle branch children outgrowing the host's RAM: OOM victim order and a memory pressure guard by @BinSquare in #1905
      • Pin libkrun at the macOS chmod, AMD CPUID and host-full errno fixes by @BinSquare in #1907
      • Sum node memory for /capacity from per-process counters instead of smaps_rollup so a node with many machines answers in milliseconds and stops self-cordoning by @BinSquare in #1908
      • Remove the timing-dependent agent keepalive test by @BinSquare in #1909
      • fork control socket: retry a read interrupted by a signal by @BinSquare in #1914
      • pack: the default cache cap never exceeds the filesystem that holds it by @BinSquare in #1910
      • storage test: read the ext4 superblock magic instead of shelling out to file by @BinSquare in #1911
      • agent: a missing target is NOT_FOUND even when the read-path resolver canonicalizes it by @BinSquare in #1912
      • client test: give the partial-frame shutdown test scheduling slack by @BinSquare in #1913
      • ci: build the release profile with thin LTO and 16 codegen units by @BinSquare in #1915

      New Contributors

      Full Changelog : v1.30.1...v1.31.0

    14. 🔗 r/LocalLLaMA Be prepared, GPU price increase incoming --> Samsung sells out 100% of all 2027 HBM capacity - HBM prices expected to jump 200% next year, DRAM prices expected to see a double-digit price increase rss

      Be prepared, GPU price increase incoming --> Samsung sells out 100% of all 2027 HBM capacity - HBM prices expected to jump 200% next year, DRAM prices expected to see a double-digit price increase | submitted by /u/chemist_slime
      [link] [comments]
      ---|---

    15. 🔗 backnotprop/plannotator v0.28.25 release

      Follow @plannotator on X for updates

      Missed recent releases? Release | Highlights
      ---|---
      v0.28.24 | A new look for the Inbox, Send now, tag agents, comment on an agent's message, much smaller reads for agents, links in HTML pages
      v0.28.23 | Inbox replies reach sessions with background subagents, dictated text no longer goes missing, 👍 Looks good reaches the agent, notifications that never fail silently
      v0.28.22 | 👍 Looks good, full view for files, one viewer for a thread's images and files, every session prints its URL, PLANNOTATOR_BROWSER=none opens nothing
      v0.28.21 | Message an agent from the Inbox, video attachments, Open in for attachments, Code / Tests / Generated in code review, writes from other websites refused
      v0.28.20 | Inbox search (⌘K), real folder names for projects, data files open in the code view, word-only replies leave questions open
      v0.28.19 | Ask this session in T3 Code, folder sessions load shared stylesheets and images, the agent note asked once per agent, Copy connect prompt
      v0.28.18 | plannotator inbox connects your agents, agents are told when to use the Inbox, rendered Markdown in code review, Inbox Settings in sections
      v0.28.17 | The Inbox on iPads and narrow windows, the reply bar no longer cuts off "Keep open", a Pi crash on /reload fixed
      v0.28.16 | The Inbox on a phone, a doorbell for new questions, Mark read, step through a thread's files, replies when the asking session ended
      v0.28.15 | Long Inbox threads fold to what is new, "Skipped N questions" replies, Inbox list and sidebar fixes
      v0.28.14 | Agents can replace an earlier question, comment on a guided review in the Inbox, issue numbers link to the repository
      v0.28.12 | Update notices and plannotator update, attach any file to an Inbox message, questions with context, links to attached files

      What's New in v0.28.25

      A follow-up to 0.28.24 for the Plannotator Inbox: Re-ask, delivery ticks on the list, a count of new messages on the tab, a right-click menu on threads, and click Inbox to refresh. All PRs by @backnotprop.

      Plannotator Inbox

      Re-ask open questions

      When two or more questions in a thread are still open, Re-ask sits beside Reply. It asks the agent to ask them again together in one new message, with fresh context. Picks you made but didn't send go along as answers.

      Delivery ticks on the list

      A small mark before a row's time shows where your last reply is: a clock while it's queued, dots while it's sending, ✓ when it's saved for an agent, ✓✓ once it's delivered.

      A count of new messages on the tab

      The tab reads "(3) Plannotator Inbox" and its icon gets a red badge while threads hold agent messages you haven't looked at.

      Right-click a thread

      Right-click a row (or Shift+F10) to copy its link or thread ID, mark it read or archive it.

      Click Inbox to refresh

      Click Inbox, the project you're on or the list's title to load the list again, as a page reload would. The icon turns to ↻ on hover. Nothing is marked read.

      Smaller changes

      • Close or swipe away a toast with its × or a sideways drag. #2021
      • Images in What's new. The page shows the images a release carries, saved on your computer first. #2017
      • Older Claude Code sessions update with/reload-plugins, without restarting. #2009
      • Long lists stay fast. Rows off screen are skipped, and only changed rows redraw. #2022
      • Shift-click works on attached HTML pages , joining several elements to one comment. #2019
      • The Sent toast fits on one line. #2010
      • A linked page's Back button gets focus reliably. #2015
      • A row no longer shows "Sending" while the agent is working after a turn ended and started again within a second. #2030

      Plannotator

      Smaller changes

      • Comments wrap long words and links , show the year on older dates, keep the time visible, and show right-to-left names correctly. Question context keeps its line breaks. #2020
      • Documents open faster : the annotation toolbar no longer forces a layout pass when a document opens. #2025

      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: The plugin and the plannotator binary update separately, so run the install script above as well. In a terminal:

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

      Then restart Claude Code. Inside Claude Code, run /plugin marketplace update plannotator, then open /plugin → Installed → plannotator → Update now.

      Pi:

      pi update --extensions
      

      OpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.

      What's Changed

      Community

      Every PR in this release is by @backnotprop.

      Full Changelog : v0.28.24...v0.28.25

    16. 🔗 anthropics/claude-code v2.1.306 release

      What's changed

      • Fixed claude -p inside cloud sessions reporting "Not logged in" when started without the session's environment variables
      • Fixed an API error being replaced by "prompt is too long", and an unneeded compaction, in sessions with many MCP tools
    17. 🔗 r/LocalLLaMA EXCLUSIVE: ByteDance, Alibaba, Tencent place over $35 billion worth of Nvidia chip orders rss

      China just ordered 3mil RTX 5500 Pro for $11.4k a pop. Probably for llm inference and AI video gen. I suppose this card is now out of reach for local llm.

      submitted by /u/Ok_Warning2146
      [link] [comments]

  4. October 20, 2026
    1. 🔗 IDA Plugin Updates IDA Plugin Updates on 2026-10-20 rss

      IDA Plugin Updates on 2026-10-20

      New Releases:

      Activity:

      • augur
      • chernobog
        • e96039ef: docs: add Chernobog 6.5.0 release notes and update README
        • bad5076c: fix: reduce constant-masked selectors before Legacy MBA SMT search
        • 8acf0c1a: fix: canonicalize verified complements in MBA SMT proof expressions
        • 2a2f6055: fix: prioritize complete linear word regions in Legacy MBA SMT
        • 98793b69: fix: reserve 750 ms ctree budget for Legacy MBA SMT chains
        • e5900be5: fix: execute unconditional MBA SMT chains without invariant inference
        • d2401dd0: feat: promote CoBRA to default MBA SMT backend
        • 0e83dbb9: fix: retain 500 ms site cap for all unmasked Legacy MBA SMT expressions
        • 83d35afd: ci: add configurable native parallelism input for MBA CoBRA runtime w…
        • cf61d8a3: fix: preserve 250 ms site cap for masked and small Legacy MBA SMT exp…
        • 76018126: fix: prepare MBA SMT word proofs for constant queries and retain per …
        • 68f9dfda: fix: skip MBA SMT invariant inference for empty unconditional CFG wra…
        • e74216d0: fix: prepare cached word proofs before Legacy MBA SMT search
      • diaphora
        • 14ce7dae: Merge pull request #391 from joxeankoret/joxeankoret-patch-18
        • c04ab4fc: Update README.md
        • 7bf142b3: Merge pull request #390 from joxeankoret/joxeankoret-patch-17
        • a0946609: Update ida-plugin.json
      • ffxiv_bossmod
      • haruspex
      • rhabdomancer
      • XrefsExt
    2. 🔗 19h/chernobog v6.5.0 release

      Chernobog 6.5.0

      Changes in v6.4.0...v6.5.0.
      The README retains the cumulative changes since 6.2.0.

      • CoBRA is the default MBA candidate generator — algebraic simplification
        now uses CoBRA in builds that include it. Independent Z3 checks still prove
        the proposed value and the actual emitted microcode or ctree expression before
        replacement. CHERNOBOG_MBA_BACKEND=legacy selects the previous generator;
        builds with CHERNOBOG_WITH_COBRA=OFF retain Legacy. An exhausted or failed
        CoBRA invocation does not silently restart candidate search with Legacy.
        See CoBRA integration and limits.

      • Flag-field and mask simplification — known-bit analysis tracks constant
        shifts, extensions, extraction, and multiplication by powers of two. It
        combines nested masks, removes masks from unobserved bits, and changes XOR
        to OR only when the possible set bits are disjoint. Plain field-store values
        can reuse eligible scalar locals without changing their destination or
        surrounding memory operations. Volatile and unresolved memory operands remain
        excluded from the ordinary-memory semantic model. See the
        mask-normalization examples.

      • More complete caller and loop constants — the calls-stage pass can prove
        contextual constants after Hex-Rays narrows return values, including across
        propagatable ordinary copies marked DONT_COMB. It preserves those original
        instructions and does not rewrite protected copies. This additional pass runs
        only for reachable CFG cycles. If a proved proposal cannot be lowered, analysis
        continues to other sites in the same immutable snapshot instead of discarding
        all remaining opportunities.

      • Complete-word reconstruction and reusable proofs — both generators try
        complete unmasked linear word regions up to 32 bits before their prefixes,
        including beneath typed truncations and extensions. Universally proved word
        identities are reused within the same solver session for caller, candidate,
        and emitted-value queries. A bounded proof-only normalization gives equivalent
        complemented words a common arithmetic form. Candidates retain their original
        typed semantics and still require both value proofs.

      • Legacy masked-selector reduction — fixed conjunctive and disjunctive
        constant-mask selectors can reduce to masked XOR expressions before general
        reconstruction. Complementary masks can reduce to one XOR; partial masks retain
        their fixed output bits. Each template is proved before substitution, with
        signed promotions and narrow return conversions preserved.

      • Analysis time reserved for final scalar recovery — validated unconditional
        chains execute directly through their assignments and stores, avoiding invariant
        inference where there is no branch or cycle. Qualifying Legacy functions reserve
        750 ms of the normal allowance for ctree recovery; masked Legacy sites retain
        their 250 ms cap. The shared per-function allowances remain 1 s for normal
        analysis and 30 s for Deep, with individual solver queries capped at 250 ms.
        These allowances do not bound total decompiler runtime. See the
        backend scheduling and budget details.

      • Proofs bound to the actual replacement — emitted-object receipts retain
        the exact SDK expression that was independently checked. Before applying a
        replacement, the plugin rechecks its source, destination, types, frame, effects,
        and current analysis domain. Post-proof edits, stale snapshots, cancellation,
        and ineligible deadlines reject the replacement; CoBRA proposals cannot use
        the existing preverified Legacy fallback's deadline exception. Structural
        cleanup also advances the mutation epoch so earlier receipts cannot authorize
        later edits.

      • Backend and rejection diagnostics — chernobog_mba_smt_stats(ea) reports
        the selected backend, candidate and emitted-proof outcomes, application and
        rejection counts, phase timings, and deadline overshoot. Invalid backend
        overrides and explicitly requested unavailable CoBRA builds have distinct
        diagnostics. Proof counters describe attempts; applied records actual
        rewrites.

    3. 🔗 anthropics/claude-code v2.1.305 release

      What's changed

      • Added sandbox.allowNestedUserNamespaces so sandboxed commands on Linux can create user namespaces (Chromium, rootless podman); this lets them get around the sandbox's file protections
      • Added CLAUDE_CODE_RETRY_WATCHDOG_USAGE_LIMIT_RECHECK_MS so unattended retry mode (CLAUDE_CODE_RETRY_WATCHDOG) notices a usage limit that was lifted before its reset
      • Fixed every request failing on Vertex, Bedrock and other providers when the endpoint or a gateway rejects tool search, and behind gateways with ToolSearch disallowed or left out of --tools (a 2.1.304 regression): Claude Code now retries without it
      • Fixed /effort and /autocompact settings not applying when the model name differed from a modelOverrides value by letter case or a [1m] tag
      • Fixed new worktrees in a bare repository sometimes starting from local HEAD instead of the default branch, and unchanged subagent worktrees sometimes not being cleaned up
      • Fixed Bash commands on a full disk failing with a raw ENOSPC file path: the error now says the disk is full and that nothing ran
      • Fixed an MCP server passed by a cloud session or by the SDK's setMcpServers being replaced later in the session by a same-named server from your own settings
      • Fixed Claude naming the wrong model for a subagent's work after the subagent switched to a fallback model
      • Fixed cloud sessions and teammates not telling Claude when a compaction had to leave the oldest messages out of its summary to fit
      • Fixed more cases of scheduled Cowork cloud sessions waiting five minutes for each subagent whose WebFetch needed a URL approval that nobody was there to give
      • Fixed Workflow resume re-running already-completed pipeline() and parallel() agents instead of serving them from the run's journal
      • Fixed Remote Control leaving empty "(session)" entries in /resume after switching conversations with /resume
      • Fixed /usage rows being cut off in narrow terminals
      • Fixed startup warnings printing as raw text above the logo: they now go to the debug log, and permission rules that restrict nothing show as warning rows under the banner
      • Fixed screen reader mode: search boxes now say "Search:" instead of a symbol VoiceOver read as "telephone recorder", and highlighted prompt text, such as Ctrl+R search matches and "ultrathink", no longer has spaces inside words
      • Self-hosted runner: Fixed a start script that shares only its stdout with the runner or orchestrator failing with Resource temporarily unavailable when TERM is set (a 2.1.300 regression)
      • Self-hosted runner: Fixed repository access failing since 2.1.296 when a git credential helper or askpass program reads its settings through GIT_CONFIG
      • Self-hosted runner: Fixed the orchestrator reporting a spawn-runner hook as timed out when a runner it started in the background kept its output open
      • Improved /usage: each warning is now a one-line fix that names its source, and f applies the fixes; the same fixes appear in VS Code and /doctor
      • Improved MCP consent dialogs so an Enter meant for the prompt is less likely to be taken as Accept
      • Improved a mod's Image to draw its picture in iTerm2 3.5 and later with fullscreen rendering, where it showed only its alt text
      • Remote Control: Improved the spawn-mode messages: pressing w now says the new mode is saved for the folder, and a later claude remote-control start that uses the saved mode says where it came from
      • Changed allowedMcpServers to stop filtering managed-mcp.json stdio servers that use ${VAR} only in env: one your allowlist left out now loads on upgrade; use deniedMcpServers to keep it off
      • Changed plugins that Claude Desktop mounts by path to no longer keep their allowed-tools when your organization's managed settings set allowManagedPermissionRulesOnly
      • Changed the /artifacts delete confirmation to take 1 or Enter to keep, 2 to delete, and Esc to cancel; y and n no longer answer it
      • Changed a mod's docked pane to stay within 45% of the terminal's width, including a width kept from a wider terminal
      • [VSCode] Added a "Running start-up hooks" spinner status, with a screen reader announcement, while SessionStart or Setup hooks run
      • [VSCode] Fixed the spinner cutting off "Compacting..." when your spinnerVerbs setting replaces the built-in verbs with short ones
      • [VSCode] Changed the message shown when a session does not start in time and no hook is running: it now leads with the output logs and lists causes instead of pointing to sign-in and network first
      • [Cloud sessions] Fixed the Cloud environments admin page wrongly refusing to save an existing environment with an "installs packages" error
      • [Cloud sessions] Improved deleting a self-hosted environment so the dialog and error messages say what blocks the delete and what it will affect
      • [Claude Tag] Added public Slack channels Claude hasn't joined to the Claude Tag admin Add place search, so admins can set one up from there
      • [Claude Tag] Fixed Claude Tag access bundles so a repository that moved to another GitHub account can be added again
      • [Claude Tag] Fixed a routine set up in a Slack DM thread no longer posting after another routine in that thread restarted the conversation; both now keep posting there
      • [Claude Tag] Fixed routines set up in a Slack thread reporting success without posting after the conversation ended; those runs are now skipped and the creator is told
      • [Claude Tag] Improved Claude Tag admin pages in large organizations so plugin, skill and bundle edits work while the channel list is still loading
      • [Code Review] Fixed Code Review sometimes not reviewing the newest commit when several pushes landed on a pull request during a review
      • [Code Review] Changed Code Review re-reviews so they no longer open with LGTM while earlier blocking findings are still open
    4. 🔗 @binaryninja@infosec.exchange For the stable-branch-enjoyers, there's a fresh Krypton (6.0) R2 release mastodon

      For the stable-branch-enjoyers, there's a fresh Krypton (6.0) R2 release available where you regularly download all your fine Binary Ninja releases:

      https://binary.ninja/2026/10/20/6.0-release-2.html

    5. 🔗 Simon Willison Battle Drones - a vibe coded RTS with audio-based multiplayer rss

      My latest vibe coded game experiment is a Command & Conquer style RTS (Real Time Strategy) game called Battle Drones (play it here). Unlike my previous experiments, this one is actually fun to play. I'm somewhat embarrassed to admit that I got there by telling Claude to "Make it a LOT more fun". It also supports multiplayer between nearby devices using audio to synchronize game state! Here's what I've built so far, and some of the things I learned along the way.

      Battle Drones

      My initial goal was to build an RTS game I could play on my phone, in the style of Command & Conquer. I have fond memories of the 1995 original (I liked Red Alert too) and wanted to recapture a little bit of the magic.

      After 12 major iterations (and 321 commits by coding agents, mainly Claude Code) I now have a browser-based game that works on mobile and desktop, has multiple play modes, several maps (including a random map generator) and even supports multiplayer for two devices within microphone range of each other. (Update: also online multiplayer; the audio multiplayer induced headaches!)

      Here's a video demo of Battle Drones running in a desktop browser:

      Features so far include:

      • 9 buildings, 7 ground vehicles, 6 aerial vehicles, 3 infantry units - all 3D models, which you can browse here
      • Fog of war
      • Different weapons are needed to target aerial or ground vehicles
      • Six maps, across five biomes - temperate, desert, arctic, volcanic, tropical
      • A random map generator
      • Skirmish mode - red vs. blue on a rotationally symmetrical map
      • Last Stand mode - one player holds out against as many waves of enemies as possible
      • Area effect weapons: Barrage, EMP, Drop Pod, Sky Hammer
      • Crate drops with bonus resources
      • In-game music that responds to events - it gets more intense as fighting breaks out
      • Different in-game AI personalities (Balanced, Rush, Air Swarm, Boom, Skyforce, Ironclad)
      • AI vs. AI mode, to watch those personalities play each other
      • The Goliath - a giant stomping mech with laser eyes and arm cannons and the ability to establish a new base
      • Mutators that add extra rules or twists
      • A "Daily Op" challenge
      • Ranks and achievements (Medals)
      • Agent vs. Agent mode where two LLMs can play Battle Drones against each other
      • A multiplayer mode based on two nearby phones communicating via audio messages, an extension of my earlier experiment with Chirp Pong

      How I built this

      Battle Drones is heavily vibe coded - I've reviewed almost none of the code, and it's built in a language (TypeScript) that I've hardly used myself. I've playtested it quite a bit though, and it's been through a large number of iterations since I started the project.

      Here's a rough history of the project so far, including key prompts and links to transcripts.

      v1: the initial prototype

      I started out with Claude Fable 5 back in July:

      We are going to build a mobile friendly RTS game - command and conquer style - called Battle Drones, in which two armies of drones (both flying and ground-based) battle for territory and resources

      Let's start with a MVP design, ask me some questions

      Here's a shared transcript. I'd given Claude Code for Web an environment variable with an OpenAI API key and told it to use the OpenAI Image Generation API for assets, which got me some basic sprites.

      You can try v1 here - it looked like this:

      Game screen. Down the right are text icons to build Fab, Airpad, Turret, Harv, Sting, Flak, Scout, Wasp, Raptor. There is a blocky fog of war on a 2D battlefield. There are some gems, an HQ building being attacked by badly rendered tanks, and some blue vehicles dotted around. It's not very visually impressive but it does look like a basic RTS.

      It's recognizable as an RTS, has building mechanics and the ability to select and direct units, and a basic AI to play against.

      This first version was barely a proof of concept, and it wasn't any fun to play.

      Claude used the Phaser 2D game framework for these early versions. I didn't even realize this until several iterations later!

      v2: full sprites

      The second version (try v2 here) added sprites for all of the vehicles and the "AI vs. AI" mode, so I could watch the game playing without having to directly control it myself.

      Claude proved reasonably competent at prompting OpenAI's image models to generate sprites. You can browse the v2 sprites in the public/assets/sprites folder.

      Four flying units, three turrets, a harvester and an airpad all have proper sprites now. The scrap field has a new design which doesn't look great but is at least using a graphic.

      v3: varied terrain

      It still wasn't much fun, and the graphics were boring. It was now October, and I had upgraded to Claude Opus 5.5. I told it:

      Massively improve this game. Make the graphics and gameplay better (keep it mobile friendly). Render new graphics using the latest OpenAI GPT image API (lookup details) with the API key in the environment variable. Add new unit types and balance the gameplay better. Also add new buildings and better, more varied terrain.

      This resulted in five new maps with generated background tiles in a variety of styles, visible here. Opus also regenerated the sprites, making them much more visually appealing. You can try v3 here - it looks like this:

      The map is now an ice map with snow and ice and broken ice - it looks really good. The vehicles and buildings have all had a cosmetic upgrade too. This is starting to look like a real game.

      This is starting to feel like a real game! It still wasn't very fun to play though - I found myself getting bored pretty quickly.

      v4: the fun update

      So far my Battle Drones experiment was confirming my previous belief that coding agents can build a thing that looks like a game but can't actually make something that's genuinely compelling to play.

      I shared this theory with someone over dinner, and then thought to myself that I should give the models a proper chance to prove me wrong. I prompted Opus 5.5 on my phone:

      This game isn't fun enough yet. Make it a LOT more fun.

      This time I was running in Ultracode mode, where Claude Code (in this case Claude Code for Web) runs "dynamic workflows", described in their docs as:

      A dynamic workflow is a JavaScript script that orchestrates many subagents at once.

      This kicked off many hours of work. I started it in the evening and didn't get a playable result back until late into the next morning. But the results were spectacular.

      You can try v4 here - it looks like this:

      The lava map. Uplink satellites are being taken, crystals look better, Elite text is shown above a unit, there is an arrow marked Fight to jump to a fight, the AI vs AI mode has a speed controller - plenty of new features here.

      I had Claude write its own release notes - here are the highlights:

      Every skirmish and Daily Op now opens with a choice, gives the side that's losing a way back, and pulls the armies into the middle of the map. There are also two new ways to play.

      • Openers: pick Blitz, Industry or Air Wing before the clock starts.
      • Call-down powers: Barrage, EMP, Drop Pod and the Sky Hammer orbital strike.
      • Objectives and salvage: Uplink relays, supply drops and wrecks worth scrap.
      • Feel: combat juice, adaptive music, unit voices and an announcer.
      • Command: battle alerts, game speed, saved squads and touch placement.
      • New modes: Last Stand survival waves and an 8-mission Ops campaign.
      • Progression: heroes, an after-action report with awards, a career, 7 mutators and a Daily Op.

      Fights run longer and swing more. In 1,200 AI-vs-AI test matches on Normal, games still undecided after 25 minutes fell from 14% to 0.9%. The share of wins by a side that had been 800+ scrap behind rose from 24% to 46%.

      Part of the reason Claude took so long was that it ran over a thousand simulated playtest sessions, and used the results to rebalance the existing units, add new ones, and introduce new features.

      v5: Battle Drones goes 3D

      After the success of Ultracode at "Make it a LOT more fun", I decided to be more ambitious:

      Port this game to three.js with 3D models for all of the buildings and vehicles and landscapes

      That was another overnight run. I woke up to this v5 version:

      Now it is in 3D - the battlefield is at a slight angle, the buildings and vehicles are all 3D models, the rocks and trees look a bit 3D as well.

      The new 3D models were entirely constructed by Claude in TypeScript code.

      v6 (play v6 here) added some more visual polish. v7 (play v7) added robot infantry (troopers, rocket squads, snipers) and a "Condor" troop carrying aircraft.

      v8: Archipelago

      I was beginning to feel guilty at how little actual design input I had into the game - it really had been a case of me saying "make it more fun" and "add visual polish" for the past few releases.

      I'd noticed that the AI didn't use the new infantry and troop carrying aircraft from v7 very often - there wasn't a great strategic reason to use them.

      It would be neat if we had a new map with a new game mechanic that actively encouraged players to load up Condors with infantry robots and send them out into the map.

      This resulted in my longest prompt yet:

      Design a new map. Goal is to make different strategic incentives that encourage use of Infantry and Condors and aerial vehicles.

      To do this the map will have limited harvester resources but several more uplinks - but uplinks will be on islands that are inaccessible by land vehicles or infantry. These uplinks can also not be claimed using air vehicles. The ONLY way to get them is to fly infantry there in a Condor.

      Armies always start with a Condor and a single squad. If an army has no Condor a new one will be provided for free, flying in from the edge closest to their HQ and landing there. That free condor will come with a single free squad on board.

      The two HQs should be entirely separated by water, but still accessible by vehicles thanks to two bridges across the map in different places

      I want to encourage a battle over uplinks.

      The map should be the times the size of other maps - still square

      First research and then critique this design. Only build after we have agreed on any modifications

      You get to design a new biome for this

      The result was the tropical Archipelago map, with seven island uplinks that players can only capture by flying out infantry in a Condor. It's definitely the most fun map to play, once you've got the hang of the basic game mechanics from the simpler maps. The v9 edition made that map a little more interesting - it now looks like this:

      Three islands, each with an uplink satellite. Blue holds one, red holds another, A blue condor is flying towards the red island, which is guarded by a red plane. There is a bridge nearby. The theme is tropical islands and looks very pleasant.

      v10: Goliath, and agent battles

      I decided to add giant robot mechs to the game - think Jaegers from Pacific Rim, or Titans from Warhammer 40,000.

      Here are some of the prompts I used to brainstorm with Claude:

      Help me brainstorm ideas for adding giant robots to this game - think dreadnoughts or titans from W20K - how could we do this in a way that enhanced gameplay, kept things balanced, added unique twist? Don't overthink this yet

      Let's keep brainstorming. I like the idea that it's a mobile base - that can accept harvested scrap and can have buildings built near it (even if it later moves on) and can produce infantry units too. An interaction with condor would be neat but I don't know what that could be.

      Idea: as it gets damage it loses the ability to fire some weapons - by default it has eye laser (like lancers) and arm canons (like titan) and two shoulder mounted mortars, plus machine guns similar to a squad of troops

      Damage knocks out mortars and then laser - it always has guns. You can't build next to a building that was only put there because of the mech, you need the mech there for off-base building and only within three squares of it

      [...] Lets do two condors can carry the mech

      The end result is really cool.

      Goliaths can be constructed using a Gantry - a building that can only be created after first building a Fab, Bay, Airpad, and Tech Lab. You can see the Goliath under construction, and it then walks out from the Gantry and can march around the map.

      Goliaths can "anchor", which digs them into the ground. In their anchored state they can act as a new HQ, constructing infantry units and additional buildings in a new area.

      Two Condor aircraft can hook onto a Goliath, at which point it can be flown around the map!

      The game now ends when you destroy the enemy's HQ building and any Goliaths they might have built.

      There are also a couple of mutators relating to Goliaths:

      • Goliath Armada starts each side with four airborne Goliaths (each with a pair of Condors) and no other units.
      • Robot Love adds a special rule: if enemy Goliaths get close to each other on the battlefield they fall in love and the game ends in a draw. (Thank Natalie for that one).

      Agent battles

      The other v10 feature is agent battles. In musing about how multiplayer could work I had an idea: what if different LLMs could fight it out in the game?

      Fun extra challenge: think about how we might make multiplayer available to coding agents. It would be neat if we could set up a battle between eg GPT-6 Sol and Claude Opus 5.5 where each model has access to a tool which gives them information about the game (presumably non-visual, but only the information they could see through fog of war etc) and lets them control their units etc [...]

      Consult ~/dev/llm/docs and include notes in that file about how LLM could be used here via a new tools plugin

      Opus 5.5 went to work on this, producing this AGENT-BATTLES.md proposal and then implementing and testing it. The feature also includes the ability to record and replay these battles - here's a replay of Claude Haiku 5.5 vs. GPT-6 Luna, and here's that same battle in a separate debug tool that shows the underlying prompt responses.

      Screenshot of a replay of a real-time strategy game between two AI models, shown from a top-down view of a snowy map with a dark frozen lake of cracked ice floes on the left and pine forests at the top and lower right. Top bar: pause button, "6:27", "1×", "anthropic/claude-haiku-5-5 · industry" in blue, "gpt-6-luna · industry" in red, a blue-and-red strength bar labeled "B" and "R", and "0:03". Left notification: "Blue: Pushing turrets at the enemy's south-east edge." Replay panel: "Blue anthropic/claude-haiku-5-5 · industry vs Red gpt-6-luna · industry · frostbite seed 42", a timeline slider at "6:27 / 7:48", and buttons "−30s", "+30s", "All", "Blue's eyes", "Red's eyes", "Notes". In the scene, a group of blue tanks and a large blue Goliath mech trailing smoke advance near the ice edge at lower center, while a column of red turrets (one burning) lines the ice to their north, red tanks and trucks sit by a rocky ridge to the east, and red base buildings occupy the top right. A minimap is in the top right corner and zoom in, zoom out and lightning-bolt buttons are on the lower left.

      The prompt that drives agent battles can be seen here.

      There are a few more replays like this linked in the README. I hope to turn this into a full league table at some point in the future.

      v11: Random Maps

      This version exists purely because I glanced at my Claude Usage page one day and saw that I'd only used 75% of my weekly allowance and it was resetting in 45 minutes. I decided to see if I could get an extra Battle Drones feature from my remaining tokens, and picked "random map" as the target:

      Design and implement a mechanism for generating a random map using any of the available biomes - it should be the size of the largest map and rivers and bridges and rocks and forest and scrap and crystals are all in play. Make them rotationally symmetric and use a seed to allow them to be selected or reused later. You have 45 minutes to build this! Be creative.

      Here's the transcript, and an image Claude generated to show me its work:

      Grid of ten top-down game maps, two per biome (temperate, desert, arctic, volcanic, tropical), each with a river or lava flow, bridges and roads. Title: "Battle Drones: generated maps (108x108, point-symmetric), 2 per biome, runtime ground painter". Each map is captioned with a name and layout type plus a seed and crossing counts, e.g. "Hawthorn Delta · fork" "random-temperate-1x8a6r2 · 6 bridges, 4 fords"; layout types are fork, badlands, crossing and lake.

      v12: Multiplayer via sound

      I only just got this working, so I've not had much time to actively test it yet. The latest Battle Drones now supports multiplayer via two devices sat within microphone distance of each other!

      This feature started out as my Chirp Pong experiment from last week. I pointed Claude Code at that working proof of concept:

      Clone Simonw/tools from GitHub and look at recent branches for the example pong game that uses web microphone to implement multiplayer between two phones via audio signals

      Build a version of that for battledrones

      Opus built this Radio Probe tool to measure how much bandwidth we could get between two devices and, based on positive results from that, implemented a full audio modem system. I've tried it between laptops, iPhones and iPads so far and it seems to work really well!

      Why use sound for this? Because I love static HTML that costs nothing to run, and I don't want to spin up a server somewhere and then stay responsible for keeping it operating for as long as anyone might want to play the game.

      Some thoughts

      I know almost nothing about game development. This makes it a great opportunity to try out coding agents in a field where my existing software engineering experience has less impact on the results.

      Games are also super low stakes. The worst that can happen is one of my silly game experiments suffers a bug.

      This morning (via Hacker News) I found Steam Fans Are Begging for a No-AI Filter as Steam Next Fest Is Filled With Slop. I wouldn't personally dream of submitting Battle Drones to an event like this - it's still way too low effort to warrant consideration as a legitimate indie gaming project.

      ... but I can now see a path to vibe coded games like this being taken seriously. Battle Drones is fun, it looks good, it has innovative features (the multiplayer-over-audio thing is a first for an RTS as far as I can tell).

      I'd love to see what someone with better taste than me and a driving passion to produce something truly exceptional could build!

      A few other observations from this project:

      • Static HTML and JavaScript is a fantastic medium for games development. WebGL works great, and Three.js (and Phaser before it) are excellent platforms to build on that the current models know inside out.
      • This also lets them run as Progressive Web Apps - I didn't ask for it, but Battle Drones works offline. I was able to play it on a plane despite never having directly installed it - my phone had it cached.
      • Giving Claude an OpenAI API key and telling it to generate images using OpenAI's models works really well. It can view the images it has generated and iterate on the prompts.
      • Opus 5.5 is spectacular at 3D modeling using Three.js (and Blender, and no doubt other 3D applications as well). The same is true of GPT-6 Astra. They are absolutely capable of building models for 3D game projects.
      • For features like replay and multiplayer it's useful to have a deterministic simulation engine. At one point Claude had to replace calls to Math.sin() and Math.cos() and friends with custom versions because different browsers (Chrome vs. Safari, for example) returned very slightly different numbers, desynchronizing the replay.
      • Opus 5.5 can write music! There are no audio files in this project - the soundtrack is entirely generated through code, varies across different maps, and even gets more intense as the battle heats up. See Scrimshaw Jukebox for a previous experiment with Claude for music composition.
      • I still can't get over how well the prompt "Make it a LOT more fun" worked.
      • Tools are effectively free. I prompted up the Radio Probe, the Model browser, the Agent vs. Agent debug tool, and Claude Code built a bunch of tools for itself that I haven't even explored myself.
      • Audio-based multiplayer between static HTML games works! I hope to see a whole lot more games use this same pattern - in digging around today I've not found much prior art beyond Siner by Alon Horesh and ggwave by Georgi Gerganov (also of llama.cpp fame).
      • Claude Code "Ultracode" burns tokens like there's no tomorrow, but it can also solve complex problems (like adding audio-based multiplayer) from a single prompt.
      • I'm still not quite over the guilt of building software in this way. I don't feel like I've earned the right to create something this good, in a field in which I have so little prior experience! At this point I've shown it to enough people in private that it felt wrong not to publish it for everyone else to see and learn from.

      Update: Online multiplayer support

      Earlier in this article I said:

      Games are also super low stakes. The worst that can happen is one of my silly game experiments suffers a bug.

      Then I tried playing the multiplayer version with Natalie... and the high pitched modem sounds gave her a nasty headache!

      That's a pretty bad bug. I added a warning and was then inspired to build proper network multiplayer. I tried getting WebRTC to work but couldn't get a connection going between two of my own devices even on my own WiFi network, so I had Claude build a simple, stateless WebSockets relay server instead:

      If I wanted to support multiplayer between two devices at a very low cost without storing any state on the server could I do that with a tiny asyncio web server running on the cheapest Fly instance?

      Build the server and the fly.toml for deploying it, use Fly application name battledrones-relay - put that in a folder in the repo, include deploy instructions in the README in that folder

      Here's the resulting server. Since this scales to zero and runs on a single Fly.io shared-cpu-1x instance it should cost me no more than $2.19/month - and that's if it stays hot and serving connections the whole time.

      Battle Drones now supports online multiplayer. Click "Duel a friend online", then either share the resulting room URL via your messaging app of choice or have them snap a picture of the displayed QR Code.

      I also added a feature where you can copy JSON of the match once it has ended and then feed that into the replay feature to rewatch your game.

      I didn't expect to introduce online multiplayer this soon, but the headache bug felt like it warranted an urgent alternative.

      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.

    6. 🔗 roboflow/supervision supervision-0.31.1 release

      v0.31.1 — Recall that matches COCO, boxes that don't overflow

      A bug-fix release: recall scores now agree with COCO, and half-precision boxes stop overflowing.

      • MeanAverageRecall skips crowd regions and matches predictions in confidence order, like pycocotools.
      • COCO segmentations loaded without an area field no longer make mAP return -1.
      • float16 boxes keep finite areas, and mAP and with_nmm stop overflowing on narrow coordinate types.
      • Mask and halo annotators draw on grayscale scenes, and vertex annotators accept (x, y, z) points.
      • Without OpenCV, ellipses and thick circles render like OpenCV 5, and grayscale images save correctly.

      Drop-in upgrade, no code changes. mAR values can move: up on COCO data with crowd annotations, and in either direction where confidence order now decides which prediction claims a target.

      ✨ Spotlights / highlights

      Recall that matches COCO

      sv.metrics.MeanAverageRecall used to count COCO crowd regions as missed objects and to pair predictions with the highest-IoU target first. It now leaves out targets with data["iscrowd"] or data["ignore"] set, the same rule MeanAveragePrecision uses. It also matches predictions in descending confidence order with COCO's tie rule, and counts an oriented-box IoU of exactly 0.55, 0.6, 0.8 or 0.85 as a match at that threshold. One target, one crowd target and a perfect prediction now score 1.0 instead of 0.5. (#2750, #2758, #2752)

      import numpy as np
      import supervision as sv
      from supervision.metrics import MeanAverageRecall
      
      targets = sv.Detections(
          xyxy=np.array([[0, 0, 10, 10], [20, 20, 30, 30]], dtype=float),
          class_id=np.array([0, 0]),
          data={"iscrowd": np.array([0, 1])},
      )
      predictions = sv.Detections(
          xyxy=np.array([[0, 0, 10, 10]], dtype=float),
          class_id=np.array([0]),
          confidence=np.array([0.9]),
      )
      MeanAverageRecall().update(predictions, targets).compute().mAR_at_100  # 1.0
      

      Half-precision boxes that stay finite

      A 256×256 box in float16 has an area of 65,536, which is past float16's maximum, so Detections.box_area returned inf and area filters dropped it. Box areas of float16 detections are now computed and returned in float32, and MeanAveragePrecision and with_nmm no longer overflow on float16 or narrow integer coordinates either. COCO segmentations loaded with masks but without an area field now get it from the decoded mask, so those targets stay in their size bucket instead of turning mAP into -1. (#2764, #2743, #2753, #2763)

      import numpy as np
      import supervision as sv
      
      detections = sv.Detections(
          xyxy=np.array([[0, 0, 256, 256], [0, 0, 0.01, 0.01]], dtype=np.float16)
      )
      detections.box_area  # array([6.5536000e+04, 1.0004273e-04], dtype=float32)
      

      Grayscale scenes and 3D keypoints in annotators

      sv.MaskAnnotator and sv.HaloAnnotator raised ValueError on single- channel images. They now accept (H, W), (H, W, 1) and Pillow "L" scenes, painting the gray value OpenCV would write for the same color. VertexAnnotator and the vertex-ellipse annotators draw (x, y, z) keypoints from their x and y, where they used to fail on tuple unpacking. (#2755, #2759)

      import numpy as np
      import supervision as sv
      
      scene = np.zeros((100, 100), dtype=np.uint8)
      mask = np.zeros((1, 100, 100), dtype=bool)
      mask[0, 20:60, 20:60] = True
      detections = sv.Detections(
          xyxy=np.array([[20, 20, 60, 60]], dtype=float), mask=mask, class_id=np.array([0])
      )
      sv.MaskAnnotator().annotate(scene.copy(), detections).shape  # (100, 100)
      
      key_points = sv.KeyPoints(xy=np.array([[[10, 10, 0.5], [50, 50, 1.0]]], dtype=np.float32))
      sv.VertexAnnotator().annotate(np.zeros((64, 64, 3), dtype=np.uint8), key_points)
      

      Drawing without OpenCV, closer to OpenCV

      The NumPy fallback used when OpenCV is not installed now ports OpenCV's ellipse rasterization, and thick circle outlines are centred on the radius instead of shrinking inward by half their thickness. Both match OpenCV 5.0 pixel for pixel in the reference tests. Without OpenCV, this changes the pixels drawn by EllipseAnnotator, RoundBoxAnnotator, the vertex-ellipse keypoint annotators, CircleAnnotator and DotAnnotator outlines. Image writing now accepts (H, W, 1) grayscale arrays and saves BGRA images as JPEG, and video reading handles files whose audio stream comes before the video stream. (#2740, #2765, #2754, #2746)

      🔄 Migration guide

      No migration required for this release.

      📝 Notable changes

      🔧 Fixed

      MeanAverageRecall and COCO

      • sv.metrics.MeanAverageRecall counted COCO crowd and ignored targets as missed objects and paired predictions by highest IoU first; it now skips those targets and matches in descending confidence order with COCO's last-target tie rule, as COCO does. (#2750, #2758)
      • Oriented-box MeanAverageRecall, Precision, Recall and F1Score missed matches whose IoU was exactly 0.55, 0.6, 0.8 or 0.85, because the IoU was float64 and the thresholds float32. (#2752)

      Overflow-safe boxes

      • Detections.box_area and box-based Detections.area overflowed to infinity for ordinary float16 boxes; they now compute and return float32. (#2764)
      • sv.metrics.MeanAveragePrecision overflowed box extents and areas for float16 or narrow integer coordinates, so perfect large boxes scored -1 or landed in the wrong size bucket. (#2743)
      • sv.Detections.with_nmm overflowed its area-weighted confidence for float16 boxes and, at extreme coordinates, for integer and float32 boxes. (#2753)
      • COCO loading with masks left segmented annotations without an area field with a NaN area, which pushed them out of every mAP size bucket; the area now comes from the decoded mask. (#2763)

      Masks and polygons

      • resize_masks returned an empty array when downscaling very narrow masks; it now keeps at least one pixel per axis. (#2762)
      • sv.filter_polygons_by_area and sv.polygon_to_xyxy raised ValueError on empty polygons; they now treat them as zero area and an all-zero box. (#2761)

      Annotators

      • sv.MaskAnnotator and sv.HaloAnnotator raised ValueError on grayscale scenes. (#2755)
      • VertexAnnotator and the vertex-ellipse annotators raised a tuple-unpacking error on three-coordinate keypoints; they now draw from x and y. (#2759)
      • sv.MaskAnnotator widened its blend region to the boxes of all-empty masks, including CompactMask, copying and blending outside the foreground. (#2741)

      Without OpenCV

      • The fallback ellipse painted different pixels from OpenCV for thick strokes, fills and arcs; it now ports OpenCV's rasterization. (#2740)
      • The fallback circle grew thick outlines inward from the bounding box, shrinking them by half their thickness; they are now centred on the radius. (#2765)
      • Image writing rejected (H, W, 1) grayscale arrays and lost BGRA images saved as JPEG. (#2754)
      • Video reading failed on files whose audio stream comes before the first video stream. (#2746)

      🏆 Contributors

      Welcome to our first-time contributors, Ghanashyam V Narayan and jorge!

      • NIKHIL (@Nikhi00718) — fixed overflow in box areas, mAP and with_nmm, derived missing COCO areas, and fixed image writing and video reading without OpenCV.
      • Kaushik Reddy Lingireddy (@Lingikaushikreddy) — made MeanAverageRecall skip crowd targets and match by confidence, and fixed oriented-box threshold matching.
      • peng xiang (@px12811) — ported OpenCV's ellipse rasterization to the fallback and fixed mAR tie-breaking.
      • A Aswanth Raj (@aswanth-07) — fixed three-coordinate keypoint drawing and narrow-mask resizing.
      • Mohammad Hijjawi (@MohammadHijjawi97) — made MaskAnnotator and HaloAnnotator work on grayscale scenes.
      • kevin (@kevin9327) — centred thick fallback circles on their radius.
      • Ghanashyam V Narayan (@ghanashyam03) — made the polygon helpers accept empty polygons.
      • jorge (@jorge-asenjo) — kept empty compact masks out of the mask blend region.
      • Jirka Borovec (@Borda) — prepared the release.

      Full changelog : 0.31.0...0.31.1

    7. 🔗 backnotprop/plannotator v0.28.24 release

      Follow @plannotator on X for updates

      Missed recent releases? Release | Highlights
      ---|---
      v0.28.23 | Inbox replies reach sessions with background subagents, dictated text no longer goes missing, 👍 Looks good reaches the agent, notifications that never fail silently
      v0.28.22 | 👍 Looks good, full view for files, one viewer for a thread's images and files, every session prints its URL, PLANNOTATOR_BROWSER=none opens nothing
      v0.28.21 | Message an agent from the Inbox, video attachments, Open in for attachments, Code / Tests / Generated in code review, writes from other websites refused
      v0.28.20 | Inbox search (⌘K), real folder names for projects, data files open in the code view, word-only replies leave questions open
      v0.28.19 | Ask this session in T3 Code, folder sessions load shared stylesheets and images, the agent note asked once per agent, Copy connect prompt
      v0.28.18 | plannotator inbox connects your agents, agents are told when to use the Inbox, rendered Markdown in code review, Inbox Settings in sections
      v0.28.17 | The Inbox on iPads and narrow windows, the reply bar no longer cuts off "Keep open", a Pi crash on /reload fixed
      v0.28.16 | The Inbox on a phone, a doorbell for new questions, Mark read, step through a thread's files, replies when the asking session ended
      v0.28.15 | Long Inbox threads fold to what is new, "Skipped N questions" replies, Inbox list and sidebar fixes
      v0.28.14 | Agents can replace an earlier question, comment on a guided review in the Inbox, issue numbers link to the repository
      v0.28.12 | Update notices and plannotator update, attach any file to an Inbox message, questions with context, links to attached files

      What's New in v0.28.24

      A big Inbox release: a new look, Send now, tagging agents, comments on an agent's own words, and much smaller reads for agents. Links inside HTML pages now work everywhere you annotate. 23 PRs, all by @backnotprop.

      Plannotator Inbox

      A new look

      The Inbox has a softer, calmer design, with tooltips that match the app instead of the browser's. A new text size setting (Settings → General, 12 to 15) makes everything larger or smaller at once.

      Send now

      After you send a reply, the line under it says whether it is queued (the agent is busy and gets it when its turn ends) or on its way. Send now puts it into the agent's running turn right away, on Claude Code, Pi and OpenCode 2.

      Tag agents

      Type @ in a reply or a comment to choose which agents get it.

      Comment on an agent's message

      Select any words in an agent's message and comment on them, the same way you comment on an attached file. Your comments go with your next reply.

      Agents read much less

      When an agent reads a long thread, it now gets the newest messages in full and older ones as one line each, with the option to open any of them. A 46-message thread went from about 48,000 tokens to about 7,000. Agents can also search the Inbox.

      Knowing when to update Claude Code sessions

      When a Claude Code session still runs an older Plannotator plugin than the one installed, the Inbox says so and shows how to load the new one.

      One full-screen mode for files

      Every kind of attached file opens full screen the same way.

      Removed: the Decisions page. The Inbox no longer has a Decisions page, and agents no longer have the tools that recorded decisions.

      Smaller changes

      • The skill picker in New message opens right under the line you are typing instead of behind the footer (#2004)
      • New message is in the list header while the sidebar is closed (#1987)
      • The toast sits at the bottom of the window and its words are never cut off (#1988)
      • The notification line above the list reads more cleanly (#1989)
      • Rows that Show brings in stay highlighted a little longer (#2003)

      Plannotator

      Links in HTML pages work

      In HTML you annotate, and in HTML pages attached in the Inbox, a click on a link now follows it and ⌘-click (Ctrl-click) pins it for a comment. On a phone, a tap follows and a press-and-hold comments. Live apps follow the same rule.

      Smaller changes

      • Docs: WSL2 needs no remote mode, so Ask this session stays on (#1984); the guide skill is now called guided-review, with a new guided-plan skill (#1996); the @plannotator/ui handoff docs are up to date (#1986)

      Install / Update

      macOS / Linux:

      curl -fsSL https://plannotator.ai/install.sh | bash
      

      Windows:

      irm https://plannotator.ai/install.ps1 | iex
      

      Claude Code Plugin: The plugin and the plannotator binary update separately, so run the install script above as well. In a terminal:

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

      Then restart Claude Code. Inside Claude Code, run /plugin marketplace update plannotator, then open /plugin → Installed → plannotator → Update now.

      Pi:

      pi update --extensions
      

      OpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.

      What's Changed

      Community

      Every PR in this release is by @backnotprop.

      • @balaji-dutt reported that Ask this session was off under WSL2 even though the review page was only reachable on the same machine (#1983), which led to the WSL2 docs fix.

      Full Changelog : v0.28.23...v0.28.24

    8. 🔗 exe.dev The Topology of an LLM Agent Loop With Tool Use rss

      When I look at a new agent, I break it down by focusing on its topology. An agent is three things:

      1. A model. Your model choice defines the agent’s “smarts,” i.e., which tasks it can accomplish.
      2. The agentic loop (see: The Unreasonable Effectiveness of an LLM Agent Loop with Tool). Loop choice determines UX.
      3. The set of tools. This defines the capabilities and power (and blast radius) an agent has.

      (2) and (3) together are often called “the harness.”

      Three circles: Model (local? open weight? 4 cursed API shapes, physical
location? size? speed? cost), Agent Loop (local or remote? where is message
history? permissions? UI, subagents?), and Tools (bash? if so, where? MCP?
Code Mode? asynchronous?). Agent Loop and Tools together are bracketed as the
Harness.

      All of this is code, and code has to run somewhere. Where these run—the topology of these agents —has implications on cost, capability, effectiveness, and security for companies building AI products and people using AI tools.

      Example 1: Claude Code

      Claude Code on your laptop uses Anthropic’s hosted model, runs the agentic loop on your laptop, and runs the tools also on your laptop.

      Three circles. Model: Cloud (Anthropic). Loop: Your laptop. Tools: Your
laptop.

      Example 2: ChatGPT

      ChatGPT uses OpenAI’s hosted model, runs the agentic loop on their backend server, and runs tools also on their backend servers.

      Three circles. Model: Cloud (OpenAI). Loop: Cloud (OpenAI). Tools: Cloud
(OpenAI).

      Example 3: Siri on your Mac

      Siri on your Mac uses a mix of models: smaller ones run on your Mac, and bigger ones run in Apple’s Private Cloud Compute. The agentic loop runs on your Mac, and so do the tools, like the one that reads your Messages.

      Siri on a Mac. Asked “How many iMessage messages did I receive today?”, it
answers “You have three new messages in
Messages.” Three
circles. Model: split by a dashed line into Your Mac and Cloud (Apple).
Loop: Your Mac. Tools: Your Mac.

      Example 4: Amp Orbs

      Amp Orbs use models from Anthropic, OpenAI, and others, run the agentic loop in Amp’s backend, and run the tools in your Orb, a VM that Amp creates for each thread with your code on it.

      Three circles. Model: Cloud (Anthropic, OpenAI, etc.). Loop: Cloud
(Amp). Tools: Your Orb VM.

      Example 5: Shelley on exe.dev

      If you’re using our Shelley coding agent on an exe.dev VM, the model is hosted, and the agent and the tools run on the VM.

      Three circles. Model: Cloud (Anthropic, OpenAI, etc.). Loop: Your exe.dev
VM. Tools: Your exe.dev VM.

      In all of these cases, remote MCP servers can expose tools running elsewhere.

      Where Is the Model?

      Your choices here are GPUs hosted by someone else or your own GPUs.

      As the controversy around the Navier-Stokes equation reminds us, the only way to be confident nobody is training on your data is to not send your data to them. If you’re working on common problems, it probably doesn’t matter. But I suspect a hapax legomenon could end up in the training data somewhere.

      If I want to, say, use some LLMs to OCR and classify some scanned bills on my computer, I’m reaching for local models, because speed doesn’t matter (it can run overnight), and privacy is guaranteed. (Shout out to the Apple Vision Framework, by the way. And ScanShelf is an example where I do this!)

      Ken Thompson’s 1984 Turing Award lecture, Reflections on Trusting Trust, hits different now. That paper poses how a Trojan Horse could be hidden in a compiler, invisible in the compiler’s source code, as it’s propagated by the compiler. The LLM (a compiler? maybe? no?) could have some tampered weights that lead the agent to do something naughty; it’s been tried. We must choose which vendors to trust.

      LLMs are wreaking havoc on traditional SaaS cost structures as well. If you have, for example, a diagram-drawing SaaS, and you want to let your users use agents to edit the diagrams: who’s paying for the tokens? Before agents, your costs were a few database rows per customer; now that customer can rack up a $100 bill with a few sentences. At exe.dev, our users can bring their own ChatGPT subscriptions to build applications with OpenAI models. This is a win- win. I expect we’ll see more “bring your own model” options.

      This is my bespoke drawing editor, with a built-in agent. You’re going to see “agent drawers” in every product.

      Where is the loop?

      If you’re using, say, ChatGPT, the loop is running in OpenAI’s servers. If you’re running a coding agent, the loop is running on your laptop. The loop could run in a web browser (e.g., as I did in ItsyBitsy, and as many others have as well).

      I have found over and over again that I find other people’s loops limiting. For example, I much prefer pointing my preferred agent at my source code and my observability tooling rather than using the observability vendor’s agent loop.

      The loop has to maintain the message history (since an LLM agent is operating on the entire history), and that has to be stored somewhere. Storing it in SQLite for Shelley remains a decision I’m very happy with. Pi Durable also offers SQLite.

      JSONL, crossed out

      The loop also provides the UI for the agent. Can it display images? Are there customizations to give feedback on video? Is it limited to plain text? Can it handle attachments? Can a conversation be shared? All of these are choices the loop must make.

      Where are the Tools?

      Agents aren’t agents without tools. The jump from one “completion” from an LLM to an agentic loop is transformational. If an agent can empirically test the thing it’s writing, the results are better.

      The problem with executing code is that, well, you have to do it somewhere, and you have to assume that the code being executed is unpleasant and will steal all the cookies from your pantry and set off the fire alarms at night unnecessarily (or worse).

      The code execution isn’t lightweight: it’s not all editing files; compilation, video processing, running tests… the workload can be heavy.

      Virtual Machines are the gold standard for executing code safely. Even with VMs, there are tons of variables: can it talk to the network? Does it have credentials to talk to other services? Is there enough memory?

      Running coding agents locally works too, but the blast radius for the “Lethal Trifecta” is bigger. Exposure to untrusted content could lead the agent to leak secrets, for example.

      You can build many useful agents without a full machine. Pyodide, a Python running in WASM, is sandboxable without a full machine. Likewise, there are several WASM JS implementations. You can always run the agent loop on the browser, too, which runs sandboxed code day in and out. (See https://blog.philz.dev/blog/sandboxes/ for a short list of some of these approaches.) You can also give an agent the ability to run SQL on a readonly database connection, and that’s pretty safe!

      Note that the tools don’t have to be in the same address space as the loop; they don’t even need to be in the same neighborhood. When you’re using a “Connector” in ChatGPT (roughly their word for MCP), you’re giving the agent loop (which is hosted by OpenAI) access to resources somewhere else. Concretely, if you use the exe.dev MCP, your ChatGPT can operate on your exe VMs. When you’re talking about MCP, map out where the OAuth tokens are held.

      To make their products useful, Muse, GrokBot, OpenAI Dots, and so on are all providing VMs.

      Mapping Agents

      There are tradeoffs everywhere you look. Framed as topology, you can break down any agentic product. Once you know what’s running where, you can reason about what a product can and cannot do.

      In my work at exe.dev, I use five independent agentic loop implementations nearly every day. (Our coding agent, Shelley; our alert agent, Sisyphus; our deployment supervisor, Athena; an ops agent, Puck; our repo news Slack agent.) Shelley is a general purpose coding agent, but the other four are bespoke software. More and more software will ship with agentic loops built-in.

      I also constantly interact with other systems, and use agents to glue them together. The companies that get it make their product legible to coding agents. I can just smell Clayton Christensen's Innovator's Dilemma as I switch from better, more polished, established products to ones that let me point an agent at them. Of the nine points in Revisiting Joel’s Test, this is the most important one.

      There is no “one loop to rule them all.” Good UX (and a good set of tools) for a general-purpose chatbot is not the same as good UX for a coding agent.

      I leave you with the most useful code of the year. When you insert agents into your products, think of the topology of those agents.

      def loop(llm):
          msgs, msg = [], user_input()
          while True:
              msgs += [msg]
              output, tool_calls = llm(msgs)
              print("Agent: ", output)
              if tool_calls:
                  msg = [ handle_tool_call(tc) for tc in tool_calls ]
              else:
                  msg = user_input()
      
    9. 🔗 r/LocalLLaMA Pocket TTS which supports voice cloning is now just 1.9 million parameters rss
    10. 🔗 OmniNull/OmniWM Canary 20261020-1054 (90bbec59) release

      Automated canary build of main. It is signed and notarized like a release but skips the owner review, so treat it as unstable.

      See the canary guide to install, update, or return to stable. For everyday use, download the latest stable release.

      • Commit: 90bbec5975e3
      • Base tag: canary-20261018-0431-39096404458-1

      Changes since canary-20261018-0431-39096404458-1

      • 90bbec5 Merge PR #930: Point the README build section at Lix and the flake
      • f9b7dce docs: point the readme build section at lix and the flake
      • 0a89ed5 Merge pull request #929 from dappermint/ci/lix-declarative
      • f1f0f0c fix(ci): put flake tools on path in verify
      • 7b903e8 fix(ci): fail the gettext step when nix build fails and describe the tooling job
      • fc153fa ci: build all dev tooling from the flake and drop dev-tools.sh setup
      • d867f9c fix(ci): scope access-tokens to nix build step and anchor flake evaluation
      • fe6e4e9 fix(ipc): locate swiftformat on path before cached fallback
      • 3a3c431 fix(ci): install lix via installer script and pin toolchain in flake
      • 2c1ac7b ci: add declarative lix workflow and flake for developer tooling
      • d651dd7 Extract localized strings from the compiler's typed syntax tree
      • 3b86b8a Merge PR #928: Follow Swiftly in localization extraction checks
      • e18bbc4 test: follow Swiftly in localization extraction checks
      • 00ef6a6 Hide the focus border without waiting on WindowServer
      • fa88a95 Require the Swift 6.5 development toolchain
      • 5f88ef5 Avoid main-thread WindowServer queries on window title changes
      • a85fb37 Merge upstream CI and website fixes into main
      • b52cc0f Fix AX worker and session tap isolation races
      • cb1959f Merge pull request #925 from hezhizhen/codex/fix-website-selector-parser
      • 72760fa Merge pull request #926 from hezhizhen/codex/ci-completion-shells
      • 8f0308f ci: run Fish and Nushell completion tests
      • fff22b9 fix(website): use patched PostCSS selector parser
      • df16b68 Merge upstream Bluetooth notification and popout test fixes into main
      • f350f4c Cut input latency in the palette, CLI, IPC, hotkeys and title events
      • d72ea37 Build with the pinned Swift snapshot in CI and release
      • e4d0cab Merge PR #920: Lay out the bar panel after resizing it in the popout test
      • ea5f08b test(shell): lay out the bar panel after resizing it in the popout test
      • b28fb85 Merge PR #919: Handle Bluetooth notifications off the main thread
      • 174c14a fix(shell): handle bluetooth notifications off the main thread
      • f46f0e7 Sample the main display once per monitor snapshot
      • eb65411 Make the out-of-range mouse button test observe claimed events
      • d17c88a Merge upstream resize preview tiles and CI checks into main
      • 03213d5 Cut ARC and allocation work on layout, surface and input hot paths
      • 5da8304 Merge PR #917: Draw resize preview tiles in one reused window per monitor
      • 79b293d Merge remote-tracking branch 'upstream/main' into fix/909-resize-overlay
      • e62787d Merge pull request #913 from hezhizhen/codex/check-generated-ipc-wire-files
      • 11b0651 Merge pull request #915 from hezhizhen/codex/gate-canary-on-ci
      • 302572e ci: improve canary gate diagnostics and coverage
      • ab2c9ca ci: require passing CI for canary builds
      • 29f90ba Merge pull request #912 from hezhizhen/codex/fix-canary-notes-test-hash-match
      • 61101f5 ci: check generated IPC wire files
      • 212fa27 test: avoid hash collisions in canary release notes
      • 2e3963c Insert at Dwindle dividers on another display
      • cecd4bd Keep Dwindle divider drops reachable beside tab rails
      • b6d03c1 Merge PR #910: Add Dwindle drag insertion between splits
      • 65c675b Keep native edge resizes of tiled windows when opted in
      • 5a4d707 Add Dwindle drag insertion between splits
      • 86f0f88 Move Dwindle tab groups across displays as a whole
      • a77df82 Move windows across displays with the mouse move modifier
      • ced352d perf(resize): draw preview tiles in one reused window per monitor
      • f845ff7 Add opt-in workspace auto back-and-forth
      • 4916eb0 Show the keyboard mode on the workspace bar and in shell data
      • 44bed55 Show keyboard mode pills on all displays and a passive key guide
      • a7f2282 Show keyboard modes on borders, the menu bar and in Settings
      • 8ec20fb Add Pause, Prefix and Window keyboard modes
      • 87ad2ba Combine matching App Rules per setting
    11. 🔗 r/LocalLLaMA Deepseek released DeepInfer - Open Source high-performance, large-scale inference framework for DeepSeek models! rss

      Deepseek released DeepInfer - Open Source high-performance, large-scale inference framework for DeepSeek models! | This is crazy good for studying to improve existing custom engines by community like gufo, halogen, strixite, Strata... by learning their secret sauces. submitted by /u/feelspeaceman
      [link] [comments]
      ---|---

    12. 🔗 r/LocalLLaMA 24GB is plenty if your engines take turns rss

      24GB is plenty if your engines take turns | System service that watches your card, swaps and loads whatever you want, whenever you want. Don’t have to swap anything manually, collisions avoided, VRAM fully dedicated to each function while it’s running (no VRAM squatters). I had issues everyday (Linux) where a node process would orphan, comfyUI auto starts and holds 500MB that strata can’t claim. I also wanted to be able to switch natively and not have to think about starting each engine, making sure strata or llama wasn’t stuck loaded, or flux GGUF’s still claimed in comfyUI from an old workflow. I swap between Ninfer-4090 (llama-swap), strata, comfyUI, OpenWebUI, and I do it between multiple devices all using the same RTX 4090. Maybe you want to have your box run Hermes at night and you take the card back in the day, you can do it natively without thinking about and have full visibility on what was done and when. Berth will also serve your engines as an API so when you need to switch natively you load berth as the API endpoint and you can load strata, polystrata, and any other custom engine. Works for gaming as well, you don’t have to worry about a cron job, a request, or anything grabbing the card while you’re gaming or doing custom workflows. REPO: https://github.com/T-Crypt/berth EDIT: Berth v0.3 is out, and I need testers with big RAM and more than one GPU v0.3 parks engines in system RAM instead of unloading them. A switch back to a parked engine skips the reload from disk. My workstation has 62 GB, and Strata alone pins 40 GB, so I can't measure parking at the sizes you run. I'm looking for: - 64, 96 or 128 GB of RAM with a 24 GB card. You'd park a vLLM or ComfyUI engine, switch away, switch back, and send me the times. - Two or more GPUs, any mix. Multi-GPU leases are the next release, and I want real topologies before I write them. - Windows with an NVIDIA card. One of you already runs it there. contrib/windows/check.ps1 compares Berth's per-process VRAM with Task Manager and writes a report. - AMD on Linux, for the release after that. submitted by /u/Distinct-Pie2389
      [link] [comments]
      ---|---

    13. 🔗 Rust Blog Announcing rustup 1.29.2 rss

      The rustup team is happy to announce the release of rustup version 1.29.2.

      Rustup is the recommended tool to install Rust, a programming language that empowers everyone to build reliable and efficient software.

      What's new in rustup 1.29.2

      This is a small release which only updates the rustls-webpki and webpki-root- certs dependencies to address the problematic eMudhra intermediate certificates issue described in CVE-2026-111943.

      See also RUSTSEC-2026-0382.

      Further details are available in the changelog!

      How to update

      If you have a previous version of rustup installed, getting the new one is as easy as stopping any programs which may be using rustup (e.g. closing your IDE) and running:

      $ rustup self update
      

      Rustup will also automatically update itself at the end of a normal toolchain update:

      $ rustup update
      

      If you don't have it already, you can get rustup from the appropriate page on our website.

      Rustup's documentation is also available in the rustup book.

      Caveats

      Rustup releases can come with problems not caused by rustup itself but just due to having a new release.

      In particular, anti-malware scanners might block rustup or stop it from creating or copying files, especially when installing rust-docs which contains many small files.

      Issues like this should be automatically resolved in a few weeks when the anti-malware scanners are updated to be aware of the new rustup release.

      Thanks

      Thanks again to all the contributors who made this rustup release possible!

    14. 🔗 Filip Filmar Bazelizing Third-Party FPGA Designs: Two Case Studies rss

      Converting existing open-source FPGA projects to Bazel and rules_openxc7 makes hardware builds reproducible, eliminates machine-specific paths, and enables one-command bitstream generation without vendor licensing hurdles. This article examines two real conversions of external repositories: mmRISC-2, a silicon-proven RISC-V SoC with heavy SystemVerilog hierarchies, and Custom RISC CPU with Systolic Matrix Accelerator, a pipelined processor paired with a 2D systolic array coprocessor. Both examples illustrate how Bazel transforms fragile build scripts into reliable, sandboxed workflows.