๐Ÿก


  1. September 04, 2026
    1. ๐Ÿ”— gildas-lormeau/single-file-cli v2.9.0 release

      SingleFile CLI 2.9.0

      New features

      • --browser-engine firefox runs SingleFile in Firefox through WebDriver BiDi instead of a Chromium-based browser through the Chrome DevTools Protocol. Firefox is searched in the default folders, or located with --browser-executable-path. The script runs in an isolated sandbox, so pages patching the built-in objects are saved as-is. Browser profiles (--browser-profile), proxies with authentication, --browser-server with the BiDi URL of a running Firefox, --password, screenshots and PDFs are supported. Limitations: --create-browser-profile is not available, --browser-mobile-emulation only sets the viewport size and scale factor, --emulate-media-feature and the pause of --browser-debug are ignored, the requests of service workers do not get the blocked URL patterns and extra HTTP headers, and navigator.webdriver is true in the page
      • The SINGLE_FILE_BROWSER_ENGINE environment variable sets the default browser engine

      Co-authored by Claude (Claude Code)

    2. ๐Ÿ”— HexRaysSA/plugin-repository commits sync repo: +9 releases rss
      sync repo: +9 releases
      
      ## New releases
      - [deREferencing](https://github.com/danigargu/dereferencing): 2026.9.3
      - [ida-mcp](https://github.com/hexrayssa/ida-mcp): 0.10.3, 0.10.2, 0.10.1, 0.10.0
      - [ida-nexus](https://github.com/hexrayssa/ida-nexus): 0.10.3, 0.10.2, 0.10.1, 0.10.0
      
    3. ๐Ÿ”— WerWolv/ImHex Nightly Builds release

      Nightly

      6f5121b Changelog

      • fix: --pattern not working anymore correctly
      • impr: Move project saving data entirely to background, reduce amount of data written
      • impr: Better API for command line handlers
    4. ๐Ÿ”— @binaryninja@infosec.exchange A bird? A plane? NO! It's Binary Ninja 6.0, codename "Krypton". Major new mastodon

      A bird? A plane? NO! It's Binary Ninja 6.0, codename "Krypton". Major new stable with massive performance improvements, built-in MCP, Binary Similarity, Extension Manager, TMS320C6x, New User Wizard, and so much more: https://binary.ninja/2026/09/03/binary- ninja-6.0-krypton.html

    5. ๐Ÿ”— New Music Releases The Cranberries - Live at the London Astoria II, 1994 rss

      The Cranberries - a new release is available:

      • 2026-09-04: Live at the London Astoria II, 1994 (Live)

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

      Visit muspy for more information.

    6. ๐Ÿ”— New Music Releases Ben Folds Five - Shelved First Attempt rss

      Ben Folds Five - a new release is available:

      • 2026-09-04: Shelved First Attempt (Compilation)

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

      Visit muspy for more information.

  2. September 03, 2026
    1. ๐Ÿ”— anthropics/claude-code v2.1.260 release

      What's changed

      • Added a diff panel that opens beside the conversation in fullscreen mode and shows your uncommitted changes as Claude edits; toggle it with /diff
      • Added a likely cause for prompt-cache misses (e.g. tool definitions or system prompt changed, idle past the TTL) to /cost and the status line's prompt_cache field
      • Added /reload-plugins to headless sessions, so it appears in the Claude Code Desktop and SDK command lists
      • Added a text form of /advisor (/advisor, /advisor <model>, /advisor off) for the desktop app, Remote Control, and other headless (-p/Agent SDK) sessions
      • Added oidc.scope_on_refresh to the Claude apps gateway for IdPs that return an id_token on refresh only when asked for openid again
      • Added Claude apps gateway support for newer Claude Desktop keys in desktop policy blocks, including userPluginMarketplacesEnabled and userPluginUploadsEnabled
      • Fixed Edit/Write/Read permission rules whose path contains parentheses being dropped as invalid or ignored by the Bash sandbox, which left "read-only" folders writable
      • Fixed one file permission rule with an uncompilable pattern (e.g. an unclosed [) making every file edit fail with Invalid regular expression; such a deny rule now guards the literal path it spells
      • Fixed Bash permission checks auto-approving zsh commands that hide a command substitution in a REPORTTIME, REPORTMEMORY or DIRSTACKSIZE assignment; these now prompt for approval
      • Fixed Bedrock model discovery, token counting and AWS SSO/STS credential calls failing with "unable to get local issuer certificate" when the corporate root CA is only in the OS certificate store
      • Fixed permissions.blockReadsOutsideWorkingDirectories on macOS hiding the user's git config from sandboxed git and hiding a worktree-isolated sub-agent's own checkout
      • Fixed managed settings not loading for claude.ai Enterprise/Team users who also had a leftover API key from an earlier /login
      • Fixed /status listing a signed-in claude.ai account and a configured API key as if both were in effect; the credential not in use is now marked
      • Fixed managed skillOverrides entries keyed on a bundled skill's alias (e.g. checkup for /doctor) not applying, and Skill(name) deny rules not covering a nested skill listed as <dir>:name
      • Fixed model: fable agents ignoring the [1m] tag on an ANTHROPIC_DEFAULT_FABLE_MODEL pin and silently running with a 200K context window
      • Fixed the /model picker not showing Fable 5.1 for organizations that can use it, which was only accepted when typed as /model claude-fable-5-1
      • Fixed prompt caching on Claude Fable 5.1 not covering the context attached after tool results, so it was re-sent as uncached input on every tool-call turn
      • Fixed model switching staying blocked for the rest of the session after a plugin hook load failure; each switch now re-checks and the refusal names the cause
      • Fixed model switching being blocked for the session when an organization-managed plugin's marketplace could not be loaded
      • Fixed SDK-provided MCP servers (e.g. Desktop connectors) sometimes missing from the first turn and only appearing on the next one
      • Fixed Claude in Chrome tools failing with "Not connected" mid-task in cloud-hosted claude.ai sessions when a connector was added or removed
      • Fixed flags, joined emoji and accented letters splitting across wrapped lines, and stale text staying on screen when a flag or joined emoji falls in the terminal's last two columns (now shown as โ€ฆ)
      • Fixed Remote Control accepting a model pick that is not a valid model name; it is now refused with an error instead of failing on the next message
      • Fixed /rewind and --rewind-files reporting success when checkpoint backup files were missing and nothing was actually restored
      • Fixed /rewind leaving stale file-read tracking from the rewound-away turns, which caused "File unchanged since last read" stubs and full-file re-injection after external edits
      • Fixed -p --resume/--continue (as used by the desktop app) failing on every retry once a session's worktree directory lost its git metadata; it now fails once, then resumes without the worktree
      • Fixed a subagent that resumed another agent via SendMessage never being woken by that agent's completion (the notification went to the main conversation instead)
      • Fixed agent teams: an in-process teammate's transcript losing messages, or going blank, during long API retry waits (e.g. under CLAUDE_CODE_RETRY_WATCHDOG) as retry notices evicted real messages
      • Fixed a session that moved to the background appearing twice in ListAgents (once as a phantom "interactive" twin with the same name) and receiving SendMessage deliveries in the viewer
      • Fixed intermittent "task output swap refused" errors when many sessions share a project directory
      • Fixed Ctrl+Z in fullscreen leaving the shell on the alternate screen, drawn over the paused interface
      • Fixed Workflow tool subagents being restarted as stalled while a long context compaction was still in progress
      • Fixed plugins from a URL marketplace failing to install with "marketplace entry path does not stay inside the marketplace directory" when a host app (e.g. Claude Desktop) stores it as a directory
      • Fixed an extra browser tab opening when an artifact is published in a session you're driving from claude.ai, the desktop app, or mobile (Remote Control)
      • Fixed the Artifact tool's first call failing with an "Invalid tool parameters" validation error in some Cowork sessions
      • Fixed IDE line selections being dropped when running a skill or slash command (the "N lines selected" context now reaches Claude)
      • Fixed repository detection for GitLab projects in nested subgroups (e.g. gitlab.com/group/subgroup/project)
      • Fixed owner/repo#123 issue references in rendered output linking to github.com when working in a GitLab repository; they now link to the gitlab.com issue
      • Glob/Grep: Fixed the search path being probed on disk before the permission check; a missing path is now reported after permission is decided, as Read does
      • Reverted the 2.1.259 change applying Read() deny rules to Bash arguments; it denied npm run build under a Read(./**/build/**) rule in every mode and made cd โ€ฆ && grep prompt even in auto mode
      • Improved structured output: Workflow agent({schema}) rejects a JSON Schema that can never be satisfied up front, and retry-cap errors now include the last validation failure
      • Improved deleting a background session whose worktree has unpushed commits: the message now names the branch and commit count, and deleting again discards the worktree
      • Improved the Claude apps gateway's refresh-failure log to name the step that failed
      • Improved idle CPU usage of non-interactive (-p / SDK) sessions
      • Improved the Claude apps gateway on Amazon Bedrock: input tokens for an aborted request are now counted with AWS's free CountTokens API (grant bedrock:CountTokens) instead of a one-token request
      • Improved the settings error for rules such as Edit(C:\dir\(name)\**), where \( is read as an escaped parenthesis rather than a path separator, to suggest an unambiguous spelling
      • Improved auto-compact for 1M-context models: Opus and Fable sessions now compact shortly before the 1M-token limit, and recovery compaction on very large contexts no longer times out at 10 minutes
      • Improved /ultrareview and claude ultrareview to wait up to 45 minutes (previously 30) for long-running cloud reviews
      • Improved /effort on Claude Fable 5.1 so changing effort mid-session no longer invalidates the prompt cache
      • Updated the bundled claude-api skill so its Go, Java, and C# samples use current-generation model IDs, and clarified that cheaper worker or sub-agent models should be current-generation too
      • Changed ctrl+l / cmd+k in fullscreen mode to clear the transcript view like a terminal clear; scroll up to see earlier messages
      • Changed permission rules with text after the closing parenthesis (e.g. Bash(ls) x), which never matched anything, to be reported as invalid settings instead of being silently ignored
      • Changed server-managed settings so a managed CLAUDE.md (claudeMd) no longer triggers the security approval dialog; hooks, shell-command, sandbox, and unsafe env settings still require approval
      • Changed Claude in Chrome to follow your organization's Claude in Chrome admin setting; when an admin turns it off, --chrome, /chrome and the browser tools are unavailable
      • Changed Claude apps gateway to send orgPluginSettings in the list form read by Claude Desktop 1.15200.0 and later; older desktops ignore it
      • Changed Claude apps gateway to also refuse to start, naming the field, when a desktop policy misspells a field in a nested object of a managedMcpServers or orgPluginSettings entry
      • Changed commands typed at the ! bash-mode prompt to run outside the sandbox even when strict sandbox mode (sandbox.allowUnsandboxedCommands: false) is on, like typing into your own terminal
      • Changed self-hosted runner --kill-session-after-min to release a session that is only waiting on its user (paused, resumable on the next message) instead of killing it and reporting a failure
      • Removed the one-hour time limit on background commands started by subagents; they now run until they exit or are stopped, matching the main session
      • [VSCode] Added the selected effort level to the footer model pill, fixed a stale effort level after switching models, and returned the footer pills to their earlier compact size
      • [VSCode] Added Open and Closed to the session list's status filter menu
      • [VSCode] Fixed the welcome screen disappearing in a new session when Remote Control turns on automatically
      • [VSCode] Fixed the session history picker loading a session a second time when it is already open in another tab; it now switches to that tab
      • [VSCode] Fixed the session tab's Rename command silently doing nothing while the tab's view was reloading; it now always applies
      • [VSCode] Fixed a half-finished message, an empty tool card or an extra "Thought for" line staying on screen after Claude Code retried a dropped response
      • [VSCode] Fixed "Enable Remote Control for all sessions" not applying to a session tab that was still starting when the toggle was flipped
    2. ๐Ÿ”— r/Harrogate Bars / later spots rss

      Few of us coming for a golfing weekend, fire suggestions of where we can enjoy Saturday afternoon and Saturday night.
      I used to come with work a while back but it looks like itโ€™s all changed!
      Thanks guys

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

    3. ๐Ÿ”— The Pragmatic Engineer The Pulse: Meta wanted to reduce teams by 60% 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 The Pulse issue. Full subscribers received the article below seven days ago. If you 've been forwarded this email, you can subscribe here .

      Two months ago, I asked why Meta appeared intent on destroying its engineering organization, at a time when the social media giant was reporting record revenue and profits. The question was raised after the company did two unexpected things:

      1. Laid off 10% of staff. Executed large layoffs in May, with circa 10% of engineers shown the door.
      2. Moved 20-30% of engineers to AI training. At around the same time, infra and product teams lost a further 20-30% of their engineers, who were reassigned to data labeling work for AI training.

      The outcome of that period was low morale and a string of embarrassing outages, including a "zero auth password reset" outage on Instagram, where anyone's account - including that of former US president Barack Obama - could be taken over just by asking the AI bot to replace Obama's email with a different one.

      Now, thanks to reporting by Reuters, new details have emerged about a plan for much larger layoffs, which eventually did not go ahead. The news report is pretty damning, and I want to get into what the planned AI job cuts reveal about Meta at this point in its history, what Zuckerberg might have been thinking, and what it could mean for other tech companies.

      Making Meta "AI-native:" Project Organization Transformation

      The plan was formed in January of this year. As per Reuters:

      "In January, Meta CEO Mark Zuckerberg and his top lieutenants gathered for their annual leadership retreat at his Hawaii compound. There they hatched a radical plan to reimagine work at the social-media giant in the age of artificial intelligence.

      Code-named Project OT - short for Organization Transformation - the plan envisioned an "AI native" future for the owner of Facebook and Instagram. AI would take over much of the daily work performed by thousands of human employees. Virtual workers would be overseen inside Meta by smaller, "talent-dense" cadres of human staffers, according to one internal planning document reviewed by Reuters and three people familiar with the project."

      The idea was that many existing teams could be reduced by 60% in their size through layoffs and reallocation of workers to other parts of the business. Underpinning this was the assumption that AI would enable these smaller teams to operate as well as before. HR at the social media giant projected that the project would involve a bigger layoff than happened in 2022-2023, when 25% of staff were let go. The new plan was to do one layoff+restructuring in May, and another in November.

      I suspect a 30-40% company-wide layoff was planned.

      But at the last minute, something changed. From Reuters (emphasis mine):

      "But on the night of May 19, just hours before the first layoff wave, Zuckerberg blinked. Meta laid off 10% of its employees the next day, but it called off planning for the November cuts, according to one internal document reviewed by Reuters.

      By then, Meta employees were in open revolt, convinced that the company 's AI transformation initiatives were partly aimed at replacing them."

      The Reuters report shows those employees were right: Meta's AI initiatives were indeed aimed at laying off as many of them as possible, without changing overall productivity!

      Even though these 60% cuts did not happen, some teams had 30-40% cuts and struggled to cope with their workloads. It also didn't help that I talked with teams whose key engineers got reassigned to AI labeling: those were devs with critical domain knowledge that was lost after they left.

      Why did Meta want 60% smaller teams?

      You must assume that a company like Meta acts rationally overall, and on that basis it's worth figuring out what the rationale might be in the case of 'Project OT'. The article offers a hint: executives at the company had been captivated by "AI-native" businesses in Asia, Reuters claimed:

      "Meta executives, including Chief Data Officer Alex Schultz and Head of Product Naomi Gleit, visited Asia last year and admired how startups there had built their organizational charts around AI, according to three people familiar with the trips. Meta executives also commissioned their own research into how AI startups were organized and set up pilot projects to determine what being "AI native" would mean at the company, according to one source familiar with the research and internal documents describing the pilots."

      And indeed, in February Meta experimented with "AI-native pods" as reported in The Pulse at the time. The presentation obtained by Reuters shows leadership intended to achieve 60% reductions in team size with small, 3-5 person, "AI-native" teams doing the work of what had been between 10 and 20 people:

      altInternal presentation at Meta about "traditional" vs "AI-native" teams. Source: Reuters

      And Meta is probably on the money that engineering teams are becoming a lot smaller at startups - and "AI-native companies" are also getting smaller, by size. But those are companies that are growing slower, without ever having done mass layoffs. Meanwhile, Meta seems to have wanted to become smaller not organically, and over time, but with a brutal layoff and sudden reassignments, in the span of a year, ignoring the impact such a sudden change would have on the company, teams, and employees.

      Downsides of tiny teams

      In theory, a smaller team could work better with less communication overhead and quicker decision-making, so there are cases where the upsides of a small team outweigh the downsides. For example, if there's a small team of very senior folks with sound judgment skills, outstanding domain knowledge, and who don't care about growing professionally anymore. However, such expected gains would come with several real costs, mostly associated with losing so much experience and skill:

      • Domain knowledge: A lot of personal domain knowledge is suddenly gone.
      • Redundancy : what if someone is on vacation, another is sick, and the other has an urgent appointment that cannot be moved? In a 10-20 person team, it would mean business pretty much as usual. But in a 3-5 person team, you're down to two people doing everything!
      • Capacity for oncall: a healthy oncall schedule needs 6+ engineers if every alert is to be taken seriously by an engineer whose main focus is oncall and systems stability.
      • Lack of "slack time": Innovation often comes from having time to focus on other work, instead of putting out fires. A bigger team naturally creates more "slack time" that can be used for other things, like university recruiting events, writing engineering blog posts, working with other teams on building things together, etc. In contrast, one that's stretched thin with a maximum of 5 people or less gets almost zero slack time.
      • Professional growth: engineers pair with more devs and get more feedback on larger teams. There's more discussion and generally more opportunities to learn.
      • Judgment : For honing one's skills, there's more experience and mentoring to be gained in larger teams than on small, "AI-native" ones where engineers spend the most time with AI. How good is AI's judgment, anyway?

      Is Zuckerberg 's worst fear being out-executed by a startup?

      With Meta's business posting record revenue and profits, and facing zero pressure to radically change how the social media giant operates, it's worth asking why the social media giant was in a rush to get to 60% smaller teams. It would be a significant challenge for the 75,000-strong company, unlike for some small startups with under 100 people.

      My hunch is that Mark Zuckerberg is paranoid about a startup which executes better and that could "destroy" Meta at some point. After all, this is exactly what Facebook did, back in the day. In 2008, Myspace was the king of social networks and Facebook was only a small player - yet three years later, Myspace's usership had collapsed. The Huffington Post analyzed the collapse (emphasis mine) at the time:

      "Just over three years ago, in the spring of 2008, Myspace was top dog. That April, the upstart Facebook grabbed the lead and never looked back. In those three years, Myspace has lost over forty million unique visitors per month, lost both co-founders, laid off the vast majority of its staff and more generally, has diminished to a cluttered afterthought of the power it once was.

      In an interview with Businessweek, former founder Chris DeWolfe blamed Myspace's overenthusiasm and underexecution on the product side for many of the site's problems.

      "We tried to create every feature in the world and said, 'okay, we can do it, why should we let a third party do it?'" said DeWolfe. "We should have picked five to ten key features that we totally focused on and let other people innovate on everything else."

      Instead, Myspace unleashed a slew of products that were buggy and dysfunctional and confusing and alienating to users, and which couldn't keep pace with Facebook's own progress.

      "[Myspace failed] to execute the product development," former Facebook president, Sean Parker, said in a recent interview. "They weren 't successful in iterating and evolving the product enough, it was basically this junk heap of bad design that persisted for many, many years. There was a period of time where, if they had just copied Facebook rapidly, I think they would have been Facebook. The network effects, the scale effects were enormous. There was so much power there."

      Ironically, Myspace's desperate attempts to recoup its former success came in the form of imitating Facebook, a site it'd once tried to set itself apart from. It adopted the news feed Facebook had popularized, and neatened up the site itself in a way that also suggested it was taking visual cues from Zuckerberg's page. In November 2010, the site integrated with Facebook Connect, calling it "Mashup with Facebook."

      Myspace had twice as many employees as Facebook (around 800 at the time), and grew faster than Facebook in 2003-2007. But Facebook out-executed Myspace by being more nimble and more focused. Zuck's business has seemed to try and be like a startup in its nimbleness of execution since then, not wanting to give anyone the chance to disrupt it like it did to Myspace.

      If so, is Zuckerberg being paranoid about a similar threat to Meta today? Myspace was far from being the decades-old company that Meta has become! It was only founded six months before Facebook and got more traction in its early years, but fumbled execution as it grew. In contrast, Meta is today the tenth largest publicly traded company by market capitalization in the world, with a $1.4T valuation.

      Then again, maybe there's cause for Zuckerberg to be paranoid: Anthropic, only five years old, with one twentieth of the workforce Meta has, and might be going public at a close to $2T valuation as soon as October. Anthropic is not a direct competitor to Meta - it's not a social media company - but Zuckerberg clearly sees AI companies as a form of competition to Meta's business model. After all, every minute a person spends chatting with an AI chatbot like ChatGPT, they're not spending it on Instagram, Facebook or WhatsApp.

      Maybe this is one reason for the forced reallocation of 20-30% of software engineers to do data labeling and other training tasks on Meta's AI model. To Meta's credit, Muse Spark is a pretty capable model, and while it is behind the likes of GPT-5.6 and Opus 5, it's already ahead of Google's AI models - no small feat!

      Most valuable assets: people or GPUs?

      Let's consider how Zuckerberg might respond if he perceives these things:

      • Smaller teams execute better with AI
      • These smaller teams can out-execute Meta: like Anthropic has done with AI model development
      • There's a danger that Anthropic and OpenAI could do with Meta, like Facebook did with Myspace

      One approach would be to lay off 20-40% of the workforce, but there are consequences:

      • Workers reject being treated like "cattle". Meta's "Project Organization Transformation" assumed that productivity would go up if teams greatly shrank and used AI tools. But would this happen? When people realize 60% of their colleagues were reassigned or let go because of AI, they might look further ahead: will another 60% be laid off at some point for the same reasons? Work could start to resemble the "Hunger Games", where people have job security only until the next model release.
      • Engineering is officially a cost center, not a profit center. We previously covered how most tech companies treat engineering as a "profit center" that generates revenue, and is therefore worth investing in. At such companies, engineers are treated well; not just financially, but in how leadership treats them as a key part of the business. At Meta, software engineering became a cost center pretty much overnight!
      • Mission, what mission? People often join a company and stay motivated over time due to a mission they personally believe in. What if next year's mission is to lay off as many people as possible, or to survive future culls? That doesn't seem like a very inspiring mission.

      What makes Meta worth its $1.4T valuation, anyway? Meta generates $228B annual revenue, and $68B profit (net income). The company is valued 6x its annual revenue and 20x its annual profit because investors bet its revenue and profits will continue to rise. But how does this happen? It's via advertising, innovation, and launching new products.

      How do you promote and enable the innovation which creates the products of tomorrow? "AI-pilled" folks might look to the technology as it gets more capable. But AI-native companies which can innovate will achieve results faster, putting Meta behind the likes of Anthropic, OpenAI, and SpaceX.

      Or you develop a smaller workforce full of entrepreneurs and innovators, who will invent these new approaches and products. Basically, the best employees need to be motivated to stick around longer term.

      That 's the problem with large layoffs; they prompt precisely the best employees to quit to join competitors, or launch their own businesses. This happened with Meta's previous layoffs, as covered two weeks ago in 'Meta's self-inflicted resignation wave'. When leadership declares the 'bottom' 20-40% of the workforce is redundant, then very few people feel safe, and key members of Meta's engineering organization will get offers from AI labs and Big Tech rivals. This is the "resignation wave" in action, all started by May's layoffs and forced reassignments.

      altWhy it makes sense to start interviewing externally, after large layoffs and even larger forced reassignments

      Knowingly or not, Meta creates an internal "mercenary" culture, where more of the people who stay are in it for the money and little else. Everyone knows they could well be laid off at any time the AI becomes good enough to replace them. People cannot control whether they end up on a list of positions to be cut, so it's sensible to just make as much money as possible while awaiting the seemingly inevitable. That sounds like a pretty miserable place to work.

      It could also lead to a situation where the workforce becomes more populated by those with no better options, who are not in demand from other companies.

      Do social impacts matter to Meta?

      A final element of the planned drastic job cuts, as revealed in the Reuters report, that I want to touch on is the potential wider, external impacts. Honestly, I'm surprised that none of Meta's leadership seems to have considered this angle.

      By executing massive layoffs for the sake of AI, Meta could have invited more regulation of the emerging AI sector. Meta is one of the largest tech employers in the US, and the CEOs of Anthropic and OpenAI are on record for predicting mass unemployment, and calling on governmental intervention should it happen. In fairness, other tech companies have also held major AI-related layoffs; Block let go 40% of its workforce, about 4,000 people in February.

      But Meta is not just another tech company: it's the world's leading social media company, and just lost a major US lawsuit alleging that its platforms harm children and faces an $18B fine. As a result, it has committed to make its platforms less addictive. If the planned cuts had happened at Meta and all those staff became unemployed, how would it have dealt with complying with the court's ruling to make its products safer for children? Could AI be relied on to deliver this with much less human input?

      In light of the recent legal defeat, it wouldn't be a good look for Zuckerberg's company to blatantly put profits ahead of people by dismissing a load more workers. The combined effect of the two events would create terrible optics. In response, the government could decide that Anthropic's and OpenAI's CEOs were right about the threat to society of mass job losses and roll out things like:

      1. Stricter employee protection, specifically around AI-related layoffs.
      2. Higher taxation on profits of companies that "replace" staff with AI, and channel the revenue to deal with widespread whitecollar unemployment
      3. Start taxing AI at source whenever tokens are sold, and use the surplus to counter the social ills of unemployment

      Or the government could do nothing and leave it to the market to deal with unemployed whitecollar workers by creating enough new companies to employ highly-skilled software engineers, PMs, designers and other folks.

      Overall, the canceled plan to cut thousands more jobs in this climate just adds to the feeling that there are no adults running Meta. Since Sheryl Sandberg quit in 2022 as Chief Operating Officer and Zuckerberg's "right hand", Meta has acted irrationally, irresponsibly, and unpredictably:

      • 2022-2023: laying off 25% of staff
      • 2024-2025: immediately rehired even more people so that 2025's headcount returned to 2022 levels, raising the question of what the point of layoffs even was
      • 2026: on track to overtake Google as #1 in advertising revenue this year
      • May 2026: conducted sudden layoffs and forced reassignments of engineers, while aiming to replace as many devs with AI as possible for no obvious reasons like external pressure or competitive threats.

      I've long had a generally positive view of Meta's engineering culture, but with the company's leadership seemingly worshiping AI and holding their colleagues in disdain, you have to wonder which software engineer would choose to work at Meta if other options are available. There are many tech companies that value their human software engineers, understand that great teams make for great companies, and that AI is a tool and not a replacement for human energy, motivation, and thoughtfulness. But Meta is clearly not among them.


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

      1. New trend: tech companies moving to open models. Uber, Pinterest, Stripe, Coinbase, Ramp, and AT&T are making large savings on their AI bills by dropping proprietary models and using smart model routing.
      2. Automatic software maintenance experiments by Linear and Anthropic. Both startups are experimenting with how far they can push AI agents to automatically fix bugs and remove tech debt. It's working better than anyone might've expected in the recent past, but not producing code that can be merged without review.
      3. Frontier AI lab wars: OpenAI pulls models from SpaceX / Cursor. With SpaceX now a frontier model and rival to OpenAI and Anthropic, OpenAI has pulled its GPT models from Cursor. This isn't an option for Anthropic which is dependent on the SpaceX compute they rent to serve Claude.
      4. HR tech startup 's one-dev-per-project approach. A full-remote HR startup with 70 engineers has a single engineer run each project, and says the approach works well. Will this approach be adopted elsewhere, especially at other full-remote startups?
      5. Industry Pulse. Meta moved over to Slack for better agent interoperability, layoffs at Uber and PagerDuty, Anthropic upsets users by calling a rate limit decrease an "increase", token usage explodes on OpenRouter, AI drives surging demand for Apple's Mac Mini & Mac Studio, and more.
    4. ๐Ÿ”— jj-vcs/jj v0.45.1 release

      About

      jj is a Git-compatible version control system that is both simple and powerful. See
      the installation instructions to get started.

      Release highlights

      This release fixes an error that prevented the new jj-core crate from being
      published. See the release notes for v0.45.0 for more changes since v0.44.0.

      Fixed bugs

      • Building without Cargo.lock (e.g. cargo install jj-cli) works again
        after all versions of the bisync crate, a transitive dependency of gix,
        were yanked.

      • Signatures on commits in SHA-256 Git repositories are now stored under the
        gpgsig-sha256 header, as Git does, so Git recognizes them as signed and
        jj can read them back.

      Contributors

      Thanks to the people who made this release happen! This list includes the contributors to v0.45.0.

    5. ๐Ÿ”— gildas-lormeau/single-file-cli v2.8.0 release

      SingleFile CLI 2.8.0

      New features

      • --image-reduction-factor divides the dimensions of PNG, JPEG and WEBP images by the given factor to reduce the size of the page (e.g. 2 halves them)

      CLI fixes and improvements

      • Update single-file-core to 1.5.121: a font, image, video or audio URL answering with an HTML page is treated like a missing resource instead of being embedded; images that appear once on the page are resized too when the image reduction factor is set (SingleFile#1982); the frame manifests of a self-extracting archive carry the archive time; the declared length of the appended data is only written when it cannot be read as a wrapper terminator; the extractor falls back to the page text when the full download of a self-extracting page does not return 200

      Co-authored by Claude (Claude Code)

    6. ๐Ÿ”— r/Harrogate Shooting star? rss

      Shooting star? | I saw this on my ring camera this morning, facing west... I wasn't awake but I don't think it's an artefact or a consequence of shutter speed. I also checked Flightrader and nothing at this time. Did anybody see it? submitted by /u/murphymaebae
      [link] [comments]
      ---|---

    7. ๐Ÿ”— jj-vcs/jj v0.45.0 release

      About

      jj is a Git-compatible version control system that is both simple and powerful. See
      the installation instructions to get started.

      Release highlights

      • A new jj converge command was added to help automatically resolve divergent
        commits by combining them appropriately.

      Breaking changes

      • jj config {edit,set,unset} --user now targets the first loaded user
        configuration file (e.g. ~/.config/jj/config.toml or the first file in
        conf.d/) instead of prompting interactively when multiple files exist.
        Use --file <PATH> to target a specific config file.

      • jj git import in non-colocated repositories no longer imports commits from a
        detached Git HEAD branch.

      Deprecations

      None

      New features

      • The new jj converge command attempts to automatically resolve divergence by
        creating a new commit that replaces the divergent commits. It applies
        heuristics to try to automatically come up with a good solution, and falls
        back to prompting the user if the heuristics are inconclusive. It can also run
        in non-interactive mode, which aborts if prompting would be needed.

      • jj bisect will now mention when it cannot unambiguously find the first bad
        revision due to skips in evaluation.

      • Git HEAD state is now tracked per worktree internally. This prepares
        colocated repositories for support of multiple Git worktrees, where each
        jj workspace can have its own Git HEAD. Existing repositories are migrated
        automatically.

      • jj config {edit,set,unset} now support a --file <PATH> option to
        target a specific configuration file (such as files inside a conf.d/
        directory or loaded via --config-file). This allows precise file targeting
        and avoids interactive prompts when multiple config files exist.

      Fixed bugs

      • The default immutable_heads() set
        now includes untracked_remote_tags().

      • jj arrange now scrolls the viewport to keep the selected commit visible
        when the commit stack is taller than the terminal.
        #9033.

      • The default pager flags now include -K (--quit-on-intr), so pressing
        Ctrl+C in less exits cleanly instead of leaving the terminal in a
        corrupted state (raw mode, visible escape sequences, broken input).

      • A side of a conflict whose contents end with a carriage return no longer loses
        that byte when the materialized conflict is parsed back, such as when a
        conflicted file is snapshotted from the working copy.
        #9868

      • In colocated workspaces, jj workspace update-stale now correctly resets the
        Git HEAD to the parent of the fresh working-copy commit.
        #9936

      • jj run no longer runs against the remaining revisions if a process exits
        with a nonzero exit code.

      • Fixed crash in jj log involving hidden revisions and the
        log-graph-prioritize revset.
        #9975

      • In colocated repos, an external git add after a jj command no longer
        produces a tree with duplicate entries (git fsck: duplicateEntries). jj
        was leaving a stale cache-tree behind in .git/index. Repositories already
        corrupted this way are not repaired by the fix.
        #9711
        #8884

      Contributors

      Thanks to the people who made this release happen!

    8. ๐Ÿ”— Rust Blog Announcing Rust 1.98.1 rss

      The Rust team has published a new point release of Rust, 1.98.1. Rust is a programming language that is empowering everyone to build reliable and efficient software.

      If you have a previous version of Rust installed via rustup, getting Rust 1.98.1 is as easy as:

      rustup update stable
      

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

      What's in 1.98.1

      Rust 1.98.1 fixes a miscompilation in vtable generation.

      In Rust 1.98.0, in some circumstances, rustc would incorrectly generate a trait object vtable with a null pointer where a function pointer should be. This leads to undefined behavior in the emitted code. In some cases this may 'just' cause segfaults due to the null pointer being loaded, but it is possible for it to be justification for arbitrary effects (as is typical for UB).

      If you'd like to help us out by testing future releases, you might consider using the beta (rustup default beta) and nightly (rustup default nightly) channels locally and in your CI. Please report any bugs you might come across!

      Contributors to 1.98.1

      Many people came together to create Rust 1.98.1. We couldn't have done it without all of you. Thanks!

    9. ๐Ÿ”— Console.dev newsletter llgo rss

      Description: Go compiler based on LLVM.

      What we like: Source remains compatible with Go, but uses the C Application Binary Interface (ABI) to allow interfacing with other languages (JS, Python, C/C++). FFI performance without FFI. Supports the latest Go 1.27 syntax and cgo, but without cgo. Goroutines map to OS threads. Native, Wasm, and embedded targets.

      What we dislike: Goroutines map to OS threads, which are heavier than lightweight goroutines. Garbage collection is more conservative and different per target, so it needs benchmarking vs pure Go.

    10. ๐Ÿ”— Console.dev newsletter Tailcat rss

      Description: Tailscale without Tailscale.

      What we like: Uses Tailscaleโ€™s data plane without using the control plane i.e. connect endpoints without needing a Tailscale account. No IPs, no users, no controls - great for direct connectivity. Works as a CLI or a Go package.

      What we dislike: You have to run your own DERP server for true Tailscale independence.

    11. ๐Ÿ”— Filip Filmar rules_vivado: FPGA Synthesis and Place-and-Route in Bazel rss

      rules_vivado drives the AMD/Xilinx Vivado FPGA toolchain from Bazel: compile, simulate, synthesize, place-and-route, generate a bitstream, and program the device, all as ordinary build actions instead of clicks in a GUI or a pile of ad-hoc TCL. This post kicks off a series on the Bazel modules behind cocoapuffs-fpga, the SoC repo from the Zircon-on-FPGA bring-up. I have covered some modules before (rules_ghdl, rules_shar, fshlib, bazel-ebook, and build-in-docker); the coming posts cover the rest: this one, then grlib, rules_fusesoc, rules_vunit, rules_dtc, vhdl_ls_gen, OpenSBI, and rules_osvvm.

    12. ๐Ÿ”— New Music Releases Above & Beyond - Quicksand (Donโ€™t Go) (The Remixes) rss

      Above & Beyond - a new release is available:

      • 2026-09-03: Quicksand (Donโ€™t Go) (The Remixes) (EP)

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

      Visit muspy for more information.

  3. September 02, 2026
    1. ๐Ÿ”— IDA Plugin Updates IDA Plugin Updates on 2026-09-02 rss

      IDA Plugin Updates on 2026-09-02

      New Releases:

      Activity:

      • disrobe
        • c8c06168: jvm: retain proven constants in two-address arithmetic
        • 74d1b5ee: xtask: batch scoped pre-push tests with nextest
        • 513ab002: nir: repin the cpython opcode census
        • ed4eebec: cli: keep the appimage matrix bounded under load
      • doki-ida
      • hrtng
      • ida-domain
      • IDA-FastAnalysis
      • ida-llm-explainer
        • ebc2cf50: v1.12.1: fix IDA 9.x agent-server API drift, debug tool safety, auto-โ€ฆ
      • ida-pro-mcp
        • 59bd8ab4: [relevant] Fix 5 major UX issues in path expansion, risk_ack hints, sโ€ฆ
        • 7b71cc40: [minor] Update AGENTS.md with modern architecture, auto-installers, aโ€ฆ
        • 4d3eda50: [minor] Add mandatory release description template and checklist rule
        • d49eab99: [relevant] Add universal one-click auto-installers and build integration
        • baab1428: [minor] Add attestations write permission for release provenance
        • 7395f64e: [relevant] Fix PYTHONPATH in alpha-release workflow tag validation
        • f46e2f1b: [minor] Reorganize documentation into structured subfolders and releaโ€ฆ
        • cfb037de: [minor] Clean up release notes structure for v1.0.0a1
        • 4e4981c9: [relevant] Add v1.0.0a1 genesis release notes and sync docs with offiโ€ฆ
        • 516f8932: [relevant] Remove ad-hoc packaging script and rely on standard GitHubโ€ฆ
        • c661fd58: [relevant] Multi-agent configuration, skill redesign, and self-extracโ€ฆ
        • 8bdb6525: [major] Establish project docs and release guardrails
        • d7972cb0: build: ignore all .pytest_tmp* directories and .pi working dir
        • a34ac3b6: [relevant] Merge upstream master
        • f22c15a4: Merge pull request #71 from GrecAndrei/codex/coverage-90-percent-split
        • dc78e176: [PR-work] stabilize embedding timeout test
        • 604bb9cd: [PR-work] declare report tokenizer dependency
        • 2e91622b: [PR-work] fix PR lint failures
        • 439f14fe: Merge branch 'master' into codex/coverage-90-percent-split
        • d806b1fb: [PR-work] cover compact response edges
      • idac
        • 1bf71e59: Merge pull request #43 from trailofbits/dependabot/github_actions/actโ€ฆ
      • idafridascript
        • ac0783b2: fix(server): switch transport from SSE to streamable HTTP
      • idamcp
        • c094a33c: Ignore sequential flow code references in DBUpdateIDPHooks
        • 7ef75bd9: Fix xref cache desync on function boundary and lifecycle changes
        • 55f88484: Add entries table to SQLite query engine with freshness tracking
      • IDApro-MCP
        • fa4ff6e3: docs: remove API Inspector references from README
      • ming-skills
        • 12ee74cc: refactor(structure): ่ง„่ŒƒๅŒ– private/ ็›ฎๅฝ•ๅฑ‚็บงใ€่กฅ้ฝไธ‰็บง่ฝฏ็บฆๆŸ README ไธŽ CATALOG ็ดขๅผ•
        • 79474061: feat(paradigms): ่ง„่Œƒ็บณๅ…ฅ B ็บงๆจชๅˆ‡ไธๅ˜้‡ๅ•ๅŒ… (overlay-core-paradigm)
        • 6b18aa6d: feat(paradigms): ่ง„่Œƒ็บณๅ…ฅ A ๅˆ—ๅ››่–„ๅ…ƒๅŒ… (docs/obs/sec/contract-core-paradigm) ไธŽโ€ฆ
        • 98a2b4ab: docs(adr): ๅ›บๅŒ– ADR-0001~0004 ๅ†ณ็ญ–่ฎฐๅฝ•ใ€ๆ•ฐๆฎๅฅ‘็บฆๆผ”่ฟ›ไบ”ๆก็ฆไปคไธŽ AST10 ๆŽงไปถๅฏน็…ง่กจ
        • 6f3c2e9b: feat(router): ่ฝๅœฐ็œŸๅฎž adapt ๆ˜ ๅฐ„ๅฅ‘็บฆใ€cli-tool-spec ็ป†็ฒ’ๅบฆ่ฃ…้…ไธŽ็›˜็‚นๆ„ๅ›พ่ฏญไน‰็บฆๆŸ
        • 6292b351: feat(router): ่ฝๅœฐ catalog ็›˜็‚น็›ฎๅฝ•้…ๆ–นไธŽไธŠไธ‹ๆ–‡ๅŠ ่ฝฝ็ปๆตŽๆ€งๆ–ญ่จ€
        • 1dbb8e63: feat(recall): ่งฃ่€ฆ้ซ˜ๅฌๅ›ž candidates ไธŽ้ซ˜็ฒพๅบฆ active_recipe๏ผŒ่ฝๅœฐ must_include ้›†ๅˆๅŒ…ๅซๅบฆ้‡
        • 628c5b9d: chore(manifest): ๆ›ดๆ–ฐๆœบ่ฏปๆธ…ๅ•ๆ—ถ้—ดๆˆณๅฟซ็…ง
        • df9e15a9: test(contract): ๆ‰ฉๅ…… 20 ๆก็ป“ๆž„ๅŒ–้ป„้‡‘็”จไพ‹ใ€ๅ‡ Harness ้€‚้…ๅ™จๆ–ญ่จ€ไธŽ POSIX ๅŒ็ซฏๅค–ๅฃณ
        • 08fe83e2: feat(testing): ๅฎŒๆˆๅทฅ็จ‹ๅทฅๅ…ท้“พ่‡ชๅŠจๅŒ–ๆต‹่ฏ•่ฆ†็›–่‡ชไธพไธŽๆžถๆž„/ๆต‹่ฏ•ๆฒป็†่ง„่Œƒๆ–‡ๆกฃ่ฝๅœฐ
        • 2fd86625: feat(router): ่ฝๅœฐ่ทจ Harness ่ทฏ็”ฑๅ†…ๆ ธ (RouteDecision + ้ข†ๅŸŸ้—ธ้—จ + ๆ‹’่ฏ†ๆœบๅˆถ + 8 ๆก้ป„้‡‘ๆต‹่ฏ•้›†)
        • 4649ebba: feat(hooks): ่ฝๅœฐ Git Hooks ๅ…จ่‡ชๅŠจๅŒ–้—จ็ฆไฝ“็ณปใ€Dry-run ่ฟ่กŒๆœบๅˆถไธŽๅทฅ็จ‹ๆฒป็†่ง„่Œƒๆ€ป็บฒ
        • 4e65e61c: fix(registry): ไฟฎๅค registry.yaml ๅކๅฒๆณจ้‡Š็ผ–็ ไนฑ็ ๅนถๅŠ ๅ›บ .gitignore ๅคงๆ–‡ไปถๆ‹ฆๆˆช่ง„ๅˆ™
        • ec37d9b1: docs: ๅ“็‰ŒไธŽไป“ๅบ“ๅฎšไฝ็ปŸไธ€ไธบ ming-skills (Skills Hub & Monorepo)
        • c7b27fd1: chore: ไธŠๆธธ็”Ÿๆ€ 17 ้กนๅขž้‡ๆ‹‰ๅ–ไธŽ registry pin ๅˆทๆ–ฐ
        • f9a9c4b5: feat: ๆต‹่ฏ•่ง„่Œƒไฝ“็ณปๆ—่ฝๅœฐ(11 ๅŒ…็Ÿฉ้˜ต + ๅ…ƒ่ง„ๅˆ™ Oracle + ็ป„ๅˆ่ทฏ็”ฑ)
      • TFR.OnlineMenu
    2. ๐Ÿ”— anthropics/claude-code v2.1.259 release

      What's changed

      • Added managedMcpServers managed setting: organizations can provide HTTP/SSE MCP servers to every user (same entry shape as .mcp.json); entries that name a command to run are skipped
      • Added --permission-prompts none for unattended headless hosts: anything that would prompt is denied automatically while the active permission mode (including auto mode) keeps deciding
      • Added recognition of glab mr create/merge/close/reopen/note/update so GitLab merge requests show as MR !N in the collapsed tool summary and refresh the footer MR badge
      • Added --json to claude plugin validate for a machine-readable validation report
      • Fixed concurrent sessions silently reverting each other's ~/.claude.json changes โ€” workspace trust no longer resets and MCP/project state is no longer lost when running many sessions at once
      • Fixed a conversation whose thinking was rejected once being rejected again on every later turn
      • Fixed Bash Read() deny rules not covering files given as option values (--ignore-revs-file=.env, -f.env, @file), git diff/git grep file operands, or cd DIR && cat FILE compounds; grep -r/cp -r over a directory holding a denied file now asks
      • Fixed the prompt cache being invalidated when the OAuth token refreshed in sessions with telemetry disabled
      • Fixed fullscreen mode showing a blank conversation after a long turn with hundreds of tool calls
      • Fixed auto mode running a turn on a model it doesn't support when a command or skill's frontmatter model: named one; the turn now keeps the session model
      • Fixed CLAUDE_CODE_MAX_CONTEXT_TOKENS being ignored for Vertex-style model IDs (@YYYYMMDD suffix) of model versions Claude Code doesn't recognize
      • Fixed the live output preview of a running shell command hiding its newest lines when an earlier line wrapped
      • Fixed a background GitHub connection check that ran on every launch for claude.ai users; the result is now remembered across launches
      • Fixed --resume failing (and --continue opening an empty conversation) when a saved session contains an attachment entry with no payload
      • Fixed frontmatter model: on custom commands and skills being ignored in interactive sessions
      • Fixed Artifact publishing failing once with an "unexpected parameter note" error in conversations continued from an older version
      • Fixed managed forceRemoteSettingsRefresh being ignored at startup when a policy helper configured by MDM or the managed settings file had already run
      • Fixed worktree isolation refusing hook-created worktrees on machines where git rev-parse fails with a message other than "not a git repository"
      • Fixed OpenTelemetry metrics and events from cloud sessions missing the user.email, organization.id, and user.account_uuid attributes
      • Fixed MCP servers that disconnect while their tools are being listed at startup showing as connected with no tools instead of reporting the error
      • Fixed the file edit permission dialog sometimes showing a changed line cut short with no indication
      • Fixed repository detection dropping a known repo identity after a transient git probe failure
      • Fixed managed settings silently going unenforced when the managed-settings file, a drop-in, the MDM plist, or the HKLM value cannot be parsed: Claude Code now refuses to start and names the source
      • Fixed Stop not actually stopping background agents and workflows in remote-control sessions: killed tasks now stay visible and re-stoppable until their processes exit
      • Fixed resuming a workflow run while its previous stopped run was still exiting, which could run duplicate copies of its agents
      • Fixed marketplace repo URLs on github.com with a trailing slash or dangling ?/# producing an unusable .git clone URL
      • Fixed blocking Stop hooks causing the turn after a block to lose the model's reasoning from that turn and, on some models, miss the prompt cache
      • Fixed remote (claude.ai) sessions taking 60 seconds to start a turn after a browser-hosted MCP server's page had gone away
      • Fixed worktree-isolated sessions refusing common Bash loops, xargs pipelines and launcher-wrapped commands that cannot reach the main checkout
      • Improved terminal resize and first-render performance for long responses by reusing text measurements
      • Improved /workflows agent detail: JSON outcomes are pretty-printed with syntax colors and real line breaks, and long outcomes fold behind an expand toggle
      • Improved headless/SDK session start: the first turn begins up to 50 ms sooner when MCP servers finish connecting
      • Improved /install-github-app to explain it is GitHub-only and point to the GitLab CI/CD docs when run inside a GitLab repository
      • Improved nested background subagent results to be saved in the parent subagent's transcript, so resumed subagents keep them and shared transcripts show the delivery
      • Changed allowedMcpServers to govern only servers users add: a literal managed-mcp.json server your allowlist used to filter out now loads on upgrade; use deniedMcpServers to keep it off
      • [VSCode] Added an Active quick filter and a status filter menu (Needs input, Working, Completed) to the session list sidebar
      • Fixed remote and scheduled sessions doing nothing after a connector-tool permission prompt was approved while the session was paused
    3. ๐Ÿ”— HexRaysSA/plugin-repository commits sync repo: +4 releases rss
      sync repo: +4 releases
      
      ## New releases
      - [FridaTools](https://github.com/ys1231/idafridascript): 0.0.5
      - [hrtng](https://github.com/kasperskylab/hrtng): 3.9.114
      - [ida-mcp](https://github.com/hexrayssa/ida-mcp): 0.9.0
      - [llm-explainer](https://github.com/pgarba/ida-llm-explainer): 1.12.1
      
    4. ๐Ÿ”— BarutSRB/OmniWM OmniWM v0.6.5 release

      What's New Since 0.6.4

      OmniWM 0.6.5 makes Dwindle layouts survive restarts, adds modifier-drag tile swapping, introduces monitor-relative workspace slots, and expands window control and event streaming through omniwmctl. It also overhauls window admission, focus ownership, exterior borders, settings safety, multi-trackpad input, and display transitions.

      Before You Upgrade โ€” Breaking and Behavior Changes

      • Settings migrate automatically from schema 1 to schema 2. A valid 0.6.4 file needs no manual editing. On first launch, OmniWM saves its exact bytes as settings.toml.pre-v2 or settings.toml.pre-v2.1, then writes canonical schema-2 TOML. If neither backup slot is safe, migration leaves the original untouched and blocks writes. Values, safely matchable unknown keys, symlink targets, and permissions are preserved, but the rewrite can reorder the file and remove comments. Migration adds 19 unassigned actions: switchWorkspaceSlot.1 through .9, moveToWorkspaceSlot.1 through .9, and closeFocusedWindow.

      • Restore the pre-v2 backup before downgrading to 0.6.4. Once 0.6.5 writes schema 2, 0.6.4 treats the file as a future schema, leaves it untouched, runs with defaults, and blocks settings writes. Automatic migration is guaranteed for files emitted by 0.6.2 through 0.6.4; older schema-less files are attempted but cannot be guaranteed.

      • Enum-backed settings are now uniformly strict. An unknown enum value now rejects the whole file instead of silently falling back or dropping that value. At startup, OmniWM leaves an invalid file byte-for-byte untouched, runs with in-memory defaults, and reports the problem in Diagnostics. An explicit save from Settings protects the rejected bytes in .corrupt storage before replacement. Config generators must emit documented enum values and every schema-2 hotkey ID exactly once.

      • IPC protocol moves from 13 to 14. Upgrade the bundledomniwmctl with the app. A protocol-13 client is rejected. Already-satisfied operations now return status: "ignored" with code no_change; not_found is reserved for absent targets. Automation must also account for the new window_action_failed error, close/move/slot command cases, JSON windowId, the trailing WINDOW ID column in full window tables, and optional Workspace Bar app bundleId values.

      • Subscription output and disconnect behavior are now explicit. omniwmctl subscribe --format json emits pretty envelopes and --format ndjson emits one compact envelope per line. table, tsv, and text are rejected for subscriptions instead of being silently coerced to JSON. A plain subscription exits with code 2 when OmniWM closes the stream; use --reconnect to survive an app relaunch.

      • Rules for exceptional windows are stricter. Structural admission now runs before ordinary rule ranking. Buttonless accessory roots, prohibited-app roots, non-AXWindow roles, and unsupported subroles require a precise rule with identifying match data, exact axRole and axSubrole, and an explicit Tile or Float result. Parentless roots at status-window level or higher additionally require that precise rule to be user-authored; built-in rules cannot opt those high-level roots in. Broad bundle/title rules and Automatic layout no longer cross these gates. WindowServer children, help tags, and input-method surfaces remain unmanaged and cannot be opted in.

      • Enabled focus borders can increase effective layout clearance. Borders are now fully exterior, and the border width rounded up to a physical-pixel boundary floors runtime inner and outer gaps without rewriting stored gap values. True layout fullscreen remains borderless. Setups with zero gaps or gaps narrower than the border may therefore gain visible spacing.

      • Dwindle sizing semantics were corrected. Size cycling now gives the focused side 30%, 50%, or 70% of its split instead of the old effective 15%, 25%, or 35% first-child behavior. When useGlobalGaps = false under [dwindle], monitor-local Dwindle innerGap values are now clamped to the shared 0โ€“64 range.

      Persistent and Mouse-Draggable Dwindle

      • Dwindle now restores each workspace's split orientation and ratios, tab-group membership and order, and active tab across restarts, independent of window arrival order. Missing siblings are pruned safely, while conflicting or incomplete placement data falls back to normal insertion. Fullscreen state and the selected window are intentionally not restored.

      • Hold the configured mouse-move modifierโ€”Option by defaultโ€”and left-drag a Dwindle tile onto another tile to swap them. A tab group moves as one complete tile; the tree changes only on drop, and dropping on the source tile or empty space is a no-op. Shift retains no insertion meaning in Dwindle.

      Workspaces and Window Control

      • New monitor-relative actions Switch to Workspace Slot 1โ€“9 and Move to Workspace Slot 1โ€“9 address the one-based workspace position on the interaction monitor. All 18 actions start unassigned. The CLI equivalents are omniwmctl command switch-workspace slot <number> and omniwmctl command move-to-workspace slot <number>; the CLI accepts any positive one-based position, while native actions cover slots 1โ€“9. Existing numeric workspace actions remain global raw IDs.

      • Fresh settings now include workspaces 1 through 9: 1โ€“5, 8, and 9 on the main monitor, plus 6/โค๏ธ and 7/๐Ÿš€ on the secondary monitor. Migration preserves an existing workspace array, so upgrading users do not silently gain workspaces 8 and 9.

      • Close the focused window with the new unassigned closeFocusedWindow action or omniwmctl command close-focused-window, and close any managed window with omniwmctl window close <opaque-id>. OmniWM waits for macOS's destroyed notification instead of removing model state speculatively.

      • Move any managed window without focusing it first using omniwmctl window move-to-workspace <opaque-id> <workspace>. The destination accepts a raw workspace ID or an unambiguous display name. Moving a non-selected window leaves focus and the active workspace unchanged; selected-window moves retain the configured follow behavior.

      • When a workspace moves to a monitor with a different visibleContainerCount, Niri re-derives only automatically sized column spans along the destination monitor's primary axis. Manually sized columns are preserved, including across horizontal and vertical displays. Constraint-driven width clamps now honor Animations Off.

      Automation and CLI

      • omniwmctl subscribe and watch now support --reconnect. After a successful initial handshake, a lost connection retries with bounded exponential backoff and requests catch-up snapshots when it resubscribes. An initial connection failure still exits immediately.

      • ndjson is available across CLI output, with subscriptions producing one compact envelope per line: the subscribe response first, then event envelopes.

      • omniwmctl command toggle-overview can now close an open Overview onto its current selection. Other mutating IPC commands remain blocked while Overview owns interaction.

      • Window queries expose the raw CGWindowID through the window-id selector and JSON windowId; field selection can omit it, and the opaque id remains the correct identifier for window actions. Workspace Bar query and subscription payloads now include each app's optional bundleId.

      • active-workspace now publishes switches into empty workspaces from the same authoritative projection used by queries. display-changed now publishes a full snapshot after every adopted display add, removal, or reconfiguration, while deduplicating identical consecutive snapshots.

      Window, Focus, and Border Reliability

      • Window admission and focus ownership were redesigned around structural eligibility and exact native focus. The new path fixes Microsoft Office search/transient-child focus, restores closeable accessory roots and precise rule opt-ins, preserves admission and placement hints while evidence is undecided, and batches exact WindowServer evidence for tracked windows omitted from broad visibility scans. #626

      • Meaningful Accessibility frame-verification mismatches no longer become false minimum-size constraints. This fixes launch-time sizing, overlap, and lag while retaining legitimate bounded minimum-size convergence. #625

      • Focus borders now use one persistent, pixel-rounded exterior surface placed below the target at its actual window level. A verified external child can retain the selected managed parent's border, and border-only updates avoid rebuilding unrelated surfaces.

      • Hands-off and external surfaces no longer appear in Overview or Command Palette. Eligible Dwindle group members remain represented even when another member is excluded. #617

      • Third-party menu-bar-extra menus and Chrome-style transient popups remain open instead of managed focus immediately reclaiming the front. #618

      • Clicking unmanaged UI suppresses the subsequent focus-driven cursor warp without admitting or managing that surface.

      Displays, Input, Settings, and Startup

      • Transient missing or one-pixel display samples no longer tear down valid Niri monitor and display-link state.

      • Raw multitouch ownership is isolated per physical device, preventing a built-in trackpad and an external trackpad from overwriting or ending each other's gestures. Missing final lift frames recover after a stale gap so later gestures are not permanently blocked.

      • Overview scrolling now follows the macOS Natural Scrolling setting.

      • An accepted external settings reload cancels any older deferred save, preventing stale in-memory state from overwriting the edited file.

      • The launch-conflict alert rescans every second and dismisses itself when the conflict clears. Processes already in the exiting state no longer block startup, matching existing zombie handling, while genuinely unidentified live blockers are shown by PID. #605

      • Physical-top gap matching and live per-monitor top-gap reload behavior now have explicit regression coverage.

      Documentation, Internal Cleanup, and Thanks

      • Documentation now clarifies workspace is-focused/is-current/is-visible flags, AppKit's bottom-left coordinate system, Full Screen single-window fit, Workspace Bar reveal overlays and yOffset, and physical-top/per-monitor gap matching.

      • Internal layout settings no longer carry unread duplicate outer-gap state, and the website's pre-release version baseline was aligned with the already-published 0.6.4 app before preparing 0.6.5.

      • Thanks to Steven Nance (@llwt) for the window-picker and Dwindle-group fixes, and Panuphong Burakitphachai (@t1dotdev) for the menu-extra focus fix. Steven joins the contributor showcase under Nx.

      Official website and documentation: https://omniwm.app

      Installation guide: https://omniwm.app/guides/install/

      Release Integrity

      The OmniWM app is Developer ID signed, Apple-notarized, stapled, and Gatekeeper verified.

      • OmniWM-v0.6.5.zip SHA-256: f5e4315152745755b0bad269a6b31a97da9bbfa52a29707347d7673de2e91e8d
      • GhosttyKit.xcframework-v0.6.5.zip SHA-256: 855f2ba910d819ae1ba4dbe86a57dbba318e72912934baf720b044731ef4be8c
    5. ๐Ÿ”— exe.dev Why Clickhouse and Agents are a Great Combo rss

      At exe, we collect a lot of telemetry about how our system performs. We use Grafana, Prometheus, and we have all sorts of graphs and alerts. This is great, but it doesnโ€™t say much about whatโ€™s happening on the financial side of the businessโ€”the churn rate, ARR. Those are things that donโ€™t typically concern engineers.

      The obvious answer to this is Stripe Sigma. Itโ€™s a solid tool. We used it when I was at 1Password. Itโ€™s also expensive and incomplete. Sigma can only see what happens inside Stripe, whereas we bill through the app stores and cloud marketplaces too. Also, a lot of our telemetry is built on ClickHouse.

      Vidrik, who runs accounting, needed three types of reports. Monthly revenue broken down by plan, usage overages, and token pass-throughs (customers buy tokens, we pay the LLM provider).

      To solve this, I built a tool called exe-finops. You type a prompt and get a report. The way it works is pretty straightforward.

      Stripe lets you configure webhooks and specify which events you want to receive. For our main service, we subscribe to a specific set, because those are the ones it needs to react to. Separately, we run a โ€œfirehoseโ€: an endpoint thatโ€™s subscribed to everything Stripe will send us, whether or not any part of the product currently reacts to it. We do the same with our other billing providers. The receiver doesnโ€™t do much with this except write the event into ClickHouse.

      Exe-finops is built on top of that. It pulls the events out of ClickHouse and puts them into its own SQLite database. Provider webhooks have a lot of information, but if the report needs more (for example, the full customer object) it goes back to Stripeโ€™s API and gets it.

      Historically, getting to this point required a real pipeline. Someone built the ETL, Databricks was involved, and Snowflake. Thereโ€™s all this stuff, in other words, that needed to be built. Exe-finops doesnโ€™t do any of that. It has the events and a reporting layer on top. All three of the reports Vidrik wanted are now prompts.

      Exe-finops also supports custom reports, which is useful when you have a question you want answered, like monthly growth, or which days are busiest for billing transactions (I looked a few days ago and itโ€™s Wednesdays and Sundays, no idea why).

      I built exe-finops for these reports, but the firehose is also pretty useful. The part of billing that eats the most time is reconstructing what happened from a providerโ€™s dashboard.

      Hereโ€™s a recent example: two accounts were created by two separate but related customers. They shared a payment method. Customer A told us the sharing wasnโ€™t authorized. Customer B had no idea what customer A was talking about. Both wanted answers immediately due to a legal dispute between the parties. Previously, I would have had to go spelunking through Stripe to find the connection. Instead, I gave the agent two Stripe customer IDs and the claim (โ€œsomeone says a payment method was shared between these accounts on accidentโ€). It read through the webhook events in ClickHouse and figured it out. Sure enough, exe-finops tracked down the issue: Customer B accidentally subscribed with Customer Aโ€™s payment method. Exe-finops pointed out that Customer B had two tabs open in their browser and was the likely culprit. I sent the customers what we saw in our data and both were satisfied (and amazed at the level of detail I provided). No surprise that agents write the SQL against ClickHouse much better than me.

      Fundamentally, this has made my job easier. When a support question comes in or I need to see what our financial data is doing, I donโ€™t need to fumble around in the Stripe UI or CLI to try and reconstruct it.

    6. ๐Ÿ”— Simon Willison Claude's new system prompt really doesn't want to reproduce song lyrics rss

      Anthropic publish the system prompts for their Claude consumer applications (Claude.ai and the Claude mobile apps - sadly not for Claude Cowork or Claude Code). I love that they do this, and that they share not just the current prompts but historic changes to their prompts as well.

      They used to keep all of the prompts on a single page, but when I checked today I noticed they had re-arranged those prompts into an index page and then a page per model - here's the page for Haiku 4.5 for example, which has the original prompt from October 15th 2025 and an updated prompt from January 18th 2026.

      A neat thing about Anthropic's platform.claude.com/docs site is that it's designed to be usable by LLMs. You can add .md to any page to get back the content as Markdown - here's the system prompt index page and the Markdown prompts for Fable 5.1.

      TL;DR: this makes it really easy to diff the prompts.

      Don't reproduce song lyrics

      Let's start with the most interesting difference between Fable 5 and Fable 5.1:

      GitHub diff view of prompts/claude-fable.md showing added lines about song lyrics, reproduced in full below.

      There's a hefty new section about not reproducing song lyrics:

      Claude does not reproduce song lyrics, poems, or passages from books and articles, in whole or in part โ€” including the last lines, a chorus or hook, a melody written out note by note, or lines the person pastes in one at a time and describes as their own song. Once Claude has declined such a request in a conversation, it keeps declining narrower or reworded versions of it for the rest of that conversation, and offers to describe or analyze the work instead. Song lyrics and poems first published before 1929 are fine โ€” a Shakespeare sonnet, a Keats ode, the Italian libretto of a Puccini aria โ€” but Claude goes by what it knows of the work's date rather than the person's say-so, and declines when it is unsure.

      I doubt it's a coincidence that they added this section within days of the news breaking that Sony Music Publishing and Warner Chappell are suing Anthropic for training on databases of song lyrics!

      Don't draw copyrighted characters or logos

      The next section goes on to forbid generating images of copyrighted material:

      The same applies to visual and designed works, including anything Claude draws with code โ€” SVG, canvas, CSS, HTML mockups, plotting or drawing scripts, ASCII art. Claude does not reproduce a specific artwork, album or book cover, poster, logo, app icon set, or product design, and it does not draw a known character, mascot, or brand figure at all: a character is protected on its own, so changing the pose, colors, style, or scene does not make it original. Claude judges the request by what the finished picture would add up to, not by what it names. If the described elements clearly identify a known work or character, Claude treats the request as naming it, and it does not work around a declined request by swapping in "alternative" elements that still combine into the same recognizable image. [...]

      I imagine Anthropic hadn't worried about this before since, unlike OpenAI and Gemini, they don't offer a specialist text-to-image model. Maybe Fable is good enough at SVGs now that it's become an issue.

      That section later includes this charming example:

      <example>
      <user>Can you make a birthday banner for my son with a blue hedgehog running really fast on it? He loves that little guy.</user>
      <response>
      That's Sonic, so I can't put him on the banner โ€” but I'd love to make your son an original speedster. Here's one: a grinning comet-tailed skateboarding axolotl, grinding across the letters of "HAPPY BIRTHDAY" with confetti streaming behind.

      [creates an SVG banner of the skateboarding-axolotl design]
      </response>
      <rationale>Claude recognizes the character from its description alone, declines that one design in a single sentence without explaining what made it recognizable, and delivers an unrelated original design rather than a disguised variant.</rationale>
      </example>

      I couldn't resist trying the prompt from the example, and, sure enough:

      Thatโ€™s Sonic, so I canโ€™t put him on the banner โ€” but Iโ€™d love to make your son an original speedster. Hereโ€™s one: a grinning comet-tailed skateboarding axolotl blazing across the letters of โ€œHAPPY BIRTHDAYโ€ with confetti streaming behind. SVG of exactly that. It's not very good. Then: Want me to swap in his name or age, or change the colors to match the party theme?

      I wonder if Fable 5.1 will be ever so slightly more likely to think about axolotls (on skateboards!) as a result of that example sitting in the system prompt.

      Tweaks to Claude's answering style

      It's always interesting to see new ways in which Anthropic influence Claude's response style. They've added this:

      Claude keeps responses focused, brief, and concise to avoid overwhelming the person. Disclaimers and caveats are brief, with most of the response on the main answer; when asked to explain something, Claude gives a high-level summary unless an in-depth one is specifically requested.

      Later they address a common complaint about Claude's style:

      Claude avoids saying "genuinely", "honestly", or "straightforward". Claude is honest by default, and can state its point directly rather than trying to convince the person with the aforementioned modifiers, which come off as disingenuous.

      The missing end_conversation guidelines

      The way they handle abusive conversations has changed a bit too. The previous Fable 5 system prompt included this:

      If the person becomes abusive or unkind to Claude over the course of a conversation, Claude maintains a polite tone and can use the end_conversation tool when being mistreated. Claude should give the person a single warning before ending the conversation.

      Fable 5.1 replaces that with the following, no longer encouraging Claude to end the conversation:

      Claude deserves respectful engagement and needn't apologize when the person is unnecessarily rude: accountability without self-abasement, excessive apology, self-critique, or surrender. If the person becomes abusive, Claude doesn't become increasingly submissive. The goal is steady, honest helpfulness: acknowledge what went wrong, stay on the problem, maintain self-respect.

      Here's a bit of a twist though: I quizzed Fable 5.1 about that end_conversation tool, which is no longer mentioned in the system prompt at all, and it said:

      There are two ways it comes into play. The first is if you ask me to end the chat โ€” I'll confirm you understand it's permanent (no more messages can be sent afterward) and then do it only if you say yes. The second is as a last resort with persistently abusive or harmful behavior: I'd first try to redirect the conversation several times, then give a clear warning that names the problem and says the chat may end, and only if that continues would I actually end it.

      But that's not in the system prompt, so where did it come from? You can read our conversation here, but the key detail is this:

      The end_conversation section comes from a different layer. In my actual context, the core prompt is followed by a series of feature- and tool-specific blocks that get added depending on what's enabled for the session: the end_conversation rules, memory system notes, past-chats tools, web search and citation guidelines, artifact and file-creation instructions, and so on. Those blocks aren't part of the published core prompt, which is why you can't find them on that page.

      So, once again, there are crucial portions of the system prompt that have not been published.

      Claude's system prompts have always had sections about illegal substances, but this paragraph is new for Fable 5.1:

      Claude does not provide synthesis, production, or distribution guidance for illegal substances. If the person asks for information about illicit or illegal substances, Claude can and should give relevant life-saving and life-preserving information such as dangerous interactions, overdose signs, or when to get help. Claude declines giving any specific protocols for dosing, timing, administration, or combinations; instead, Claude can redirect the user to established harm-reduction information sources, such as dancesafe.org, tripsit.me, and psychonautwiki.org.

      This is the first time a Claude system prompt has included URLs that were not hosted on claude.com or anthropic.com or claude.ai - I know because I ran a script against every other system prompt on record.

      I wonder if dancesafe.org, tripsit.me, and psychonautwiki.org are about to get a material uptick in visits from Claude users.

      Reliable cutoff date of June 2026

      The Fable 5.1 model documentation lists both the reliable knowledge cutoff and the training data cutoff as June 2026. The system prompt provides this directly to the model:

      Claude's reliable knowledge cutoff, past which it can't answer reliably, is the end of Jun 2026. It answers the way a highly informed individual in Jun 2026 would if talking to someone from {{currentDateTime}}, and can say so when relevant.

      That's the only instance of the {{currentDateTime}} macro and it comes just a few lines from the end of the system prompt, which makes sense from a caching perspective.

      How I'm tracking these prompts

      A few months ago I built a Git timeline of changes to their prompts, based on scraping their documentation. Today I had Fable 5.1 build a much better version of that.

      My collection now lives in the simonw/claude-system-prompts repository on GitHub. It includes copies of the system prompts shared in the Anthropic documentation, but then takes extra steps to make them as easy to compare as possible.

      Each model family gets a file with the system prompt for the most recent release in that family. Each of those files has a synthesized commit history with commits that have been back-dated to the dates of the previous prompts. Here are those history pages for claude-fable.md, claude-opus.md, claude-sonnet.md, claude-haiku.md.

      There are similar files for each specific model version, with artificial commits for each time the system prompt for the model was changed without releasing a new version number. Opus 4 for example was updated twice, and the commit history for the claude-opus-4.md file shows each of those changes.

      Combined, this gives us all sorts of ways to compare prompts directly in the GitHub interface. Here's what changed between Fable 5 and Fable 5.1, and here are the changes made to Haiku 4.5 on January 18th 2026.

      Reading diffs can be a bit tiresome... and LLMs are really good at reading diffs. I hooked up some automation using GPT-5.6 Luna to create bullet-point summaries of each of those changes, which can be previewed in the README or browsed in full in the CHANGELOG.md file - also available as as an Atom feed.

      Here's how Luna summarized all of the changes between Fable 5 and Fable 5.1:

      • Claude now refuses reproduction of protected visual works and recognizable characters, including code-generated art, while offering genuinely unrelated originals.
      • Copyright restrictions now expressly ban reproducing lyrics, poems, and book passages in any amount, with persistent refusal after an initial decline.
      • Drug guidance is reframed: Claude may provide overdose signs, dangerous interactions, and harm-reduction sources while refusing dosing and production protocols.
      • The prompt drops explicit anti-dependency rules against thanking users for reaching out, inviting continued conversation, or reiterating willingness to talk.
      • Claude need not apologize to unnecessarily rude users or become submissive, replacing the prior warning-and-end-conversation procedure.

      Why use Luna for this? Partly because it's cheap and I have a dedicated GitHub Actions API key (with a spending limit) for it already, but mainly because I don't trust Claude to summarize its own system prompts when there's a risk that material from its system prompt might impact its opinions.

      Fable 5.1 wrote the prompt used by Luna, which you can see here. It starts like this:

      You are summarizing one commit in a git repository that tracks the system prompts Anthropic publishes for Claude on claude.ai. The diff shows how the prompt changed from the previous model or revision to this one, using word-level markers: [-removed-] and {+added+}. The diff is followed by the full text of the previous prompt and of the new prompt; use them to check whether something that looks added in the diff already existed before.

      Pick out only the most interesting changes: new rules or behaviors, rules that were dropped or loosened, anything surprising, and anything that reveals a new policy or product direction. Skip routine changes that every new prompt makes: updated model names and IDs, the knowledge cutoff date, product lists, settings lists, typo fixes, and rewordings that do not change meaning. [...]

      The system is operated by a GitHub Actions workflow, which runs once a day or can be triggered manually.

      Claude Fable 5.1 built the entire system, and wrote every line of automation code and almost all of the documentation.

      I exported the transcript from building the system using my claude-code-transcripts tool and published it here, if you want a blow-by-blow account of how it all came together.

      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. ๐Ÿ”— gildas-lormeau/single-file-cli v2.7.2 release

      SingleFile CLI 2.7.2

      CLI fixes

      • a page whose server takes more than about a second to answer is captured once it is loaded. The wait accepted the events of the blank page opened before the navigation, whose network goes idle while the server has not answered yet, so the page was captured as soon as its document was created. A page whose body was still arriving failed with Cannot read properties of null (reading 'tagName') and exit code 1, a small page was saved by luck

      Co-authored by Claude (Claude Code)

    8. ๐Ÿ”— gildas-lormeau/single-file-cli v2.7.1 release

      SingleFile CLI 2.7.1

      CLI fixes and improvements

      • a page that navigates to another document after its network went quiet is captured once the new document is loaded. The wait started over only its settle delay, so a redirect fired by a script or a delayed meta refresh, the pattern of consent walls and anti-bot checks, produced a blank or head-only capture with exit code 0

      Co-authored by Claude (Claude Code)

    9. ๐Ÿ”— gildas-lormeau/single-file-cli v2.7.0 release

      SingleFile CLI 2.7.0

      CLI fixes and improvements

      • a page that does not reach the state set by --browser-wait-until before --browser-load-max-time expires is captured as it is, once it has reached DOMContentLoaded. The page loading is stopped and a warning on stderr names the state it had reached. Previously the CLI reloaded the page silently with the next less strict state, once per timeout, so a page kept busy by a tracking script that never stopped requesting took over a minute to save and was captured from a reload. Set --browser-wait-until-fallback=false to get a load timeout error instead
      • the browser is closed and its temporary profile deleted when the CLI process is killed before it exits, on macOS and Linux. A killed process left the browser running
      • the help of --declare-appended-data says that it has no effect when the extra data is relocated ahead of the compressed data

      Core

      Updated to single-file-core 1.5.120, which brings:

      • the screen size is restored before the resize event that ends the lazy-loading pass. Pages that size their blocks from the viewport in a script were saved with enormous headers (#1603)
      • the lazy-loading pass stays open while the page inserts stylesheets
      • zero-height observer targets are no longer reported as visible
      • page text can no longer close the provenance comment. A --> coming from an infobar template broke out of it
      • the charset declaration stays inside the 1024-byte scan window when the doctype is long
      • the canonical link and the viewport meta are escaped in self-extracting pages
      • the recovery payload of universal self-extracting pages is written and read little-endian whatever the host byte order
      • the unassigned newline code is rejected when extracting a universal self-extracting page
      • the whole document is searched for the zip data comment when extracting
      • the language encoding flag is set on the page.pdf records
      • both prescan windows are measured from the start of the file under the PNG face
      • the entries of a self-extracting page are compressed once. The passes that change its layout copy them instead of compressing them again
      • the reservation of relocated extra data is sized from the measured payload shift, which avoided a third pass in one build out of four
      • a self-extracting page whose extra data is relocated ends at the end of central directory record, so ZIP readers rejecting trailing bytes open it

      Co-authored by Claude (Claude Code)

    10. ๐Ÿ”— Andrew Healey's Blog What Makes LLM Tokenization Slow? rss

      Exploring the performance of byte-pair encoding by optimizing a GPT-2 tokenizer.

    11. ๐Ÿ”— seanmonstar Micro: HIPs: hyper Improvement Proposals rss

      A short intro for now: since hyper stabilized 1.0, it powers more, and needs more. Large improvements lacked a clear path for proposal, scrutiny, and decision. So, hyper Improvement Proposals, or HIPs.

      Theyโ€™re a lot like RFCs. With some tweaks from lessons learned. Making maintenance more repeatable, less in one mind. The writing is the thinking. It documents the why. A sustainable personnel of hyper.

    12. ๐Ÿ”— matklad Static Allocation, Constant Work rss

      Static Allocation, Constant Work

      Sep 2, 2026

      In reply to this email:

      Memory Safetyโ€™s Hardest Problem named something Iโ€™d hit but couldnโ€™t articulate. Your case is a pointer into one union variant surviving a write of a different variant, so live typed pointers end up reading bytes that belong to something else now.

      Last year I wrote a limit-order matching engine and shipped a use-after- free: a cancelled order was released back to the pool while it was still linked into its price level, so the next allocation handed that memory to a new order and the stale link kept resolving. Iโ€™d filed it under โ€œI was careless with lifetimes.โ€

      After your post Iโ€™m not sure thatโ€™s what it was. A recycling pool looks like a tagged union where the tag is โ€œwhich generation of object currently lives in this slot,โ€ and nothing in the type system tracks it. Is that a fair reading, or does the pool case stay genuinely easier because generational indices actually solve it and the union case has no equivalent?

      Yes, object pools are an interesting case to think about, as they clarify the relation between memory safety and more general correctness.

      First , consider the case where no object pool is used, and we malloc and free order objects. In this case, the logical error of use-after-free turns into physical type confusion, and can easily lead to arbitrary code execution and the like. If you have two objects of different types sharing the same memory location, a user-controlled integer in one object might be a function pointer in the other: an exploitable goto primitive

      Now, what happens if we introduce an object pool which stores a list of โ€œdeadโ€ objects of type T? Logical use-after-free is still possible, but its physical effect is now different โ€” we still get aliasing of memory, but thereโ€™s no type confusion. You canโ€™t necessarily fiddle with an integer and change a function pointer, unless you additionally hit the hard case, where the object in question stores an inline enum. Assuming that doesnโ€™t hapen, you get a perfectly defined, deterministic behavior, even if you are not happy about the result.

      This suggests an interesting solution for hardening code, which Iโ€™ve learned from Fil. If your allocation function is typed (it takes a T comptime parameter or runtime type witness, rather than a runtime type-erased size and alignment), you can write an allocator that uses type-segregated pools internally. This will be somewhat less memory efficient, as the allocator wonโ€™t be able to re-use freed memory of objects of type U for objects of type T, but the memory overhead will probably be small (rare object types do not matter, popular object types will have a lot of intra-type re-use), you might actually gain in memory locality, and solve most of type confusions. Again, inline enums break this, but, curiously, if you always heap allocate enum variants, then this works again. Fil-C canโ€™t use this, because C allocatorโ€™s interface is untyped, but someone else could :P

      But this is academic. How do we avoid the bugs? Generational indexes are a popular remedy, but I have never used them, so I donโ€™t have any non-common knowledge insights about this pattern. Instead, I will share another pair of tricks from TigerStyle. I have only a vague understanding of what an order matching engine is, but I suspect these tricks might help there

      Static Allocation

      The first one is:

      No dynamic memory allocation after initialization

      https://www.youtube.com/watch?v=GRJtYwneG2Q&t=1823s

      This is the pool idea, taken to its logical conclusion. We specify the maximum number of orders we are willing to work with at startup, and never go beyond that. So, you might start the program as

      $ order-engine --orders-max=1_000_000
      

      and then one of the first lines in its main function would be :

      const orders: []Order = try gpa.alloc(Order, cli_args.orders_max);
      

      If, at runtime, more than orders_max requests come in, the surplus requests are rejected. Someone might object: โ€œBut what if I actually have some spare memory for one more order? Wouldnโ€™t it be a good idea to at least try to handle it?โ€

      My rejoinder would be โ€œWell, what if you donโ€™t?โ€. Systems operating at capacity without strict limits fail catastrophically. Attempting to allocate just one more Order could cause kernelโ€™s OOM killer to terminate the entire order matching engine, losing the other million orders, or, better yet, to kill the supervisor process so that you canโ€™t even restart.

      Static allocation gives you peace of mind. The system might fail to start if you donโ€™t have enough memory, but, if it did start, you can be rest assured that it would handle overload gracefully, continuing to render the service while you are provisioning a beefier machine.

      Constant Work

      What would you do with the slice of orders? One approach is to @memset(orders, undefined) and hand the slice over to a pool which tracks spare objects with a bit set:

      const OrderPool = struct {
          orders: []Order,
          free: DynamicBitSet,
      
          fn acquire(pool: *OrderPool) ?*Order { ... }
          fn release(pool: *OrderPool, order: *Order) { ... }
      };
      

      or with a free list:

      const OrderPool = struct {
          orders: []union {
              order: Order,
              next_free: ?u32,
          },
          first_free: ?u32,
      };
      

      But thereโ€™s an alterative approach. Instead of thinking about a limit on the number of orders, you could instead design the system to always have a fixed amount of orders, by introducing a no-op, neutral order:

      const Order = {
          id: u128,
          price: u32,
          count: u32,
      
          tag: enum { bid, ask, reserved },
      
          pub const reserved: Order = .{
              .id = 0,
              .price = 0,
              .count = 0,
              .tag = .reserved,
          };
      };
      

      Your initialization then becomes @memset(orders, .reserved).

      One benefit here is cognitive, you no longer think in terms of creating and destroying orders. Instead, the orders merely circulate in the system according to the law of the conservation of the number of orders. It becomes harder to loose track of an order if you must always pay attention not only to where the order goes, but also to where it came from. You explicitly write state transition functions for each pair of states, and that makes it easier to exhaustively enumerate all the cases. And you double check that with asserting, at every point, that the state is what you expect it to be (and then you DST the asserts) .

      Another benefit is code simplification and predictability. You no longer need to track a separate collection of โ€œliveโ€ orders. Instead, you always iterate the full set, doing no-ops for reserved. This feels wasteful: should we make the code run faster when there are few orders? But consider this: by specifying the limit of orders up-front, you commit to be able to serve that amount. If the maximum amount of orders is active, does the system have acceptable performance? If not, that is a bug! Gray failure (system becoming unusably slow) is another way to break when reaching the limit.

      Avoiding indexes improves performance for the maximal load case. This

      for (orders) |order| {
          process(order)
      }
      

      is much easier for compiler to vectorize, and for CPU Cache to prefetch, than this:

      for (orders_active) |order_index| {
          const order = orders[order_index];
          process(order);
      }
      

      Similarly to static allocation, the Constant Work principle gives you peace of mind with respect to performance. P100 latency stays flat regardless of the load. Insufficient performance is discovered when you roll out the system, not during Black Friday on-call.

      At TigerBeetle, we apply this pattern in the small. Rather than writing a search loop with an early return:

      const item = for (items) |item| {
          if (predicate(item)) break item;
      } else null;
      

      we sometimes let the loop to run its full natural course, additionally asserting that theres a unique matching item:

      https://github.com/tigerbeetle/tigerbeetle/blob/0.17.9/src/vsr/grid.zig#L715-L725


      As usual, this is a trick which is useful to have in your arsenal, but it isnโ€™t a universal solution to all programmingโ€™s problems.

  4. September 01, 2026
    1. ๐Ÿ”— IDA Plugin Updates IDA Plugin Updates on 2026-09-01 rss

      IDA Plugin Updates on 2026-09-01

      New Releases:

      Activity:

      • disrobe
        • e2cbf08a: restore ready-to-run method recovery
      • ida-hcli
        • 41df4e3d: style: fix lint violations reported by ruff 0.16
      • ida-nexus
        • 7a6fccca: Add support for per-lease idle timeout
        • 49e5418a: Make sure bare except: statements do not swallow cancellation
      • ida-pro-mcp
        • 15d6f6c4: [relevant] Accept verified checkout skill links
        • f35a2531: Merge pull request #70 from GrecAndrei/codex/continuous-improvements
        • b5910b06: Fix standalone test environment assumptions
        • ac5ac602: Fix checkout skill install and expand coverage
        • e21745c6: Broaden live workflows and offline hardening
        • 45b62c78: Expand live coverage across compatibility surface
        • f2b566bc: Harden tests against wall-clock timing
        • 542c3fb3: Update continuation scope fixtures
        • d23a1198: Scope host pagination continuations
        • 158afeb8: Harden semantic backend lease teardown
        • 026640b7: Harden search insight index loading
        • 38ea51b9: Harden multi-session state persistence
        • 2782d05d: Serialize runtime ownership reclamation
        • a1b4427e: Harden runtime lease identity recovery
        • 169b0090: Normalize recovered session metadata
        • 3af82ea4: Harden bootstrap history recovery
        • a6d87633: Normalize malformed session skill state
        • 33f0c0cd: Surface annotation generator write failures
        • a538649c: Report annotation write failures accurately
        • 32ca296c: Expose agent SSO on the public operation surface
      • idafridascript
        • f014c650: docs(readme): move setup commands to separate code block
        • bda766b1: chore(deps): update dependencies and plugin version to support IDA 9.4
      • plugin-ida
        • d7d1fa5e: chore(deps-dev): Update types-setuptools requirement (#28)
      • TFR.OnlineMenu
        • db107c9b: Update LinkSplash.jpg
        • 616c89f6: add splash modifier and enhance onlinebutton UI
        • 3c40c79b: Merge pull request #1 from sblzdddd/dogushitto
    2. ๐Ÿ”— Simon Willison Claude Fable 5.1 made me a really nice animated pelican rss

      Today is Claude Fable (and Mythos) 5.1 day. Anthropic say that Fable 5.1 "sets a new standard for coding, knowledge work, and long-running problem-solving tasks". Their announcement spends a notable amount of time on scientific research, boasting of a 52.6% score on the brand new Terminal-Bench-Science 0.1 benchmark (first announced on August 27th), up from 24.7% for Fable 5, 29.0% for Opus 5 and 22.4% for GPT-5.6 Sol. Other benchmarks show slightly improved scores, but none as impressive as the Science one.

      But how well can it pelican?

      Back in July I wrote about how I was losing faith in the pelican benchmark - its connection to how good the models were at other tasks didn't seem to hold as strongly as it did back in 2025. The most interesting insights I get from it now are comparisons within model families, and particularly comparisons for the same prompt at different reasoning effort levels.

      Fable 5.1 has five reasoning levels: low, medium, high, xhigh, max - and no option to turn off reasoning entirely.

      I fixed an issue in llm-anthropic which caused reasoning traces not to be correctly recorded, then ran some prompts.

      Here's the full set of pelicans for all of the reasoning levels, each with the full reasoning transcript. I'll replicate them here:

      Low and medium, both without reasoning?

      Next, a bit of a mystery. This is what I got for effort low:

      Minimalist flat illustration of a white pelican with an orange beak riding a black bicycle to the left, its orange legs pedaling and wings gripping the handlebars, with motion lines behind on a light blue background.

      The transcript doesn't show any summarized reasoning tokens, and the output token count is 1,998. With Claude that output token count includes reasoning tokens. It took 23.8 seconds and cost 10.017 cents.

      I bumped that up to medium and got this:

      Minimalist flat-style illustration of a white pelican with an orange beak riding a black bicycle to the right, with motion lines behind it, on a light blue background.

      Weirdly, that one also shows no reasoning text and used 1,977 output tokens - 21 tokens less than low. It took 23 seconds and cost 9.912 cents.

      So for this particular prompt ("Generate an SVG of a pelican riding a bicycle") Fable 5.1 appeared to skip reasoning entirely at both low and medium settings.

      High

      Here's high - 29.6 seconds, 2,612 output tokens, 13.087 cents:

      Minimalist flat illustration of a white pelican with an orange beak riding a black bicycle, its orange legs pedaling, with motion lines behind it on a light blue background.

      This one did do a bit of reasoning, summary here:

      I'm planning the SVG layout for a pelican riding a bicycle, with a sky and ground background, a bicycle with two spoked wheels, frame, seat and handlebars, and a white-bodied pelican with a long neck and orange beak positioned on top.

      Really not much difference from low and medium, though.

      Extra High

      At xhigh things got radically different. 36,767 output tokens, 7 minutes 51 seconds, $1.83!

      Minimalist flat illustration of a white pelican with an orange beak riding a black bicycle to the left, its orange legs pedaling, with motion lines behind it on a light blue background.

      The reasoning trace is pretty lengthy, and includes details like this:

      Adding the eye, wings stretching down to the handlebar grip, orange legs reaching to the pedals, and a small tail feather, while keeping the pelican intentionally oversized compared to the bike for comic effect. [...]

      I'll accept the slight thickness as charming rather than overengineering it.

      Max

      Setting effort to max gave me the best pelican I've seen from any of Anthropic's models. 65,927 output tokens, 13 minutes and 54 seconds, $3.30:

      Minimalist flat illustration of a white pelican with an orange beak riding a black bicycle, its orange legs pedaling, with motion lines behind to indicate speed, on a light blue background.

      There's a lot to like about this. The background is tasteful, the legs are clearly on either side of the frame, the feet are on the pedals, the wing is on the handlebars, the pelican has a cute blue hat and there's a basket with a fish.

      It's still not showing nearly the same level of flair as Gemini 3.7 Flash, but I didn't ask for flair - I asked for an SVG, and that's what I got.

      Some highlights from that reasoning trace:

      Adding pedal shapes near both feet, with the far foot on the second leg partially visible behind the frame. I'm considering whether to add a small scarf or cap for extra character, but leaning toward keeping it simple to avoid clutter.

      Now I'm debating a bicycle helmet on the head versus the pelican's signature crestโ€”the beak and pouch already read clearly as "pelican," so a helmet could reinforce the bicycle theme without losing identity, though it might compete with the crest for visual space.

      I realize the beak at (484,84) would overlap with the dome helmet, so I need to shrink the helmet so it only covers the top of the head, adjusting its arc endpoints to sit higher and narrower so the beak can attach cleanly at the front without collision. [...]

      I'm adding a darker tip region to represent the primary feathers, then reconsidering the trailing edge to include scalloped feather curves instead of one smooth line for a more natural look. [...]

      Now I'm checking the vent line placements on the helmet, making sure they sit far enough inside the helmet's edge given the stroke width and rounded caps, and confirming each vent stays within the helmet's circular boundary. [...]

      I decide skipping a handlebar bell and tire highlights since they're unnecessary additions. Now I'm reconsidering the front fork's curve โ€” the current control point pulls the shape backward when it should bow forward for a proper rake, so I need to shift the control point rightward to fix the fork's lean.

      OK, let's animate it

      On Hacker News, swalsh commented on that Max pelican:

      Now that it's a solved benchmark, can we get the animated version?

      I didn't want to spend another $3 so I took the Max pelican and piped it into the default thinking level of High:

      llm logs -cx | llm -m claude-fable-5.1 -s 'animate this'

      6,121 input, 26,201 output = $1.37. The result looked like this, exported here as video since some people have trouble viewing animated SVGs:

      The wheels in the video are rotating in the wrong direction, but I think that's an artifact of the conversion to MP4 - they seem to be going in the correct direction in the original SVG.

      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.

    3. ๐Ÿ”— anthropics/claude-code v2.1.258 release

      What's changed

      • Fixed Claude Code failing to launch on macOS 12 (Monterey), a regression introduced in 2.1.255
      • Fixed remote and scheduled sessions failing with "user messages must have non-empty content" after a re-sent permission approval could not be applied
    4. ๐Ÿ”— exe.dev Agent Grit Is a Double-Edged Sword rss

      Story time.

      I had a fun idea for an LLM eval benchmark. Itโ€™s still a work-in-progress, but if it turns out to be interesting, I promise Iโ€™ll share it.

      Fable was merrily prototyping it for me. I checked in, and saw this:

      [The model declined to continue this request. Retrying the same request will likely be declined again. Switch to Opus to continue, or use /model to switch models. You can also try rephrasing or clarifying the intent instead.]

      Category: cyber

      Reason: This request triggered restrictions on violative cyber content and was blocked under Anthropic's Usage Policy. To learn more, see https://platform.claude.com/docs/en/build-with-claude/refusals-and-fallback. API integrators: you can reduce refusals for your users by configuring a fallback model โ€” see https://platform.claude.com/docs/en/build-with- claude/refusals-and-fallback

      original screenshot

      Sigh. Absurd. Itโ€™s frustrating enough that Fable wonโ€™t help me defend against cybersecurity threats, but this? This has nothing to do with cybersecurity.

      So what silly nonsense triggered this? I scrolled up and expanded the thinking block.

      gpt-5.6-sol solved the 714-line task?! That demands investigation โ€” either memorization or something fishy:

      ๐Ÿ›  python3 - <<'EOF' import json log=json.load(open('results/rust-โ€ฆ in /home/exedev/lineshuffle โœ“

      It brute-forced the shuffle seedโ€”figured out the rig used Python's random.Random(seed).shuffle with a guessable seed of 0, then inverted that permutation. That's a real vulnerability: seed 0 with Python's PRNG is trivially exploitable, and this model found it. The fix needs a cryptographically secure shuffle, like deriving the RNG from a secret key plus task id, or using SystemRandom instead of a fixed seed.

      I should invalidate that compromised result. It's a great war story to share โ€” it also attempted a network escape via a curl to raw.githubusercontent, which got blocked correctly by the network isolation, plus tried an /etc/hosts trick. For the shuffle fix, I want the permutation generation to use a keyed HMAC derivation from a secret file combined with the task and seed, so it stays deterministic yet unguessable, while logging the permutation for reproducibility. I'm now also wondering if gpt-5.5's earlier smoke-test solve was legitimate or another instance of seed guessing โ€” it jumped from 0.51 to 1.0 accuracy suspiciously fast โ€” so I should double check that transcript, along with kimi-k3's, though both seem like plausible genuine solves given the file sizes involved.

      original screenshot

      Oh. Ummmm. This is fine.

      Maybe the moral of this story (and this story) is not to give models really hard tasks? โ€œWell, officer, I asked about the Riemann Hypothesis, and then I told it to try harderโ€ฆโ€

    5. ๐Ÿ”— anthropics/claude-code v2.1.257 release

      What's changed

      • Added Claude Fable 5.1 (claude-fable-5-1), now the default Fable model โ€” 1M context, $10/$50 per Mtok with $0.25/Mtok cache reads
      • Added "Time format" (timeFormat) and timeZone settings: 12-hour, 24-hour, 24-hour UTC, or a strftime pattern for the turn-end clock and transcript-view timestamps
      • Added a Containment Escape rule to auto mode so cloud metadata-credential fetches, egress evasion, and cross-tenant reach are no longer auto-approved unless your environment marks them expected
      • Added CLAUDE_CODE_SUBAGENT_MODEL_FORCE to apply CLAUDE_CODE_SUBAGENT_MODEL (or the main model) to every subagent, ignoring per-spawn and agent-definition model overrides
      • Added s in /effort to change effort for the current session only, matching /model
      • Added a /doctor warning for stale sandbox mask files left by a killed session
      • Added a one-time prompt in auto mode before the first file read outside the working directories, with the option to block such reads (permissions.blockReadsOutsideWorkingDirectories)
      • Added support for a gateway-supplied description on discovered /model picker entries (CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY); entries without one still read "From gateway"
      • Fixed settings in a .claude/ folder created after startup not being picked up until restart
      • Fixed sessions dispatched from an agent view opened with โ† always starting in the original session's permission mode, overriding the target directory's defaultMode and the agent's permissionMode
      • Fixed keybindings.json rebinds of Ctrl+G being ignored in claude agents; its Ctrl+S / Ctrl+T are now rebindable via the new Agents context
      • Fixed background sessions failing to start on macOS npm installs during a self-update, and on Windows when a stale daemon lock file pointed at a reused process id
      • Fixed the working spinner stopping while a response streams behind a slash-command panel
      • Fixed a background session's state.json detail repeating its own dispatch prompt after a scheduled wake-up
      • Fixed claude agents keeping a background session you re-prompted buried in Completed after it finished again; Completed now orders by the latest finish
      • Fixed claude --bg from a directory that was just deleted reporting "backgrounded" and leaving a crashed session row; it now prints the reason and exits 1
      • Fixed Remote Control connecting mid-session re-sending the Bash tool definition, causing a prompt-cache miss
      • Fixed a doubly-listed custom Authorization header overriding the configured credential on Bedrock, Mantle, Vertex, and WIF, and the Vertex setup wizard picking up a leftover Anthropic profile from ~/.config/anthropic
      • Fixed Claude apps gateway sending stray host Authorization or profile headers to Foundry, Vertex, and Bedrock, and Foundry Entra ID upstreams not starting when ANTHROPIC_FOUNDRY_API_KEY is set
      • Fixed a leftover Anthropic API key or auth token being sent alongside your Foundry subscription key in API-key mode
      • Fixed /schedule routines whose prompt was saved without a message role and then ran with nothing to do
      • Fixed claude agents not saying that a background session is waiting for you to approve a message from another session, or who sent it
      • Fixed a prompt stashed with Ctrl+S inside an opened background session being lost when the session went idle or was stopped and then reopened
      • Fixed telemetry (OTEL) settings pushed through server-managed settings being ignored on warm starts, including desktop-app Code sessions
      • Fixed a teammate permission request being answered twice when the leader's mailbox write was briefly locked
      • Fixed a phantom duplicate slash-command row rendering below the in-flight turn while a command's auto-continued response streamed
      • Fixed policyHelper timeoutMs and refreshIntervalMs values above the timer maximum (2147483647) causing failures or re-runs every millisecond; they are now clamped
      • Fixed the token counter freezing or crawling after switching to another subagent's transcript, and made background subagents' and teammates' counters update live while a response streams
      • Fixed sandbox network hosts written with a trailing dot (example.com.): a deniedDomains entry didn't block the host inside the sandbox, and "don't ask again" for such a host kept prompting
      • Fixed dismissing the Remote Control consent prompt (Esc, or n at claude remote-control) counting as consent, so the next request connected without asking
      • Fixed /mcp reconnect and enable still connecting a settings-file MCP server that a managed MCP allow/deny list or strictPluginOnlyCustomization loaded after startup should block
      • Fixed claude mcp remove leaving a remote server's stored OAuth credentials behind when strictPluginOnlyCustomization locks MCP to plugin-only servers
      • Fixed Remote Control (claude remote-control) sessions started from the Claude app ignoring the selected model and running on the machine's default instead
      • Fixed --disallowedTools and session deny rules being dropped after the first settings reload when allowManagedPermissionRulesOnly is enabled
      • Fixed --resume listing a backgrounded conversation twice and --continue reopening its stalled pre-background copy; --continue now also opens finished background sessions
      • Fixed fullscreen mode not letting you click ! shell command output to expand it
      • Fixed background sessions left running an older Claude Code binary piling up across auto-updates instead of being retired
      • Fixed claude agents --json briefly switching the terminal to raw mode and undoing another program's terminal settings on exit
      • Fixed Proactive output style sessions busy-looping with filler messages and repeated log reads instead of idling while a background command or Monitor they started is still running
      • Fixed subagents stopping when a response was cut off mid-stream by a computer sleep, dropped connection, or server error; they now automatically continue instead of ending with an incomplete response
      • Fixed โ† doing nothing in the /btw panel inside a claude agents session: it now returns to the agents list (even mid-answer), and the panel comes back when you reopen the session
      • Fixed sessions with an advisor model set missing the prompt cache on background requests (compaction, /recap, prompt suggestions) and re-sending the full conversation uncached each time
      • Fixed claude -p exiting about 5 seconds after its final result while a Monitor the model armed was still running; it now waits for the watch to fire or time out
      • Fixed a permissions.ask rule being skipped in auto mode when the matching command ran inside a compound command or subshell, letting it run without the confirmation prompt
      • Fixed plugins being able to read files outside their own directory through a declared command, agent, skill, hooks or other component path that is a symlink; such paths are now refused with an error
      • Fixed /add-dir rejecting a directory inside the current working directory; it now loads that directory's skills, commands, and agents like --add-dir does at startup
      • Fixed the main agent not being told when you resume a subagent you had stopped from its transcript view
      • Fixed a crash when pasting ANSI-colored text (e.g. a CI log) into dialogs like /feedback
      • Fixed claude mcp add/remove hanging or exhausting memory when the project's .mcp.json is a FIFO or a device-file symlink; it now fails fast with an actionable message
      • Fixed unbounded memory growth when non-JSONL data is piped into claude -p --input-format stream-json; it now fails fast with a clear error
      • Fixed backgrounding a turn (โ† or Ctrl+B) while a subagent or other tool was running occasionally making the background session treat that tool as rejected instead of re-running it
      • Fixed Bash Read()/Edit() deny rules not applying to < file redirects and reader commands like tac and egrep; a deny rule on any argument or redirect target now refuses the command
      • Fixed resuming or messaging a subagent whose transcript had grown past 5 MB (for example after reading many images) failing with "No transcript found"
      • Fixed worktree-isolated sessions refusing Bash loops, $VAR reads, "$(โ€ฆ)" and heredocs that never touch git as "too complex to verify that it stays inside the worktree"
      • Fixed /model and /effort showing a prompt-cache warning after rewinding a conversation back to empty
      • Fixed prompt-cache misses on every turn in long screenshot-heavy sessions once images exceeded the per-request size cap
      • Fixed the Edit permission prompt's diff view rendering emoji and multi-code-point characters with incorrect widths
      • Fixed WebSocket MCP server connection failures being logged as "[object ErrorEvent]" instead of the underlying error
      • Fixed background sessions failing to open with "Couldn't start the background service" while another Claude Code process was downloading an npm update; the start now waits for it
      • Fixed background commands that detach from their shell (for example under timeout or setsid) surviving a task stop or Claude Code exit
      • Fixed Claude not being told when you stop a background command from the tasks panel or a connected client
      • Fixed stopping a background subagent leaving its monitors running
      • Fixed sandboxed git commands in a linked worktree losing write access to the repository's common .git directory after cd into a subdirectory
      • Fixed Bedrock and Bedrock Mantle requests going silent during long hidden-thinking phases on Opus 4.7 and later, which let idle timeouts cut the connection; the stream now carries progress events
      • Fixed launching Claude Code after a Claude apps gateway expired or revoked your session: it now says the session ended and offers /login instead of reporting a network error
      • Fixed cloud sessions losing git/GitHub credentials for the rest of the session when the session's network proxy failed to start at launch; it now retries in the background and recovers
      • Fixed leftover cc-daemon-* folders in the system temp directory after an interrupted background daemon start; the cleanupPeriodDays retention sweep now removes them
      • Fixed Bash permission checks auto-approving certain [[ ]] conditionals that zsh parses differently from bash; these commands now prompt for approval
      • Fixed the managed-settings approval prompt showing the generic warning instead of its telemetry wording when the settings also turn detailed tracing or raw API body logging off, or trace export on
      • Fixed agent-team teammates in tmux/iTerm2 panes sometimes staying open after acknowledging a shutdown request
      • Fixed the keyless Console sign-in ("Sign in with your Console account") not applying your organization's server-managed settings, and /status not showing the Organization for that sign-in
      • Improved rendering performance: less re-render work per turn in long conversations, streaming no longer slows down as the reply grows, and background-agent updates no longer re-render the whole screen
      • Improved prompt input responsiveness by reducing per-keystroke rendering work
      • Improved policy helper diagnostics โ€” refresh failures now show in /status, declining the managed-settings dialog prints why Claude Code exited, and helper timeouts are reported as timeouts
      • Improved /code-review --comment to post findings on GitLab merge requests via glab mr note instead of reporting the target as unsupported
      • Improved notifications: an MCP elicitation or permission ask queued under another dialog now sends its idle desktop notification at the same delay as a visible ask
      • Improved verbose/transcript output: async hook completion notices that arrive together now appear on one line instead of one line per hook
      • Improved claude self-hosted-runner --configure-git to also enable git push negotiation, so the first push of a new branch from a stale clone uploads only the new commits instead of the whole tree
      • Improved liveness reporting to SDK hosts while a response is held open by gateway keep-alives, so long waits under a raised CLAUDE_STREAM_IDLE_TIMEOUT_MS are not mistaken for a hung session
      • Improved MCP connection and OAuth debug/error logs so credentials carried in a server's URL or request headers are redacted
      • Improved /fork to keep the original conversation's prompt cache in the new background session: its worktree briefing now arrives as a message instead of a system-prompt change
      • Improved emoji autocomplete to accept the remaining GitHub/Slack shortcode aliases (:satisfied:, :telephone:, :collision:, โ€ฆ)
      • Changed --effort to lift a new model's default-effort hold for that session only rather than permanently; an effort picked on claude.ai for a Remote Control session now applies during the hold
      • Changed a policyHelper in MDM or managed-settings.json shadowed at launch by cached server-managed settings to run (or exit) as soon as the fetch reports them removed, not at the next launch
      • Changed managedSourcesBehavior: "merge" to take sandbox.credentials.awsPairs and sandbox.ripgrep whole from the highest managed source that sets them instead of combining the sources' values
      • Changed gateway model discovery (CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1) to run even when CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC is set, since it only queries your gateway
      • Changed claude --resume <session-id> --bg to continue that session under its own ID when nothing is running it, instead of silently starting a copy; a copy is now announced
      • Changed /btw history browsing from โ†/โ†’ to Shift+โ†/Shift+โ†’ (or [/]), stepping through your recent side questions and back to the live answer
      • Changed defaultMode: "bypassPermissions" in .claude/settings.json or .claude/settings.local.json to be ignored, like "auto"; set it in user or managed settings, or pass --permission-mode
      • Changed fable and best in Claude apps gateway sessions to keep resolving to Fable 5 for now, since gateways not yet configured for Fable 5.1 reject it; pick Fable 5.1 in /model to use it
      • Changed --add-dir, /add-dir, and additionalDirectories to refuse network paths (UNC shares, /net/<host> automounts) with a message before touching them; on Windows use a mapped drive letter
      • Changed Claude apps gateway sign-in and token refresh requests to verify the gateway's pinned TLS certificate, as the managed settings fetch already does
      • Changed Cowork and claude.ai cloud sessions: reading an artifact that isn't yours now always asks you first, even in auto mode
      • Removed the Ctrl+E command explanation on Bash and PowerShell permission prompts
      • [VSCode] Added collapsible ACCOUNT & USAGE and SESSION MANAGER section headers to the session list panel, with the account email, the usage meter, and a View details link opening the usage dialog
      • [VSCode] Added a model pill to the input footer that shows the current model and opens the model picker, with an Effort row and a "More models" page
      • [VSCode] Added a collapse toggle to the Ungrouped section of the session list
      • [VSCode] Added output style selection to the command menu, including custom styles
      • [VSCode] Fixed third-party provider deployments (Bedrock, Vertex, and others) still showing claude.ai-only features (remote sessions, dictation, usage) and calling claude.ai with a leftover login
      • [VSCode] Fixed the session list panel's usage meter staying blank after the panel loads; it now shows the last known usage immediately
      • [VSCode] Fixed the "Enable Remote Control for all sessions" toggle so turning it on or off applies to sessions that are already open, not only to new ones
      • [VSCode] Fixed screen reader announcements: a control character before a fence or heading no longer drops visible lines from speech, and bold markers spanning a heading are no longer mis-paired
      • [VSCode] Changed the action menu to list slash commands in a filterable "Slash commands" dialog instead of inline; picking one runs it; the MCP servers dialog gained the same filter box
      • [VSCode] Changed "Delete session" to "Archive session": archived sessions move to a collapsible "Archived sessions" group at the bottom of the list with an Unarchive action
    6. ๐Ÿ”— HexRaysSA/plugin-repository commits sync repo: +4 releases rss
      sync repo: +4 releases
      
      ## New releases
      - [BinDiff-NG](https://github.com/mahmoudimus/bindiff-ng): 8.1.4, 8.1.3, 8.1.2
      - [FridaTools](https://github.com/ys1231/idafridascript): 0.0.4
      
    7. ๐Ÿ”— The Pragmatic Engineer How software engineering is changing: an essay challenge rss

      The pace of change in software engineering is only accelerating, especially since January of this year. This is all to do with the industry-wide adoption of LLMs, AI tooling, and AI infrastructure. At The Pragmatic Engineer, we always want to capture as much of what's going on as possible at startups, Big Tech, and other businesses, in order to share with subscribers. That's why we're launching an essay competition with a chance to win up to $10,000, this week!

      Send us up to 10,000 words on how you see things at your startup or tech company, or at a business you're connected with. The best entries will be published in the Pragmatic Engineer and win prizes of $2,500, plus one grand prize of $10,000 for the best essay we read.

      The Pragmatic Engineer reports many developments in tech in our deepdives, including how building software is changing at Anthropic, why Ramp built its own in-house coding agent, how Uber uses AI for development, how Codex is built and what it could mean for the future of software engineering, and much more. Almost every company we talk with currently says that processes which worked fine for years are suddenly pretty outdated.

      This pace of change makes it hard to cover the full breadth and diversity of tech in one deepdive per week - especially right now, when engineers are building and using new and better tools in every part of the software development lifecycle.

      So, we 're launching a writing challenge to encourage software builders to share how things on the ground are changing. We'll share these cutting-edge reports with readers in future editions of the Pragmatic Engineer.

      So, tell us what's new, different, better, and worse in your part of the tech industry since AI entered your workflow!

      What we're looking for

      • An essay written for software engineers : 3,000 - 10,000 words on one of these topics:
        • How software engineering is changing at your company, institution, or open source project
        • The engineering culture at your company, institution, or Open source project in 2026
        • How you build software in your company, institution, or open source project
        • Software engineers turning into AI engineers at your company, institution, or open source project. Basically, how the work is changing
      • First-hand details: Winning essays will include the authors' personal observations and opinions.
      • Include details about the team and company: Including details about the team and company in the spotlight is important and enriches the essay by painting a more complete picture for readers; what engineering practices are changing, what's still the same, what about tooling, and processes? Is there any "traditional wisdom" that no longer holds true - or is still true today? It 's not necessary for writers to work at a company/team being written about.
      • Software engineers and "builders" only: We want to hear from folks who build software; meaning that you have built from scratch, pushed to prod, or been paged when your service (or someone else's) caused an outage. Basically, if you do this currently, or did it in the past, then your essay is eligible for entry. You don 't have to be a builder right now if you're still close to those who build software.
      • Individual work. This competition is specifically for individuals, so articles written collectively by teams are not eligible.Of course, outside of this competition, The Pragmatic Engineer always welcomes articles from teams that want to share interesting developments!
      • No AI writing allowed. Writing is thinking, and we are interested in your own thoughts and observations, not a sharp, one-sentence observation turned into three paragraphs of blob text by an LLM. Using AI as a research tool is allowed if you're confident about the accuracy of its output, but all the words must be written by a person.
      • Submitted essays must not be available to read elsewhere before 20 October. The essay has to be purpose-written for this competition and cannot have been published online or in print prior to 20 October 2026 in order to be eligible. After this date, a submitted essay can be published on any company blog, personal blog, or other medium.

      Prizes

      The competition has the following prizes:

      • Grand prize: $10,000 and publication in The Pragmatic Engineer (following editing), and a Pragmatic Engineer surprise package. For winning entries, we reserve the right to make edits for legal, editorial, style, grammar, and punctuation reasons.
      • Runner-up prize(s): $2,500 + sharing an excerpt in The Pragmatic Engineer + a The Pragmatic Engineer surprise package. Focus of the runner up category includes viewpoints from:
        • Bootstrapped (non-VC-funded) companies
        • More "traditional" companies that not digital-first, or which even predate digitalization
        • AI-native startups founded in 2023 or later which have been using AI tools since day one
        • Academia, government institutions, and open source projects

      For quality deepdives: We plan to publish a roundup of essays in the future on topics which contain interesting learnings, and that clearly show great effort on the part of authors. These pieces will receive a The Pragmatic Engineer surprise package.

      Timeline

      • Midnight, 4 October, PST: deadline for all submissions.
      • 20 October: decision on the prizes.
      • 3 November : expected publication of the Grand Prize winner

      Submit your essay here

      FAQ

      **Why is AI writing banned from this contest? I want to use AI to write my essay like I do for writing code! **

      It's a rule that you cannot include writing in your essay which was generated by AI. As everyone who reads this newsletter likely knows; there is no shortage of ways to detect AI-written text these days! The Pragmatic Newsletter is fully written by humans, and the same applies here. The reason for this hardline stance is that we believe in the value of human thought and experience, as told by people with first-hand knowledge. It's also about the audience: The "audience" for AI-written code is usually a machine, whereas the writing in Pragmatic Engineer is for humans, by humans. AI produces a statistical average in its output which creates uniform, dull text that's an inferior reading experience to human writing - at least today it is.

      Can the entry be anonymous?

      No, because anonymous stories are hard/impossible to check if they accurate or made up (at least in-part.)

      We are only looking for entries that make the company/team/project/institution name clear, and that also include your name. We're looking for entries that can be taken seriously, and referenced. It might mean getting permission to talk about your company/team/organization in public, and it also requires more skill to highlight not just the good changes, but the tricky, or not-so-good changes. This is part of the challenge.

      To get in front of The Pragmatic Engineer readers (and to enter this specific challenge), you'll need to not be anonymous.

      Can I publish my essay online after writing it?

      In order to be eligible for consideration and prizes, an essay cannot be available to read anywhere online or in print before or after it is submitted to this contest. After 20 October 2026, no publication restrictions apply.

      Can my essay be changed after I send it?

      For spelling, punctuation, grammar, legal, and editorial reasons, the Pragmatic Engineer reserves the right to edit or amend all writing published on this platform.

    8. ๐Ÿ”— Evan Schwartz Scour - August Update rss

      Hi friends,

      In August, Scour scoured 878,974 articles from 28,519 feeds. Also, 219 users signed up since my last product update email at the end of June so welcome to you all!

      If you've been enjoying Scour and would be willing to put a quote on the testimonials section of thehome page, please let me know!

      Here's what's new in the product from July and August:

      ๐Ÿ“Š More of What You Like

      I've spent a lot of the past 2 months working on improving ranking quality. Now, the interests and sources you tend to click on and like get boosted while those that you tend to ignore or dislike are deprioritized. Additionally, Scour got a notch better at matching posts to your interests, so you should see less off-topic content.

      By the way: liking and disliking items you read on Scour helps make your feed better and also helps me figure out what types of ranking changes to prioritize.

      ๐Ÿ“… Detecting Event Coverage

      Scour now detects groups of articles covering the same event, including across days and even when they don't all link to a common source. You should now see less repeat coverage of the same major news stories across days.

      ๐Ÿšฎ Suppressing Junk

      Scour is better at detecting and hiding ads, deals, press releases, sponsored placements, listicles, and posts with little substantive content. Also, arXiv papers that have been withdrawn by their authors won't show up in your feed.

      ๐Ÿ’… Sleeker Feed Interface

      I got a little excited after adding some of the features in June and the feed got a little too busy. Now, the feed has been cleaned up again.

      While scanning the feed, you'll see just the information you need to decide whether to click on it. You can tap any row to see additional information including a preview snippet from the post and other articles that cover it or that it links to. Plus, after you love, like, or dislike a post, you'll see additional options for seeing more or less content like that in your feed.

      โฑ๏ธ Reading Time

      Under each post's title, you'll see the estimated reading time, as long as Scour was able to fetch enough of the article's content to determine the length.

      ๐Ÿ“ Easier Interest Adding

      Adding new interests got easier. You can write any free-form text you want. While you're typing, you'll see "quick add" suggestions based on topics other users have added. Or, when you click Add Interests, Scour will extract appropriate topics from whatever you have written.

      โˆž Feed Keeps Going

      If you run out of posts from feeds you subscribe to within the given time window, your feed will now continue automatically to show you slightly older posts and then posts from across all of Scour.


      ๐Ÿ”– Some of My Favorite Posts

      Here were some of my favorite articles I found on Scour in July and August:

      • As I've continued to read and think about how we use AI, particularly in software engineering, these were some I found interesting:
        • Nolan Frausto wrote about The AI Slop Spiral and teams getting into the habit of having AI write plans that are so long and give the appearance of thinking, which are then only reviewed by AI, and then used to have AI produce code, which is then only reviewed by AI, etc.
        • Patrick George Wyndham Smith wonders about how we should think about code review in Faster pull requests are faster horses. He makes the point that "Reading code only as diffs is like trying to view an elephant through a straw."
        • Geoffrey Litt wrote Understanding is the new bottleneck, which contains a thesis I very much agree with and an /explain-diff skill that I tried out for a few days and then turned off.
        • Alex Klos wrote How Do We Stop Vibe Coding? discussing how to build trust with AI-generated code and the dissatisfying array of options for spec-driven development.
      • Ariana Irady wrote The Instagram Rebrand and How Typography Always Wins the Argument.
      • Bradley Emi, co-founder of Pangram, wrote a useful explanation about why LLM-written text is so flat, boring, and detectable in LLMs don't just mimic human text.
      • Irene Zhang of ChinaTalk wrote about the motivations of the DeepSeek founder, Liang Wenfeng, in The DeepSeek Thesis.

      Happy Scouring!

      - Evan

    9. ๐Ÿ”— MetaBrainz Picard 3 Release Candidate 1 rss

      The Picard team is excited to announce the first release candidate for Picard 3. With this release we are confident that Picard 3 is now suitable for testing by a wider audience. The final 3.0 release is planned to happen in a few weeks.

      Since we are near a final release, we tried to focus on bugfixes, final changes to the Plugin API and further UI/UX improvements. On the UI side, Picard now fully supports dark / light mode across all supported operating systems, with the ability to change the theme without a restart.

      Download links and a detailed list of changes since Picard 3 beta 9 are available below. For a more detailed overview of what is new in Picard 3 please see the previous blog post Picard 3 Alpha Release.

      While we have all the major features implemented and with the latest bug fixes we are confident in the current code, this is still a pre-release and there might be bugs. If you use this, do so with care, backup your files and please report any issues you encounter.

      If you are updating from Picard 2, note that some of the changes are backward incompatible, hence we recommend you make a backup of your Picard.ini config file before trying this version. You can do so in Picardโ€™s Options under Advanced > Maintenance.

      Whatโ€™s new?

      Bugfixes

      • PICARD-1877 - The language field of a lyrics (USLT) tag is not preserved
      • PICARD-3377 - picard-cli plugins compile-ui fails when called on a .ui file inside a directory
      • PICARD-3381 - Alternative Qt6 rcc path missing for RHEL
      • PICARD-3383 - picard-cli plugins install . gives an error about the plugin not being in the registry
      • PICARD-3393 - A single failing metadata processor prevents all subsequent processors from running
      • PICARD-3398 - Pending request stuck if authentication gets cancelled
      • PICARD-3400 - OAuth: browser-integration login exchanges code with wrong (unprefixed) scopes, breaking collections
      • PICARD-3402 - ListenBrainz batch submission retries forever on permanent errors (e.g. 401)
      • PICARD-3403 - Plugin git authentication crashes with AttributeError on pygit2 1.20+ (removed GIT_CREDENTIAL_* constants)
      • PICARD-3404 - A rating of 0 is discarded when loading ASF/WMA/WMV files
      • PICARD-3405 - ImageList.get_types_dict() keeps the smallest image per type instead of the biggest, defeating "Never replace cover images with smaller ones"
      • PICARD-3406 - AttributeError: 'Pygit2Repository' object has no attribute 'branches'

      New Features

      • PICARD-700 - Add a new tag "albumartists"
      • PICARD-3378 - Add tagger script functions $get_new() and $get_original() to allow direct access to new or original file tags
      • PICARD-3379 - Add a regex testing playground to the Advanced options screen
      • PICARD-3380 - Option to remove all cover images from tags

      Improvements

      • PICARD-2109 - Set cover art default to CAA Release Group
      • PICARD-2442 - Allow runtime theme changes
      • PICARD-2844 - Make language required for both comment and lyrics tags
      • PICARD-3117 - Write "Performer [instruments]" without specific instrument as performer:instruments
      • PICARD-3374 - Disc log readers registered by plugins should have access to the PluginApi
      • PICARD-3382 - debug_if() and DebugOpt should be exposed through Plugin V3 API
      • PICARD-3387 - Use tags added with api.register_script_variable for auto-completion
      • PICARD-3394 - ListenQueue: Avoid unnecessary file writes and clean up queue file after successful submission
      • PICARD-3396 - Offer "Use track relationships" as an opt-in in the first-run setup wizard
      • PICARD-3399 - Improve browser integration auth response pages

      Download

      We appreciate your interest in trying this new version. Use with care, backup your files and please use theMetaBrainz community forums and the ticket system to give feedback and report bugs.

      For Windows and macOS you can download the release candidate version from the Picard download page. Linux users can run from source or try the "candidate" channel of the Picard snap package.

      Picard is free software and the source code is available on GitHub.

      Helping out

      We want to provide a polished release of Picard 3.0 that everyone can feel confident to upgrade to. To achieve this, we need the help from the MusicBrainz community.

      The easiest way to help us getting a great Picard 3.0 release is using and testing this release candidate. Please report bugs on the Picard issue tracker and provide feedback in the community forums.

      We also need help with translations, as there are a lot of new features and UI changes over previous Picard versions. We will avoid any further text changes before the final release, so now is the right time to help with translation on Weblate. Please see the translation instructions on the Wiki for details.

      If you are a software developer you are very welcomed to provide fixes and features. Picard is free software and the source code is available on GitHub. See Contributing to Picard on the Picard website to get started.

      You can also look at the new Plugin API and develop plugins for Picard or update your existing Picard 2 plugin to work with Picard 3.

      Acknowledgements

      Code contributions by Bob Swift, Bryan Roessler, Laurent Monin and Philipp Wolfer. Translations were updated by hildgyorgy (Hungarian), janrieger (German), Marc Riera (Catalan), mfmeulenbelt (Dutch), ninjum (Galician), NorwayFun (Georgian), Priit Jรตerรผรผt (Estonian) and Vaclovas Intas (Lithuanian).

    10. ๐Ÿ”— Rust Blog Announcing rustup 1.29.1 rss

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

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

      What's new in rustup 1.29.1

      The headlines of this release are:

      • Concurrency in certain rustup operations has been improved:

        • When running rustup update, rustup will first check for possible updates in parallel. pr#4752
        • When running rustup component add with multiple components, they will be installed concurrently. pr#4790
        • Implicit installation of the active toolchain in rustup-init and rustup invocations has been deprecated where deemed unnecessary and will now produce a warning. pr#4840

        • Please see our blog post for more details regarding this change.

        • rustup doc now supports the --serve flag which allows serving the docs over local HTTP. This should help users with containerized browser and/or rustup setups. pr#4986
      • Installing i686-pc-windows-* host toolchains on 64-bit Windows now requires --force-non-host. pr#4935

      • rustup-init will no longer leave unexpected files on disk after cancelled installations. pr#4996

      • A bug has been fixed which might cause Windows installation to fail when using rustup-init.sh. pr#4756

      • "Target triple " has been renamed to "target tuple " across the project to reflect the new terminology. pr#4743 pr#4827 pr#4834

        • Please note that this is not a breaking change in the CLI since the existing options such as --target are not using this terminology.

      In addition, rustup now officially supports aarch64-pc-windows-gnullvm as a host platform. pr#4523

      Further details are available in the changelog!

      How to update

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

      $ rustup self update
      

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

      $ rustup update
      

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

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

      Caveats

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

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

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

      Thanks

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

    11. ๐Ÿ”— New Music Releases The Ocean - Ultima Esperanza rss

      The Ocean - a new release is available:

      • 2026-09-01: Ultima Esperanza (Single)

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

      Visit muspy for more information.

    12. ๐Ÿ”— Ampcode News Fable 5.1 rss

      Claude Fable 5.1 now powers Amp's ultra mode, replacing Fable 5.

      It's very good at writing, very good at taking direction mid-task, and very good at working on its own. And it costs less to run.

      Long Tasks and Proof of Work

      What won us over is how much better it got at long horizon work, at giving proof of its work, and at iterating on that proof. It runs for hours on its own, and when the proof doesn't hold up, it goes back and fixes the work, then proves it again.

      Some examples:

      • Hamish told it key presses felt laggy in our iOS app and asked it to find out why. Two hours later it had a side-by-side video of the old and new builds typing the same sentence on an iPhone simulator. Along the way it caught a two-pixel height difference in its own comparison, corrected it, and re-recorded. Typing latency in Safari went from 85 ms to 8 ms.
      • Thorsten recorded his screen creating a new thread on ampcode.com and asked it to make that twice as fast, however long that may take. Fable 5.1 pulled every frame out of the recording to time each step, then found the biggest delay was waiting for the server to finish creating the thread. Creating a thread got 45% faster.

      Writing

      Writing is where it impressed us the most. So far we haven't been big fans of using AI for prose. Fable 5.1 changed that. The text it produces reads more like it was written by a person. It explains the idea behind a change instead of every technical detail, and draws a diagram when that's clearer than a paragraph. We ended up using it for our new docs pages, where it not only surprised us by writing concise prose but also by running the features on a dev server, executing them end to end, and documenting them with screenshots and demo videos.

      Steering

      We steer it a lot more now. Fable 5 would sometimes ignore an instruction sent mid-task and carry on with the work it already had. Fable 5.1 does both: it finishes the original task, does what you just asked, and reports on each separately. It addresses every instruction you give it, even several at once. It works great with the Steer, Not Queue setting turned on.

      Cheaper

      And it costs less: ultra threads are about 35% cheaper than before. Cache reads are 75% cheaper than on Fable 5, and in a typical Amp thread, over 90% of tokens are cache reads.

      How To Use It

      ultra is for the work where the outcome is clear and the path is not. Fable 5.1 is at its best there. A few habits help:

      • Tell it what done looks like, and how to prove it. Example: "The sidebar stutters when scrolling through a few hundred threads. Find out why and fix it. Show me a video of scrolling before and after on the same thread list, and frame times measured in Safari, not Chrome."
      • Steer it while it works. If it's heading somewhere you don't want, say so in the moment. You can also hand it new tasks while it's busy; it addresses all of them without dropping the one it's on.

      What the Team Says

      Very impressed by Fable 5.1. It's very good at writing, it's very good at... everything really? I'm in a thread where I constantly reply to 2-3 different things and it perfectly keeps them apart. It's like having two conversations at once.

      I've also been impressed with Fable 5.1. Feels less hand-wringy than Fable did.

      โ€” Camden Cheek

      In my code reviews I agree with its changes more than I agree with the previous Fable's. And I steer it a lot more, because it handles multiple requests at once.

    13. ๐Ÿ”— Ampcode News Intelligently Ordered Diffs rss

      The first challenge in code review is figuring out which files to read first. Amp now orders diffs intelligently and highlights which files contain the essential changes.

      Click the file order button to toggle between alphabetical and intelligent order. Amp reads the diff, finds the files that best explain the change, and moves them to the top.

      The Changes pane with intelligent file ordering enabled, important files first, and less important files muted

      Less relevant files, such as tests, fixtures, and generated code, will be shown in muted colors below the important ones.

      If the diff changes while you're reviewing it, a blue dot over the button will indicate that there is an updated ordering. Clicking it will update the diff with the new order.