- ↔
- →
- October 23, 2026
-
🔗 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
- @timo-tigges made their first contribution in #49
- @mshddev made their first contribution in #48
- @emo-eth made their first contribution in #72
- @nickgitrabbit made their first contribution in #74
- @graemefolk made their first contribution in #73
Full Changelog :
rust-lite-v0.1.0...rust- lite-v0.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
- @timo-tigges made their first contribution in #49
- @mshddev made their first contribution in #48
- @emo-eth made their first contribution in #72
- @nickgitrabbit made their first contribution in #74
Full Changelog :
rust-lite-v0.1.0...rust- lite-v0.2.1 -
🔗 r/LocalLLaMA Introducing Kimi K3.1 Pro: Advancing Open Intelligence rss
| submitted by /u/Recoil42
[link] [comments]
---|--- -
🔗 r/LocalLLaMA Vibecoding your own inference engine is easy they said rss
| 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]
---|--- -
🔗 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=noneopens 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 inboxconnects 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/reloadfixed
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 endedWhat'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_planand 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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/plugin→ Installed → plannotator → Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- Guide builder and overview (guide format v2) by @backnotprop in #2095
- Skills: a closed session stops; ask before installing visual-explainer by @backnotprop in #2099
- OpenCode 2: recognize the new Plan mode reminder so submit_plan runs by @backnotprop in #2102
- deps: DOMPurify 3.4.17 (GHSA-cg2g-xh64-v4q7) by @backnotprop in #2104
Community
- @Duo-Huang: found and traced plan review not opening on OpenCode 2 (#2101)
- @zane668: the closed-session and visual-explainer skill issues (#2097, #2098)
Full Changelog :
v0.28.27...v0.28.29 -
🔗 backnotprop/plannotator v0.28.28 release
chore: bump version to 0.28.28
-
🔗 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
28ded16Merge pull request #959 from dappermint/fix/toolchain-cache-recovery810a195ci: start from a clean toolchain when its cache restore fails0e0bf3cMerge PR #958: Add Fluxer community chat links9f35cdfdocs: add fluxer community chat links4450248Update SwiftFormat to 0.64.19bfd535Merge pull request #921 from dappermint/test/qa-suite-hardening4eba57fstyle(hidden-bar): drop the trailing comma swiftformat 0.63 rejects931a291Merge pull request #957 from hezhizhen/codex/fix-hidden-native-cross-displayc532780test(hidden-bar): stop depending on the finder extension settingba39913test(shell): give bundled widget renders a 1 s cpu budget2b4cf58test(shell): wait for the bar before counting its widgets18427datest(support): let until name the condition it waited for958bbfdfix: discard deferred native moves for hidden windows22b8f6cTranslate the new swipe-edge and cross-display drag settings92ca342Merge pull request #952 from brdoney/swipe-edge-behaviorb7b10ddMerge pull request #933 from hezhizhen/codex/native-titlebar-cross-display47d8df0Merge pull request #949 from brdoney/fill-left-reserve-space6b608a4Merge pull request #956 from brdoney/fix-nil-layer-borderdc5117eMerge pull request #951 from hezhizhen/codex/fix-notification-api-referencea89d802fix(shell): draw no border when a widget sets a width without a colordafebd0Update fill-left reserve docs and reuse the overlapping casec24495eAdd configurable workspace swipe behavior at the edges56dd4a4fix(docs): include notification types in the Luau referencebc403f5fix: retain deferred native drag correction obligations44459e7fix: ignore managed frames during native cross-display adoptionf71c0a6feat: opt in to native title-bar moves across displays9fc6374Merge pull request #940 from hezhizhen/codex/fix-wallpaper-region-crop672f8ffReserve workspace bar space in Fill Left of Notch modecf3599eMerge PR #945: Check widget option declarations and add Nocturne options97b8aaatest(shell): match whole option names in the declaration checkefb89c7fix: crop full-window wallpaper captures before region fallback80dca94feat(shell): declare scratchpad, calendar and weather options for nocturne37f7889test(shell): check bundled widgets declare the options they readf8cddb7Merge pull request #941 from dappermint/fix/touch-count-provider-rewrapddc5e5cMerge origin/main while preserving notification support10455b5Merge pull request #943 from rickythefox/feat/942-focus-rankd61a7d3Dismiss notifications through their native Close actionbacd0e5Add native notification actions and capture diagnostics2ebfb50feat(ipc): expose window focus history via query windows0aa1470Match Notifications to OmniShell styles4953efeAdd retained notifications to OmniShell31d4e80fix(input): stop the touch count provider growing on every read
- Commit:
-
🔗 r/LocalLLaMA Models disappearing from Huggingface rss
| 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]
---|--- -
🔗 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 -
🔗 r/LocalLLaMA MiniMax-M3.1-Flash rss
-
🔗 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=noneopens 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 inboxconnects 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/reloadfixed
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 fixesWhat'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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/plugin→ Installed → plannotator → Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- Show comment actions on devices without hover by @backnotprop in #2065
- Show images at their real size in the lightbox by @backnotprop in #2068
- fix(ui): render markdown tables in Ask AI answers by @backnotprop in #2070
- fix(html): let annotated pages open alert, confirm and prompt by @backnotprop in #2071
- fix(ui): wrap Mermaid labels at 140 px by @backnotprop in #2072
- Text size for plan review and annotate by @backnotprop in #2073
- Wheel and pinch zoom in the image lightbox by @backnotprop in #2074
- feat(editor): name the open file in the tab title and the header by @backnotprop in #2075
- Phone sheets: 12 px top corners by @backnotprop in #2076
- Inbox: action items as a checklist by @backnotprop in #2077
- Inbox: agent marks on one size scale by @backnotprop in #2078
- Tooltips: borderless float at 150 ms by @backnotprop in #2079
- Inbox: name the side-by-side view and remember it by @backnotprop in #2080
- Inbox: draft status on the right of the thread's buttons by @backnotprop in #2083
- fix: Back from a linked document keeps the reader's place by @backnotprop in #2084
- test: close the sidebar peek before the toolstrip probe by @backnotprop in #2086
- fix(pi): say to restart when Plannotator was updated under a running host by @backnotprop in #2087
- fix(ui): keep underscores inside bare URL autolinks by @backnotprop in #2088
- feat(inbox): start a new message with To empty by @backnotprop in #2089
- feat(ui): Viewer belowTitle slot for hosts by @backnotprop in #2090
- feat(inbox): open questions button in the thread foot by @backnotprop in #2091
- fix(inbox): attached files always use the Clean look by @backnotprop in #2092
- Zoom and pan in the Inbox image viewer by @backnotprop in #2093
Community
Most of this release came from your reports. Thank you:
- @zane668: the file name in the tab title (#2061), Mermaid labels wrapping in Chinese, Japanese and Korean (#2064), image actual size and zoom (#2067, #2081), and Back losing your place (#2082)
- @ppommer: text size (#2066) and tables in Ask AI (#2069)
- @ralwing: comment buttons on screens without hover (#2062)
- @PassionZale: dialogs in annotated HTML pages (#2063)
- @JasonLandbridge: the error after updating under a running Pi (#2085)
Full Changelog :
v0.28.26...v0.28.27 -
🔗 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.
-
🔗 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.
-
- October 22, 2026
-
🔗 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
- 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
- binsync
-
🔗 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
denyWriteglob 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
cdis wrapped or prefixed, as they do for a plaincd - 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
jqcould 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-controlstatus line showingHEADas the branch for a folder that is not in a git repository - Fixed split-pane agent teammates not inheriting the tool deny and
--toolsrules given on the leader's command line - Fixed sessions renamed with
/renameappearing to other sessions under a generated name after a VS Code window reload or a non-interactive--resume - Fixed the
/rewindlist showing "No code changes" for a turn that changed checkpointed files through/code-review --fix, a subagent or a shell command - Fixed
/privacy-settingsshowing 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-dirfolder being unreachable when another skill already held its name; it is now offered as<folder>:<name> - Fixed
/verifyand/code-reviewnot 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-workpasses 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
PreToolUseandPermissionRequesthooks with"shell": "powershell"failing open when Git for Windows isn't installed - Fixed a mod's
turn.stephook that names a model by alias, such ashaiku, 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_URLis set to the defaultbedrock-runtime.<region>.amazonaws.comendpoint - 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-Locationorcdcommands 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-minstopping 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 -ito 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 ultrareviewto 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 setCLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1 - Changed the dangerous
rmandrmdirprompt 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-apiskill to build Managed Agents subagent teams onmultiagent_20261001with dynamic workflows on by default, instead ofcoordinator - [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
/goalfilling 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
-
🔗 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 -
🔗 @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
-
🔗 exe.dev Give Your Agents Less Internet rss

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.

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.xyzIt 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/docsLimit its internet access to integrations only:
$ ssh exe.dev egress no-net integrations Set egress policy for "no-net" to integrationsNow the same request is rejected:
$ ssh no-net.exe.xyz curl -fsS https://exe.dev curl: (6) Could not resolve host: exe.devCreate 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-netAccess 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 -
🔗 Hex-Rays Blog Hex-Rays Completes Acquisition of HexAI to Expand Its Agentic Platform Offering for Cybersecurity Research rss
-
🔗 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."
Anthropic
saw PRs merged per day snowball 10x in less than 4 months ' time. Source:
AnthropicThat'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:
Scion's
architecture, at a high levelI 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:
- 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.
- 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.
- 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.
- 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.
-
🔗 r/LocalLLaMA Qwen4 and Kimi3.1 on Arena apperantly rss
Im so hyped for qwen4 flash
submitted by /u/thatscoolbutno123
[link] [comments] -
🔗 Console.dev newsletter Sponsor: Falconer rss
Monitor your docs like your code. Falconer finds and fixes doc issues before they mislead agents.
-
🔗 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.
-
🔗 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.
-
🔗 Console.dev newsletter Sponsor: BuildKite rss
Better CI
-
🔗 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=noneopens 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 inboxconnects 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/reloadfixed
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 repositoryWhat'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
- A
file.ts:42link 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 without
gh. #1995 by @viniciusestevam
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/plugin→ Installed → plannotator → Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- feat(review): custom code font support by @backnotprop in #855
- feat(annotate): keep sidebar shortcuts visible with Agent TUI by @leoreisdias in #1019
- Fix triple-click highlight bleed into the next line by @dca123 in #1408
- fix(ai): keep OpenCode Ask AI subscribed before prompting by @danowicz in #1413
- fix(review): full-range gutter annotations and next/prev hunk jump by @FNDEVVE in #1550
- fix(plan): keep the version chain when a review spans midnight by @aomalov in #1681
- fix(ui): scroll and highlight referenced line in code file popout by @Totopo27 in #1909
- Installers: resolve latest from the releases/latest redirect when the API fails by @viniciusestevam in #1995
- Inbox Board (1/3): card records and the card call by @backnotprop in #2026
- Inbox: reply drafts and the Draft label by @backnotprop in #2028
- fix: resolve folder images from the active document by @xiaofeilovecoding in #2033
- Inbox: keep a skipped question's note in the reply by @backnotprop in #2034
- Inbox: lead with /reload-plugins, fold the manual restart by @backnotprop in #2035
- CI: pin Linux runners to ubuntu-24.04 by @backnotprop in #2036
- Inline markdown: digit-only #refs link as issues, not colour swatches by @backnotprop in #2040
- Review: never render a textconv diff past the size cap by @backnotprop in #2041
- Inbox: serve the window compressed over the tailnet by @backnotprop in #2042
- Claude Code mod: one plan approval when the plugin guard skips the mod's hook by @backnotprop in #2043
- Guided Review: ticking a section marks its files viewed by @backnotprop in #2044
- OpenCode: remember the agent-switch choice in config.json by @backnotprop in #2045
- Ask AI: start a new chat by @backnotprop in #2046
- Code review: gate, so a bare Approve reaches the agent by @backnotprop in #2047
- Comments: opt-in Enter to save by @backnotprop in #2048
- Annotate: a disk change shows in the version diff by @backnotprop in #2049
- Pi: session events and a checklist that keeps the next item in view by @backnotprop in #2050
- Inbox: answers picked while writing a reply show live in the reply box by @backnotprop in #2051
- Tests: fix main's DOM allowlist failure by @backnotprop in #2052
- Inbox: one-line subjects; leaked tool-call text never shows as a title by @backnotprop in #2053
- Inbox: read a thread again when its first read fails, and say so by @backnotprop in #2054
- Plan review: one adaptive decision control by @backnotprop in #2055
- Inbox: Undelivered replies show their wait and go in by themselves after 5 minutes by @backnotprop in #2056
- Inbox: tabs share one event connection by @backnotprop in #2057
- Inbox: a Send skips a question only when you press Skip by @backnotprop in #2058
- Inbox: action items an agent needs you to go do by @backnotprop in #2059
- fix(inbox): allow loopback x-forwarded-for from local reverse proxies by @Totopo27 in #2060
New Contributors
- @viniciusestevam made their first contribution in #1995
- @xiaofeilovecoding made their first contribution in #2033
- @aomalov made their first contribution in #1681
- @danowicz made their first contribution in #1413
- @Totopo27 made their first contribution in #1909
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:
- @solalbaudoincs (#1867), @akaralar (#851), @clauxx (#1934), @alexanderkreidich (#991), @andrew-corlann (#1543), @levyashvin (#1057), @kekel87 (#1907), @ppommer (#1981)
- @RobertoArtiles (#1784), @PassionZale (#2006), @viniciuskneves (#2037), @michaelmior (#1412), @jumski (#1589), @sergdort (#1390), @oronbz (#1786), @ericknyoto (#2007), @zane668 (#2032), @timmo001 (#1932)
Full Changelog :
v0.28.25...v0.28.26 -
🔗 pydantic/monty v1.3.0 - 2026-10-21 release
What's Changed
- Decode file URLs in WASM and browser test aliases by @Pybsama in #1007
- test: check packed WASM declarations in smoke tests by @Pybsama in #1004
- Fix
re.match()andre.fullmatch()for(?x)patterns that end in a comment by @Likheet in #1046 - close further missing dunder gaps by @davidhewitt in #1074
- tidy up some looseness in the
HeapReader::protectAPI by @davidhewitt in #1076 - perf: avoid intermediate string id allocation on keyword call dispatch by @gabrielhsc95 in #1080
- Match CPython's odd padding split in
str.centerandbytes.centerby @RaphaelFakhri in #1085 - experiment with making bytecode from builtins by @davidhewitt in #841
- implement
PyValueabstraction to avoidInternStr/Strdiffs etc by @davidhewitt in #1050 - Bound AST depth before the type checker walks it by @rewitt94 in #930
- bump deps for CA compromise by @davidhewitt in #1096
- release: 1.3.0 by @davidhewitt in #1097
- fix npm smoke test by @davidhewitt in #1099
New Contributors
- @Pybsama made their first contribution in #1007
- @RaphaelFakhri made their first contribution in #1085
Full Changelog :
v1.2.0...v1.3.0 -
🔗 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
- @github-actions[bot] made their first contribution in #1917
- @RaphaelFakhri made their first contribution in #1920
Full Changelog :
v1.31.0...v1.31.2 -
🔗 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
8ecdfbfMerge pull request #938 from dappermint/fix/command-palette-shortcuts20204d2Merge pull request #937 from dappermint/fix/live-wallpaper-capture6f734a5Merge pull request #936 from dappermint/perf/idle-1019ae50decMerge branch 'main' into perf/idle-1019223c61eMerge pull request #935 from dappermint/perf/input-1019f1adb34fix(palette): match shortcuts by key position on non-qwerty layoutsca21cc4fix(wallpaper): keep live wallpaper captures already clipped to the display480451btest(input): check captured drags still reach main, keep the forward private91a3049fix(wallpaper): keep the crop at the display size for fractional window origins0e9b55dtest(shell): assert both backdrop filters survive a fill only repaint49a3955fix(wallpaper): capture live wallpapers drawn above the desktop levelc20322eMerge upstream/main into perf/idle-101976364c3Merge upstream/main into perf/input-1019d2a6d2fMerge pull request #934 from OmniNull/dependabot/npm_and_yarn/website/npm_and_yarn-63f9813d79e81e6f1build(deps): bump vite707d37dKeep settled tab rail moves on SkyLight after animation moves0b5fa2bSkip tab rail relayout when its size is unchanged2b75644Check screenshot selection once per pointer-validated focus handoff19980a7Merge pull request #931 from dappermint/test/stabilise-shell-ui-tests6af545ctest(shell): wait for the drawer package before toggling its popoutfaa6219fix(surface): ignore registrations whose window was deallocated39bcaaaPass query options instead of a window count to SkyLight queries7de1437Render launcher icons in the system icon stylebdeeddbSkip clipboard items that macOS excludes from history5b1beb0Read window fullscreen state in the admission attribute batch1059fa2Query a dragged window's identity off the main connection2736ce5Merge pull request #927 from CallMeLaNN/fix-zsh-completion55a2737docs: initialize compinit before evaluating zsh completions023b7b3test: cover zsh completion eval registration and autoload paths4b0d1f4test: wrap long completion harness linesd1f28f2test: call zsh completer explicitly in completion harnesses2aeb8d9Merge pull request #914 from hezhizhen/codex/dwindle-native-live-resize8b1b400fix: use AX fallback for final native resize framesbf662abperf: avoid duplicate native resize renders on release7f33a6cfix: avoid world commits for rejected native resizes416f198feat: resize Dwindle neighbours during native edge dragseaf668cfix: zsh completions for eval based on official doc9481efetest(shell): cover fill-only repaint keeping backdrop filters4c18d61perf(input): stop captured drags from blocking on the main threada792655perf(idle): cut idle wakeups and redundant layer work
- Commit:
-
🔗 anthropics/claude-code v2.1.308 release
What's changed
- Bug fixes and reliability improvements
-
🔗 r/LocalLLaMA Kitten-TTS 2: New Open-source SOTA 1.58 bit TTS (CPU-only with voice cloning, multilingual, emotion control) rss
| 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- 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.
- Real-time on CPU and consumer GPU's too : No GPU needed for real-time generation. Optimized ternary kernels for CPU inference provided.
- 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.
- Multilingual TTS: Model supports voice cloning in 20+ languages. Cross-language voice cloning can be used to create accented speech too.
- Expressive / emphasis control: you can steer the delivery and stress specific words, not just pick a voice. Details in the Readme.
- 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]
---|--- -
🔗 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 providerinside your infrastructure. Theorb providerthen reaches out to Amp and waits for requests to spawn, pause, or delete orbs. Like this:
How you satisfy those requests is up to you, because
amp orb providerwill dispatch the requests for orb operations (spawnto create or resume orbs,pause, anddelete) to a program that you provide, like so:$ amp orb provider ./dispatch.shIn 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" ;; esacInstall the E2B CLI and the
e2bpackage, setE2B_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 ;; esacUse Amp's Helm chart to run orbs on GKE, EKS, or AKS. Under the hood, it runs
amp orb providerwith a supplied dispatch program that handles spawning, pausing, and deleting orbs. You don't need to write a dispatch script yourself.- Create a custom orb provider in your Amp workspace and copy its token.
- Prepare a dedicated cluster with worker nodes and snapshot storage. Paused orbs are saved to storage and can resume on another worker node.
- Download the Kubernetes setup files.
The ZIP includes
gke.md,eks.md, andaks.mdwith 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 startamp orb bootstrapin 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.shOnce 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.

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.
-
- October 21, 2026
-
🔗 IDA Plugin Updates IDA Plugin Updates on 2026-10-21 rss
IDA Plugin Updates on 2026-10-21
New Releases:
- oh-my-dump Oh My Dump v1.0.17 for IDA Pro 9.x
- oh-my-pi v18.12.6
- oh-my-pi v18.12.5
- pyrrha v2.1.0—HackLu version: Imports and Thunks
Activity:
- capa
- 2bdf7a47: Sync capa rules submodule
- 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, andCFunctionto be dropped bef…
- 48e57f76: fix: require
- mcrit-plugin
- 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
-
🔗 earendil-works/pi v1.4.0 release
New Features
- Image input for classifiers : codemode
models.classify()acceptsimagesfor TypeSafe's Jev and Cloudflare's Clef models ontypesafe,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_WORKERSraises 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.jsonschema, listing all provider, model, model override, and compatibility fields (#10790) - Codemode
models.classify()now acceptsimagesfor TypeSafe's Jev and Cloudflare's Clef models ontypesafe,cloudflare-workers-ai, and OpenRouter, and lists Clef Omni and Jev 1.14 on Workers AI. - Provider-level
compatinmodels.jsonnow also applies to classifier models, with the System One fieldsimageInputandsendImageOptInHeaderfor proxies that serve another service's classifiers. Extension classifier models acceptcompattoo. - Added
MiniMax-M3.1-Flashto theminimaxandminimax-cnproviders, 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_headershandlers no longer see the OpenRouter, NVIDIA NIM, and OpenCode attribution headers; returningnullfor one still removes it. Cloudflare requests send pi's detailedUser-Agentinstead ofpi-coding-agent, as do GitHub release checks for tool downloads, and OpenCode requests sendx-opencode-clientwhenever attribution is enabled, not only with a session. generateSummary()andgenerateSummaryWithUsage()now ignore theirreserveTokensparameter. Summary requests use the model's output limit instead.- Changed the default GitHub Copilot model from
gpt-5.4, which Copilot retired, togpt-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-profor thexiaomiand Xiaomi Token Plan providers, sincemimo-v2.5-proleft the catalog. - Grok 4.3 and Grok 4.5 on the
xaiprovider now offer thexhighthinking 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.reserveTokensonly controls when compaction starts (#9512, #9075). - Fixed
models.schema.jsonmissing descriptions for provider and model fields, so editors showed no hints for them (#10790) - Fixed
pi updatefailing with "Managed install marker is missing or invalid" whenmanaged-install.jsonstarts 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/editordialogs and inlinecustom()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/xselprocess 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_WORKERSraises the limit of two workers (#11184) - Fixed extensions failing to load when importing
@earendil-works/pi-ai/models(e.g. forclampThinkingLevel) by exposing the subpath through the extension loader aliases and virtual modules (#11156) - Fixed
mcp.jsonfiles that start with a UTF-8 BOM failing to parse, which skipped all their MCP servers and madepi mcp add/pi mcp removefail (#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
/treenavigation 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 withdefaultActive: 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
greptool followingRIPGREP_CONFIG_PATH, where options such as--fixed-stringssilently changed regex searches into literal ones. The tool now runsrg --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
PATHand the legacy WSLbash.exelauncher when Windows is not installed inC:\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 requestinstead of compacting and retrying (#11016 by @petrroll) - Fixed the
openai-codexprovider offeringgpt-5.5andgpt-5.3-codex-spark, which always fail for ChatGPT accounts (#11173 by @lucasmeijer) - Fixed whitespace-only tool output (for example a bare
\r\nfrom 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 completionerrors 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)
- Image input for classifiers : codemode
-
🔗 anthropics/claude-code v2.1.307 release
What's changed
- Added
/claude-api api-versionto move Claude API code to API version2026-10-21 - Added the
claude_code.safety_eventOpenTelemetry 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_CONTEXTis set and the model is an alias with the[1m]suffix, such asopus[1m] - Fixed the
prompt-caching-scopebeta header being sent behind customANTHROPIC_BASE_URLgateways and on Foundry, where it has no effect - Fixed MCP servers showing "needs authentication" in
claude -pon 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
/autocompactin cloud sessions going back to the default window after the session restarted - Fixed a conversation cleared with
/clearsometimes coming back when a cloud or self-hosted runner session restarted - Fixed
CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MSbeing ignored in Claude apps gateway sessions - Fixed telemetry from Claude Desktop sessions behind a Claude apps gateway being rejected when
OTEL_EXPORTER_OTLP_HEADERSis 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
/helpand the/command menu showing long model-facing descriptions for bundled skills such as/claude-apiinstead 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-proxycommitting a.claude/settings.local.jsonleft 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
axScreenReadersetting andCLAUDE_AX_SCREEN_READERin a settingsenvblock to apply only from user, managed or--settingssettings (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-minor set it to0 - 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_CERTSis set only in~/.claude/settings.json; it now also followsCLAUDE_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_CERTSfile 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(alsooffandpause) to Code Review, ending an@claude review alwayssubscription on a pull request without starting a new review
- Added
-
🔗 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 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-128sandSLH-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_H10parameter set.
Summary of libraries and implemented algorithms
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.
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.
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 functionvalidate_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.
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'sVerifyingKey<P>type, withPspecifying the parameter set used. This is done by using the methodVerifyingKey::<P>::try_from(bytes). This method begins by calling the functionparse_oid_and_params(bytes), which parses theXmssOidfrom 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 methodXmssOid::try_from(value). If this first call fails, it will fall back toXmssOid::from_xmssmt_raw_oid(oid)which attempts to parse the OID as an XMSSMT one. This method will add the XMSSMT OID offset before callingXmssOid::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 theXmssOidof the colliding XMSS parameter set, instead of the actual XMSSMT one with the added offset. As a result, whenVerifyingKey::<P>::try_from(bytes)later compares the parsed OID to the expected one thatPspecifies, as shown in the code snippet below, the check will wrongly fail.impl<P: XmssParameter> TryFrom<&[u8]> for VerifyingKey<P> { 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.
-
NIST FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard &larrhk&larrhk
-
FrodoKEM: Learning With Errors Key Encapsulation, Algorithm Specifications And Supporting Documentation &larrhk&larrhk
-
Classic McEliece: conservative code-based cryptography, cryptosystem specification &larrhk&larrhk
-
Status Report on the Fourth Round of the NIST Post-Quantum Cryptography Standardization Process &larrhk
-
Avis de l'ANSSI sur la migration vers la cryptographie post-quantique &larrhk
-
X-Wing: General-Purpose Hybrid Post-Quantum KEM &larrhk&larrhk&larrhk&larrhk&larrhk&larrhk
-
NIST FIPS 204: Module-Lattice-Based Digital Signature Standard &larrhk&larrhk
-
Trapdoors for Hard Lattices and New Cryptographic Constructions &larrhk
-
Recommendation for Stateful Hash-Based Signature Schemes &larrhk
-
NIST FIPS 205: Stateless Hash-Based Digital Signature Standard &larrhk
-
FrodoKEM: Key Encapsulation from Learning with Errors , version 03 &larrhk
-
Correction Fault Attacks on Randomized CRYSTALS-Dilithium &larrhk
-
🔗 @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
-
🔗 microsoft/markitdown Version 0.1.9 release
What's Changed
- increase chunk size from 512 bytes to 64 KB for HTTP response reading by Yasir Alibrahem (@YasirAlibrahem) in #1511
- fix(wikipedia): accept mobile (m.wikipedia.org) URLs by Gopal Bagaswar (@GopalGB) in #1850
- fix: handle None sys.stdout.encoding in CLI output by Octopus (@octo-patch) in #1656
- Add language parameter for the audio transcription by hchmch in #1295
- Perf: Optimize non-seekable stream buffering using shutil.copyfileobj by Yasir Alibrahem (@YasirAlibrahem) in #1510
- Use frozenset for OMML direct tag lookup by Amit Anand (@Amitanand983) in #1919
- fix(wikipedia): drop the site suffix from italicised titles by Machen John (@macjayz) in #2458
- Consolidate tests by format and strengthen regression coverage by Adam Fourney (@afourney) in #2579
- Replace local parser mocks with real conversion fixtures by Adam Fourney (@afourney) in #2586
- Test real installed OCR plugin discovery by Adam Fourney (@afourney) in #2588
- Test real CLI file-type parsing and CU result formatting by Adam Fourney (@afourney) in #2592
- Test PowerPoint missing text with real fixtures and shared vectors by Adam Fourney (@afourney) in #2594
- Test MCP input errors with real conversions by Adam Fourney (@afourney) in #2597
- Restore JSON regression coverage for late non-ASCII text by Adam Fourney (@afourney) in #2601
- Bump the magika dependency by Adam Fourney (@afourney) in #2722
- Bump Mammoth dependency to >=1.12.2,<2 by Adam Fourney (@afourney) in #2729
- Require certifi>=2026.10.19 for updated CA trust by Adam Fourney (@afourney) in #2730
- Update Black, Pillow, and Windows ARM Cryptography baselines by Adam Fourney (@afourney) in #2731
New Contributors
- Yasir Alibrahem (@YasirAlibrahem) made their first contribution in #1511
- Gopal Bagaswar (@GopalGB) made their first contribution in #1850
- Octopus (@octo-patch) made their first contribution in #1656
- hchmch made their first contribution in #1295
- Amit Anand (@Amitanand983) made their first contribution in #1919
Full Changelog :
v0.1.8...v0.1.9 -
🔗 Hex-Rays Blog IDA 9.5: Apple DriverKit Shared Cache rss
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.

-
🔗 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 -
🔗 r/LocalLLaMA When will we see these changes? --> China Is Doubling RAM Production to Keep Everyday Gadget Prices from Skyrocketing rss
| submitted by /u/chemist_slime
[link] [comments]
---|--- -
🔗 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] -
🔗 r/LocalLLaMA RecursiveSI/flint (40B A2.5B) · Hugging Face rss
| submitted by /u/coder543
[link] [comments]
---|--- -
🔗 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 -
🔗 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 -
🔗 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
| submitted by /u/chemist_slime
[link] [comments]
---|--- -
🔗 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=noneopens 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 inboxconnects 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/reloadfixed
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 andplannotator update, attach any file to an Inbox message, questions with context, links to attached filesWhat'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 | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/plugin→ Installed → plannotator → Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- Inbox: update older Claude Code sessions with /reload-plugins by @backnotprop in #2009
- Inbox: the Sent toast fits on one line by @backnotprop in #2010
- Inbox: a count of new messages on the tab by @backnotprop in #2011
- e2e: tag in a file comment measures the passage once the pane stops moving by @backnotprop in #2012
- e2e: wait for the touch-opened composer to take focus before Escape by @backnotprop in #2013
- Inbox: a linked page's Back takes focus once it is drawn by @backnotprop in #2015
- Inbox: delivery ticks on list rows by @backnotprop in #2016
- Inbox: images in What's new by @backnotprop in #2017
- Inbox: Re-ask open questions by @backnotprop in #2018
- Inbox: shift-click joins more elements to one comment on an attached HTML page by @backnotprop in #2019
- @plannotator/ui: five display fixes from Workspaces' break-ui pass by @backnotprop in #2020
- Inbox: close or swipe away a toast by @backnotprop in #2021
- Inbox: skip layout for rows off screen by @backnotprop in #2022
- Inbox: right-click a thread row to copy its link by @backnotprop in #2024
- @plannotator/ui 0.53.1: two fewer forced layouts on document open by @backnotprop in #2025
- Inbox: click Inbox to refresh the list by @backnotprop in #2027
- Inbox: tell the windows when a turn ends and starts again between delivery looks by @backnotprop in #2030
- Tests: two DOM tests that failed at random in CI by @backnotprop in #2031
Community
Every PR in this release is by @backnotprop.
Full Changelog :
v0.28.24...v0.28.25 -
🔗 anthropics/claude-code v2.1.306 release
What's changed
- Fixed
claude -pinside 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
- Fixed
-
🔗 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]
-
- October 20, 2026
-
🔗 IDA Plugin Updates IDA Plugin Updates on 2026-10-20 rss
IDA Plugin Updates on 2026-10-20
New Releases:
Activity:
- augur
- 103e7868: docs: update
- 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
- ffxiv_bossmod
- 21555358: oh yeah
- haruspex
- 390c9e5e: docs: update
- rhabdomancer
- 51b5167f: docs: update
- XrefsExt
- f1e57756: plugins
- augur
-
🔗 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=legacyselects the previous generator;
builds withCHERNOBOG_WITH_COBRA=OFFretain 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 markedDONT_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;appliedrecords actual
rewrites.
-
-
🔗 anthropics/claude-code v2.1.305 release
What's changed
- Added
sandbox.allowNestedUserNamespacesso 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_MSso 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
/effortand/autocompactsettings not applying when the model name differed from amodelOverridesvalue 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
ENOSPCfile 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
setMcpServersbeing 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()andparallel()agents instead of serving them from the run's journal - Fixed Remote Control leaving empty "(session)" entries in
/resumeafter switching conversations with/resume - Fixed
/usagerows 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 unavailablewhenTERMis 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, andfapplies 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
Imageto draw its picture in iTerm2 3.5 and later with fullscreen rendering, where it showed only itsalttext - Remote Control: Improved the spawn-mode messages: pressing
wnow says the new mode is saved for the folder, and a laterclaude remote-controlstart that uses the saved mode says where it came from - Changed
allowedMcpServersto stop filteringmanaged-mcp.jsonstdio servers that use${VAR}only inenv: one your allowlist left out now loads on upgrade; usedeniedMcpServersto keep it off - Changed plugins that Claude Desktop mounts by path to no longer keep their
allowed-toolswhen your organization's managed settings setallowManagedPermissionRulesOnly - Changed the
/artifactsdelete confirmation to take 1 or Enter to keep, 2 to delete, and Esc to cancel;yandnno 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
spinnerVerbssetting 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
- Added
-
🔗 @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:
-
🔗 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
- How I built this
- v1: the initial prototype
- v2: full sprites
- v3: varied terrain
- v4: the fun update
- v5: Battle Drones goes 3D
- v8: Archipelago
- v10: Goliath, and agent battles
- Agent battles
- v11: Random Maps
- v12: Multiplayer via sound
- Some thoughts
- Update: Online multiplayer support
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 resourcesLet's start with a MVP design, ask me some questionsHere'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:

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.

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:

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:

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 landscapesThat was another overnight run. I woke up to this v5 version:

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 placesI want to encourage a battle over uplinks.The map should be the times the size of other maps - still squareFirst research and then critique this design. Only build after we have agreed on any modificationsYou get to design a new biome for thisThe 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:

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 yetLet'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 troopsDamage 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 mechThe 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 pluginOpus 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.

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:

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 signalsBuild a version of that for battledronesOpus 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()andMath.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.cppfame). - 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 folderHere's the resulting server. Since this scales to zero and runs on a single Fly.io
shared-cpu-1xinstance 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.
-
🔗 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.
MeanAverageRecallskips crowd regions and matches predictions in confidence order, likepycocotools.- COCO segmentations loaded without an
areafield no longer make mAP return-1. float16boxes keep finite areas, and mAP andwith_nmmstop 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.MeanAverageRecallused to count COCO crowd regions as missed objects and to pair predictions with the highest-IoU target first. It now leaves out targets withdata["iscrowd"]ordata["ignore"]set, the same ruleMeanAveragePrecisionuses. 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.0Half-precision boxes that stay finite
A 256×256 box in
float16has an area of 65,536, which is pastfloat16's maximum, soDetections.box_areareturnedinfand area filters dropped it. Box areas offloat16detections are now computed and returned infloat32, andMeanAveragePrecisionandwith_nmmno longer overflow onfloat16or narrow integer coordinates either. COCO segmentations loaded with masks but without anareafield 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.MaskAnnotatorandsv.HaloAnnotatorraisedValueErroron 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.VertexAnnotatorand 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,CircleAnnotatorandDotAnnotatoroutlines. 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
MeanAverageRecalland COCOsv.metrics.MeanAverageRecallcounted 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,RecallandF1Scoremissed matches whose IoU was exactly 0.55, 0.6, 0.8 or 0.85, because the IoU wasfloat64and the thresholdsfloat32. (#2752)
Overflow-safe boxes
Detections.box_areaand box-basedDetections.areaoverflowed to infinity for ordinaryfloat16boxes; they now compute and returnfloat32. (#2764)sv.metrics.MeanAveragePrecisionoverflowed box extents and areas forfloat16or narrow integer coordinates, so perfect large boxes scored-1or landed in the wrong size bucket. (#2743)sv.Detections.with_nmmoverflowed its area-weighted confidence forfloat16boxes and, at extreme coordinates, for integer andfloat32boxes. (#2753)- COCO loading with masks left segmented annotations without an
areafield with aNaNarea, which pushed them out of every mAP size bucket; the area now comes from the decoded mask. (#2763)
Masks and polygons
resize_masksreturned an empty array when downscaling very narrow masks; it now keeps at least one pixel per axis. (#2762)sv.filter_polygons_by_areaandsv.polygon_to_xyxyraisedValueErroron empty polygons; they now treat them as zero area and an all-zero box. (#2761)
Annotators
sv.MaskAnnotatorandsv.HaloAnnotatorraisedValueErroron grayscale scenes. (#2755)VertexAnnotatorand the vertex-ellipse annotators raised a tuple-unpacking error on three-coordinate keypoints; they now draw from x and y. (#2759)sv.MaskAnnotatorwidened its blend region to the boxes of all-empty masks, includingCompactMask, copying and blending outside the foreground. (#2741)
Without OpenCV
- The fallback
ellipsepainted different pixels from OpenCV for thick strokes, fills and arcs; it now ports OpenCV's rasterization. (#2740) - The fallback
circlegrew 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
MeanAverageRecallskip 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
MaskAnnotatorandHaloAnnotatorwork 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 -
🔗 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=noneopens 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 inboxconnects 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/reloadfixed
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 andplannotator update, attach any file to an Inbox message, questions with context, links to attached filesWhat'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/uihandoff docs are up to date (#1986)
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The plugin and the
plannotatorbinary update separately, so run the install script above as well. In a terminal:claude plugin marketplace update plannotator claude plugin update plannotator@plannotatorThen restart Claude Code. Inside Claude Code, run
/plugin marketplace update plannotator, then open/plugin→ Installed → plannotator → Update now.Pi:
pi update --extensionsOpenCode: Re-run the install script above. It now also clears the OpenCode 2 plugin cache.
What's Changed
- Inbox: one full-screen mode for files by @backnotprop in #1958
- Inbox: say a sent reply is queued, and Send now delivers it into the running turn by @backnotprop in #1968
- Inbox Soft (1/4): Soft on theme tokens by @backnotprop in #1971
- Inbox Soft (4/4): buttons, dialogs, Settings and a file's chrome painted Soft by @backnotprop in #1977
- Inbox: component tooltips everywhere, no native titles by @backnotprop in #1982
- Docs: WSL2 needs no remote mode, so Ask this session stays on by @backnotprop in #1984
- Inbox: remove Decisions by @backnotprop in #1985
- Docs: packages/ui HANDOFF.md and README.md match core 0.25.13 / ui 0.53.0 by @backnotprop in #1986
- Inbox: New message in the list header while the sidebar is closed by @backnotprop in #1987
- Inbox: the toast sits at the bottom of the window, and its words show whole by @backnotprop in #1988
- Inbox: the notification line above the list reads cleanly by @backnotprop in #1989
- Inbox: a text size setting (12–15, default 14) by @backnotprop in #1990
- Docs: the guide skill is now guided-review; add guided-plan by @backnotprop in #1996
- Inbox: comment on the text of an agent's message by @backnotprop in #1997
- Inbox MCP: smaller results by @backnotprop in #1999
- Inbox: links inside an attached HTML page open by @backnotprop in #2000
- Inbox: say when an agent session needs a restart after an update by @backnotprop in #2001
- Inbox MCP: windowed thread reads, text transcripts, and agent search by @backnotprop in #2002
- Inbox: rows that Show brings in stay lit longer by @backnotprop in #2003
- Inbox: the skill picker in New message opens at the cursor by @backnotprop in #2004
- Inbox: tag agents in a reply or a comment by @backnotprop in #2005
- Inbox: the restart note leads with /exit and the resume command by @backnotprop in #2008
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 -
🔗 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:
- A model. Your model choice defines the agent’s “smarts,” i.e., which tasks it can accomplish.
- The agentic loop (see: The Unreasonable Effectiveness of an LLM Agent Loop with Tool). Loop choice determines UX.
- 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.”
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.
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.
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.
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.
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.
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.
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() -
🔗 r/LocalLLaMA Pocket TTS which supports voice cloning is now just 1.9 million parameters rss
submitted by /u/Affectionate_Hat_585
[link] [comments] -
🔗 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
90bbec5Merge PR #930: Point the README build section at Lix and the flakef9b7dcedocs: point the readme build section at lix and the flake0a89ed5Merge pull request #929 from dappermint/ci/lix-declarativef1f0f0cfix(ci): put flake tools on path in verify7b903e8fix(ci): fail the gettext step when nix build fails and describe the tooling jobfc153faci: build all dev tooling from the flake and drop dev-tools.sh setupd867f9cfix(ci): scope access-tokens to nix build step and anchor flake evaluationfe6e4e9fix(ipc): locate swiftformat on path before cached fallback3a3c431fix(ci): install lix via installer script and pin toolchain in flake2c1ac7bci: add declarative lix workflow and flake for developer toolingd651dd7Extract localized strings from the compiler's typed syntax tree3b86b8aMerge PR #928: Follow Swiftly in localization extraction checkse18bbc4test: follow Swiftly in localization extraction checks00ef6a6Hide the focus border without waiting on WindowServerfa88a95Require the Swift 6.5 development toolchain5f88ef5Avoid main-thread WindowServer queries on window title changesa85fb37Merge upstream CI and website fixes into mainb52cc0fFix AX worker and session tap isolation racescb1959fMerge pull request #925 from hezhizhen/codex/fix-website-selector-parser72760faMerge pull request #926 from hezhizhen/codex/ci-completion-shells8f0308fci: run Fish and Nushell completion testsfff22b9fix(website): use patched PostCSS selector parserdf16b68Merge upstream Bluetooth notification and popout test fixes into mainf350f4cCut input latency in the palette, CLI, IPC, hotkeys and title eventsd72ea37Build with the pinned Swift snapshot in CI and releasee4d0cabMerge PR #920: Lay out the bar panel after resizing it in the popout testea5f08btest(shell): lay out the bar panel after resizing it in the popout testb28fb85Merge PR #919: Handle Bluetooth notifications off the main thread174c14afix(shell): handle bluetooth notifications off the main threadf46f0e7Sample the main display once per monitor snapshoteb65411Make the out-of-range mouse button test observe claimed eventsd17c88aMerge upstream resize preview tiles and CI checks into main03213d5Cut ARC and allocation work on layout, surface and input hot paths5da8304Merge PR #917: Draw resize preview tiles in one reused window per monitor79b293dMerge remote-tracking branch 'upstream/main' into fix/909-resize-overlaye62787dMerge pull request #913 from hezhizhen/codex/check-generated-ipc-wire-files11b0651Merge pull request #915 from hezhizhen/codex/gate-canary-on-ci302572eci: improve canary gate diagnostics and coverageab2c9caci: require passing CI for canary builds29f90baMerge pull request #912 from hezhizhen/codex/fix-canary-notes-test-hash-match61101f5ci: check generated IPC wire files212fa27test: avoid hash collisions in canary release notes2e3963cInsert at Dwindle dividers on another displaycecd4bdKeep Dwindle divider drops reachable beside tab railsb6d03c1Merge PR #910: Add Dwindle drag insertion between splits65c675bKeep native edge resizes of tiled windows when opted in5a4d707Add Dwindle drag insertion between splits86f0f88Move Dwindle tab groups across displays as a wholea77df82Move windows across displays with the mouse move modifierced352dperf(resize): draw preview tiles in one reused window per monitorf845ff7Add opt-in workspace auto back-and-forth4916eb0Show the keyboard mode on the workspace bar and in shell data44bed55Show keyboard mode pills on all displays and a passive key guidea7f2282Show keyboard modes on borders, the menu bar and in Settings8ec20fbAdd Pause, Prefix and Window keyboard modes87ad2baCombine matching App Rules per setting
- Commit:
-
🔗 r/LocalLLaMA Deepseek released DeepInfer - Open Source high-performance, large-scale inference framework for DeepSeek models! rss
| 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]
---|--- -
🔗 r/LocalLLaMA 24GB is plenty if your engines take turns rss
| 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]
---|--- -
🔗 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 updateRustup will also automatically update itself at the end of a normal toolchain update:
$ rustup updateIf 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-docswhich 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!
-
🔗 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.
-





