- β
- β
- October 31, 2026
-
π anthropics/claude-code v2.1.316 release
What's changed
- Added
CLAUDE_CODE_DISABLE_ULTRATHINK, which turns theultrathinkkeyword off - Added pooled group budgets to the Claude apps gateway: one monthly budget that a group's members share, on top of each member's own limit, set with
pooled_budgeton the spend limits admin API - Added
CLAUDE_CODE_DISABLE_LOOPED_CROSS_CERT_DROPto keep system cross-certificates that certify each other in a loop, for servers whose private CA needs one - Added
CLAUDE_CODE_SUBAGENT_EFFORTto set the effort level subagents run at when nothing else names one, instead of inheriting the session's - Added
managed.policy_mode: layeredto the Claude apps gateway: every policy that matches a developer applies, each merged over the ones listed below it, not only the first - Added
guardrail.input_taggingon Claude apps gateway Bedrock upstreams, which wraps prompts in the input tags that an Amazon Bedrock guardrail's prompt attacks filter needs;all_messages_and_systemalso tags the system prompt - Deprecated fast mode for Opus 4.8 as of October 30, 2026; it will be removed on November 30, 2026. After removal, fast mode requests on Opus 4.8 return an error and do not fall back to standard Opus 4.8. Migrate to Opus 5.5 to keep the speedup
- Fixed shell commands being left running on macOS and Linux when Claude Code exits by itself, for example when credentials are refused or a cloud session is archived
- Fixed bash aliases with line breaks in their value (except in Git Bash), and functions whose names start with a dash, being garbled or lost in the Bash tool's shell
- Fixed bash scripts started from the Bash tool stopping after their first command when
SHELLOPTSis exported - Fixed PowerShell hooks not blocking on exit code 2 when the command begins with a type cast,
param,usingor an attribute - Fixed some network requests hanging when a compressed response was cut off or corrupted
- Fixed
sonnet,opusandhaikuon Vertex AI and Amazon Bedrock showing an error mid-session instead of switching to an older model when the newest is not yet available to the account or region - Fixed the Claude apps gateway not checking every model a request names against
availableModels,deniedModelsandmodels; a request that names a blocked model now gets a 400 naming the field - Fixed
claude auth loginrefusing to run where managed settings require a Claude apps gateway; in a terminal it now shows the gateway sign-in - Fixed
--restrictedsessions uploading files from outside the working directories when a Read allow rule covered them - Fixed prompts containing invisible characters needing a second Enter to send; plain prompts now send cleaned on the first Enter, and commands still wait for review
- Fixed sub-agents that inherited a parent sub-agent's model moving to the main model when a background job or message woke them
- Fixed a managed
autoMode.allowlist without"$defaults"getting the built-in exceptions back from a host app's--settings, a first rule added in/permissions, or/auto-mode-setup - Fixed cloud sessions and cloud scheduled tasks not being marked as failed when auto mode stopped a turn because the server returned no safety verdict
- Fixed
claude -ptext output sometimes not saying why auto mode stopped a turn when a background agent was still running - Fixed
CLAUDE_CODE_AUTO_MODE_SERVER=1being ignored in sessions started by a host application (such as Claude Desktop) behind a proxy or LLM gateway with experimental betas turned off - Fixed plugin MCP
headersHelperscripts receiving a corruptedCLAUDE_PLUGIN_ROOTand server URL when a credential-named environment variable was set to a switch value such as1 - Fixed the SDK
register_repo_rootcontrol request not loading the CLAUDE.md of a directory outside the working directory (withCLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1) - Fixed the Artifact tool showing
?for artifact database access rules at theselflevel, and not quoting those rules back when it refuses a republish that would drop them - Fixed
/model <id>not warning when the model isn't recognized by this version and auto-compact will assume a 200K context window - Fixed the "hold space to speak" hint using up its three showings in one session, and showing an empty key when push-to-talk is unbound
- Fixed Grep and Glob never returning when the search process is killed at the timeout but does not exit, seen on Windows
- Fixed a rare case where resuming a conversation did not restore its plan, when
/clearor/resumehad been run while part of that conversation was still being saved - Fixed first-run setup dropping words from the security notes and the terminal-setup explanation in narrow terminals
- Fixed the Enterprise survey card taking a typed 1 or 0 after a short pause; a typed answer now needs Enter
- Self-hosted runner: Fixed a message sent while Claude was working being answered after a Stop, once the session's process had been replaced
- Self-hosted runner: Fixed an MCP server's on/off switch sometimes being lost when a session moved to a new machine
- Windows: Fixed the Bash tool losing your aliases and functions in Git Bash when the rc file sets errexit and pipefail and only winpty aliases, or none, are defined
- Improved
/code-reviewstarted from the Code tab in Claude Desktop or on the web: cloud andclaude remote-controlsessions now show the findings card, not a plain-text list - Improved
/diffon large repositories: each refresh usually runs one fewer full-repository git command, and refreshes are spaced out when git is slow - Improved the messages shown when
/ultrareview, a cloud session or a cloud agent finds no GitHub remote: they now say to create a repository at https://github.com/new, and/ultrareviewno longer suggests aghcommand thatghrejects - Improved SSL certificate errors to name the likely causes, among them a server that leaves out an intermediate certificate, and the fix for each
- Changed auto mode so that an
autoMode.allowlist without"$defaults"no longer removes the built-in rule on scheduled-task prompts - Changed server-managed settings for Team and Enterprise logins: settings fetched from Anthropic's API now apply without an approval prompt, and a stored copy that doesn't verify is refused
- [VSCode] Added sign-in to a Claude apps gateway from the chat panel, with no terminal needed
- [VSCode] Changed
ultrathinkto run its turn atxhigheffort and show in a rainbow in the chat box, as in the terminal - [VSCode] Fixed the missing Effort slider, Ultracode switch and model name when the model setting has the
[1m]tag, such asopus[1m] - [VSCode] Fixed saved
/btwside-question history being deleted too early while a settings file has errors - [VSCode] Fixed a conversation coming back in Auto mode after a reload or restart when its plan was approved with "Yes, and manually approve edits"
- [Cloud sessions] Added a form card to cloud sessions, so you can fill in or decline a form an MCP server asks for instead of the request being canceled without you seeing it
- [Cloud sessions] Added a "Catching upβ¦" line that shows while a cloud or Remote Control session you switch back to is still bringing its messages up to date
- [Cloud sessions] Changed network secrets so Enterprise members can add and delete them on their own cloud environments, instead of only viewing them
- [Cloud sessions] Improved the Changes pane for cloud sessions: the note about what the list leaves out is now a badge beside the branch name, not a row above the diff
- [Cloud sessions] Fixed file search in a cloud session's Files pane showing folders as ../.. paths after Claude changed directory; results now show their path from the project's root
- [Claude Tag] Fixed Claude refusing to edit or append to a canvas it made in a Slack channel, from that channel, once the canvas was also shared to another channel or a DM
- [Claude Tag] Fixed untagged replies going unanswered in a Slack Connect thread when both organizations have installed Claude and Slack delivered the reply to the other organization's app
- [Claude Tag] Fixed a cloud scheduled task's live status checklist in Slack staying half-done; a run can now edit the top-level messages it posted during that run
- [Claude Tag] Changed a Slack channel's Respond automatically switch to a "How Claude participates" choice on the channel's Configure page and in Claude Tag admin settings
- [Code Review] Added a findings-by-severity card to the Code Review analytics page, showing the period's total findings, a daily chart stacked by severity, and each severity's count
- Added
-
- October 30, 2026
-
π backnotprop/plannotator v0.28.40 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.39 | Reply from full screen, thread names lead the Inbox list, one project per Claude Code session, a redesigned code review sidebar, Call flow as cards
v0.28.38 | Attach files to a reply in the Inbox, swipe through a question's picture choices, easier-to-read list rows, code on hover in Call Flow and Semantic Changes
v0.28.37 | DeepSeek Harness support, save plans to Notion, AsciiDoc in annotate, browse the whole repository in code review, Go to File and Go to Definition, Tidy and hand-offs in the Inbox
v0.28.36 | Qwen Code support, plans open in the Clean look, live HTML and diagrams in Inbox messages, a Feedback button,plannotator inbox status,stopandrestart
v0.28.35 | Updates check the download against checksums Plannotator fetches itself, a failed check changes nothing
v0.28.34 | Start a Grok Build session from the Inbox, action items in your reply, a tidier Board, Settings β Capabilities, a failed feedback send is shown
v0.28.33 | Pi updates no longer get stuck on 0.28.31
v0.28.32 | A security update (built on Bun 1.4.4, eMudhra certificates), the Inbox Board, custom Inbox prompts, hover cards for issue and PR links, rich-text Copy
v0.28.31 | An onboarding tour for the Inbox, pinned threads, picture choices in questions, palettes in Inbox Settings, tailnet reviews from the plugin tool
v0.28.30 | An Artifacts view in the Inbox, comments on part of an image, diagrams in code review, Ask AI keeps its conversation in annotate
v0.28.29 | Plan review opens on OpenCode 2, a DOMPurify security update, closing a review stops the agent everywhere
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 fontWhat's New in v0.28.40
v0.28.40 is a patch on v0.28.39. It repeats v0.28.39's notes and adds three Inbox fixes, listed first under Smaller changes.
Reply to an agent without leaving full screen, thread names lead the Inbox list, and a Claude Code session keeps its messages in one project. In code review, the sidebar is redesigned and Call flow shows its paths as cards. 29 PRs.
Plannotator Inbox
Reply from full screen
An image, video or HTML file in full screen has a card at its foot with two tabs: comment on the file, or reply to the agent. The reply is the thread's own draft, files included, and Send keeps you in full screen. Minimize the card to a small pill, or hide it.
Thread names lead
A list row's title is now the thread's name, shown in full. The agents' icons sit beside the project. A pinned thread and an open thread show the name too.
One project per Claude Code session
A Claude Code session now files its messages under the folder it started in, so a
cdno longer makes a new project. Claude Code's own/cdstill moves the session. Projects that were split before stay as they are; Archive all hides them.Open the files your reply commented on
In your sent reply, each file named under "Feedback on the attached files" is a link that opens the file beside the thread. If the file has since moved or been deleted, the link opens the version you sent.
Pinned and Projects fold like folders
Click the Pinned or Projects heading in the sidebar to close or open it. A closed Pinned still shows how many pinned threads wait on you.
Smaller changes
- Update works with update checks off. When a newer version is known, the Inbox still offers Update, and clicking it checks once before installing. Automatic install stays off while checks are off. #2380
- The thread's top bar always shows the thread's name, or its subject when it has none. #2379
- Beside an open thread and on a phone, list rows show the agents first, then the project on one line. #2383
- Pin thread moved from the thread header into its β― menu. #2352
- Open actions show as a small box with a count, and open questions as a speech bubble with a count. #2348
- Projects show their folder name, adding a parent folder only when two listed projects share a name. #2349
- One project's list header shows the name without the folder path. The path is in its tooltip. #2355
- The thread header on a phone fits on one line, with nothing cut. #2357
- An agent's inline image from a hidden folder in a project, such as
.ops, now shows, as it does when attached. #2343 - Picture choices in full screen keep the letter from their own label. #2350
- The What's new link and its images retry after a quit or a failed fetch, and the link stays until you have seen it. #2345, #2346
- Agents are told to keep one thread per work stream, unless you say otherwise. #2367
- An agent that lists threads from a folder with none is told which projects inside that folder have threads. #2368
- New thread no longer says when the agent will take the message. #2351
- The agent logos on Copy prompt tilt apart on hover. #2347
Plannotator
A new code review sidebar
Go to file is a field at the top of the sidebar, and Tree, Git status and Commits are tabs. Progress reads in words ("0 of 12 viewed Β· 1 staged"), and line counts line up in columns. The settings from Tree controls, and Copy all diffs, are now in the "β¦" menu.
Call flow as cards
In code review, each entry point in Call flow's Paths view is a card. Dots mark new, removed and unchanged calls, and one line sums up the changes.
Smaller changes
- Call flow (opt-in) now needs CallDiff 0.6.0 and Node 22.18 or newer. Trees are more accurate, and CUDA files are read as C++. If Call flow is on, the new version installs once, automatically. CallDiff is by @tanishqkancharla. #2365
- Updates recover from killed or overlapping installs. #2342
- Agents started by Ask AI, code review, Code Tour and Guided Review no longer post to your Inbox or wait on a plan review. #2366, #2369, #2371
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 npm:@plannotator/pi-extensionOpenCode: Re-run the install script above. It also clears the OpenCode 2 plugin cache.
What's Changed
- Updates: recover from killed or overlapping installs (F5, F6, F7) by @backnotprop in #2342
- Inbox: an agent's inline image in a project's hidden folder shows, as its attachment does by @backnotprop in #2343
- fix(whats new): retry abandoned and failed notes fetches; keep the link across restarts by @backnotprop in #2345
- Inbox: full screen's composer (comment or reply without leaving full screen) by @backnotprop in #2339
- fix(whats new): retry release images abandoned mid-fetch after 15 minutes by @backnotprop in #2346
- Inbox: Copy prompt logos tilt apart on hover by @backnotprop in #2347
- Inbox: drop the 'takes it as its next turn' line from New thread by @backnotprop in #2351
- Inbox: Pin thread moves from the thread header into its β― menu by @backnotprop in #2352
- Inbox: picture choices keep the letter in their own label in full screen by @backnotprop in #2350
- Inbox: action count as a box pill, question count with a speech-bubble icon by @backnotprop in #2348
- Inbox: an open thread shows its name before the message count by @backnotprop in #2354
- Inbox: show a project's folder name, adding the parent only when two listed projects share it by @backnotprop in #2349
- Inbox: Pinned and Projects open and close like folders by @backnotprop in #2353
- Inbox: link the files your sent reply commented on by @backnotprop in #2358
- chore: take the AIContext type from core, not the AI package by @backnotprop in #2360
- test: let the list-resize drag finish before the last sample by @backnotprop in #2362
- fix(inbox): phone thread header fits one line with nothing cut by @backnotprop in #2357
- fix(inbox): drop the folder path from a project's list header by @backnotprop in #2355
- Inbox: a pinned thread shows its name by @backnotprop in #2359
- Code review: Call flow as cards by @backnotprop in #2364
- Call flow: update CallDiff to 0.6.0 by @backnotprop in #2365
- fix(pi): keep the Inbox off inside Ask AI's RPC runs by @backnotprop in #2366
- Inbox: read_thread names the projects inside a folder with no threads by @backnotprop in #2368
- Inbox guidance: one thread per work stream by @backnotprop in #2367
- Code review sidebar: aligned Halftone layout (E) by @backnotprop in #2370
- Ask AI: agents it starts never load Plannotator's Inbox, agent tool or plan hooks by @backnotprop in #2369
- Agent jobs: Review, Code Tour and Guided Review agents never load Plannotator's Inbox or plan hooks by @backnotprop in #2371
- Inbox list rows: thread name as the title, agent icons beside the project by @backnotprop in #2374
- Inbox: a Claude Code session files under the folder it started in by @backnotprop in #2344
- Inbox window: every API URL through one helper by @backnotprop in #2377
- Inbox: Update stays available when update checks are off by @backnotprop in #2380
- Inbox: the thread bar shows the thread's name, not its first line by @backnotprop in #2379
- AGENTS.md: test agent-facing instructions clean room by @backnotprop in #2381
- Inbox: agent marks before the project, thread name on its own line by @backnotprop in #2383
Community
- @tanishqkancharla: CallDiff 0.6.0, the engine behind Call flow, updated in #2365
Full Changelog :
v0.28.38...v0.28.40 -
π backnotprop/plannotator v0.28.39 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.38 | Attach files to a reply in the Inbox, swipe through a question's picture choices, easier-to-read list rows, code on hover in Call Flow and Semantic Changes
v0.28.37 | DeepSeek Harness support, save plans to Notion, AsciiDoc in annotate, browse the whole repository in code review, Go to File and Go to Definition, Tidy and hand-offs in the Inbox
v0.28.36 | Qwen Code support, plans open in the Clean look, live HTML and diagrams in Inbox messages, a Feedback button,plannotator inbox status,stopandrestart
v0.28.35 | Updates check the download against checksums Plannotator fetches itself, a failed check changes nothing
v0.28.34 | Start a Grok Build session from the Inbox, action items in your reply, a tidier Board, Settings β Capabilities, a failed feedback send is shown
v0.28.33 | Pi updates no longer get stuck on 0.28.31
v0.28.32 | A security update (built on Bun 1.4.4, eMudhra certificates), the Inbox Board, custom Inbox prompts, hover cards for issue and PR links, rich-text Copy
v0.28.31 | An onboarding tour for the Inbox, pinned threads, picture choices in questions, palettes in Inbox Settings, tailnet reviews from the plugin tool
v0.28.30 | An Artifacts view in the Inbox, comments on part of an image, diagrams in code review, Ask AI keeps its conversation in annotate
v0.28.29 | Plan review opens on OpenCode 2, a DOMPurify security update, closing a review stops the agent everywhere
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 fontWhat's New in v0.28.39
Reply to an agent without leaving full screen, thread names lead the Inbox list, and a Claude Code session keeps its messages in one project. In code review, the sidebar is redesigned and Call flow shows its paths as cards. 29 PRs.
Plannotator Inbox
Reply from full screen
An image, video or HTML file in full screen has a card at its foot with two tabs: comment on the file, or reply to the agent. The reply is the thread's own draft, files included, and Send keeps you in full screen. Minimize the card to a small pill, or hide it.
Thread names lead
A list row's title is now the thread's name, shown in full. The agents' icons sit beside the project. A pinned thread and an open thread show the name too.
One project per Claude Code session
A Claude Code session now files its messages under the folder it started in, so a
cdno longer makes a new project. Claude Code's own/cdstill moves the session. Projects that were split before stay as they are; Archive all hides them.Open the files your reply commented on
In your sent reply, each file named under "Feedback on the attached files" is a link that opens the file beside the thread. If the file has since moved or been deleted, the link opens the version you sent.
Pinned and Projects fold like folders
Click the Pinned or Projects heading in the sidebar to close or open it. A closed Pinned still shows how many pinned threads wait on you.
Smaller changes
- Pin thread moved from the thread header into its β― menu. #2352
- Open actions show as a small box with a count, and open questions as a speech bubble with a count. #2348
- Projects show their folder name, adding a parent folder only when two listed projects share a name. #2349
- One project's list header shows the name without the folder path. The path is in its tooltip. #2355
- The thread header on a phone fits on one line, with nothing cut. #2357
- An agent's inline image from a hidden folder in a project, such as
.ops, now shows, as it does when attached. #2343 - Picture choices in full screen keep the letter from their own label. #2350
- The What's new link and its images retry after a quit or a failed fetch, and the link stays until you have seen it. #2345, #2346
- Agents are told to keep one thread per work stream, unless you say otherwise. #2367
- An agent that lists threads from a folder with none is told which projects inside that folder have threads. #2368
- New thread no longer says when the agent will take the message. #2351
- The agent logos on Copy prompt tilt apart on hover. #2347
Plannotator
A new code review sidebar
Go to file is a field at the top of the sidebar, and Tree, Git status and Commits are tabs. Progress reads in words ("0 of 12 viewed Β· 1 staged"), and line counts line up in columns. The settings from Tree controls, and Copy all diffs, are now in the "β¦" menu.
Call flow as cards
In code review, each entry point in Call flow's Paths view is a card. Dots mark new, removed and unchanged calls, and one line sums up the changes.
Smaller changes
- Call flow (opt-in) now needs CallDiff 0.6.0 and Node 22.18 or newer. Trees are more accurate, and CUDA files are read as C++. If Call flow is on, the new version installs once, automatically. CallDiff is by @tanishqkancharla. #2365
- Updates recover from killed or overlapping installs. #2342
- Agents started by Ask AI, code review, Code Tour and Guided Review no longer post to your Inbox or wait on a plan review. #2366, #2369, #2371
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 npm:@plannotator/pi-extensionOpenCode: Re-run the install script above. It also clears the OpenCode 2 plugin cache.
What's Changed
- Updates: recover from killed or overlapping installs (F5, F6, F7) by @backnotprop in #2342
- Inbox: an agent's inline image in a project's hidden folder shows, as its attachment does by @backnotprop in #2343
- fix(whats new): retry abandoned and failed notes fetches; keep the link across restarts by @backnotprop in #2345
- Inbox: full screen's composer (comment or reply without leaving full screen) by @backnotprop in #2339
- fix(whats new): retry release images abandoned mid-fetch after 15 minutes by @backnotprop in #2346
- Inbox: Copy prompt logos tilt apart on hover by @backnotprop in #2347
- Inbox: drop the 'takes it as its next turn' line from New thread by @backnotprop in #2351
- Inbox: Pin thread moves from the thread header into its β― menu by @backnotprop in #2352
- Inbox: picture choices keep the letter in their own label in full screen by @backnotprop in #2350
- Inbox: action count as a box pill, question count with a speech-bubble icon by @backnotprop in #2348
- Inbox: an open thread shows its name before the message count by @backnotprop in #2354
- Inbox: show a project's folder name, adding the parent only when two listed projects share it by @backnotprop in #2349
- Inbox: Pinned and Projects open and close like folders by @backnotprop in #2353
- Inbox: link the files your sent reply commented on by @backnotprop in #2358
- chore: take the AIContext type from core, not the AI package by @backnotprop in #2360
- test: let the list-resize drag finish before the last sample by @backnotprop in #2362
- fix(inbox): phone thread header fits one line with nothing cut by @backnotprop in #2357
- fix(inbox): drop the folder path from a project's list header by @backnotprop in #2355
- Inbox: a pinned thread shows its name by @backnotprop in #2359
- Code review: Call flow as cards by @backnotprop in #2364
- Call flow: update CallDiff to 0.6.0 by @backnotprop in #2365
- fix(pi): keep the Inbox off inside Ask AI's RPC runs by @backnotprop in #2366
- Inbox: read_thread names the projects inside a folder with no threads by @backnotprop in #2368
- Inbox guidance: one thread per work stream by @backnotprop in #2367
- Code review sidebar: aligned Halftone layout (E) by @backnotprop in #2370
- Ask AI: agents it starts never load Plannotator's Inbox, agent tool or plan hooks by @backnotprop in #2369
- Agent jobs: Review, Code Tour and Guided Review agents never load Plannotator's Inbox or plan hooks by @backnotprop in #2371
- Inbox list rows: thread name as the title, agent icons beside the project by @backnotprop in #2374
- Inbox: a Claude Code session files under the folder it started in by @backnotprop in #2344
Community
- @tanishqkancharla: CallDiff 0.6.0, the engine behind Call flow, updated in #2365
Full Changelog :
v0.28.38...v0.28.39 -
π The Pragmatic Engineer The Pulse: Time to rethink software security because of AI? 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 eight days ago. If you 've been forwarded this email, you can subscribe here .
It's been an absolutely wild few days, with security breaches and major security vulnerabilities being exposed worldwide across tech. Many incidents took place on Tuesday and Wednesday of this week. We'll start with a brief summary, then look closer at three of them:
- Intermediate CA certificate compromised : eight private 384-bit keys issued by eMudhra - which is an intermediate Certificate Authority (CAs) - leaked, meaning that servers in server-to-server communication can face man-in-the-middle (MITM) attacks. Any internet communication not going through modern browsers (that already patched this) could be risky.
- PHP : Unpatched servers risk remote code execution (RCE) and opening up access for attackers. Around 70% of all websites run on PHP and unpatched systems are at risk. Two critical security patches have been released.
- Railway : customer secrets stored on the service were leaked and some have been decrypted. Secrets exposed can include access to production systems, enabling attackers to potentially access customer systems.
- GitLab : Unpatched GitLab servers are at risk of an attacker gaining full access. A critical security patch for RCE has been released.
- Node.js : Unpatched servers are vulnerable to remote execution attacks. A new release fixes 10 critical vulnerabilities (CVEs), including one that allows for RCE, and another fix revokes the compromised eMudhra intermediate certificate.
- Go : a new release is out, adding a mitigation for the compromised eMudhra intermediate certificate.
- TiDB : attackers gained near-total access to the complete control plane systems of the managed TiDB provider, PingCAP, for a whole month (!!). The attacker released 10TB of customer-sensitive data, including from Booking.com, Airbnb, Pinterest, Databricks, and more such as SQL queries that customers ran, billing, contacts, and source code for PingCAP's systems The breach lasted from 9 Sept until 7 Oct, but was only disclosed this week.__ PingCAP claims no customer data stored inside TiDB was accessed, but I find it hard to see how the company will avoid losing security-conscious customers. This incident shows that the absence of adequate access monitoring and alerting can be an open invitation for attacks lasting weeks.
With that, let's get into the first three incidents in the list.
eMudhra CA compromise
Certificate authorities (CAs) are organizations that vouch for identity on the internet. When a browser, phone, or server pings a site like chase.com or revolut.com, intermediate CAs and digital signatures verify that you really are talking with the bank's server, and not a fake one set up by an attacker with the purpose of stealing users' credentials. This is where the HTTPS protocol comes into play, with root CAs, intermediate CAs and the TLS handshake.
The whole system is built on a chain of trust and verification: we trust the root CAs and their certificates, and so we can trust the signatures of the intermediate CAs. The assumption is that both the root CA and intermediate CAs are trustworthy and verifiable.
But eMudhra broke this trust in the most blatant way: its private keys turned out to be single-digit numbers. A private key is a 384-bit key, which means that it would be a number between 0 and 2^384, (a number with 116 digits!)
Except, the key turned out to be the number "4." Yes, that's right: the number four. What on earth was eMudhra doing?! It's as if they chose random numbers between 0 and 384, not 0 and 2^384! It is quite literally comical: in 2007, an XKCD comic described exactly this choice:
Prophecy
foretold? An XKCD comic from
2007And the other keys were also not that much better: 56, 66, 115, 156, 230 and 237! It's as if eMudhra generated an 8-bit private key, not a 384-bit one.
eMudhra explaining how these keys were generated (emphasis mine):
"We have done some preliminary assessment, there appears to be a flaw in the KGC [Key Generation Ceremony] script that was used on that specific day to create these ECC issuers. As for these ECC keys [elliptic-curve cryptography key pairs], our review of the KGC, assessment of the code and view of HSM [Hardware Security Module] keys so far indicate that a) a set of original ECC keys were created onboard as expected b) an approved deviation to our usual KGC to test a wrap/unwrap was introduced as these keys were meant for export for this instance c) a flaw in the code resulted in the second pair of keys being created onboard which were weaker d) these second pair of weaker keys were used by mistake to create the CSR [Certificate Signing Request] (because the key labels were similar) and signed by our root e) the CSR from these weaker keys were also sent over to Sectigo for cross signing (we verified the files sent over to Sectigo)
The RSA issuers went through a different path as per our assessment of the code and are therefore not impacted.
Some additional context - these issuers were meant for export to our US and European data centers to solve data sovereignty issues for some of our customers (but never ended up operationally in production except for one).
We are still assessing the code to see steps where this process went wrong."
I have so many questions:
- How does eMudhra test generated keys? There seems to have been no automated testing of the key in place at all, in order to discover that these numbers were not "random" from a flaw in the key generation ceremony
- How did eMudhra not notice this on day one, when the Key Generation Ceremony went wrong? If this was an automated process, the script would've changed from one day to the next, which would raise questions. If the process was fully manual, it explains how the mistake would be missed. And if it was manual, then why? Also, where are the detailed audits for such an important process?
- The certificates with the easy-to-guess private keys were generated on 30 April 2025, so why did eMudhra not spot the mistake for 18 months?
Carelessness in the creation of intermediate certificates risks reputational damage to eMudhra 's business as a certificate authority. Google Chrome announced it is evaluating whether to continue with the company:
"Due to the seriousness of this incident, the Chrome Root Program is closely investigating the ongoing inclusion of eMudhra's remaining CA certificates in the Chrome Root Store and will share further updates in public forums (e.g., the Common CA Database Public list) as our evaluation progresses."
Given eMudhra's sole business is in issuing digital certificates, being dropped by Chrome as a CA could be crippling. eMudhra is a publicly traded company on the Indian stock market, and two days before the breach was revealed its market cap was close to $500M. After details of its incompetence in creating certificates emerged, the company lost 40% of its value in two days.
**PHP exploit: AI model beats attackers to finding critical
vulnerability**
The PHP situation is interesting because the "good guys" in this case (the security researchers) found a critical vulnerability in the framework before attackers did. From OpenAI:
"Over the past two months, we led a coalition of maintainers, researchers, and security providers to address critical vulnerabilities in PHP, an open- source programming language used to run websites and web applications. Calif [a respected security team] identified a critical flaw using GPTβ5.6 Sol as part of our Patch the Planetβ (opens in a new window) initiative, with Wiz [a security company] also independently discovering and reporting both vulnerabilities. PHP's maintainers led the fixes and release, with our teams and partners like Wiz, Cloudflare, and others contributing research, technical support, and coordination to prepare protections ahead of disclosure."
On the surface, this is great news! Critical vulnerabilities were found and can now be patched, thereby closing the door before attackers can exploit them. Right..?
The problem of critical vulnerabilities for open source software is that systems which aren 't immediately patched can be exploited. When the PHP team released the fix for these two vulnerabilities, attackers got details about the vulnerabilities: the code itself shows where the attack can be inititiated! In the case of PHP, that means attackers can now easily execute remote code on any PHP server that is as yet unpatched.
Around 70% of all websites run PHP servers, which is a massive attack surface. We can be confident that many sites won't update their PHP versions for days, weeks, months, or even years.
This particular vulnerability was so severe that before the security patch, the National Security Agency (NSA) in the US issued guidance urging websites to immediately patch upon release, or take applications fully offline until patched.
Exploits began hours before the fix was announced. It was known in advance that a major vulnerability fix was coming for PHP, and somehow, the vulnerability leaked from the group that disclosed and fixed it. Cloudflare was in the group that worked on this problem and created tooling to monitor and block exploit attempts. From Cloudflare CEO Matthew Prince:
Attackers
jumped on the exploit before it was officially announced. Source:Matthew
PrinceAmazon detected exploit attempts days before the fix. From AWS:
"Amazon Threat Intelligence identified a PHP2Shell exploitation attempt dating to Oct. 17, 2026, in MadPot telemetry, four days before public disclosure of CVE-2026-109618 and CVE-2026-109619. The exploit attempt originated from an IP address associated with a commercial anonymization network. While the vulnerability was under embargo, the targeting of a honeypot from an anonymized IP address suggests the activity was conducted by a threat actor, though it remains unclear how the actor acquired exploit information prior to disclosure."
Attackers now have AI agents to automate and speed up attacks. Now that the vulnerability is known, attackers can simply spin up agents, instructing them to attempt to exploit servers that have not applied the patch. This probably explains why Cloudflare saw millions of exploit attempts just a few hours after the patch was released.
Railway 's customer secrets leak
Elsewhere on the same day, developer-first cloud provider Railway was hacked and the environment variables (secrets) of its customers were exposed. From the company:
"Our investigation to date indicates that an unauthorized third party may have accessed encrypted environment variables and, for some of them, obtained the decrypted contents. Environment variables may contain secrets such as API keys or database and registry credentials."
Immediately after detecting the breach, Railway took decisive action by notifying customers and the public, and pausing all deployments.
Pausing deployments created a huge headache for customers, who could not rotate their keys without crashing their systems running on Railway. Also from Railway:
"We strongly recommend that you immediately roll all environment variables, including any API keys, stored in Railway, as well as any private registry credentials, and review logs for those services for unusual activity.
All deployments are paused while we investigate. Until builds are restored, you will not be able to roll out new versions. We apologize for this inconvenience. Follow this incident to be notified when builds resume."
This is contradictory: rotating environment variables - say, a database access token - means that the application using the old variable stops working until a redeploy. However, Railway has paused deploys! So, customers of Railway had two choices:
- Rotate keys (the responsible step) and deliberately crash their application or take it offline (irresponsible)
- Don't rotate and hope their key was not leaked - (irresponsible) - and let their application continue to operate (responsible)
Of course, it's clear why Railway is pausing deployments after the environment variables leaked, and the team must ensure that new variables added by customers do not leak.
In the end, it took Railway close to 20 hours to resolve the problem and allow deployments again. During that time, they unfortunately gave security-conscious customers an impossible choice of bricking their service while rotating keys, or ignoring security best practices to keep services running.
Can we expect future 'deluges' of security incidents?
AI labs did warn of a looming "security tsunami" fueled by the technology in May 2026, as per CNBC:
"Dario Amodei warned Tuesday [5 May 2026] that artificial intelligence has created a narrow window for the world's tech firms, governments and banks to fix tens of thousands of software vulnerabilities found by his company's latest model.
That AI model, Mythos, was previewed last month along with the disclosure that it had unearthed decades-old vulnerabilities in crucial software.
Since AI models from geopolitical adversary China are "maybe six to 12 months" behind the Anthropic product, there is "roughly that amount of time" to fix these issues, Amodei said.
"The danger is just some enormous increase in the amount of vulnerabilities, in the amount of breaches, in the financial damage that's done from ransomware on schools, hospitals, not to mention banks," Amodei said.
Anthropic has limited Mythos to a few partner companies because of concerns about what criminals or adversarial nations could do with it."
Around that time, I talked with "AI-pilled" devs - some with access to the Mythos model - who told me the same: they expect the security landscape to become very bad in the coming months, with record numbers of systems being breached. One engineer said he's moving many of his secrets like 2FA backup phrases off cloud storage services and onto paper because he expects cloud storage services to also be breached.
This week, it has seemed like the prediction in May has come to fruition, much of it done with AI's help. A few days ago, on 17 October, OpenCode was breached and its customer secrets - AI API keys - stolen. Cofounder, Dax Raad, shared that the company has been under constant attack, in his reply to Railway:
OpenCode
under constant attack by bad actors. Source:Dax
RaadAttacks much easier & defense much harder with AI
I sense the balance of power between the good and bad actors in this space is shifting because of AI. Let's see what it took for an attacker to get access to a system before AI existed, via a critical vulnerability exposure (CVE) - disclosed or not:
Defense
and attack before AIWith AI, finding critical vulnerabilities is easier for everybody, including bad actors who can automate attacks as well, and do so easily. The change:
AI
gives attackers of systems advantages over defendersIt gets worse: before AI, it took quite some skill to be an effective attacker: you needed to be a good-enough coder, understand concepts like buffer overflows, and also learn techniques for executing remote code execution attacks. With AI, none of that applies. Venture capitalist, Deedy Das, described it as scary that nontechnical people now have the tools to easily exploit known CVEs like the PHP one:
Source:Deedy
DasSo, let me update the diagram to account for the drastic lowering of the bar to becoming an effective attacker:
AI
makes it easier than ever to breach systems, for much more people than beforeAnd we see all of this playing out in practice, starting with publicly disclosed CVEs skyrocketing:
The
number of CVEs is skyrocketing. Source:CVE tracker by
0xosprey.comWe may need to urgently rethink software security for all systems:
- Automated patching : manual monitoring for patches on a daily/weekly basis will become as irresponsible as applying patches months or years after release. Of course, automatic patching has its own risks, such as if a vendor providing a patch is breached, or a patch causes an outage, etc.
- Expect attackers to use day-zero CVEs. Attackers will increasingly have access to undisclosed vulnerabilities and will access systems externally, or even execute code remotely.
- Ongoing automated security monitoring to be non-negotiable. To detect security breaches, you need a decent level of automated logging and monitoring. This needs to be in place sooner rather than later. The TiDB incident this week shows what happens when a company allows an attacker to freely access their system for a month.
- Defenders will have to use more AI. Attackers are gaining advantage by using AI agents, so defenders will have to do the same. There are no best practices in this field, but there are likely to be lessons in how companies like OpenCode, Railway, and PingCAP are responding - if they share their approaches.
- Securing services and software will become more expensive. Continuously running AI agents to monitor for and mitigate breaches costs money, as do security engineers who are "AI-native." This all increases the cost of security engineering. We previously covered security engineering basics and did a podcast on code security .
... and the security incidents continue
Since publishing the original article on 22 October, there have been more:
- The Brotli remote execution CVE: Brotli is a compression library used at Node.js, Bun, Envoy, and others. The flaw allows an attacker to take over a service. Details
- Another PHP remote code execution CVE. Just two days after the high-impact PHP2Shell patches, PHP warned of another important CVE, for which a fix is coming. PHP versions will need to be updated fast again.
- Linux CVEs posted publicly. Several unpatched Linux kernel vulnerabilities were accidentally posted on the public kernel mailing list. Details.
- Python Pillow CVE : a vulnerability inside the Python Pillow image library lets an attacker issue OS commands. Details
- β¦ and others I've doubtless missed.
At this rate, we might start getting "vulnerability fatigue" and become numb to critical security vulnerabilities unless they affect frameworks our applications use. To avoid that, it'll be necessary for the industry to improve at coming up with and implementing security practices which work in a security environment where AI speeds up the discovery, publication, and exploitation of vulnerabilities.
Read the full issue of The Pulse this is from, or check out this week 's The Pulse. This week's issue covers:
- Anthropic kills its coding interview. A team at the leading frontier AI company gets zero signal from DSA interviews and so has removed it from the engineering recruitment process. The rest of the company, and other AI-native startups, could follow.
- Details on incident.io 's AI spend and ROI. The resiliency startup has slashed the amount it spends on AI; down from $4,500 per dev, per month, in August, to $1,600 now.
- Amazon formally incorporates AI usage into SDE and SDM expectations. AI has been placed at the heart of software engineering after the company found a correlation between AI usage and productivity. Also, software development engineers (SDEs) and managers (SDMs) must be close to customers.
- Microsoft issues new exit offers to engineers. The tech giant has offered 60,000 employees the opportunity to quit by the end of the year. But the exit package is not particularly tempting, and so the number of people who take it will surely be in the thousands, not tens of thousands.
-
π tintinweb/pi-subagents v0.22.1 release
No content.
-
π r/Harrogate Nostalgic old photos of Harrogate North Yorkshire rss
| submitted by /u/LowGuide2746
[link] [comments]
---|--- -
π HexRaysSA/plugin-repository commits sync repo: +1 plugin, +1 release rss
sync repo: +1 plugin, +1 release ## New plugins - [freelumina](https://github.com/c8c78cf6c6/freelumina) (1.0.0) -
π OmniNull/OmniWM Canary 20261030-0415 (e08c8c5c) 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:
e08c8c5c1d7c - Base tag:
canary-20261027-0418-40448662076-1
Changes since canary-20261027-0418-40448662076-1
e08c8c5fix: load symlinked OmniShell library directories (#1025)3002858fix: scan symlinked OmniShell widget directories (#1020)b035ed4feat(niri): add edge overscroll with a configurable visible strip (#1000)e6e96a7fix(shell): retire approvals for disabled components (#1023)fa4ced5fix(hidden-bar): find menu bar items hosted by MenuBarAgent (#1041)26179bafix(shell): show the apple and app menu widgets left of the notch (#1045)ec962e9Merge pull request #1042 from rickythefox/fix/whatsapp-ghost-column30bf426Cover cleanup while the AX destruction probe is suspended149a4a3Use a named case struct in lifecycle retirement testcbd5490Retire ordered-out windows whose AX element is gone on space destroybee760fMerge pull request #1022 from hezhizhen/codex/fix-permission-prompt-heightc4cc667Merge pull request #1038 from dappermint/ci/canary-skip-docs243267bfeat(canary): skip the build when only docs changed since the last tagac4ea65fix(canary): judge renames and non-ascii paths by their real namesad8c962ci(canary): leave docs-only commits out of the notesf347bd1Merge pull request #1037 from dappermint/ci/release-branches85216edMerge branch 'main' into ci/release-branchesf5bef49ci: match release branches with a slash in the name11f68dfMerge pull request #1036 from dappermint/ci/revert-ghostty-pin41b38f8ci: run the workflow on *-release branches02117cbbuild: revert the ghostty pin to the published v0.7.5 zip8bf4574Merge pull request #1033 from rickythefox/fix/1031-palette-dismiss-fade1e3c98aAlign command palette dismiss fade with reveal fade (#1031)fa23641Merge PR #1027: Keep window background blur on the outgoing workspace20e61d2fix(swipe): capture only listed windows in the outgoing snapshot19cebf2Merge PR #1021: Add a pre-commit hook and a direnv shell0122be1Merge PR #1019: Check that pinned downloads are published7431058fix(swipe): keep window background blur on the outgoing workspace9e6ebf0Merge remote-tracking branch 'origin/build/git-hooks-direnv' into build/git-hooks-direnv750a787Merge branch 'ci/check-pinned-downloads' into build/git-hooks-direnvad19868fix(build): lint the staged swift snapshot in the pre-commit hook2cba301fix(ci): skip commented-out pins in the download check343cdd3Merge branch 'ci/check-pinned-downloads' into build/git-hooks-direnv4837927fix(ci): report a malformed pinned url instead of crashingc55a7a5build: add a pre-commit hook and a direnv shell43dfa2aci: check that pinned downloads are published052368dMerge pull request #997: expand the Launcher with apps, commands, and scriptsb0f72beMove four bundled OmniShell styles over the menu bard114c71Merge pull request #1013: preserve native menu below full-width barsaaf1b4cKeep the Welcome window open while its Settings links are used15b06c8Add a Welcome window for first launchba1adbcfix(bar): preserve native menu below full-width barse7fc23eUpdate SwiftFormat to 0.64.4cb9a159Add foot as a Quake terminal provider244f528Bound shell file observation to content directories2698f96Merge pull request #1005: fix shell settings hot reload after directory symlink retargets2d56355Merge pull request #1006: prevent settings from exhausting file descriptors95f1542Merge pull request #977: don't identify a sole Hidden Bar item by its tooltipf423deaMerge pull request #1010: check shared library option declarationsde93f47Merge pull request #1003: run the Kitty control tests in Tooling5fd53edMerge upstream main into the 0.8.0 work51d2b26Document OmniShell consent and program trust7dc9f34Ask before OmniShell widgets connect or programs runfb183d4test(shell): audit shared library option declarations321f5eaWatch unselected profiles while recovering shell configurationaf7718dRequire trust for shell programs and control built-in network access0d4a71eKeep shell watches current after failed or unchanged reloads385bdd5Bound shell directory observation file descriptors2874113Merge branch 'main' into codex/launcher-apps-commands-scripts35e0790Merge branch 'main' into fix/indrive-org-link748e5e7Merge pull request #988 from dappermint/feat/spatial-camera-overview1ea70dcRequire consent for OmniShell widget network accessdbc1025fix(overview): cap the raw gesture scale so it stays finite4305dcbMerge branch 'main' into codex/launcher-apps-commands-scriptsb5364f4Merge branch 'main' into fix/hidden-bar-tooltip-identity0cd51e2Merge branch 'main' into feat/spatial-camera-overview3e05419fix(launcher): fix the four issues from the #997 review8c7a3ddfix(launcher): harden shell fallback, CLI scan perf, config decode, UI crash4675b28Fix shell settings reloads after directory symlink retargets50f66f6ci: run Kitty control tests in tooling checksfff8665Update the embedded Ghostty to 1.3.2-main+9ee02ae6a62c2bdfix(overview): floor gesture scale and correct rubber-band docsbf2fe72Merge branch 'main' into feat/spatial-camera-overview99a22d8feat(overview): design camera-based spatial overview and add viewport model62e0477Extend Launcher with saved entries and CLI tools02b2b04fix(hidden-bar): keep tooltips for apps with several itemscd939bbfix(hidden-bar): stop using an item's tooltip as its identity
- Commit:
-
π anthropics/claude-code v2.1.314 release
What's changed
- Added
permissions.blockWritesOutsideWorkingDirectories: Write, Edit and NotebookEdit refuse paths outside the working directories in every permission mode - Added an optional
groupslist to Claude apps gateway upstreams: only developers in the listed IdP groups are sent to that upstream, on failover too - Added
guardrail_traceto Claude apps gateway Bedrock upstreams, to log which Amazon Bedrock guardrail filter fired on a request, without the matched text - Added idle compaction to VS Code and Claude Desktop's Code tab: a 200K+ token conversation left idle is summarized, and the summary is used on your next message if the prompt cache has expired
- Fixed sessions failing turn after turn with "Invalid effort level" when an organization's admin caps a model's effort: Claude Code now lowers the effort, retries, and says which level it uses
- Fixed
claude -pexiting with code 0 and no output when startup failed; it now prints the error and exits 1 - Fixed Bedrock sessions with many images failing every turn and
/compactwith "400 Input is too long." instead of removing older images and compacting - Fixed Microsoft Foundry sessions failing when the resource has no deployment for the default Sonnet, Opus or Haiku model: Claude Code now falls back to an older model of that family
- Fixed repeated refused requests behind a gateway that doesn't accept tool search's
tool_referenceblocks: the request is sent again once without tool search, and the session remembers - Fixed TLS connections failing with
UNABLE_TO_GET_ISSUER_CERTwhen the system certificate store holds a renewed root certificate that is cross-signed with its predecessor - Fixed MCP servers that also work without sign-in showing "needs authentication" after their stored sign-in stopped working; they are now used signed out
- Fixed
claude mcp logoutreporting success when the MCP sign-in was not removed, for example while the macOS keychain is locked over SSH - Fixed extra sign-in renewals when several sessions share an Anthropic profile login and the credentials lock is busy
- Fixed
claude ultrareviewandclaude remote-controlasking the workspace trust question in a CI job that has a terminal; withCIset they now refuse an untrusted folder at once - Fixed an administrator's TLS trust settings in managed settings not being applied in Claude Desktop sessions
- Fixed model switching being refused on machines with managed plugin settings when one of your own
--plugin-diror--plugin-urlplugins had a broken manifest or failed to download - Fixed the Bedrock and Vertex model upgrade offer coming back at every start when managed settings pin the model
- Fixed
forceRemoteSettingsRefreshset only in remote managed settings no longer applying once the stored copy had expired, which let sessions start without policy when the server could not be reached - Fixed "Continue automatically at usage limit" continuing more than three times without a prompt from you when a task restarted itself between waits (a /goal check-in, a background or scheduled task)
- Fixed background and cloud sessions started with Ultracode turning it back on at their next start after it had been switched off
- Fixed the last broken reply and its retry prompts staying in the conversation after Claude gave up on a tool call that could not be parsed
- Fixed a PreCompact hook with very large output making compaction fail or repeat; each hook's output is now cut at 10,000 characters
- Fixed background diff refreshes briefly taking the repository's index lock, which could make a git command run at the same moment fail with "Unable to create '.git/index.lock': File exists"
- Fixed markdown tables jumping between grid and stacked layouts on half-typed rows while streaming, and long tables falling back to raw pipes
- Fixed the /resume picker showing the text of CLAUDE.md or CLAUDE.local.md as a session's title when the session only ran slash commands
- Fixed
/btwanswering from the main conversation when asked from a subagent's open transcript - Fixed pasting an image over SSH to a Linux machine doing nothing silently; the prompt now says to copy the file over and paste its path
- Fixed
claude remote-controlsessions that failed to start when the session service was slow for a moment: the worker's registration is now retried with growing waits - Fixed model switches over Remote Control that take over 8 seconds getting a "still pending" error instead of the final result
- Fixed the
sandbox.excludedCommandssetting description saying listed commands always run outside the sandbox; it now says every command in a call must match an entry - Fixed shell and MCP calls that auto mode, a deny rule or a PreToolUse hook blocked, or that otherwise did not run, reading as if they ran in a collapsed tool group
- Fixed sandbox protections not applying to a worktree entered by
claude -p --resumeor--continue - Fixed hooks matching Bash not running on shell commands started by the Monitor tool; such hooks can block or ask, but not approve or rewrite those commands
- Fixed a settings file excluded with
--setting-sourcesstill supplying some settings, such as auto mode rules and saved permission consents - Fixed auto mode reporting a call as blocked, and listing it in
/permissions, when its safety check gave no verdict - Fixed a Claude apps gateway Vertex upstream hanging for minutes when a Google token endpoint accepts the connection and never answers
- Fixed the Claude apps gateway's start-up warning for a deprecated Claude Desktop key that it still serves as written saying "stops being accepted" after the key's end date
- Fixed
/upgradeopening the browser and starting a new login for plans billed through the App Store or Google Play; it now says where to change the plan - Fixed
--resume, and rewinding past a switch to another model after a refusal, moving a session on a model name Claude Code doesn't recognize to a different model - Fixed requests failing when a gateway or cloud provider refuses one of Claude Code's beta headers by name: the request is sent again without it
- Fixed model IDs spelled with a dot behind an LLM gateway, such as
claude-opus-4.8, being treated as an older model with the wrong context window, output limit, effort, thinking mode and cost - Fixed Remote Control clients showing a stray "Compacted (ctrl+o to see full summary)" row after /compact
- Fixed the cloud sessions tip and the Remote Control idle notice showing when an organization's policy turns those features off
- Fixed a resumed claude.ai cloud session making a model call nobody asked for when the previous worker stopped just after receiving a new chat's files
- Fixed WebFetch in Cowork cloud sessions silently dropping a PDF's text past 100,000 characters; it now says how much was unread and where to read on
- Fixed Claude being told only that a command was declined after you stopped it with Esc or Stop in a cloud session or the IDE; it now also hears that the command may have run
- Fixed blank lines at the top of a code block disappearing when the code block opens a quote
- Fixed a blank line appearing above some
βΏrows in the transcript view (Ctrl+O) - Fixed vim mode
dw,dW,ywandyWcarrying on past the end of the line, and madewandWstop on empty lines - Fixed x and Enter in the agent panel sometimes acting on the wrong agent when another agent started or finished
- Fixed pasted text and dragged-in files being lost in Claude's question dialog unless the "Other" row had focus
- Fixed pasted text being lost when a row in the prompt footer was selected
- Fixed vim mode
pover a character selection ignoring whether the yanked text was whole lines - Fixed vim mode
awandiwtaking the line break at the end of a line - Fixed β selecting footer items hidden by the ? help menu, the command list or a paste hint
- Fixed Esc on a command's panel, such as
/btw, also interrupting the subagent whose transcript is open - Fixed the welcome header in fullscreen mode showing the session's model while viewing a subagent or teammate that runs on a different model
- Fixed the fullscreen transcript being left mid-conversation after "Restore conversation" in the rewind menu while scrolled up
- Fixed a rare case where a deleted session could reappear in the resume list as an almost empty entry
- Fixed prompts containing tags such as
<bash-stdout>or<local-command-stdout>not being acknowledged to a local stream-json host - Fixed sessions staying untitled when the first prompt failed (for example on a usage limit) and the conversation continued afterward
- Fixed the skill file watcher checking every removed skill kept in
~/.claude/skills/.trash, which added file system load that grew with each removal - Fixed the session name from /rename disappearing while Claude asks for permission or a plan decision, so side-by-side sessions stay identifiable
- Fixed background sessions that fail to start being reported as a deleted daemon binary when the binary is still on disk
- Fixed the tip and idle reminder about push notifications appearing when the push settings in
/configare hidden or your organization has turned off Remote Control - Fixed
~/.claude/skills/.trashand~/.claude/plugins/.trashgrowing without limit: each now holds about 1024 entries, whatevercleanupPeriodDayssays - Fixed the Bash edit diff listing a whole file as changed when a CRLF file under git's line-ending conversion was re-saved unchanged or had one line edited
- Self-hosted runner: Fixed an idle session moving to another runner instead of pausing when the runner's request to pause it lost its connection before Anthropic answered
- Improved memory use in long headless and SDK turns that run many subagents: the parent session no longer keeps each subagent's tool results until the turn ends
- Improved prompt history: Ctrl+R now matches text inside collapsed
[Pasted text]pills - Improved the
/design-syncupload prompt to show the folder, the project and the files it will upload or delete - Improved
/permissionsreview tab, now called Recently blocked: the footer says what Esc will do with marked rows - Improved auto mode's blocked calls: messages name the command, say Claude may retry and auto mode checks again, and point to
/permissionsto review - Improved permission prompts: a long reason takes fewer rows, so it pushes the command being approved off the screen on fewer terminals
- Improved the cloud session error shown while a request refused for your claude.ai login is still being retried: it now also suggests
claude auth login - Improved the behavior of stored claude.ai, Team, and Enterprise logins when MDM and remote settings differ on base URL or
apiKeyHelper - Improved
/configin agent view to say how to stop agent view opening by default - Improved session auto-titles: a session that starts with a skill or a prompt-based command such as
/security-reviewnow gets a title from it instead of staying untitled - Improved
--resumespeed and memory use on damaged transcripts - Improved
/contextspeed in sessions with ten thousand or more MCP tools - Self-hosted runner: Improved the error shown when a session's branch isn't on the git remote: it now covers a never-pushed branch, says how to fix each case, and no longer suggests retrying
- Updated the
/claude-apiskill: its Datadog setup for API tracing now sends thedd-llmobs-enabled: trueheader, as the Console does, and itsantinstall instructions drop the outdated macOSxattrstep - Updated the bundled dataviz skill to advise printing y-axis tick labels in full under 10,000, and horizontal ones in full under a million where they fit
- Updated the bundled dataviz skill to answer donut and pie chart requests with ranked bars or a segmented bar that prints its values
- Changed Claude's file tools to ask before editing the local copy of your organization's server-managed settings, as they do for your settings files
- Changed
/ultrareviewto check workspace trust before it runs git, asclaude ultrareviewdoes - Changed the Bash tool's shell to clear any inherited
whichalias or function and to stop passing exportedwhich/unsetenvfunctions to commands, sowhichis the system command or zsh builtin - Changed
/permissionsRecently blocked to refuse approving a call you can't read in full, including one the terminal is too short to show - Changed auto mode in Cowork cloud sessions: a hook's allow of an MCP tool call now counts as no answer, so the classifier or a permission prompt decides
- Changed hook
ifconditions such asMonitor(tail *)to match the Monitor tool's shell commands asBash(tail *)matches Bash's - Changed the
claude-apiskill to ask to read a Managed Agents workflow run's workflow before changing the agent to improve that run - Changed flagged requests to retry on another model, not end in a refusal, when
ANTHROPIC_DEFAULT_OPUS_MODEL,availableModelsordeniedModelsleaves only an older Opus model, or none - Changed idle compaction to also run for subscribers with telemetry turned off, and on Bedrock, Vertex, Foundry and LLM gateways once the one-hour prompt cache is on
- Changed
FORCE_HYPERLINK=false(alsonoandoff) to turn hyperlinks off instead of on - macOS: Changed
git grepin most commands that Claude runs to use the C locale, to avoid a reported memory leak in macOS's regex library on files that aren't valid UTF-8 - [VSCode] Fixed "Clear authentication" for MCP servers reporting success when the saved sign-in could not be removed
- [VSCode] Fixed missing spinner and Stop button while a queued message's hooks run
- [VSCode] Fixed session group changes that cannot be saved, such as a delete, failing silently; an error notification now appears
- [VSCode] Fixed Cmd+F / Ctrl+F not opening the find widget in the plan preview tab
- [VSCode] Fixed the voice dictation shortcut (Ctrl+D) doing nothing under non-Latin keyboard layouts such as Russian, Greek or Hebrew
- [VSCode] Fixed missed one-time saved scheduled tasks being deleted without asking when the extension opened without a chat
- [VSCode] Changed
CLAUDE_CODE_DISABLE_CFC_PROMPTto also stop the extension adding the Claude in Chrome instructions to a session's messages; the browser tools stay available - [Cloud sessions] Added an Include completed button to the Scheduled tasks page when finished one-off tasks are the only ones hidden, so you can show them without opening the Sort menu
- [Cloud sessions] Fixed recently used self-hosted environments never appearing among the recent environments on the new session card
- [Cloud sessions] Fixed cloud sessions reporting uncommitted changes every turn after Claude moved a branch to a commit it had pushed from another worktree
- [Cloud sessions] Fixed the self-hosted environment details dialog in admin settings squeezing its content out of view in very short windows or at high zoom; the dialog now scrolls
- [Cloud sessions] Fixed the permission mode picker staying on Auto after a running cloud or Remote Control session refused the switch; it now shows the mode in use and tells you
- [Cloud sessions] Improved scheduled tasks: runs in Anthropic's cloud now load the plugins enabled on your claude.ai account
- [Cloud sessions] Improved Test connection for GitHub Enterprise in admin settings to also connect the way cloud sessions do, and to warn you when that second test fails
- [Cloud sessions] Improved cloud session transcripts: a rename row now names the new title, and repository and environment lists show as a table instead of one line of JSON
- [Cloud sessions] Changed cloud sessions from the web, desktop and mobile apps to start even when a setup script exits with an error, instead of failing to start
- [Remote Control] Fixed the permission mode button in Remote Control sessions showing the wrong mode until you typed; while your computer is online it now shows the real mode on open
- [Claude Tag] Added a dismissible link to the Claude Tag API docs on the Bundles and Channels tabs in admin settings, for Enterprise organizations with Slack connected
- [Claude Tag] Fixed
@Claude !restartgiving up after one failed workspace check in channels shared across Enterprise Grid workspaces; it now retries, then asks you to run it again - [Claude Tag] Fixed a second confirmation DM and channel note when you connect your Claude account from Slack twice from the same link within a few minutes
- [Claude Tag] Fixed follow-up messages in Slack showing no sign of progress while Claude's session waits for a self-hosted runner; Claude now posts a wait notice in the thread
- [Claude Tag] Fixed Claude sometimes not answering a tag in its own thread in Slack Connect channels where both organizations have installed Claude
- [Claude Tag] Fixed Retry on plugin and skill pages in Claude Tag admin settings discarding unsaved access changes after a failed load; your edits now stay in place
- [Claude Tag] Fixed the repositories control in Claude Tag admin settings showing the same action twice; its menu now lists only what the button doesn't already do
- Added
-
π Filip Filmar filmil's Auto Reload: a tab reloader with two permissions rss
filmil’s Auto Reload is a Chrome extension that reloads a tab every few seconds, minutes or hours, and can do nothing else. It asks for two permissions, shows no warning when you install it, and cannot read the pages it reloads. This post explains why I wrote one more reload extension, how it counts down on its icon, and how a release goes from a commit to the Chrome Web Store without anyone typing a password.
-
π New Music Releases Queens of the Stone Age - Perfecth rss
Queens of the Stone Age - a new release is available:
- 2026-10-30: Perfecth (Album)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π New Music Releases Northlane - Anemoia rss
Northlane - a new release is available:
- 2026-10-30: Anemoia (Album)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π Baby Steps 'Trust but verify'; or, 'the correctness ratchet' rss
The name of the game in agentic development is figuring out how to clearly tell agents what you want- and then how to be sure they follow through. Lately I've been tinkering with an interesting technique around this that I'd like to share.1 I call it "trust but verify"2.
The basic idea is that sometimes you have things you want to "verify" but they can't really be mechanistically checked. In that case, you let your agent do its best. But you also have it create an evidence file that contains the inputs it drew on to make that decision along with its rationale. Then you gate your CI on checking that these evidence files exist and that the inputs are accurate. Those checks are deterministic and cheap. The rationale itself is natural language and can't be checked.
Doing this "trust but verify" technique on its own is helpful. It creates a kind of hill-climbing towards correctness that is stronger than (e.g.) tests alone. It helps to check meta-reasoning like "is the set of tests sufficient to show this requirement is true". Documenting the input also means that if any input should change, the CI check will start to fail, and the agent will be forced to revalidate its reasoning.
What I find most interesting though is that "trust but verify" can be used to create a kind of correctness ratchet over time. The idea is that, now that the inputs + rationale are documented, you can have other agents come back and double-check that reasoning, even when the inputs have not otherwise changed. As agents naturally improve, or just due to the randomness inherent in how agents work, they will naturally find things the original rationale overlooked, and you'll be able to address them.
When you say "hill climbing towards correctness", what do you mean by
"hill-climbing"?
Agents are none too smart, but they can be awfully dogged and persistent. If you ask them to climb a hill, they are going to find a way to do it. The tricky bit of course is that they don't always climb that hill in the way you intended. Also, they may not exactly climb it so much as find a route to the top: they may be persistent, but they are also lazy f!@#kers4, and they love to take shortcuts.
What if the hills are propositions about your program?
The fact that agents are good at climbing hills has got a lot of people in the automated reasoning community5 very excited. After all, what better way could there be to make sure your program does what you expect than to formally prove that it is true? And we've seen that when you set a model loose with a Lean theorem, it can be quite adept at proving things6.
But there are a few caveatsβ¦
Myself, I'm quite excited about tools like Lean but also Verus, Aeneas, and Creusot. I think we're going to be using them a lot more. And yet, I also think that proving propositions is not the end of the story.
Who writes those propositions?
Let's start with the obvious problem. An agent may be good at proving a proposition, but who is actually writing it? Even when something can be formalized, doing that formalization is a fair bit of work. Consider this random example of a requirement from a project I am working on7:
A Fleet using Functionality A must be attributed to every Functionality reachable through any number of recorded deprecation steps, while being counted only once when routes converge.
This is part of a project that is analyzing fleets across Amazon and looking at how much DRAM they consume. Our goal is to make sure that every large fleet at Amazon has Rust versions of every library it would need to be rewritten into Rust. We want to be able to go to the maintainers of those libraries and say, "there are fleets accounting for X% of Amazon's total DRAM consumption that use your library; you should make a Rust version".
The point is, while the concept of this DRAM accounting is not complex, formulating it in a precise, mathematical way is not at all trivial. You have to have some notion of transitive closure, talk about the graph of dependencies, etc. There is no way that the lazy, spoiled programmers of the future are going to write a formula like that by hand.
Much more likely is that they are going to give high-level direction to the agent and ask it to connect the dots. After all, this is what agents are good for! And in this case, I would trust an agent to get it right. As I said, it's not really complex , just⦠tedious.
Can they say what you want?
And of course this leaves aside that there are many things that are just plain hard to formalize. Consider a requirement like, "a warning must be displayed on every relevant form in a prominent fashion". Checking this requirement requires a notion of what is "prominent", which is unlikely to be a mathematical property one can write down. And while I would not trust an agent's judgment over an actual graphic designer, it is also the kind of thing where the agent can likely do a "good enough" job to catch many failures.
And what does it cost to do the proof?
The other point is that while agents are good at authoring proofs, it still takes them tokens - and more importantly, time - to do it. And sometimes quite a bit. If developers have to wait a while for the agent to find a proof to a complex property, that better be worth it. If the property you are proving is key to your system, it probably is. But if the cost of a mistake is less than the cost of a proof, people won't bother, so it's worth thinking about leaner, easier ways to gain confidence.
And what about when you are iterating?
One final point is that applying too much rigor too early in the process can be a real problem. This one is tricky because rigor can surface problems earlier, too. But it's often helpful to start by defining your requirements and things at a higher level and gradually get more precise as you go, tolerating a bit of "looseness" early on when you know there are details you have to nail down, but it's not important to do so yet.8
A key point for me is that just because you haven't formalized your requirement all the way to a mathematical proposition doesn't mean that you've got nothing at all. You can often phrase a high-level version of what you want, perhaps one that is overly simplified. In fact, it's pretty useful to do so, because when you find that your rule doesn't quite work, that helps you figure out how to refine it into the more precise rule you actually want.
Evidence and "trust but verify"
The key idea of the "trust but verify" technique is that leaning on agentic reasoning is good, fine actually. But when you do so, you should have the agent explain itself and also have it lay out what inputs and evidence it used to reach that conclusion. Basically, leave yourself a trail so that you (or another agentβ¦) can come back and audit what decisions were reached and on what basis.
Following this approach helps in two ways:
- In the short term, it forces the agent to at least acknowledge your requirement, which generally means they will do a better job at meeting it.
- In the long term, it lets you go back and double-check the agent's reasoning, leading to a kind of "correctness ratchet" in which you are generally improving the alignment of "what you have" with "what you asked for".
One example: Habeas Codicem
Probably the simplest example of this "trust but verify" technique is Habeas Codicem. This is a small project I made in part as an experiment. The idea is that you write requirements into your docs and then Habeas Codicem adds a test into your system that can only be passed if an agent has written an explanation of why each of those requirements is satisfied. Those explanations are recorded as evidence files that are committed into your repository along with the code.
The interesting bit about Habeas Codicem is that the evidence files contain not only the agent's rationale and judgement, but also a list of the inputs it used to reach that conclusion. And these inputs have to have certain contents. For example, if you have a function that is labeled as part of the requirement's implementation, or a test that is tied to a requirement, then the agent must include that function or that test in its evidence.
The final part of Habeas is some skills that instruct the agent to always check with you, the human, before editing requirements, and to confirm agreement on requirements before implementing.
Another example: an internal data store
Early in the post I mentioned an internal project I am working on at Amazon to analyze which missing dependencies might block fleets from migrating to Rust. This system involves a lot of agent-driven investigation. For example, perhaps there is a Rust version of a Java library, but it only handles some of the features (this is pretty common). Then we need to know whether the fleet's code cares about those features that aren't included.
My early attempts at gathering this data were pretty crude. I basically just sat there telling Amazon Quick "try harder, make no mistakes". Not great. I didn't really trust the result.
My newer attempts are much more thorough. I ask the agents to produce an evidence record of what data points they looked at and to include a written rationale for how those data points connect. I then test that the data points hold. For example, to determine if the method
convertDatain some library is called, the agent might register specific lines from.javafiles showing a call likevalue.convertData(). Or it might show the results from a grep that show no matches forconvertData.The interesting bit is that while the rationale from the agent can't really be evaluated in an automated fashion, the evidence can be. So before we accept any agent-created conclusion, we run a deterministic checker that ensures the evidence is valid (those lines really do appear where the agent said they would) and then records a receipt that the check was done. So the agent cannot just hallucinate evidence.
What we are asserting: the agent has done work
Habeas Codicem does not prove your code obeys its requirements; nor does my inventory system prove that a given Java feature is used. But it does prove that the agent actually considered the question enough to write out some evidence + a justification. And assuming your agent is not actively malicious, that's actually quite a bit.
One thing that we've seen is that agents often "lie" about what work they did. They'll claim to have carefully read through a document when an examination of their tool invocations shows that they've just looked at a few random bytes.
Tightening and revalidating rationale
One of the ideas I find most interesting in this space is the idea of revalidating rationale. Now that we have evidence files committed to git, we can absolutely have another adversarial agent that periodically pulls up those files and gives them another look. That agent can go looking for holes in the original logic and produce modified and improved proofs or counterexamples. I find this particularly compelling when you think about new and better models that might be more adept at finding holes.
Applying this idea to propositions
I think this technique suggests how we can begin to tackle the problem of converting "high-level requirements" into formal theorems. Instead of expecting humans to write and review logical formulae, we can ask an agent to do the conversion - and to record its thinking process (with verifiable evidence). Then we keep that evidence around and we periodically revisit it, looking for potential edge cases. We wind up with a kind of 'confidence score' - the more reviews that have approved a given "requirement->formula" translation, the more likely it is to be accurate.
The risk of ping-ponging and what it means
That said, I've not really put this into practice yet, and I anticipate it may be tricky to get it working right. People have told me to expect that agents may ping-pong a bit: for example, maybe one of them translates your plain English into logic, and then another says "that translation doesn't look right" and takes a new approach. But then yet another agent reverts that and goes back to the original. This seems very plausible- I suspect it can be resolved by adding enough history to recognize that it actually reflects ambiguity in your original statement, and to surface the problem up to you.
-
I do not claim this technique is novel. I am quite sure people have been doing variants of it forever. But it's novel to me, and I don't think I've heard people talk about some of the potential long-term implications around "the correctness ratchet". β©οΈ
-
I know this phrase from Reagan, of course, but when I started reading into its background I found it had a more interesting history than I expected. Apparently it is a Russian proverb and was suggested to Reagan as a way to communicate with Gorbachev in familiar idioms. As with "less is more", it's always had that delightfully contradictory feeling ("if you have to verify, are you really trusting?") - and at least the way I interpret it, it's really more like "trust through verification". In other words, I know I can trust you because we've set up the means for me to verify your logic. β©οΈ
-
I had written, "I don't usually curse at computers", but my daughter (reading over my shoulder) told me, " That is not true, you curse at computers all the time". And she's right! But I realized that it feels different. When I am using some restaurant website that seems purposefully designed not to tell me their opening hours or show me a menu, I certainly say " oh f!@#k you!", but in that case, I am actually cursing at the person who designed that website. I am not cursing at the website itself ; it's just an inert vessel. In contrast, when I curse at a model, I am not cursing at the people who trained it. I am cursing at the dang model, because it just seems to be going out of its way to be annoying. Anthropomorphizing is a pain. β©οΈ
-
God, agents have gotten me so frustrated lately. I'm not usually prone to cursing when sober3 but more than once lately I've found myself typing, " I have no idea what the f!#! you are talking about". This seems to happen slightly more often with Claude than GPT. Claude really likes to develop a kind of cryptophasic shorthand where it drops random words that I used 3 weeks ago as if that will mean anything to me now. "You still have to handle the first-cut case!" β©οΈ
-
Automated reasoning is the same thing as formal methods , just more appealingly branded. As an aside, lately I've been hearing people talk about Neurosymbolic AI , which I believe is a shameless (and brilliant) way for your SAT solver to jump on the LLM hype train. I suppose it's also a reasonable way to push back against "AI scope creep". While I'm on the topic: it seems to me that John McCarthy's quip (" as soon as it works, no one calls it AI anymore") has been proven false. I would rather people stopped saying "AI" and just said "LLM", but nobody really cares what I want, do they? β©οΈ
-
I did not actually write this text, of course, an agent did. It's pretty convoluted. Sigh. β©οΈ
-
This feels reminiscent of Terry Tao's classic post outlining how an experienced mathematician leans on instinct informed by rigor rather than just one or just the other. β©οΈ
-
- October 29, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-10-29 rss
IDA Plugin Updates on 2026-10-29
New Releases:
Activity:
- dial
- ida-hcli
- oh-my-pi
- eabd6354: fix(session): freeze the inject prompt on a delivered turn, not on meβ¦
- 2b9841ca: feat(slash-commands): make /inject additive and cache-safe after the β¦
- eb1d80eb: docs(fork): document prompt viewer segmentation and its invariants
- 703344f0: feat(tui): split prompt viewer blocks into structural segments
- 915e04f7: docs(fork): record patch 44 and move the upgrade chronicle into docs/β¦
- 1258e33f: fix(tui): align prompt viewer tool tokens with /context, show tool deβ¦
- 57e34ab7: fix(cli): expose System Prompt Viewer under -lightweight too
- 42683b62: feat(tui): read-only System Prompt Viewer (/prompt, alt+s)
- plugin-ida
- 2617c487: fix: prevent startup crash with Python 3.12 (#33)
-
π backnotprop/plannotator v0.28.38 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.37 | DeepSeek Harness support, save plans to Notion, AsciiDoc in annotate, browse the whole repository in code review, Go to File and Go to Definition, Tidy and hand-offs in the Inbox
v0.28.36 | Qwen Code support, plans open in the Clean look, live HTML and diagrams in Inbox messages, a Feedback button,plannotator inbox status,stopandrestart
v0.28.35 | Updates check the download against checksums Plannotator fetches itself, a failed check changes nothing
v0.28.34 | Start a Grok Build session from the Inbox, action items in your reply, a tidier Board, Settings β Capabilities, a failed feedback send is shown
v0.28.33 | Pi updates no longer get stuck on 0.28.31
v0.28.32 | A security update (built on Bun 1.4.4, eMudhra certificates), the Inbox Board, custom Inbox prompts, hover cards for issue and PR links, rich-text Copy
v0.28.31 | An onboarding tour for the Inbox, pinned threads, picture choices in questions, palettes in Inbox Settings, tailnet reviews from the plugin tool
v0.28.30 | An Artifacts view in the Inbox, comments on part of an image, diagrams in code review, Ask AI keeps its conversation in annotate
v0.28.29 | Plan review opens on OpenCode 2, a DOMPurify security update, closing a review stops the agent everywhere
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 refreshWhat's New in v0.28.38
Attach files to a reply in the Inbox, swipe through a question's picture choices, and easier-to-read list rows. In code review, Call Flow and Semantic Changes show the code when you hover. 17 PRs, 3 of them from 3 community contributors.
Plannotator Inbox
Attach files to a reply
The reply box has a paperclip for files of any type. You can also drop files on the reply box, or anywhere on the thread to open the reply with them. A saved draft keeps only its words, not its files.
Swipe through a question's picture choices
In full screen, a question's picture choices are a set of their own, in order from A to the last choice. A caption names each choice, with a dot per choice. On a phone the picture follows your finger, and a swipe down closes it.
Easier-to-read list rows
The subject is on the second line, with the agents, the β badge and the open question count at its right end. In a wide list these sit in columns that line up down the list.
Smaller changes
- The What's new link now shows within about 15 minutes of a release's notes being written, instead of a day later. #2337
- A sent reply no longer comes back as a draft. #2334
- Heading links in a Markdown attachment scroll to the heading. By @utpalsinghdev. #2316, closing #2229
- Search is in the list header when the sidebar is closed, next to New message. #2330
- The skills line under your reply is one quiet line of skill names, with nothing to open. #2333
- Text between two
$skillnames no longer shows as math, in the Inbox, plan review and annotate. #2331
Plannotator
See the code on hover in Call Flow and Semantic Changes
In code review, hover or focus a step's
file:linein Call Flow, or a row in Semantic Changes, and a window shows that code as it is in the review. Deleted code shows from the old file. The same window in plan review and annotate no longer runs off the right edge of the screen. By @dmmulroy.Smaller changes
- Plan history and the feedback archive now agree on a long project name cut after a hyphen. Plans being revised during the upgrade restart at v1 once (long names cut after a hyphen). By @zerone0x. #2332, closing #2306
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 npm:@plannotator/pi-extensionOpenCode: Re-run the install script above. It also clears the OpenCode 2 plugin cache.
What's Changed
- feat(inbox): swipe a question's picture choices as a set; the image follows the finger by @backnotprop in #2315
- fix: scroll to headings in Inbox Markdown attachments by @utpalsinghdev in #2316
- chore(ui): publish prep 0.54.0 by @backnotprop in #2318
- feat(ui): HtmlViewer sandbox prop for hosts by @backnotprop in #2319
- test(e2e): never reach a real Codex CLI from the Inbox decision-mode spec by @backnotprop in #2267
- chore(ui): KaTeX 0.19 by @backnotprop in #2320
- chore(ui): publish prep 0.55.0 by @backnotprop in #2329
- Inbox: Search in the list header when the sidebar is closed by @backnotprop in #2330
- fix(ui): text between two $skill references no longer renders as math by @backnotprop in #2331
- fix(core): make sanitizeTag idempotent when the 30-char cut lands after a hyphen by @zerone0x in #2332
- Inbox: a sent reply no longer comes back as a draft by @backnotprop in #2334
- feat(review): source previews on hover in Call Flow and Semantic Changes by @dmmulroy in #2322
- Inbox: list rows put the subject on line 2 with agents and counts at its right end by @backnotprop in #2321
- Inbox: quieter skills line on your replies by @backnotprop in #2333
- Inbox: attach files to a thread reply (paperclip and drop) by @backnotprop in #2335
- spec: formal model of the update and What's new lifecycle (Quint + fast-check) by @backnotprop in #2338
- Inbox: show What's new when the release notes land after the Inbox asked (0.28.38) by @backnotprop in #2337
Community
- @dmmulroy: code previews on hover in Call Flow and Semantic Changes in #2322
- @zerone0x: one project name for plan history and the feedback archive in #2332
- @silopolis: reported in #2306 that plan history and the feedback archive filed one project under two names
- @utpalsinghdev: heading links in Inbox Markdown attachments in #2316
- @zane668: reported in #2229 that heading links in Inbox Markdown attachments did not scroll
Full Changelog :
v0.28.37...v0.28.38 -
π exe.dev Introducing execonnect: Access Private HTTP Services from exe.dev rss
execonnect is a way to let your exe.dev VMs connect to HTTP services, even if those services arenβt on the public internet. You run execonnect on the machine hosting the service (or on any machine that can access the service), and this establishes a link between your service and exe.dev. From that point on, you can configure integrations.
For example, at exe.dev, we run a Victoria Metrics service inside of our network. Iβm running
execonnectinside the VM, and thereβs a βvictoriaβ integration in exe, and I can access our metrics. I configured it as a team integration, so it works for all of my co-workers as well.
How does it work? Execonnect is a Go program with a userspace wireguard. On the exe.dev side, our anycast proxy network works as the other end of that wireguard tunnel. Execonnectβthe part which you may run in your own infrastructureβis open source, of course, so you can see what itβs doing.
-
π HexRaysSA/plugin-repository commits sync repo: +1 release rss
sync repo: +1 release ## New releases - [threatray](https://github.com/threatray/plugin-ida): 3.0.3 -
π MetaBrainz Picard 3.0.3 released rss
Picard 3.0.3 is a maintenance release for Picard 3.0 with fixes for reported issues and updated translations.
This release fixes a crash when switching color themes, a crash when loading a release from an ISRC lookup, metadata issues in the Album Pane when multiple files match a track, and problems saving tags to WAV files with invalid chunk sizes, along with several plugin, cover art, and sorting fixes.
It also brings a few small improvements, including Enter-key navigation in the scripting documentation search, better recording-match scoring to avoid false positives on gross track-length mismatches, and normalization of lowercase or unhyphenated ISRCs.The latest release is available for download on the Picard download page.
The detailed changes for this maintenance release are below. For an overview of the new features since Picard 2.13 please see our detailed release announcement for Picard 3.0.
Thanks a lot to everyone who gave feedback and reported issues.
Whatβs new?
Bugfixes
- [PICARD-3477] - Setup Wizard: Checkbox description text not fully shown
- [PICARD-3496] - "Grouping" tags cannot be deleted from MP3s
- [PICARD-3498] - Disabling plugin purges cover art provider configuration from
picard.ini - [PICARD-3499] - Reinstalling local in-place plugin and switching to git fails
- [PICARD-3509] - Crash when switching themes
- [PICARD-3510] - Newly added custom column renders with solid white background on tracks while built-in columns do not
- [PICARD-3511] - Right-pane artwork replacement silently fails to embed in FLAC files
- [PICARD-3513] - Blocking album task that is completed forever blocks UI operation
- [PICARD-3514] - Cover Art Archive "Exclude" types list does not override the "Include" list
- [PICARD-3515] - If many files for a given track are found and additional fields are enabled, metadata is wrong in the Album Pane
- [PICARD-3516] - Article-insensitive column sort is non-deterministic (
QCollatorSortKeylacks working equality) - [PICARD-3517] - Built-in player prevents file write access
- [PICARD-3518] - Cover art saved as external files ignores CAA "front" flag when naming files
- [PICARD-3519] - Picard unable to save metadata for WAVE files with data size not matching actual data
- [PICARD-3521] - Picard crashes when loading a release from ISRC lookup for files already matched to a track
- [PICARD-3527] - Track match indicator is inconsistent
- [PICARD-3528] - Uses alias sort name even if artist credits matches artist name
Improvements
- [PICARD-3526] -
format_isrcdoes not normalize lowercase or unhyphenated valid ISRCs - [PICARD-3507] - Scripting documentation function/tag search: Enter key to proceed to next match
- [PICARD-3508] - Gross track-length mismatch does not prevent a false-positive recording match on Lookup
Download
Picard 3.0.3 is available for download from the download page of the Picard website. For Windows 10 and 11 users installing from the Microsoft Store the update to Picard 3.0.3 is now available and can be installed from the Microsoft Store app. Linux users can get the latest Snap package. The Linux Flatpak package is maintained separately and will be updated soon.
Picard is free software and the source code is available on GitHub.
Get in touch
Please use the MetaBrainz community forums and the ticket system to give feedback, suggest new features or report bugs.
Acknowledgements
Code contributions by Laurent Monin, Philipp Wolfer and Shubham Prasad.
Translations were updated by "ApeKattQuest, MonkeyPython" (Norwegian BokmΓ₯l), pXF (Hungarian) and x150 (German). -
π backnotprop/plannotator v0.28.37 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.36 | Qwen Code support, plans open in the Clean look, live HTML and diagrams in Inbox messages, a Feedback button,plannotator inbox status,stopandrestart
v0.28.35 | Updates check the download against checksums Plannotator fetches itself, a failed check changes nothing
v0.28.34 | Start a Grok Build session from the Inbox, action items in your reply, a tidier Board, Settings β Capabilities, a failed feedback send is shown
v0.28.33 | Pi updates no longer get stuck on 0.28.31
v0.28.32 | A security update (built on Bun 1.4.4, eMudhra certificates), the Inbox Board, custom Inbox prompts, hover cards for issue and PR links, rich-text Copy
v0.28.31 | An onboarding tour for the Inbox, pinned threads, picture choices in questions, palettes in Inbox Settings, tailnet reviews from the plugin tool
v0.28.30 | An Artifacts view in the Inbox, comments on part of an image, diagrams in code review, Ask AI keeps its conversation in annotate
v0.28.29 | Plan review opens on OpenCode 2, a DOMPurify security update, closing a review stops the agent everywhere
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 pagesWhat's New in v0.28.37
DeepSeek Harness joins Plannotator, plans can be saved to Notion, and AsciiDoc files open in annotate. Code review can now browse and search the whole repository, with Go to File and Go to Definition. In the Inbox: Tidy, handing a thread to another agent, and copying a message or a thread. 42 PRs, 18 of them from 16 community contributors, 9 of them first-timers.
Plannotator Inbox
Tidy
Tidy , in the β― menu of the list and the Board, sends a short prompt to each live agent that may owe you something: an old open question, a Board card that has not moved, or a reply of yours it has not answered. Each agent tidies its own threads, and one with nothing to change sends nothing. You choose which agents to ask.
Ask, add or hand off a tagged agent
After you tag an agent in the reply box, a line under it says what Send does: Ask it (as before), Add it to the thread, or Hand off the thread to it. A hand-off has Undo.
Copy a message or a thread
Each message has a β― menu with Copy message, Copy link to message and Copy thread. The thread header and the list row menu copy the whole thread as Markdown, and a copied message ends with the names of its attached files.
One set of keyboard shortcuts
J and K now move between threads; Shift+J and Shift+K move between messages. F opens full screen,
?shows every key, and Settings β General β Keyboard turns single-key shortcuts off./plannotator-inboxteaches your agent the InboxThe command still opens the Inbox and shows its address. It now also gives your agent a short briefing on how to send you messages and questions there. With the Claude Code plugin, Pi and OpenCode 2, the briefing stays hidden and starts no turn. On OpenCode 2 it goes into the system prompt, so that session's prompt cache misses once.
Smaller changes
- The Inbox no longer starts Grok Build sessions. Old Grok Build threads still read as before, and a reply there waits until the session is back. A leftover
inboxRun.groksetting is ignored. #2308 - The agent's mark is back on the left in two-line and phone rows. #2309
- Images in a Markdown attachment now load when the file links them by a relative path. #2285, for #2228
- Qwen Code is named in wake lines, not "another agent". #2304
Plannotator
Browse the whole repository in code review
The file tree has a Changes | All files switch. All files lists every file at the revision under review and updates as files change on disk. Open any file in a tab, switch a changed file to Whole file , and comment on any line, even outside the diff.
Renamed: the diff choice "All files" is now "Every file" ("Every file (HEAD)" in Git), and the Diff line of exported feedback uses the new name.
Go to File and Go to Definition
βP (Ctrl+P) finds any file in the repository. F12 opens a definition in a tab, Shift+F12 lists references, and Back and Forward retrace your steps. The keys match VS Code and are listed in Settings β Shortcuts.
Explain a review agent's finding
A review agent's findings have an Explain button. Ask AI checks the finding against the code, explains it, and suggests a fix when it holds. By @leoreisdias.
DeepSeek Harness support
Plan review opens when a DeepSeek Harness (0.2.1-rc.2 or later) agent leaves plan mode. Add
@plannotator/dshfrom DSH's Plugins page, or rundsh plugin --profile <profile> add @plannotator/dsh./plannotator-review,/plannotator-annotateand/plannotator-lastwork in DSH too. By @Nyarlathoteppppp.Save plans to Notion
Notion joins Obsidian, Bear and Octarine as a place to save plans. Each save creates a page under a parent page you pick in Settings β Notion. Plannotator reads your token from
NOTION_TOKENand never stores it. By @franktronics.AsciiDoc files
plannotator annotateopens.adocand.asciidocfiles, and the folder browser and linked documents show them too. By @fabriziosestito.Jujutsu review defaults
Settings β Git is now Settings β Review, with separate defaults for Git and Jujutsu. A Jujutsu review can open on Current change, Line of work, Last change, Evolution diff or All files. By @graemefolk.
Link to a heading from a comment
Write
#and a heading's exact text in a comment, like#3.1 Scope, and it becomes a link that scrolls to that heading. A new opt-inplannotator-markupskill shows agents how to leave comments on a document you are annotating. By @centraldogma99.Pick the document's font
Settings β Display β Document font sets the font of plan review and annotate documents: a preset or any font on your computer. Code keeps its monospace font. By @ilja.
Faster page loads on a slow link
Plannotator now sends a small page first and loads the rest (syntax highlighting, diagrams, math, fonts) when it is needed. A remote session on a phone opens in seconds instead of minutes. By @giladbarnea.
Smaller changes
- Unsent code review comments survive in local Git reviews after edits, commits, refreshes and restarts. A comment whose lines changed shows as Outdated. By @oorestisime. #1645, closing #1590
- The top of the code review sidebar reads as one line, like
All changes since main, and each word opens its menu. The +/β counts are easier to read in every theme. #1998 - Behind a reverse proxy,
PLANNOTATOR_PUBLIC_URLsets the full address a remote session gives out, for Cloudflare Tunnel, nginx and the like. By @Whamp. #1266 - Keep Plannotator's cookies away from other local apps with
PLANNOTATOR_URL_HOST=plannotator.localhost(or"urlHost"inconfig.json). Nothing changes unless you set it. By @utpalsinghdev. #2188, closing #2184 --tailscalesays plainly when Tailscale Serve is off for your tailnet, with Tailscale's link to turn it on. #2303- OpenCode plugin sessions show in
plannotator sessions. By @TheRealAlexV. #1567 - The OpenCode 2 update command no longer fails with "Plugin is not configured". By @utpalsinghdev. #2277
- Annotate and review feedback starts a turn on an idle oh-my-pi instead of waiting. By @LoneExile. #1423
- Long file and folder names show in full on hover in the annotate file browser. By @MarwanBz. #2236, closing #2195
- The comment box no longer flickers while you type with an IME (Korean, Japanese, Chinese). By @wnduqrla. #2239
- VS Code extension 0.17.0 reads a Guided Review in one Guide tab, with hover, Go to Definition and Ask on selected lines. In its panel, a key the review uses no longer also runs VS Code's command. #2134, #2130, #1964
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 npm:@plannotator/pi-extensionOpenCode: Re-run the install script above. It also clears the OpenCode 2 plugin cache.
What's Changed
- Inbox: Ask, Add or Hand off from the reply box's tag line (A2) by @backnotprop in #2297
- fix: load local images in Inbox Markdown attachments by @utpalsinghdev in #2285
- fix(opencode): wait for plugins before the OpenCode 2 update command by @utpalsinghdev in #2277
- test(perf): add reproducible plan load benchmark by @corrius in #1198
- Add font and size controls to Annotate by @ilja in #1657
- fix(pi-extension): start a turn for annotate feedback on idle oh-my-pi by @LoneExile in #1423
- feat: support reverse-proxy public URLs by @Whamp in #1266
- feat(opencode-plugin): register embedded sessions for discovery by @TheRealAlexV in #1567
- Inbox: one keyboard system (phase 2) by @backnotprop in #2257
- test(pi): stop network test leaking PLANNOTATOR_BROWSER by @backnotprop in #2302
- fix(review): recover local Git drafts after diff changes by @oorestisime in #1645
- fix(inbox): name Qwen Code in wake lines by @backnotprop in #2304
- CI: fix a mislabeled pin, setup-node v7.1.0, no Renovate Ubuntu runner bumps by @backnotprop in #2300
- fix(ui): show full file-browser names on hover by @MarwanBz in #2236
- test: fix the top CI flakes (dictation paste, Mark read hang, Windows workspace timeout) by @backnotprop in #2301
- feat: add Notion notes integration by @franktronics in #1032
- test(e2e): stop the ref-cards-review code review flake by @backnotprop in #2307
- VS Code Guided Reviews: our guide reader in one tab by @backnotprop in #2134
- VS Code panel: forward only keys the review did not take (explorer step 0) by @backnotprop in #1964
- feat: add DeepSeek Harness (DSH) support by @Nyarlathoteppppp in #2158
- feat: add adoc support by @fabriziosestito in #1009
- fix(tailscale): say plainly when Tailscale Serve is off, with Tailscale's link by @backnotprop in #2303
- Inbox rows: agent mark back on the left of line 2 by @backnotprop in #2309
- fix: support isolated localhost preference cookies by @utpalsinghdev in #2188
- Code review: Changes | All files in the tree (explorer step 1) by @backnotprop in #1966
- CI: parallel Test lanes, sharded Inbox e2e, no duplicate tests in the Release dry run by @backnotprop in #2235
- chore(vscode): release 0.17.0 (Guided Reviews, Ask the agent) by @backnotprop in #2130
- ci: stop the guide viewer manifest from conflicting across PRs by @backnotprop in #2310
- Inbox: Tidy, from the list's and the Board's β― menu by @backnotprop in #2296
- Code review: any file in a tab, Changes | Whole file, comments on any line (explorer step 2) by @backnotprop in #1969
- feat(review): add Jujutsu review defaults by @graemefolk in #1500
- CI: fast tier on every push, heavy tier behind the ci:full label; Deploy on workflow_run by @backnotprop in #2313
- feat(inbox): copy a message, copy a thread by @backnotprop in #2312
- feat(review): explain agent-generated findings with Ask AI by @leoreisdias in #1181
- feat: link
#Headingsection references in annotation text, and a skill that uses them by @centraldogma99 in #1419 - fix(ui): stop the comment composer flickering while typing with an IME by @wnduqrla in #2239
- Code review: Go to File, Go to Definition / References into tabs, Back / Forward, next change (explorer step 3) by @backnotprop in #1976
- Inbox: remove the Grok Build runner until Launch agents settles its approach by @backnotprop in #2308
- /plannotator-inbox: brief the agent on using the Inbox by @backnotprop in #2311
- feat(inbox): name attached files at the end of a copied message by @backnotprop in #2314
- Code review: the sidebar's top reads as one sentence (approved review-sidebar-header) by @backnotprop in #1998
- perf(app): serve the lazy chunks from the single-file bundles instead of inlining them (12x improvement) by @giladbarnea in #1618
New Contributors
- @fabriziosestito made their first contribution in #1009
- @corrius made their first contribution in #1198
- @LoneExile made their first contribution in #1423
- @TheRealAlexV made their first contribution in #1567
- @ilja made their first contribution in #1657
- @Nyarlathoteppppp made their first contribution in #2158
- @MarwanBz made their first contribution in #2236
- @wnduqrla made their first contribution in #2239
- @giladbarnea made their first contribution in #1618
Community
- @Nyarlathoteppppp: DeepSeek Harness support in #2158
- @NourEldin-Osama: asked for DeepSeek Harness support in #1432
- @franktronics: the Notion integration in #1032
- @kurtextrem: asked for Notion in #434, with @ajsharma in the discussion
- @fabriziosestito: AsciiDoc support in #1009
- @leoreisdias: Explain on review agent findings in #1181
- @graemefolk: Jujutsu review defaults in #1500, on the provider refactor in #1499
- @centraldogma99: heading links in comments and the
plannotator-markupskill in #1419 - @ilja: the document font setting in #1657
- @oorestisime: draft recovery for local Git reviews in #1645
- @RobertoArtiles: reported in #1590 that unsent review comments were lost when the diff changed
- @Whamp:
PLANNOTATOR_PUBLIC_URLfor reverse proxies in #1266 - @utpalsinghdev: separate local cookies in #2188, the OpenCode 2 update command in #2277, and Inbox attachment images in #2285
- @PassionZale: reported in #2184 that Plannotator's cookies reached every app on localhost
- @zane668: reported in #2228 that images in Inbox Markdown attachments did not load
- @Duo-Huang: reported the
submit_planmissing-edits error in #2227, which #2277 now tests - @TheRealAlexV: OpenCode plugin sessions in
plannotator sessionsin #1567, part of #899 - @LoneExile: the idle oh-my-pi fix in #1423
- @MarwanBz: reported and fixed cut-off file names in #2195 and #2236
- @wnduqrla: the IME flicker fix in #2239
- @corrius: a repeatable plan load benchmark in #1198
- @ZBQtesla: reported the slow plan page load in #926, which that benchmark measures
- @giladbarnea: reported slow remote loads on a phone in #1617 and fixed them in #1618
Full Changelog :
v0.28.36...v0.28.37 - The Inbox no longer starts Grok Build sessions. Old Grok Build threads still read as before, and a reply there waits until the session is back. A leftover
-
π Console.dev newsletter Sponsor: WarpBuild rss
WarpBuild - AI agents push more commits. WarpBuild runs GitHub Actions twice as fast at half the cost.
-
π Console.dev newsletter Atuin Threads rss
Searchable agent session history.
What we like: Sync search history for your terminal agents alongside your regular terminal history. Resume sessions across machines (local, cloud, etc). End to end encrypted. Optionally self-host your own sync server. MCP server so agents can search old sessions.
What we dislike: CLI-only.
-
π Console.dev newsletter Namespace Devbox rss
Cloud dev environments.
What we like: Create cloud dev environments. Supports macOS, Windows, and Linux. Connect via SSH and through coding agents. Run persistent services and expose ports. Create custom base images and share settings across teams. Workspaces can be shared. SDK & MCP server so AI agents can manage their own environments.
What we dislike: Remote desktop only available on macOS devboxes.
-
π Console.dev newsletter Sponsor: Coresignal rss
Agentic B2B search for builders
-
π HexRaysSA/plugin-repository commits sync repo: +1 plugin, +3 releases rss
sync repo: +1 plugin, +3 releases ## New plugins - [yarmaker](https://github.com/cod3nym/yarmaker) (0.1.2, 0.1.1, 0.1.0) -
π HexRaysSA/plugin-repository commits Update known-repositories.txt rss
Update known-repositories.txt -
π matklad Avoid Public Functions Calling Other Public Functions rss
Avoid Public Functions Calling Other Public Functions
Oct 29, 2026
A small-scale rule of thumb. This article will land much better with a concrete example, but I am drawing a blank here, so you gotta just blindly trust my say so!
When implementing a software module, itβs often a case that you are writing a public function
foo, and at least part of whatfoodoes is already handled by another public functionbar. The DRY instinct encourages you to callbar()from withinfoo. This usually creates problems down the line. Instead, create a new private function and refactor bothfooandbarto call that shared helper:// BAD pub fn foo() void { return bar(.{ .frobnicate = true }); } pub fn bar(options: struct { frobnicate: bool = false, }) void { // ... } // GOOD pub fn foo() void { return helper(.frobnicate); } pub fn bar() void { return helper(.transmogrify); } fn helper(mode: enum { frobnicate, transmogrify }) void { // ... }Rationale: the goal of a public API is to provide an interface that works best at the call site. If parts of public API are re-used to implement the rest of the API, then thereβs a tension between making the interface convenient for the outside user and making it convenient to use from within abstraction itself. Namely, functions tend to grow optional parameters that should never be set by the user. Crucially, the parameter growth and interface degradation can happen after the original code sharing.
By proactively making the shared implementation private, the tension is defused. You still might need to tinker with
helpersignature until it does everything it needs to do, but, because the helper is private, this is a cheap, local change.A notable exception to this rule of thumb are βshortcutβ APIs, where a public function is defined as a commonly used chain of calls to other public functions. There, the rule is the opposite β no private calls are allowed, to make sure that it is a genuine shortcut, and not a midlayer mistake.
P.S. While researching if anyone wrote a better blog post already, I stumbled upon a fun stack overflow question, asking, paraphrasing:
Iβve heard that it is bad when a public function calls another public function. Is this really so?
The most upvoted answer explains that it is indeed bad, because this makes mocking to test a single method in isolation more complicated. Which is, imo, a natural, but horrible consequence of misguided approach to testing. You shouldnβt be mocking your methods, you should mock your IO. And, similarly, you shouldnβt test methods, but rather software functionality (unless you are building a public library with a stable API, which is a fun and important, but very narrow fraction of software development).
The accepted answer says that this recommendation makes no sense if it is not backed by an industry wide or an organizational standard. Which somehow manages to make even less sense β you shouldnβt follow the guideline rules because they are written in sanctified ink! Rather, you should apply each particular rule because of the underlying reasons that motivate the rule. Guidelines and best practices articles can concentrate lots of good reasoning in a single place, but they donβt absolve you from thinking!
-
π Filip Filmar UberDDR4 Under Bazel: An Open DDR4 Controller, Checked by One Command rss
UberDDR4 is an open-source DDR4 SDRAM controller and PHY for FPGAs, written by Angelo C. Jacobo. It connects a Wishbone master to DDR4 memory. It handles initialization, command timing, bank scheduling, refresh and PHY calibration. Its native PHY runs the memory at DDR4-2400 on a Kintex UltraScale+ part. The project is the successor to UberDDR3, and the NGI0 Commons Fund of NLnet paid for it.
The repository is unusually well verified for an open hardware project. It has Verilator lint, Icarus and Yosys compile checks, 34 SymbiYosys proofs, and 26 simulations against Micron’s DDR4 model. A shell script,
run_compile.sh, runs them in sequence. We converted all of it to Bazel, in a pull request on our fork. This article shows what that took and what it measured. -
π Kevin Lynagh LLM programming and theory building rss
LLM programming and theory building
Last newsletter I was unhappy with my Tasktron workflow harness: The explicit state machine and reified effect design worked , but it obscured the core workflow, the harness's raison d'Γͺtre.
I embarked on a rewrite, hoping to find a more concise and self-evident design based on durable effects (memoized steps) instead -- something that would let the code express the intended behavior directly ("Do X, then do Y, then Z") while being robust to crashes and transparently replayable.
However, multiple weeks of attempts with Astra 6, Opus 5.5, and the newly released Sol 6.1 brought me no closer to the improved design I felt certain could exist.
Despite my best efforts and instruction, I couldn't get the models to emit tight, concise code; instead, they kept:
- introducing new names/concepts that overlap substantially with existing ones
- reading/writing mutable state all over the place rather than consolidating it behind a few abstractions or at specific points in overall control flow
- adding new, overly-specific tests for every single change, rather than adding assertions or refactoring existing tests
This got me thinking about the two very different things I want from programming.
The first thing is, well, just a program -- something I run which does a straightforward task for me. Vibe-coding with LLMs has been great for these; I'm sure the models get up to all the nonsense I just mentioned, but it doesn't matter to me -- I'm not reading the code, I just want to dictate to my computer instead of typing, export from Photos.app, flash microcontrollers over the network, or a gazillion other things I haven't bothered to publish because it's hyper-specific software like mapping MIDI dials to my speaker volume and monitor brightness.
I imagine this is what most people want from LLMs (and computers more broadly): Just solve some problem without making me care about the details.
However, the second thing I want from programming is, just sometimes, to care about the details. I want a precise language and semantics to model something; to build up a theory.
Sure, that theory should be useful for solving the immediate problem -- but after that it's also useful for thinking new thoughts.
For example, after I gave up on coding agents and started writing/refactoring Tasktron myself, I realized that instead of thinking in terms of "Tasks" with "Subtasks" that each yield a commit, I could instead think of the system as managing units of "Work", each having a set of instructions, possible dependencies on other Work, and a target branch that it should be committed to.
Formalizing this new concept of Work enables both simpler core machinery (no need for it to distinguish tasks/subtasks) and an entirely new workflow -- in addition to the upfront-planning workflow where a Task is defined and then decomposed into subtasks, the harness could also support one-off bits of work. E.g., after reviewing a complex GUI, I could dispatch a few one-offs like "Adjust the background color here", "Move the popup over here", "Put this bit in a sidebar" and have the harness execute all of those in parallel on different worktrees and serialize the three resulting commits on a branch.
This concept and the additional functionality it unlocked isn't something I discovered in my week of prompting agents; it only came once I started digging in more myself.
That theories are useful, but can be built only with deliberate mental effort isn't exactly a new take; Peter Naur discussed Programming As Theory Building 40 years ago:
[P]rogramming properly should be regarded as an activity by which the programmers form or achieve a certain kind of insight, a theory, of the matters at hand. This suggestion is in contrast to what appears to be a more common notion, that programming should be regarded as a production of a program and certain other texts.
This isn't specific to programming either, of course. I don't know any music theory, but I can tell this guy Remaking Kids by MGMT to Learn Why It's So Good understands that banger of a song way more than I do and can explore musical ideas far beyond anything my plain English prompting could elicit from Suno.
Why is it hard to build theories with coding agents?
Since theories reside in our minds, it follows that we must be mentally engaged to build them.
But in my usage of coding agents so far, I've struggled to stay deeply engaged in the details. Prompting apps into existance is fun and exciting, sure, but my sense for how it all fits together is much duller.
So far, I've used coding agents in two broad approaches.
First, I've tried the "obvious" workflow: Ask the agent to generate code, read it myself, then ask for changes.
I find this isn't mentally engaging or invigorating, for two reasons:
-
Reading piles of agent-generated code is exhausting; there are nonsensical names, references to past instructions / removed code, poor information-hiding, etc. It's hard to decipher "what's going on here?". Furthermore, the latency when asking the agent to explain or revise can be on the order of 1-10 minutes per turn, which makes it hard to stay focused.
-
Worse, the code sometimes works ; you asked for a button that does X, then see for yourself that the new button does, in fact, do X. At this point, it's extremely tempting to start implementing the next feature and skip the mentally arduous theory building. (See: Once the Cheat Code Is There)
Second, I've tried "plan" workflows, both:
-
the ones in the Codex and Claude Code harnesses, where an agent asks you a few multiple choice questions, then generates a markdown plan of work to be done
-
my own Tasktron workflow, which supports a longer interactive planning conversation before generating a markdown plan
I found these to be a mixed bag: The markdown plan tends to be shorter than the code that's later generated from it, but much harder to parse and understand. When it comes to reinforcement-learned slop, I find it much easier to wade through unnecessary
try/catchblocks compared to LLM word salad prose full of "it's not this, it's that" and "load-bearing gates".While planning workflows are helpful for keeping agents on track over longer sessions, after the agent(s) have implemented the plan, you're arguably in a worse position compared to before: Now you have an even larger pile of code to read and a markdown document too!
(Aside: Should you keep that around? Should you edit it to keep up with later changes in the codebase? Have the LLM edit it? I find the agents get distracted by these files, either maintaining them as "documentation" or getting tunnel-vision on parts of the code where the implementation doesn't, in their fresh-context opinion, fully satisfy the original requirements.)
In any event, when it comes to theory-building, I haven't found planning workflows to be much better than simple prompting.
In both cases, the walls of text/code wear me down into a passive bystander who nudges with low-information prompts and accepts the agent's recommendations ("propose a few options for us to discuss" quickly turns into "okay sounds good").
So, if theory-building requires that we be mentally engaged but our mortal minds cannot withstand the unthrottled output of LLMs, where does that leave us?
Well, we could throttle the output and increase the signal-to-noise ratio.
Some folks are trying to shift to a "higher level of abstraction" with formal models in TLA+, Lean, Alloy, etc. I've only dabbled with these, so I doubt I could use them effectively myself, much less supervise LLMs generating them. (Not to mention the famously hard problem of getting the implementation to actually match the formal model.)
Instead, I'm curious about a more prosaic approach: iteratively sketching using regular programming languages. E.g., writing code "top-down", starting from
mainand introducing types and function signatures / interfaces one level down the call tree at a time.This is how I designed programs before LLMs, and I'm a bit embarrassed to admit that it's taken about a year of using coding agents for it to occur to me to try this proven design approach with LLMs.
Pre-LLM, I'd usually start with a few different "entry points" like example invocations in the README, integration test scenarios, etc., to help me figure out the appropriate concepts from the "outside-in". This process of sketching out from different perspectives helps me get a handle on the problem domain and the trade-offs between alternative designs.
So how exactly can I interactively collaborate with LLMs in this way?
Can they be simply prompted into this style of working? ("We're sketching out architecture, only write types and function signatures, no implementations".)
Or is their desire to write code too strong, such that they'll need to be constrained within a custom harness? (I.e., take away
bashin favor ofadd_function_signature(name, args, docstring); or perhaps just a post-tool- call helper that strips implementation code and adds a stern warning to context.)For me to engage with the medium itself -- the code -- the work needs to happen in my editor , where I have the muscle memory of my navigation and editing commands. I want to LSP-rename some function in 3 seconds myself, not type out instructions in some anemic
<textarea>or awkward TUI and then wait 15 seconds for a GPU cluster in California to do it for me. Thinking hard about the names is the point, the workflow should make it easy to do!Given a tasteful, human-directed sketch of a design code, how well do coding agents fill in the remaining details? Do they largely respect the module boundaries and interfaces, acting essentially as super-charged "typed- hole fillers"? Or will they immediately refactor and rename things?
Should one agent do all the work? I find LLMs can't really "forget what they know" and write for the reader's perspective -- they write functions that depend on the implementation details of their callers and comments that make oblique references to distant parts of the codebase or prompt.
So perhaps invoking an agent for every empty function would yield better code -- by construction they wouldn't be able to introduce such layering violations, as the only context they'd have is the target signature and list of other pre-established functions in that namespace.
If implementation uncovers deficiencies in the sketched plan/architecture, should the agent escalate back to you and request an architectural redesign? Or (depending on the cost of tokens, perhaps) should it just try to push forward itself and "ask forgiveness" later?
What about for brownfield work? Can agents effectively "sketch" after having read a fully implemented codebase, or would they perform better if their context is limited to the "table of contents" of existing namespaces, function signatures, etc.?
Anyway, I'm sure people are exploring these questions. However, I've had a heck of a time finding their papers / blog posts / screencasts / GitHub repos amongst the tidal waves of hype around new model releases and vibe-coded harnesses with the exact same chat-based interaction mechanics.
Do you know of any collaborative human/LLM interaction work? Have you tried these sorts of experiments? Let me know!
Misc. stuff
-
Bitter Lessons and Premature Optimizations. "[The Bitter Lesson] meme risks encouraging attachment to a different set of ideas: that generality is always desirable, that scale will fix present architectural problems, that specializing is a lack of ambition, and that engineering effort is wasted if computation could theoretically learn the solution.
-
Semantics for 2D Rasterization. The authors develop a formal semantics for Skia's command language, use Lean to prove certain rewrites are equivalent, then build an optimizer. Very readable, fun lil' paper.
-
The Accelerationist Case for Frontier Pacing "This is another reason pacing can be strategically productive. It creates room for orientation. In an environment saturated with FUD and βresistance is futileβ rhetoric, organizations can lose before competing because they assume frontier capability automatically determines every downstream contest. It doesnβt. Superior orientation does."
-
The Cartesian Hand: In-Hand Manipulation with All-Linear Fingers
-
π Ampcode News macOS Satellites rss
Amp now has a Mac: ask it to work on your iOS or Mac app and watch it build, test, and run the app.
- Penny runs on iPhone 17 Pro. Amp has it open in DeviceHub on a Mac next to the thread.
- Amp checks Penny on the iPhone Duo and fixes the layout for both screens.
- Then it opens the new build on the Duo, closed.
- Amp unfolds the Duo, and Penny switches to the side-by-side layout.
- It taps a transaction to open it.
- Amp's report: what it checked on the Duo.
- Amp recorded the Mac while it checked: closed, unfolded, tapped.
- Amp runs the iPod app for the Mac as it is today.
- Amp adds a Model setting for the black and red U2 iPod.
- Then it drives the app: Settings, Model, U2.
- Music, Artists, scroll to The Avalanches.
- The Avalanches, βSince I Left You.β
- Now playing on the U2 iPod.
- Amp's report: what it built and how it checked it.
- Amp recorded the Mac while it played the song itself.
How It Works
Your thread still runs on a Linux orb, next to your dev server and toolchain. The Mac is a second machine attached to that orb. Amp can automatically start a Mac, run commands on it, and read and write files, so it decides on its own when the work needs a Mac.
When it does, our server boots a fresh Mac in the cloud with Xcode and the simulators installed, in about 30 seconds. Your orb connects to it and keeps your code in sync, so Amp still edits on the orb and only builds, runs, and tests on the Mac. Screenshots, logs, and builds come back to the thread, and the app on the Mac reaches your backend on the orb through portals.
The thread's Mac tab streams the Mac's screen. Watch Amp's work, or take control of the Mac and try the app yourself.
Every Mac starts fresh, and nothing on it is saved. When Amp is done with a Mac, it keeps it running for 20 more minutes. If you send a follow-up in that time, Amp reuses the same Mac and its build cache instead of starting a new Mac and building from scratch. After that, the Mac is deleted. To delete it right away, archive the thread or ask Amp to stop the Mac.
Morbs Are Dead, Long Live macOS Satellites
Before shipping macOS Satellites, we tried out Morbs: orbs that ran the whole thread on a Mac. But we ran into issues that made the approach unfeasible for a wider rollout. Docker and your backend took minutes to start there,[^1] and keeping a Mac disk around for every thread got expensive.
So we split the thread across two machines. Everything that runs well on Linux stays on the orb and starts fast, and a Mac only shows up for the work that needs macOS.[^2] We're calling them macOS Satellites because they orbit your orb.
Pricing
Size CPUs Memory Price mac.medium6 14 GB $2/hour mac.large12 28 GB $4/hour macOS Satellite time comes out of the same orb usage your plan includes, just at a higher rate. Once that runs out, it comes out of your Amp credits, the same way orb time does.
Every Mac starts as a
mac.medium. If you need more, ask Amp for amac.large, or turn offmac.mediumunder Mac Satellites in Settings β Experimental Features.Join the Waitlist
macOS Satellites are in beta and opening up as we add Macs. Join the waitlist in Settings β Experimental Features. Each day you click Move Me Up moves you up the line.
Go point Amp at that app you've been meaning to build! Find out more in the docs.
New to Amp? Sign up and get started on your Apple apps.
-
π Ampcode News Visualize This rss
You can now ask Amp to visualize or build something for you and it will do it, right in the thread: charts, timelines, diagrams, and mockups you can click through.
Here are some examples, from our real threads. Go ahead, hover and click through them:
Open the post on ampcode.com to see the chart of last month's commits that Amp drew.
Here, for example, is an excerpt from Quinn's thread, where he asked for ways to fit a diff stat into a small button:
Open the post on ampcode.com to try Quinn's sixteen diff stat buttons.
And here's what went into building this feature:
Open the post on ampcode.com to see the history of this feature that Amp drew.
-
π Armin Ronacher Custom Voices With Qwen3-TTS rss
With my kids I'm currently building a little dungeron crawler and we're trying to learn a bit about game development along the way. However given that we live in the modern times of increasing capabilities we wanted to get a narrator and voice over.
But we also wanted it to not sound like everyone's standard AI voices so I looked into what options there are on the table. After some investigation I narrowed down to using Qwen3-TTS which uses voice embeddings for custom voices.
With a bit of creativity you can also do more with those custom voices than appears initially. In case this is of interest to you, this post just covers what we learned and with some examples. You can probably point your agent to it and it can do something with it.
What Qwen Offers
Qwen3 is not the only TTS model in town, and it wans't even my first choice. We initially used Kokoro. However Qwen3 supports voice cloning and we wanted to have it feel a bit more unique.
In practice it's a bit tricker though. Qwen3 ships three kinds of models:
1.7B-Base(and 0.6B): clones a voice from a few seconds of reference audio1.7B-CustomVoice: comes with nine built-in speakers and instructions1.7B-VoiceDesign: invents a voice from a text description
The base model clones either in context or from the speaker embedding alone but there is no documented way to clone a voice and direct it with instructions. That means unlike the custom voice and voice design models you cannot say "speak sad" or "whisper" with a cloned base model.
At present the official options for a custom voice are fine-tuning Base on a single speaker or to make a clip with VoiceDesign and clone it with Base. That is not all that bad, but it means instructions are gone.
Playing With It
For this blog post I took 28 seconds of me from my talk at PyAI Conf, cut between two pauses so that it starts and ends on a full sentence, and transcribed it with Whisper. The transcript is really only needed for baking but to compare against an already existing voice it's useful to have it say the same thing as the original recording.
Note that a conference talk recording is not ideal but it works anyways. Which is also a good reminder that you really don't need a particularly clean recording (or a very long one) to get a halfway convincing version of a person. Particularly when then presented to you on a low quality phone call, it won't be very hard to trick your grandmother.
The first thing you can do is to blend that recording with another voice. For instance you can use VoiceDesign to make up a voice from a description. For this blog post the designed voice was created like this, with Qwen's own Python package
qwen-tts(pip install qwen-tts, I used 0.1.1), which the rest of the code in this post uses too:import torch from qwen_tts import Qwen3TTSModel kw = dict(device_map="mps", dtype=torch.bfloat16, attn_implementation="sdpa") design = Qwen3TTSModel.from_pretrained("Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign", **kw) wavs, sr = design.generate_voice_design( text=open("voices/transcript.txt").read(), language="English", instruct="A man in his forties with a warm, natural, medium-low voice, speaking " "clearly and calmly at an easy conversational pace, like someone reading " "aloud to a friend.", )You can see how the two different voices behave, particularly when blended together:
Interactive demo: see the post on the website.
Voice Embeddings
What Base takes from a recording when cloning from the embedding alone is a speaker embedding which is basically 2048 numbers out of a speaker encoder that was trained. The same voice gets similar numbers and different voices get different ones. Which btw, is also a convenient way to do speaker detection from recordings if you want to! It's not perfect, but it's quite helpful for a single audio track recording to tell two speakers apart if you do some basic slicing and dicing (more on that below).
Because it is just a vector, you can do arithmetic on it. For instance a weighted average of two embeddings is a spaker that is somewhere between two voices:
base = Qwen3TTSModel.from_pretrained("Qwen/Qwen3-TTS-12Hz-1.7B-Base", **kw) def fingerprint(path): prompt = base.create_voice_clone_prompt(ref_audio=path, x_vector_only_mode=True) return prompt[0].ref_spk_embedding def blend(a, b, t): a, b = a.float(), b.float() mixed = (1 - t) * a + t * b return (mixed / mixed.norm() * ((1 - t) * a.norm() + t * b.norm())).to(torch.bfloat16) armin, designed = fingerprint("voices/armin.flac"), fingerprint("voices/designed.flac")Here is the same sentence in eleven blends:
Interactive demo: see the post on the website.
Note that it stops sounding like me quite quickly, but it retains some of my features. And it for sure ends up with creating a unique voice regardless. I found some better successes when ensuing that the two voices have similar spectograms (eg: similar "recording setups"). In this recording you can hear that one voice picked up by the lapel mic was a bit hollow compared to the designed voice.
If you like a a voice that comes out, you can bake it back into a new recording that you can then use as reference:
import soundfile as sf mixed = blend(armin, designed, 0.5) audio, rate = say(open("voices/transcript.txt").read(), mixed) # say() is shown further down sf.write("voices/final.flac", audio, rate) final = fingerprint("voices/final.flac")The baked voice does not come back exactly as the blend but it makes handling it easier if you want to. It's just one voice reference file.
So on the question of using those embeddings for speaker recognition: how good does that work? I took an episode of State of Agentic Coding, the podcast Ben and I record, cut it into 2-second windows one second apart and compared each with an embedding of me form the conference.
Somewhat surprising, but maybe not too surprising using my conference recording clip as the reference this does not work at all with Qwen3. If instead I take the 20 seconds where I introduce myself at the start of the episode as the reference, it gets 98% of the rest right.
On the other hand using a model that was trained for speaker verification instead does manage to pick me up from the conference recording clip. For instance ECAPA, finds me from the conference clip in 97% of the windows.
Here are 20 minutes of that podcast, classified by speaker with the different approaches:
Interactive demo: see the post on the website.
Instructed Cloned Voices
But the embeddings a very useful for the voice cloning! But how to give them instructions? Base and CustomVoice manipulate the speaker the same way: one vector inserted into the talker's input sequence. In CustomVoice that vector is a row of the embedding table. In Base it is the x-vector from the speaker encoder, which only Base has. The generation code takes either (
voice_clone_promptis a regular argument ofgenerate), and the transformer weights of the two models are nearly identical. So take the embedding with Base, then hand it to CustomVoice instead of one of its speakers:cv = Qwen3TTSModel.from_pretrained("Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice", **kw) def say(text, xvec, instruct=None, language="English"): ids = cv._tokenize_texts([cv._build_assistant_text(text)]) told = [cv._tokenize_texts([cv._build_instruct_text(instruct)])[0] if instruct else None] voice = {"ref_code": [None], "ref_spk_embedding": [xvec], "x_vector_only_mode": [True], "icl_mode": [False]} codes, _ = cv.model.generate( input_ids=ids, instruct_ids=told, voice_clone_prompt=voice, languages=[language], non_streaming_mode=True, **cv._merge_generate_kwargs(temperature=0.7, subtalker_temperature=0.7), ) wavs, rate = cv.model.speech_tokenizer.decode([{"audio_codes": codes[0]}]) return wavs[0], rate wav, rate = say("I really thought this would work.", armin, "Speak in a sad, sorrowful tone, voice low and heavy, on the verge of tears.")Pick a speaker for the slot, a model and an instruction:
Interactive demo: see the post on the website.
Instructions work on cloned voices, but less reliably than on the built-in speakers, and it depends on the emotion, but honestly, it came out better than I anticipated. Definitely good enough to have some true custom voices for a voice over that don't necessarily sound like something, someone else has in their game.
Other Fun Math
If a voice is a point in a 2048-dimensional space and blending works we can maybe do some other funny math on it. The obvious one is to try to see if some math can be used to manipulate gender.
To find it I had VoiceDesign create 14 different voices for men and women each. When you then take the average woman minus the average man you can then move any voice along that direction:
women = torch.stack([fingerprint(f"design/f{i}.wav") for i in range(14)]).float() men = torch.stack([fingerprint(f"design/m{i}.wav") for i in range(14)]).float() middle = (women.mean(0) + men.mean(0)) / 2 axis = women.mean(0) - men.mean(0) axis = axis / axis.norm() def move(xvec, t): """Put the voice at position t along the gender axis, keep the rest.""" x = xvec.float() return (x + (t - (x - middle) @ axis) * axis).to(torch.bfloat16)Here is the result for my clone:
Interactive demo: see the post on the website.
Anyways, that's that. If you want to play around with Qwen3 TTS I hope this was of some help, and maybe you got some ideas of what to do with the voice embeddings. Use it for good, not evil.
-
- October 28, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-10-28 rss
IDA Plugin Updates on 2026-10-28
New Releases:
Activity:
- GhidraDec
- ida-sigmaker
- IDAPluginList
- 5b051d81: chore: Auto update IDA plugins (Updated: 19, Cloned: 0, Failed: 0)
- pdb
-
π HexRaysSA/plugin-repository commits sync repo: +3 releases, -3 releases rss
sync repo: +3 releases, -3 releases ## New releases - [ida-mcp](https://github.com/hexrayssa/ida-mcp): 20261028.0.3, 20261028.0.2, 20261028.0.1 ## Changes - [ida-mcp](https://github.com/hexrayssa/ida-mcp): - removed version(s): 0.10.4, 0.10.3, 0.10.2 -
π exe.dev Run Claude and GPT on exe.dev Without API Keys rss
exe.dev integrations let you store secrets with exe.devβs control plane so your VMs (and the agents on those VMs) can access services without seeing the secrets themselves. The next step is to avoid having the secret to begin with. When exe.dev and the other service both support Workload Identity Federation (WIF), you can do just that.
If youβve been using API keys for exe.devβs LLM gateway, thereβs now another way. Both Anthropic and OpenAI support Workload Identity Federation. Two fewer keys to lose!
Pro tip: agents are excellent at configuring WIF on your behalf.

-
π backnotprop/plannotator v0.28.36 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.35 | Updates check the download against checksums Plannotator fetches itself, a failed check changes nothing
v0.28.34 | Start a Grok Build session from the Inbox, action items in your reply, a tidier Board, Settings β Capabilities, a failed feedback send is shown
v0.28.33 | Pi updates no longer get stuck on 0.28.31
v0.28.32 | A security update (built on Bun 1.4.4, eMudhra certificates), the Inbox Board, custom Inbox prompts, hover cards for issue and PR links, rich-text Copy
v0.28.31 | An onboarding tour for the Inbox, pinned threads, picture choices in questions, palettes in Inbox Settings, tailnet reviews from the plugin tool
v0.28.30 | An Artifacts view in the Inbox, comments on part of an image, diagrams in code review, Ask AI keeps its conversation in annotate
v0.28.29 | Plan review opens on OpenCode 2, a DOMPurify security update, closing a review stops the agent everywhere
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 silentlyWhat's New in v0.28.36 Qwen Code joins Plannotator: the Inbox, plan review, Ask AI and the installers. Plans now open in the Clean look. Inbox messages can hold live HTML and diagrams, the Inbox has a Feedback button, and plannotator inbox gets status, stop and restart. 28 PRs. After you update, each agent's prompt cache misses once, because the Inbox tool description, the session reminder and the rules-file note changed. Plannotator Inbox Qwen Code in the Inbox plannotator inbox connects Qwen Code the way it connects Gemini CLI. It adds its own entry to Qwen's settings.json and keeps the file's comments. Qwen Code shows in Settings β Agents, and its sessions are tagged in the Inbox. When you reply to a running Qwen Code session, the reply arrives in it as its next turn. For this, Plannotator registers itself with Qwen Code (0.24 or later) as a trusted sender, so Qwen does not ask you before it takes the reply. Settings β Agents turns this off. Sessions that cannot be woken (Windows, qwen -p) get the reply on their next read. #2271, #2274 Live HTML, SVG and diagrams in a message An agent can put an html block in a message, and the Inbox draws it as a live, sandboxed page in the thread, in your theme. An svg block draws as a picture. Each one has Code and Full screen under it. Agents are told they can do this. #2288 Send feedback from the Inbox Feedback , above Settings in the sidebar, sends a message to the Plannotator team, with an optional category and email. The dialog shows exactly what is sent. Prompt your agent to send feedback copies a prompt: your agent asks you for the feedback, shows you the text, and sends it with the new plannotator feedback command only after you say yes. #2286 plannotator inbox status, stop and restart status shows the Inbox's URL, pid and version, and says when the running Inbox is a different version from your plannotator. stop ends only the Inbox of this data folder. restart starts the new version, and an agent that calls during the restart gets the new Inbox. The command shapes come from @rmohta's fork. #2276 Smaller changes Filter the Board by project. A Project button in the Board header shows when cards span two or more projects. #2284 A drawing goes into your reply at once. β or Enter adds it as a comment, with Undo. Escape cancels. #2254 Agents send updates and decisions when you would want them, and no longer hold them back to send later. #2287 Copy file in the code attachment viewer, for YAML, JSON, logs and other code files. #2253 Stopped and Holds up show as triangles in the list, and the agent's mark sits by the time. #2182 A choice written as markdown reads as its words in folded lines and answer rows, not as . #2219 Mark read works on an update you already opened while the list still holds it in New. Found by @seabass011. #2265 A thread with open questions no longer stays in Quiet in a narrow window or on a phone. #2270 Plannotator
Qwen Code support
Plan review opens when a Qwen Code agent leaves plan mode (Qwen Code 0.13.0 or later). After you approve in Plannotator, Qwen Code still asks you to confirm in the terminal: a Qwen hook cannot approve that step.
/plannotator-review,/plannotator-annotateand/plannotator-lastwork in Qwen Code.Ask AI offers a Qwen Code provider when
qwenis on your PATH, and uses it by default in a Qwen Code session. It runs in Qwen's plan mode, with the editing tools turned off.The install scripts set up the Qwen Code extension and skills when they find Qwen Code.
--skip-qwen(-SkipQwenon Windows) turns this off. The session- log reader and the findings on Qwen's plan confirmation come from @NonoElRobot's Qwen Code port.Plans open in the Clean look
Plan review and annotate now open in Clean, the document edge to edge. Grid is one switch away in Settings β Display.
If you kept Grid, you move to Clean once and see a short notice. Pick Grid there to keep it; you are not asked again.
Smaller changes
- Comments on a plan's linked documents survive a reload. Each document's comments are saved on their own, in plan review and in annotate sessions on a URL or the last message. #2263, for #1545
owner/repo#Nlinks to that repo's issue or PR in plan review, annotate and the Inbox, with hover cards. #2283- Taller issue and PR hover cards, and the footer stays in view in a short window. #2281
- Ask AI with Claude loads your settings as
claudedoes, includingCLAUDE.local.mdand.claude/settings.local.json. Your Claude Code hooks now run in Ask AI sessions too. #2280 - Code review previews follow links like VS Code, refuse files over 5 MB with a plain message, and no longer hang on a FIFO. #2272
- Monospace digits no longer show as superscripts on Linux. #1963, for #1961
- In the Grid look, a short plan's card runs to the bottom of the view. #2269
- A question card's buttons wrap as whole buttons in a narrow column. #2266
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 npm:@plannotator/pi-extensionOpenCode: Re-run the install script above. It also clears the OpenCode 2 plugin cache.
What's Changed
- Inbox: a drawing goes into your reply at once by @backnotprop in #2254
- Code-nav and diff expansion: 5 MB cap and no FIFO hang, links followed like VS Code by @backnotprop in #2272
- Monospace digits no longer render as superscripts on Linux (#1961) by @backnotprop in #1963
- fix(inbox): a thread with open questions never stays in Quiet behind a covered list by @backnotprop in #2270
- Ask AI: load Claude settings the way the CLI does by @backnotprop in #2280
- Inbox: show a markdown choice label's words, not its markdown, in folded lines and answer rows by @backnotprop in #2219
- feat(inbox): plannotator inbox status, stop and restart by @backnotprop in #2276
- Open plans in the Clean look by default by @backnotprop in #2268
- Inbox: Copy file in the code attachment viewer by @backnotprop in #2253
- Inbox: Feedback in the sidebar, a write-only feedback Worker (deployed), plannotator feedback by @backnotprop in #2286
- Guided Reviews: run your own claude and codex, not the adapter's bundled copy by @backnotprop in #2278
- fix(inbox): keep Mark read on a seen update held in New by @backnotprop in #2265
- Grid look: the plan card reaches the bottom of the view by @backnotprop in #2269
- Link owner/repo#N refs; tell agents how refs link; Board card text links by @backnotprop in #2283
- Taller issue and PR hover cards; keep the footer in a short window by @backnotprop in #2281
- Inbox: row badges as triangles, agent mark by the time, hover card A by @backnotprop in #2182
- Question card: the footer reflows as whole buttons in a narrow column by @backnotprop in #2266
- chore(e2e): new specs no longer edit playwright.config.ts by @backnotprop in #2293
- Inbox: connect Qwen Code and tag its sessions by @backnotprop in #2271
- Qwen Code: plan review, skills and annotate-last by @backnotprop in #2273
- Inbox: agents follow through on what they promised, without pinging (one wording per harness, parity test) by @backnotprop in #2287
- Save plan review's linked-document comments per document (#1545) by @backnotprop in #2263
- Inbox Board: filter by project by @backnotprop in #2284
- test: qwen-session test never names the real ~/.qwen by @backnotprop in #2298
- Installers: set up Qwen Code (extension and skills) by @backnotprop in #2275
- Inbox: replies go into running Qwen Code sessions by @backnotprop in #2274
- feat(inbox): live html, svg and diagram fences in a message by @backnotprop in #2288
- Qwen Code: Ask AI provider by @backnotprop in #2279
Community
- @NonoElRobot: ported Plannotator to Qwen Code in a fork. The Qwen session-log reader, the extension layout and the findings on Qwen's plan confirmation in #2273 come from it
- @rmohta: built
plannotator inbox status,stopandrestartin a fork, the shapes that #2276 uses - @seabass011: found in a fork that Mark read stopped working on an opened update, fixed in #2265
- @TallJimbo: reported in #1961 that monospace digits rendered as superscripts
- @utpalsinghdev: checked #1545 against main and asked what case was left, which led to the plan review fix in #2263
Full Changelog :
v0.28.35...v0.28.36 -
π HexRaysSA/plugin-repository commits sync repo: +1 release rss
sync repo: +1 release ## New releases - [SigMaker](https://github.com/mahmoudimus/ida-sigmaker): 1.15.1 -
π Simon Willison The October inflection point for vibe game development rss
I've written before about how November 2025 was an inflection point for coding agents - the point where Opus 4.5 and GPT-5.1 crossed a tipping point that meant their respective coding agents became reliable daily drivers for software engineers. I think we've reached a new inflection point in October 2026, and this time it's for vibe coding computer games.
- Tree Appreciator
- Emberwick
- Battle Drones
- Pumpkin Farmer, aka Quarter Sun Cove
- Four times as insulting
- What happens if someone actually puts the work in?
- You should build a game!
Claude Opus 5.5 in particular exhibits meaningful improvements in several areas needed to build a compelling game:
- 3D modeling
- Music generation (see Scrimshaw Jukebox)
- Game design (!)
That last one is particularly important. Models have been able to create something that looks like a game for quite a while now, as seen in my previous experiments. The challenge has been getting to a game that's actually fun to play.
Game design is a deep subject area. I won't pretend to be well versed in it - I know enough to have respect for it as a craft. Creating a novel, compelling gameplay loop which challenges players at the right level and provides a satisfying learning curve is a fine art. I didn't think the models could do it.
Then I tried telling Claude Opus 5.5 to "Make it a LOT more fun"... and it did.
In the past few weeks I've vibe coded (in the classic sense of the term - no looking at the code at all) four games that I've genuinely enjoyed playing.
I attended Foo Camp in Berkeley over the weekend and met several people who were having similar experiences. Building games that play well is shockingly easy now. The new challenge is coming up with concepts for games that are novel and delightful and that wouldn't exist without AI assistance.
I haven't done an exhaustive study, but my current impression is that GPT-6 Astra isn't quite there yet. It can absolutely build a game, but its sense of fun doesn't match that of Opus 5.5. I expect OpenAI will get there by the end of the year.
Here are the four game projects that have convinced me that the models are now capable of producing fun games with very little guidance. All four are built in HTML and JavaScript and run entirely in the browser.
Tree Appreciator
The smallest game I found to be genuinely delightful is Tree Appreciator. I used the regular Claude chat interface for this - it didn't even need Claude Code.
I built this on a whim while we were driving along Skyline Boulevard looking at trees. My prompt was:
Build a three js game called "Tree appreciator" - it shows you two algorithmically generated trees and the game mechanics is about appreciating the differences between them. Think hard about how to make sure it is both fun and beautiful.I've found that telling models to use three.js works really well. Claude doesn't have its own image generation model but is capable of building full-color 3D models that look and feel excellent.
This game required no iteration or follow-up prompting at all - I got the game in a single shot. It gave me back a charming little mobile-friendly spot-the-difference game. You can play that here. Here's the chat transcript that built it.

It's pleasingly relaxing. The graphics are fun, and collecting trees that you have completed in a "herbarium" provides a nice, cosy sense of accomplishment.
Emberwick
This was a more ambitious project that I again built using regular Claude chat. I started out by building an experimental prototype of an engine for a top-down fantasy RPG:
Build a demo game engine three.js which is a top down (but at an angle) RPG - the player gets to move through the world with one or two companions. Create a fantasy village setting that demonstrates walking around outside and then shows how when the player enters a building the wall between the player and the camera goes transparent so the user can see what is happeningAdd some NPCs and plenty of furniture and different types of building some with an upstairs - be creative, make it look greatHere's that first version. It worked really well!

I was inspired to increase my ambitions:
Make it not so flat - the buildings are great but the landscape itself is completely flat at the moment, fix thatAdd basements to two of the buildings with a tunnel system joining them below the villageAdd the start of a rocky mountain on one side of the village containing a cave with a sleeping trollHere's that version.

When that produced a good result, I decided to push it all the way:
Now turn this into an actual game - quadruple the size of the playable area, introduce fun game mechanics, add a plot that isn't too cliche, some twists, a magic system, make it really goodWe're back to prompts like "make it really good" here! Asking for a plot that "isn't too cliche" seemed to work too - it's a bit clichΓ©, but still novel enough that I enjoyed following the story.
Unlike Tree Appreciator, this took quite a bit of additional playtesting and prompting to get to a finished version. This was mainly due to gameplay problems - things like a character not being in the right place to complete a quest because a different story element had caused them to move to another location.
Here's that final game. It has a full story that takes about 15 minutes to play through.

There's even an experimental level editor if you want to drop in your own houses, furniture, and landscape features.
Once it was all working (and I'd iterated through some gameplay bugs), I played it through from start to finish and found myself emotionally affected by the ending! I'm somewhat embarrassed by this, because everything in this game - the graphics, the plot, the characters, the music, the dialog - came from the model. My creative input was pretty much just "it's a fantasy village and there's a troll asleep in a cave".
Here's the full shared Claude chat in which I built this game.
I also fed that same initial sequence of prompts through ChatGPT GPT-6 Pro. Here's the transcript and the finished game for comparison. It looks great, but I don't think it plays nearly as well.
Battle Drones
This is by far my most successful project, which I wrote about last week. It's a Command & Conquer-style Real-Time Strategy game where two robot armies (or four as of Saturday) build units, harvest scrap, and battle over territory.
This is also the project that convinced me that Opus 5.5 knows what "fun" is.
The first versions were built back in July using Claude Fable 5. It got me to a workable 2D Command & Conquer-style game, but it wasn't great to play.
I prompted Opus 5.5 to "Make it a LOT more fun" and then later to "Port this game to three.js" and the game was transformed. There's a blow-by-blow account (prompts included) in my write-up.
Today, Battle Drones has 2-4 player multiplayer (via a vibe coded WebSockets relay server), medals, replays, seven maps, a random map generator, and a set of "mutators" that add variants of the rules.
It also lets different LLMs play against each other, using a mode where the game advances five seconds and then pauses to give different models time to interpret the new game state and line up their next set of commands. Here's a replay of Claude Haiku 5.5 vs. GPT-6 Luna:

Battle Drones is a particularly good example of Opus 5.5's ability to create 3D models. This page lets you browse all of the models in the game.
I released Battle Drones under the Apache 2.0 License last Tuesday. On Wednesday Gabriel Turpin released Panache (screenshots here), a fork of Battle Drones that reimagined the game for steampunk 1900s Belle Γpoque France, with new models and music and an animated intro sequence. Open source at work!
Pumpkin Farmer, aka Quarter Sun Cove
I live in Half Moon Bay, California, home of the annual Half Moon Bay Art and Pumpkin Festival, which includes a giant pumpkin weigh-off competition.
I decided to try building a game that wasn't just a cheap imitation of something that already existed, so I set out to create a game about farming pumpkins, growing giant pumpkins, and handling the rush of the October pumpkin season.
I called it "Quarter Sun Cove".
I'm still iterating on this project, but it's shaping up quite nicely. It's a cosy farming simulator where you spend the year tending to your giant pumpkin and planting out regular-sized pumpkins for sale in October, then sell pumpkins during pumpkin season and enter your giant pumpkin in the weigh-off.
Every character in it is a (vegetarian) animal. The mayor of the town is a pelican. You can be a pelican, skunk, raccoon, possum, beaver, coyote, fox, owl, sea otter, or harbor seal. Those species all later show up (accompanied by their children) to buy pumpkins from you.
It's absurdly cute.

You can play the latest version here. I'm not convinced by the game mechanics yet - it's actually quite complicated: you have to decide when to plant pumpkins such that they will become ripe at the weekends in October with the most visitors.
Here's the initial brainstorming session, which resulted in this spec file. Then I had Opus 5.5 Ultracode burn millions of tokens and nearly two days building it.
I told Claude to "surprise and delight the user frequently" and the result is so many little details and easter eggs. There are mischievous raccoons, an elephant seal that runs the weigh-off, harbor seals that roll their pumpkins back into the ocean, a wandering goat, and superstitions about growing giant pumpkins that sometimes come true.
This isn't my best game yet - it's not as fun to play as Battle Drones - but it represents the kind of game I want more of: weird, fun, uniquely personal - something that wouldn't have been built in the before-times.
Four times as insulting
If you are offended by AI-generated art, AI-generated music, AI-generated writing, and AI-generated code, I have bad news for you: vibe coded games combine all of those at once.
I respect those opinions, even though I donβt strongly hold them myself.
The wider games community already has an aversion to AI-generated assets in games. This has been a growing issue over the past few years as tools like Midjourney have enabled developers to generate assets for their projects. This IGN story covering complaints about slop in Valve's Steam Next Fest is a good recent example.
We now have games where everything - code, assets, dialog, and even the game design itself - can be outsourced to the models. And the results don't suck!
Building a computer game used to be one of the most challenging projects in all of software development, combining a diverse range of skills and requiring intense focus and effort over many months or even years. And now here I am spitting out a playable multiplayer RTS by prompting on my phone!
I expect that, as we've already seen with programming, this will result in a split. Some players will refuse to have anything to do with games that were built in this way. Others may embrace this as opening up game development to a much wider audience. I lean in that direction!
I certainly won't be entering any of my vibe coded games in traditional game jams or competitions - I don't feel like I've earned that right. We'll likely see new avenues emerge for vibe game developers to compare their projects.
What happens if someone actually puts the work in?
The thing I find both exciting and shameful about this is that I have got interesting results from so little creative input. The projects I've described here are loosely ordered by how much effort I've put into them. Not a single project represents more than four hours of my work (plus many more hours of Claude Code churning away by itself).
Now imagine what could be achieved by anyone who takes this seriously, invests significant creative time, applies better taste in game design, and then playtests and iterates on the result until it's as good as they can make it.
I want to see games that wouldn't have existed without these new tools.
You should build a game!
Building games in this way is so much fun. It's the perfect application for vibe coding because it's so low stakes: how much damage can you cause with a bug in a personal vibe coded game project?
(OK, you can do some damage... my attempt at audio-based multiplayer gave my wife Natalie a nasty headache!)
All of my games so far have been HTML and JavaScript using static hosting (generally GitHub Pages or Cloudflare Pages). Modern browsers - including mobile browsers - are incredibly capable. Frontier models already know libraries like three.js and Phaser. I'm finding these mobile web games to be indistinguishable from the native experience, at least for the kinds of games I'm trying to build.
I suggest starting with a prompt like this:
Build a mobile-friendly three.js game where...This works on both chatgpt.com and claude.ai - you don't even need to fire up a full coding agent. As one last example, here's "Build a mobile-friendly three.js game where a mouse has to hide from a cat" by Claude Opus 5.5 Extra and by GPT-6 Extra High.
Switch to Codex or Claude Code once your project passes the proof-of-concept phase.
And if the game isn't fun enough, add this:
Make it a LOT more funYou 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.
-
π HexRaysSA/plugin-repository commits sync repo: +1 release, -1 release rss
sync repo: +1 release, -1 release ## New releases - [ida-nexus](https://github.com/hexrayssa/ida-nexus): 0.14.2 ## Changes - [ida-nexus](https://github.com/hexrayssa/ida-nexus): - removed version(s): 0.9.0 -
π r/Harrogate Looking for bandmates rss
Im looking to start a band in the harrogate area, I play the guitar 7 string and 6 string, im an intermediate player and love nu-metal.
Im 15 years old, nott looking for anyone over the age of 17 (sorry pedos)
Ik looking for:
2nd guitarist
Drummer
Bassist
Singer
All in that sort of nu metal style specifically bands like reville and stuk but in broader terms korn.
Dm if you are interested
submitted by /u/Dylan1686
[link] [comments] -
π smol-machines/smolvm smolvm v1.32.4 release
What's Changed
- chore(nix): bump flake to 1.32.2 by @github-actions[bot] in #1983
- Require that no commit, commit author or PR text credits an AI tool by @BinSquare in #1991
- Expose the VM's DMA-BUF heaps to containers so Android can allocate graphics buffers by @BinSquare in #1992
- Bump libkrunfw with the Android kernel options and the TSI socket fixes by @BinSquare in #1993
- Seed private registry images whose credentials arrive with the start by @BinSquare in #1984
- Give a checkpoint started during another one its share of workers by @BinSquare in #1990
- Bump zstd to 0.14.3 to clear four security advisories by @BinSquare in #1997
- Run the macOS CI job on our own Mac mini and keep its target/ between runs by @BinSquare in #1999
- Fix Docker socket forwarding into workload namespaces by @horjulf in #1998
- Remove an ephemeral
machine run's data directory when the run fails before its VM starts by @RitikaxG in #1996 - Let a frozen branch source stop once every branch of it is stopped by @BinSquare in #2003
- Run the Linux x86_64 CI job on our own MS-A2, keeping target/ between runs by @BinSquare in #2005
- Make the usage journal and engine-binary tests independent of tests running beside them by @BinSquare in #2007
New Contributors
Full Changelog :
v1.32.2...v1.32.4 -
π backnotprop/plannotator v0.28.35 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.34 | Start a Grok Build session from the Inbox, action items in your reply, a tidier Board, Settings β Capabilities, a failed feedback send is shown
v0.28.33 | Pi updates no longer get stuck on 0.28.31
v0.28.32 | A security update (built on Bun 1.4.4, eMudhra certificates), the Inbox Board, custom Inbox prompts, hover cards for issue and PR links, rich-text Copy
v0.28.31 | An onboarding tour for the Inbox, pinned threads, picture choices in questions, palettes in Inbox Settings, tailnet reviews from the plugin tool
v0.28.30 | An Artifacts view in the Inbox, comments on part of an image, diagrams in code review, Ask AI keeps its conversation in annotate
v0.28.29 | Plan review opens on OpenCode 2, a DOMPurify security update, closing a review stops the agent everywhere
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 nothingWhat's New in v0.28.35
Plannotator
Updates check the download against checksums Plannotator fetches itself
On macOS and Linux,
plannotator update, the Inbox's Update now and the background auto-update no longer download with the systemcurl. On macOS,curlstill trusts the leaked eMudhra root certificates. Plannotator now downloads the install script and the release's checksums over its own connection. The install script then checks the new binary against those checksums before it replaces anything. Windows is unchanged, because Windows already blocks those certificates.When a download does not match, nothing changes: the update stops with a plain message, and your Plannotator keeps working. The background auto- update then waits 1 day, then 3, then 7, before it tries that version again. A newer release, Update now and
plannotator updatetry at once.Smaller changes
- The install scripts carry the checksums of the
semdownload instead of reading them from the archive's ownchecksums.txt. #2218
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 npm:@plannotator/pi-extensionOpenCode: Re-run the install script above. It also clears the OpenCode 2 plugin cache.
What's Changed
- Safe updates, step 1: Plannotator downloads the install script and checksums itself by @backnotprop in #2218
Full Changelog :
v0.28.34...v0.28.35 - The install scripts carry the checksums of the
-
π backnotprop/plannotator v0.28.34 release
Follow @plannotator on X for updates
Missed recent releases? Release | Highlights
---|---
v0.28.33 | Pi updates no longer get stuck on 0.28.31
v0.28.32 | A security update (built on Bun 1.4.4, eMudhra certificates), the Inbox Board, custom Inbox prompts, hover cards for issue and PR links, rich-text Copy
v0.28.31 | An onboarding tour for the Inbox, pinned threads, picture choices in questions, palettes in Inbox Settings, tailnet reviews from the plugin tool
v0.28.30 | An Artifacts view in the Inbox, comments on part of an image, diagrams in code review, Ask AI keeps its conversation in annotate
v0.28.29 | Plan review opens on OpenCode 2, a DOMPurify security update, closing a review stops the agent everywhere
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 refusedWhat's New in v0.28.34
A tidier Board in the Inbox, a Board chip in compose, action items in your reply, hover cards in review, and failed sends that no longer look like they worked. Usage counts are removed. 25 PRs.
Plannotator Inbox
A tidier Board
Lane cards are one title row now, with the marks and the age on the right. A second line shows only when you owe something ("You: β¦") or a send is waiting. "You: β¦" opens the thread where you decide, and an opened card has Open thread or Create thread at the top. Agents now give cards short titles of 2 to 5 words.
Ask the agent to track new work on the Board
Compose has a Board chip beside the Thread row. Turn it on, and the agent puts the work you ask for on the Board, unless a card already links the thread. The chip shows only while the Board is on.
Settings β Capabilities
A new Capabilities section holds the Board switch, with the Experimental switches under it.
The Board switch has moved from Settings β General to Settings β Capabilities.
Action items go in your reply
Done and Can't do it now go into your reply draft, with any note, and reach the agent with your next Send.
A Done no longer goes to the agent by itself after a few seconds; it waits for your Send.
Agents reply in the right thread after compaction
After the agent compacts its context or resumes, it gets the list of its open Inbox threads, so it replies where it should and not to a thread it half remembers. A decision that waits in the Inbox stays there: the agent no longer asks it again in the chat.
Decide inside a thread (experimental)
Decision mode now starts from a thread. When 2 or more decisions wait in a thread, "Decide these N" is the first row of its open questions.
The Decide button beside the list title and the Decide row in the sidebar are gone.
Start a Grok Build session from the Inbox
When Grok Build is installed, New message can start a Grok Build session in any of your projects. The Inbox runs the session, so every reply you send reaches it as a real turn. You answer its permission requests in the thread. To turn it off, use Settings β Agents β Run in the Inbox.
Smaller changes
- Full screen goes back to where you opened it. Γ, Escape and the browser's Back return to the thread or to the file beside it. #2245
- A recommendation written into a choice label counts. "Foo (Recommended)" shows as the recommended choice, with Accept recommended. #2247
- A
Recommended:line finds a choice written as a link or with formatting. #2251 - A click anywhere in the reply box puts the cursor in it, so typed and dictated text no longer goes nowhere. #1960
- A new Inbox tab is always counted as open, and a closed one no longer is. #2237, #2250
- While the Board is off, agents see one line saying it exists and where to read about it. #2260
- Cursor's Inbox note says plainly that you paste it into Cursor yourself, and the copy no longer carries markers that promise an automatic removal. #2162, for #1991
Plannotator
You see when feedback does not send
In plan review, annotate and code review, a send that fails now shows why, with Retry and Copy feedback , and your annotations stay where they were.
A failed approve or send now keeps you on the page; before, it could show the Approved or Feedback Sent screen.
Hover cards for issue, PR and MR links
In plan review, annotate and code review, pointing at a GitHub issue or PR link, or a GitLab MR link, shows its title and state, read through
ghorglabon your computer. This works in Pi too. Remote sessions don't show the cards.Usage counts are removed
Plannotator no longer has any code that counts the use of experimental features. Nothing was ever sent on its own: only a hidden command could send counts, and only when someone typed it. The experimental switches work as before.
The hidden
plannotator telemetrycommand is gone.A one-time introduction to the Plannotator Inbox
Plan review, annotate and code review show a short film about the Inbox once, with Close and Learn about the Inbox. After you close it, it does not show again anywhere.
Smaller changes
- Plan review keeps a plan's versions when Claude Code changes folder between submits, so the Versions tab and the diff stay. #2199, for #2197
- Code review: "Edit Code to Suggest" moves to a new Experimental tab in Settings. #2234
- Every published package is checked before release for settings that could hold an update back without a word, as happened to Pi on 0.28.31. #2238, for #902
- The privacy page's contact email is nowramos@plannotator.ai. #2252
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 npm:@plannotator/pi-extensionOpenCode: Re-run the install script above. It also clears the OpenCode 2 plugin cache.
What's Changed
- test: deflake four tests (clock, shared-events, multiTarget, auto-update SIGINT) by @backnotprop in #2237
- refactor(core): move the Inbox thread's pure rules into @plannotator/core by @backnotprop in #2224
- test(inbox): pixel and DOM parity harness for the thread by @backnotprop in #2222
- Board: "You:" opens the thread where you decide; less padding under the lanes by @backnotprop in #2240
- Settings: Capabilities section (Board, with Experimental inside) in the Inbox; Experimental tab in code review by @backnotprop in #2234
- Inbox: Decide works inside a thread (no global queue) by @backnotprop in #2241
- fix(questions): read a recommendation marked in a choice label, and nudge the agent toward Recommended: by @backnotprop in #2247
- Board: Title-row lane cards, Open/Create thread on the opened card, short titles by @backnotprop in #2248
- Show when feedback or a decision fails to send (Retry, Copy feedback) by @backnotprop in #2242
- feat(inbox): open threads after compaction/resume, reply_to checks, chat-or-Inbox rule, notes refreshed at start by @backnotprop in #2246
- Compose: a Board chip that asks the agent to track the work by @backnotprop in #2249
- fix(questions): a Recommended: line names a markdown label by its plain words by @backnotprop in #2251
- fix(inbox): full screen goes back to where it was opened from by @backnotprop in #2245
- Remove the usage counts for experimental features; keep the flags by @backnotprop in #2259
- Privacy page: contact email is ramos@plannotator.ai by @backnotprop in #2252
- Inbox: a press anywhere in the reply box puts the caret in it by @backnotprop in #1960
- One-time Plannotator Inbox announcement in plan review, annotate and code review by @backnotprop in #2256
- fix: honest wording for Cursor's copy-by-hand Inbox note (follow-up to #2153) by @backnotprop in #2162
- fix(plan): keep a plan's version history when the session cd's into another repo (#2197) by @backnotprop in #2199
- chore(deps): bump motion from 12.43.0 to 14.4.0 by @dependabot in #2202
- Inbox: one Board line for agents while the Board is off by @backnotprop in #2260
- Hover cards for issue, PR and MR links in plan review, annotate and code review (Bun and Pi) by @backnotprop in #2262
- fix(inbox): a closing tab no longer counts itself again after pagehide (notify_reach e2e) by @backnotprop in #2250
- Inbox: action items go in the person's reply by @backnotprop in #2216
- ci: guard every published package against update-blocking fields by @backnotprop in #2238
- Inbox: start a Grok Build session from New message, every reply a real turn (ACP runner, step 1) by @backnotprop in #2174
Community
- @HunterClarke-git: reported in #1392 that feedback could be lost
- @zane668: gave a step-by-step reproduction in #1392 of feedback lost after Plannotator stopped, and reported in #902 the Pi update that stuck on 0.28.31, which the new release check guards against
- @kyletruong: asked in #1991 for the Inbox note in Cursor
- @aomalov: reported in #2197 that plan history lost its versions after a change of folder, and proposed a fix in #2205
Full Changelog :
v0.28.33...v0.28.34 -
π Filip Filmar A Rocket Core on the AX7A200B, over Ethernet rss
FireSim runs simulated RISC-V systems on an FPGA. Its design with one Rocket core, Berkeley’s 64-bit RISC-V processor, now runs on an Alinx AX7A200B board. The host reaches the board over an Ethernet cable instead of PCIe, and the simulated core’s memory is the board’s DDR3. The core loaded programs, printed on its UART, read UART input, wrote an instruction trace, and ran a compute-bound loop at 42.5 MHz effective, on a 50 MHz FPGA clock. The full write-up is a three-page paper: FireSim over Ethernet: A Rocket Core on a Low-Cost FPGA Board (PDF).
-
π Filip Filmar FireSim Over Ethernet on the AX7A200B rss
FireSim’s GCD example now runs on an Alinx AX7A200B board, with the host connected over a plain Ethernet cable instead of PCIe. On the board, a TxHDL unit takes register reads and writes out of raw Ethernet frames and performs them on the simulator’s control port. On the host, a 260-line platform file sends those frames from FireSim’s unchanged driver. Once the board was programmed, the test passed on its first run. The link is slow: FireSim reports an effective target clock of 0.938 kHz.
-
π Filip Filmar Hardware Development with Bazel: the book is out rss
My book Hardware Development with Bazel: Authoring HDL Rules came out on 27 October 2026, in paperback and for Kindle. It has 334 pages. It teaches you to write Bazel rules for hardware: VHDL simulators, verification frameworks and AMD Vivado, up to complete verification and RTL-to-bitstream flows. This post explains who the book is for and what is in it.
Why I wrote it
Hardware teams build FPGA and ASIC designs with Makefiles, TCL scripts and vendor GUIs. Those builds cannot tell what really needs to rebuild after a change. They also often cannot reproduce last year’s bitstream on a new machine, because the result depends on what is installed on the host.
-
π Ampcode News Your Own Self-Hosted Orbs rss
You no longer need to be in a workspace to self-host orbs. Up until now, only workspace admins could manage self-hosted orb providers.
Now, you can add a provider in your personal Settings β Orbs and set it up the same way as a workspace provider. When you create a thread, it shows up under Self-Hosted, marked Personal.

-
