🏑


  1. October 31, 2026
    1. πŸ”— anthropics/claude-code v2.1.316 release

      What's changed

      • Added CLAUDE_CODE_DISABLE_ULTRATHINK, which turns the ultrathink keyword 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_budget on the spend limits admin API
      • Added CLAUDE_CODE_DISABLE_LOOPED_CROSS_CERT_DROP to keep system cross-certificates that certify each other in a loop, for servers whose private CA needs one
      • Added CLAUDE_CODE_SUBAGENT_EFFORT to set the effort level subagents run at when nothing else names one, instead of inheriting the session's
      • Added managed.policy_mode: layered to 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_tagging on 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_system also 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 SHELLOPTS is exported
      • Fixed PowerShell hooks not blocking on exit code 2 when the command begins with a type cast, param, using or an attribute
      • Fixed some network requests hanging when a compressed response was cut off or corrupted
      • Fixed sonnet, opus and haiku on 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, deniedModels and models; a request that names a blocked model now gets a 400 naming the field
      • Fixed claude auth login refusing to run where managed settings require a Claude apps gateway; in a terminal it now shows the gateway sign-in
      • Fixed --restricted sessions 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.allow list 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 -p text output sometimes not saying why auto mode stopped a turn when a background agent was still running
      • Fixed CLAUDE_CODE_AUTO_MODE_SERVER=1 being 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 headersHelper scripts receiving a corrupted CLAUDE_PLUGIN_ROOT and server URL when a credential-named environment variable was set to a switch value such as 1
      • Fixed the SDK register_repo_root control request not loading the CLAUDE.md of a directory outside the working directory (with CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1)
      • Fixed the Artifact tool showing ? for artifact database access rules at the self level, 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 /clear or /resume had 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-review started from the Code tab in Claude Desktop or on the web: cloud and claude remote-control sessions now show the findings card, not a plain-text list
      • Improved /diff on 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 /ultrareview no longer suggests a gh command that gh rejects
      • 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.allow list 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 ultrathink to run its turn at xhigh effort 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 as opus[1m]
      • [VSCode] Fixed saved /btw side-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
  2. October 30, 2026
    1. πŸ”— 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, stop and restart
      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

      What'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 acd no longer makes a new project. Claude Code's own /cd still 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 | bash
      

      Windows:

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

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

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

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

      Pi:

      pi update npm:@plannotator/pi-extension
      

      OpenCode: 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

      Full Changelog : v0.28.38...v0.28.40

    2. πŸ”— 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, stop and restart
      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

      What'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 acd no longer makes a new project. Claude Code's own /cd still 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 | bash
      

      Windows:

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

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

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

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

      Pi:

      pi update npm:@plannotator/pi-extension
      

      OpenCode: 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

      Full Changelog : v0.28.38...v0.28.39

    3. πŸ”— 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:

      1. 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.
      2. 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.
      3. 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.
      4. GitLab : Unpatched GitLab servers are at risk of an attacker gaining full access. A critical security patch for RCE has been released.
      5. 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.
      6. Go : a new release is out, adding a mitigation for the compromised eMudhra intermediate certificate.
      7. 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:

      altProphecy foretold? An XKCD comic from 2007

      And 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:

      altAttackers jumped on the exploit before it was officially announced. Source:Matthew Prince

      Amazon 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:

      altOpenCode under constant attack by bad actors. Source:Dax Raad

      Attacks 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:

      altDefense and attack before AI

      With AI, finding critical vulnerabilities is easier for everybody, including bad actors who can automate attacks as well, and do so easily. The change:

      altAI gives attackers of systems advantages over defenders

      It 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:

      altSource:Deedy Das

      So, let me update the diagram to account for the drastic lowering of the bar to becoming an effective attacker:

      altAI makes it easier than ever to breach systems, for much more people than before

      And we see all of this playing out in practice, starting with publicly disclosed CVEs skyrocketing:

      altThe number of CVEs is skyrocketing. Source:CVE tracker by 0xosprey.com

      We 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:

      1. 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.
      2. 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.
      3. 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.
      4. 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.
    4. πŸ”— tintinweb/pi-subagents v0.22.1 release

      No content.

    5. πŸ”— r/Harrogate Nostalgic old photos of Harrogate North Yorkshire rss

      Nostalgic old photos of Harrogate North Yorkshire | submitted by /u/LowGuide2746
      [link] [comments]
      ---|---

    6. πŸ”— 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)
      
    7. πŸ”— 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

      • e08c8c5 fix: load symlinked OmniShell library directories (#1025)
      • 3002858 fix: scan symlinked OmniShell widget directories (#1020)
      • b035ed4 feat(niri): add edge overscroll with a configurable visible strip (#1000)
      • e6e96a7 fix(shell): retire approvals for disabled components (#1023)
      • fa4ced5 fix(hidden-bar): find menu bar items hosted by MenuBarAgent (#1041)
      • 26179ba fix(shell): show the apple and app menu widgets left of the notch (#1045)
      • ec962e9 Merge pull request #1042 from rickythefox/fix/whatsapp-ghost-column
      • 30bf426 Cover cleanup while the AX destruction probe is suspended
      • 149a4a3 Use a named case struct in lifecycle retirement test
      • cbd5490 Retire ordered-out windows whose AX element is gone on space destroy
      • bee760f Merge pull request #1022 from hezhizhen/codex/fix-permission-prompt-height
      • c4cc667 Merge pull request #1038 from dappermint/ci/canary-skip-docs
      • 243267b feat(canary): skip the build when only docs changed since the last tag
      • ac4ea65 fix(canary): judge renames and non-ascii paths by their real names
      • ad8c962 ci(canary): leave docs-only commits out of the notes
      • f347bd1 Merge pull request #1037 from dappermint/ci/release-branches
      • 85216ed Merge branch 'main' into ci/release-branches
      • f5bef49 ci: match release branches with a slash in the name
      • 11f68df Merge pull request #1036 from dappermint/ci/revert-ghostty-pin
      • 41b38f8 ci: run the workflow on *-release branches
      • 02117cb build: revert the ghostty pin to the published v0.7.5 zip
      • 8bf4574 Merge pull request #1033 from rickythefox/fix/1031-palette-dismiss-fade
      • 1e3c98a Align command palette dismiss fade with reveal fade (#1031)
      • fa23641 Merge PR #1027: Keep window background blur on the outgoing workspace
      • 20e61d2 fix(swipe): capture only listed windows in the outgoing snapshot
      • 19cebf2 Merge PR #1021: Add a pre-commit hook and a direnv shell
      • 0122be1 Merge PR #1019: Check that pinned downloads are published
      • 7431058 fix(swipe): keep window background blur on the outgoing workspace
      • 9e6ebf0 Merge remote-tracking branch 'origin/build/git-hooks-direnv' into build/git-hooks-direnv
      • 750a787 Merge branch 'ci/check-pinned-downloads' into build/git-hooks-direnv
      • ad19868 fix(build): lint the staged swift snapshot in the pre-commit hook
      • 2cba301 fix(ci): skip commented-out pins in the download check
      • 343cdd3 Merge branch 'ci/check-pinned-downloads' into build/git-hooks-direnv
      • 4837927 fix(ci): report a malformed pinned url instead of crashing
      • c55a7a5 build: add a pre-commit hook and a direnv shell
      • 43dfa2a ci: check that pinned downloads are published
      • 052368d Merge pull request #997: expand the Launcher with apps, commands, and scripts
      • b0f72be Move four bundled OmniShell styles over the menu bar
      • d114c71 Merge pull request #1013: preserve native menu below full-width bars
      • aaf1b4c Keep the Welcome window open while its Settings links are used
      • 15b06c8 Add a Welcome window for first launch
      • ba1adbc fix(bar): preserve native menu below full-width bars
      • e7fc23e Update SwiftFormat to 0.64.4
      • cb9a159 Add foot as a Quake terminal provider
      • 244f528 Bound shell file observation to content directories
      • 2698f96 Merge pull request #1005: fix shell settings hot reload after directory symlink retargets
      • 2d56355 Merge pull request #1006: prevent settings from exhausting file descriptors
      • 95f1542 Merge pull request #977: don't identify a sole Hidden Bar item by its tooltip
      • f423dea Merge pull request #1010: check shared library option declarations
      • de93f47 Merge pull request #1003: run the Kitty control tests in Tooling
      • 5fd53ed Merge upstream main into the 0.8.0 work
      • 51d2b26 Document OmniShell consent and program trust
      • 7dc9f34 Ask before OmniShell widgets connect or programs run
      • fb183d4 test(shell): audit shared library option declarations
      • 321f5ea Watch unselected profiles while recovering shell configuration
      • af7718d Require trust for shell programs and control built-in network access
      • 0d4a71e Keep shell watches current after failed or unchanged reloads
      • 385bdd5 Bound shell directory observation file descriptors
      • 2874113 Merge branch 'main' into codex/launcher-apps-commands-scripts
      • 35e0790 Merge branch 'main' into fix/indrive-org-link
      • 748e5e7 Merge pull request #988 from dappermint/feat/spatial-camera-overview
      • 1ea70dc Require consent for OmniShell widget network access
      • dbc1025 fix(overview): cap the raw gesture scale so it stays finite
      • 4305dcb Merge branch 'main' into codex/launcher-apps-commands-scripts
      • b5364f4 Merge branch 'main' into fix/hidden-bar-tooltip-identity
      • 0cd51e2 Merge branch 'main' into feat/spatial-camera-overview
      • 3e05419 fix(launcher): fix the four issues from the #997 review
      • 8c7a3dd fix(launcher): harden shell fallback, CLI scan perf, config decode, UI crash
      • 4675b28 Fix shell settings reloads after directory symlink retargets
      • 50f66f6 ci: run Kitty control tests in tooling checks
      • fff8665 Update the embedded Ghostty to 1.3.2-main+9ee02ae6
      • a62c2bd fix(overview): floor gesture scale and correct rubber-band docs
      • bf2fe72 Merge branch 'main' into feat/spatial-camera-overview
      • 99a22d8 feat(overview): design camera-based spatial overview and add viewport model
      • 62e0477 Extend Launcher with saved entries and CLI tools
      • 02b2b04 fix(hidden-bar): keep tooltips for apps with several items
      • cd939bb fix(hidden-bar): stop using an item's tooltip as its identity
    8. πŸ”— 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 groups list to Claude apps gateway upstreams: only developers in the listed IdP groups are sent to that upstream, on failover too
      • Added guardrail_trace to 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 -p exiting 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 /compact with "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_reference blocks: the request is sent again once without tool search, and the session remembers
      • Fixed TLS connections failing with UNABLE_TO_GET_ISSUER_CERT when 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 logout reporting 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 ultrareview and claude remote-control asking the workspace trust question in a CI job that has a terminal; with CI set 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-dir or --plugin-url plugins 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 forceRemoteSettingsRefresh set 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 /btw answering 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-control sessions 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.excludedCommands setting 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 --resume or --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-sources still 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 /upgrade opening 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, yw and yW carrying on past the end of the line, and made w and W stop 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 p over a character selection ignoring whether the yanked text was whole lines
      • Fixed vim mode aw and iw taking 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 /config are hidden or your organization has turned off Remote Control
      • Fixed ~/.claude/skills/.trash and ~/.claude/plugins/.trash growing without limit: each now holds about 1024 entries, whatever cleanupPeriodDays says
      • 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-sync upload prompt to show the folder, the project and the files it will upload or delete
      • Improved /permissions review 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 /permissions to 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 /config in 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-review now gets a title from it instead of staying untitled
      • Improved --resume speed and memory use on damaged transcripts
      • Improved /context speed 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-api skill: its Datadog setup for API tracing now sends the dd-llmobs-enabled: true header, as the Console does, and its ant install instructions drop the outdated macOS xattr step
      • 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 /ultrareview to check workspace trust before it runs git, as claude ultrareview does
      • Changed the Bash tool's shell to clear any inherited which alias or function and to stop passing exported which/unsetenv functions to commands, so which is the system command or zsh builtin
      • Changed /permissions Recently 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 if conditions such as Monitor(tail *) to match the Monitor tool's shell commands as Bash(tail *) matches Bash's
      • Changed the claude-api skill 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, availableModels or deniedModels leaves 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 (also no and off) to turn hyperlinks off instead of on
      • macOS: Changed git grep in 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_PROMPT to 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 !restart giving 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
    9. πŸ”— 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.

    10. πŸ”— 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.

    11. πŸ”— 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.

    12. πŸ”— 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:

      1. 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.
      2. 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 convertData in some library is called, the agent might register specific lines from .java files showing a call like value.convertData(). Or it might show the results from a grep that show no matches for convertData.

      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.


      1. 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". β†©οΈŽ

      2. 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. β†©οΈŽ

      3. 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. β†©οΈŽ

      4. 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!" β†©οΈŽ

      5. 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? β†©οΈŽ

      6. Even if they aren't actually true. β†©οΈŽ

      7. I did not actually write this text, of course, an agent did. It's pretty convoluted. Sigh. β†©οΈŽ

      8. 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. β†©οΈŽ

  3. October 29, 2026
    1. πŸ”— IDA Plugin Updates IDA Plugin Updates on 2026-10-29 rss

      IDA Plugin Updates on 2026-10-29

      New Releases:

      Activity:

      • dial
        • ffbb19a3: release: v0.2.8
        • d8e4f0c0: test: synchronize terminal input and discovery smoke fixtures
        • 70f5d3fb: release: v0.2.7
      • ida-hcli
        • df82b202: 0.27.3
        • 222ae2be: feat(api): allow download_file to bypass the download cache (#434)
        • 3f975433: ci(style): fail on auto-fixable ruff violations (#430)
      • 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)
    2. πŸ”— 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, stop and restart
      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

      What'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$skill names 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:line in 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 | bash
      

      Windows:

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

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

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

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

      Pi:

      pi update npm:@plannotator/pi-extension
      

      OpenCode: 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

    3. πŸ”— 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 execonnect inside 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.

      Diagram: inside the exe.dev production network, a monitoring VM runs
Victoria Metrics and exe connect. exe connect dials out to the exe.dev exe
connect switchboard. On my development VM, a Shelley session asked to β€œuse the
victoria integration to build a distribution of our disk usage” runs curl,
sending GET /query to victoria.int.exe.xyz; the exe.dev integrations proxy
forwards it through the switchboard to exe connect, which sends GET /query to
Victoria Metrics. Caption: exe connect dials out to the switchboard, so
requests from my VM reach the monitoring server (which isn’t on the public
internet).

      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.

    4. πŸ”— 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
      
    5. πŸ”— 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 (QCollatorSortKey lacks 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_isrc does 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).

    6. πŸ”— 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, stop and restart
      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

      What'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-inbox teaches your agent the Inbox

      The 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.grok setting 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/dsh from DSH's Plugins page, or run dsh plugin --profile <profile> add @plannotator/dsh. /plannotator-review, /plannotator-annotate and /plannotator-last work 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_TOKEN and never stores it. By @franktronics.

      AsciiDoc files

      plannotator annotate opens .adoc and .asciidoc files, 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-in plannotator-markup skill 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_URL sets 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" in config.json). Nothing changes unless you set it. By @utpalsinghdev. #2188, closing #2184
      • --tailscale says plainly when Tailscale Serve is off for your tailnet, with Tailscale's link to turn it on. #2303
      • OpenCode plugin sessions show inplannotator 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 | bash
      

      Windows:

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

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

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

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

      Pi:

      pi update npm:@plannotator/pi-extension
      

      OpenCode: 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 #Heading section 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

      Community

      Full Changelog : v0.28.36...v0.28.37

    7. πŸ”— Console.dev newsletter Sponsor: WarpBuild rss

      WarpBuild - AI agents push more commits. WarpBuild runs GitHub Actions twice as fast at half the cost.

      Visit WarpBuild

    8. πŸ”— 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.

    9. πŸ”— 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.

    10. πŸ”— Console.dev newsletter Sponsor: Coresignal rss

      Agentic B2B search for builders

      Visit Coresignal

    11. πŸ”— 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)
      
    12. πŸ”— HexRaysSA/plugin-repository commits Update known-repositories.txt rss
      Update known-repositories.txt
      
    13. πŸ”— 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 what foo does is already handled by another public function bar. The DRY instinct encourages you to call bar() from within foo. This usually creates problems down the line. Instead, create a new private function and refactor both foo and bar to 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 helper signature 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!

    14. πŸ”— 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.

    15. πŸ”— 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:

      1. 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.

      2. 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:

      1. 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

      2. 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/catch blocks 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 main and 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 bash in favor of add_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 &lt;textarea&gt; 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

    16. πŸ”— 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.

      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.

      Your orb runs Linux with the thread, dev server, and toolchain. 1. It starts a macOS Satellite in about 30 seconds. 2. It syncs your code to the Mac. 3. The Mac builds, runs, and tests. 4. Screenshots, logs, and video come back to the orb.

      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.medium 6 14 GB $2/hour
      mac.large 12 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 a mac.large, or turn off mac.medium under 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.

    17. πŸ”— 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.

    18. πŸ”— 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 audio
      • 1.7B-CustomVoice: comes with nine built-in speakers and instructions
      • 1.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_prompt is a regular argument of generate), 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.

  4. October 28, 2026
    1. πŸ”— IDA Plugin Updates IDA Plugin Updates on 2026-10-28 rss

      IDA Plugin Updates on 2026-10-28

      New Releases:

      Activity:

      • GhidraDec
        • 928255a7: Publish passing backfills incrementally and use a private feed secret
        • ffe9607a: Detach graph callbacks before plugin unload; test repeated GUI lifecycle
        • 37550375: Find IDA 9.5 macOS text-based linker stubs
        • d1c83448: Support Ghidra 12.2 and public SDK revisions; fix headless callbacks
      • ida-sigmaker
        • 608bc217: chore: release v1.15.1 (#96)
        • ef30d03e: fix: declare IDA 9.5 support in the plugin manifest (#95)
      • IDAPluginList
        • 5b051d81: chore: Auto update IDA plugins (Updated: 19, Cloned: 0, Failed: 0)
      • pdb
    2. πŸ”— 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
      
    3. πŸ”— 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.

      The Add Identity Federation Integration dialog in exe.dev, showing the
issuer and subject to configure on the Anthropic
side An Anthropic
LLM integration set to use Workload identity

    4. πŸ”— 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 silently

      What'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-annotate and /plannotator-last work in Qwen Code.

      Ask AI offers a Qwen Code provider when qwen is 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 (-SkipQwen on 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#N links 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 asclaude does, including CLAUDE.local.md and .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 | bash
      

      Windows:

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

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

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

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

      Pi:

      pi update npm:@plannotator/pi-extension
      

      OpenCode: 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, stop and restart in 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

    5. πŸ”— 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
      
    6. πŸ”— 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.

      Claude Opus 5.5 in particular exhibits meaningful improvements in several areas needed to build a compelling game:

      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.

      Screenshot of a web game called Tree Appreciator, a spot-the-difference puzzle showing two side-by-side 3D renders of the same leafy green oak on a grassy hill at golden hour, with orange low-poly hills and a hazy sky behind and pale rocks in the grass. The left tree (Fig. i) has a small brown-and-orange bird perched near the top and a cluster of red-orange autumn leaves in its left canopy; the right tree (Fig. ii) has a small orange squirrel on a branch right of center. Header text: "Tree Appreciator" "No. 001 Quercus aurata 'Silver Echo'" "Golden oak Β· A low hill at golden hour", with sound, book and help icons at top right. A popup over the scene reads: "These two trees grew from one seed." "Three small things differ between them. Tap one in either tree when you spot it." "Drag to turn both trees. Pinch or scroll to look closer." with a "Got it" button. Panel labels: "Fig. i" "Fig. ii".

      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 happening

      Add some NPCs and plenty of furniture and different types of building some with an upstairs - be creative, make it look great

      Here's that first version. It worked really well!

      Screenshot of a low-poly 3D top-down fantasy game showing the interior of a cutaway tavern at dusk, with grass, a lamppost and benches outside. Inside, warm candlelight falls on wooden floorboards: a stone fireplace with a figure in a red armchair on a red rug, a blue armchair with an orange cat on it, a long bar with barrels and bottle shelves where a red-haired barkeep stands, a candle chandelier, a cloth-covered table, small round tables with stools and a blue banner with a gold emblem. A group of three adventurers (a white-haired figure in a blue robe, a red-armored figure with a hammer and a green-clad figure) stands just inside the doorway. Top-left panel text: "Harvest Eve" "17:09" "Tavern & lodging Β· Taproom" "The Gilded Goose" with buttons "Dawn" "Noon" "Dusk" "Night" and a pause button. A speech bubble above the fireplace reads "β™ͺ la la la β™ͺ". A circular minimap sits at top right marked "N". Bottom center prompt: "F Talk to Old Fennick Regular". Bottom-left party portraits labeled "You" "Brakka" "Elowen". A "?" button sits at bottom right.

      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 that

      Add basements to two of the buildings with a tunnel system joining them below the village

      Add the start of a rocky mountain on one side of the village containing a cave with a sleeping troll

      Here's that version.

      Screenshot of the same low-poly fantasy game, now in a dim underground cave lit by a campfire with a spit roast, glowing pale mushrooms and blue crystals. A huge green troll lies asleep on a straw bed at top right, surrounded by scattered bones and skulls. The cave also holds a small round pool ringed with stones, a yellow rug, chests, a fenced pen with a sheep, a pile of orange pumpkins and a stone stair down the left side. The party stands in the center: the green-clad figure and the red-armored figure facing the blue-robed figure holding a glowing staff by the fire, who says in a speech bubble "Smell that? Old brandy and older mud." The location panel reads "Harvest Eve" "17:25" "Underground Β· Under the mountain" "Grumblethorn's Cave".

      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 good

      We'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.

      Emberwick title screen. The 3D village sits in the background. The text reads Every fire in Emberwick was lit from the Hearthstone, and every fire dies at midnight unless it is lit again. Tonight the Hearthstone is gone, the wizard is missing, and the village is sure the troll did it. You came for the festival. Someone has other plans for you. Buttons for: Begin, Build your own places, Restore a save

      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:

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

      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.

      Screenshot of an isometric low-poly pumpkin farming game. In the bottom left, a huge giant pumpkin, far bigger than anything around it, sits in its own fenced plot under string lights. Beyond it are rows of pumpkin vines with a scarecrow and animal visitors (pelicans, beavers and otters) picking pumpkins and browsing the farm stand, plus a red barn, beehives, a cornfield, parked cars and a dock on the water, with fog drifting across. A side panel shows stats for the patch row "Row 3 Β· Warty" with a "Cut 7 β†’ barn" button, and a customer review at the bottom reads "β˜…β˜…β˜…β˜…β˜… Carried our pumpkin like a baby. It was heavier than the baby."

      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 fun

      You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.

    7. πŸ”— 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
      
    8. πŸ”— 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]

    9. πŸ”— 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

    10. πŸ”— 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=none opens nothing

      What'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 system curl. On macOS, curl still 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 update try at once.

      Smaller changes

      • The install scripts carry the checksums of thesem download instead of reading them from the archive's own checksums.txt. #2218

      Install / Update

      macOS / Linux:

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

      Windows:

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

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

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

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

      Pi:

      pi update npm:@plannotator/pi-extension
      

      OpenCode: 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

    11. πŸ”— 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=none opens nothing
      v0.28.21 | Message an agent from the Inbox, video attachments, Open in for attachments, Code / Tests / Generated in code review, writes from other websites refused

      What'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
      • ARecommended: 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 gh or glab on 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 hiddenplannotator telemetry command 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 | bash
      

      Windows:

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

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

      claude plugin marketplace update plannotator
      claude plugin update plannotator@plannotator
      

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

      Pi:

      pi update npm:@plannotator/pi-extension
      

      OpenCode: 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

    12. πŸ”— 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).

    13. πŸ”— 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.

    14. πŸ”— 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.

      The cover of Hardware Development with Bazel

      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.

    15. πŸ”— 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.

      The new thread composer with the orb picker open and my-orbs selected under Self-Hosted, marked Personal