In this newsletter:
Conceptual integrity and counting lines of code
Plus 6 links and 4 quotations and 1 note and 3 releases and 2 research reports
Sponsor message: Constrain AI agent abilities with trusted runtimes and Agentic Classifiers
AI agents run 24/7 and will try anything to achieve their goal – at 100x the scale of a human workforce. Teleport helps you deploy AI safely: starting with isolated ephemeral trusted runtimes, followed by a deep AI audit. Agentic Classifiers take it from there, re-reviewing sessions to check and reclassify behavior using downstream meta-audit events that can lock or escalate AI agents’ actions.
Conceptual integrity and counting lines of code - 2026-08-19
Last week I recorded an episode of the Talking Postgres podcast with Claire Giordano on the subject of “How AI is changing software development”. We had a really great conversation. Here are a couple of my highlights from a lightly edited transcript (prompt to Claude: “very minor edits to remove disfluencies”).
This is the latest version of an argument I’ve been trying to build about why sometimes it does make sense to talk about lines of code as an indicator of productivity with coding agents, at 35:01:
A lot of people will tell you it makes no sense to measure productivity in lines of code. I’d actually disagree, because there’s a hard limit. In the before-times, a software engineer could produce a few hundred lines of production-ready code per day — and 200 lines of working, debugged, production-level code is an incredibly good day. Most days you’d produce 50 or 60.
If agents let you produce a thousand lines of debugged code, that really is a very meaningful improvement — as long as the code is the same quality: maintainable, tested, all of that. You can get to that point with agents, but it takes a huge amount of skill and knowledge and experience. That’s what senior engineers are made of.
I can do way more work as a single engineer than I could without agents. So you could argue, why should a company have more than one engineer? Beyond the obvious bus factor thing — a team of one is a very badly designed team — the answer is that the new limiting factor is cognitive capacity. I can churn out code a hundred times faster. I don’t have the cognitive capacity to stay on top of 100 times the amount of code. So you still need a team of engineers, so you can load balance that cognitive capacity across the team.
And this section on conceptual integrity at 46:03, which Claire equated to the Winchester Mystery House!
Simon: There’s a concept in The Mythical Man-Month — conceptual integrity — where well-designed software has an integrity to it: there are no surprises in it, it covers exactly the right domain of things, everything fits together and makes sense. That’s so much harder with coding agents, where you can have an idea for a feature, run a prompt, and five minuteslater you’ve got the feature. Your software grows little weird bumps in funny different directions.
Claire: You know my analogy for that? The Winchester Mystery House.
Simon: It’s got 140 rooms, because the woman who built it was the widow of the guy who invented the Winchester rifle, and her psychic told her she’d be haunted by the ghosts of everyone killed with that rifle unless she kept building the house forever. So for 40 years she kept adding new rooms. That’s exactly the problem with coding agents and software: it’s very easy to keep adding new rooms, because the cost of adding those rooms is so much cheaper. What you end up with is something where the conceptual integrity falls apart — and then it’s harder to make decisions about it.
It all keeps coming back to discipline. It used to be that the discipline was enforced on you by the amount of time it took. You’d come up with an idea for a crazy feature and think “yeah, but that would take me a week — I cannot justify that, so I’ll forget about it.” If it takes an hour, it’s so much easier to justify.
(Side-note: the Wikipedia article includes credible sources that dispute the story about the psychic.)
Link 2026-08-17 We Tracked a Shipment of Rare Books. It Ended at an Amazon AI Training Facility:
Excellent piece of reporting from 404 Media. For a while now there have been stories of book dealers receiving orders for large volumes of books from apparently price-insensitive anonymous customers, widely suspected to be companies looking to scan them for AI training (see my previous coverageof Anthropic’s book scanning from June 2025.)
404 Media investigated with an AirTag!
In July, one bookseller told me they received a very large order of around 1,000 books on Biblio, one of these marketplaces. The seller agreed to put an Apple AirTag provided by 404 Media in one of the books included in this order so we could see where the book was going. And by extension, which company, AI or otherwise, was behind this massive order.
The book ended up delivered to the VGT3 corner of the LAS8 Amazon facility in the north east of Las Vegas, where the entrance carried this on-the-nose logo of a dinosaur with a book!
Photo credit: 404 Media
Online forum discussions between Amazon workers confirmed that VGT3 destructively scans large volumes of books.
Link 2026-08-17 Qwen 3.8 27B scores 52 on the Artificial Analysis Intelligence Index:
That’s the same score as GPT-5.6 Luna (max), and just one point behind GLM-5.2 (max) and DeepSeek V4 Pro 0813 (max) - that GLM is 753B and that DeepSeek is 1.7T parameters, and Luna is size unknown but presumably a whole lot bigger than 27B.
Qwen 3.8 27B is a truly astonishing model.
Link 2026-08-18 Mojo🔥 is now open source:
The Mojo programming language has been promising an open source release since May 2023. Last week they shipped their 1.0 and today they have followed through on that original promise, releasing the compiler and toolchain under an Apache 2 license.
When Mojo first launched the stated goal was to produce a superset of Python, so existing Python code could be used to bootstrap their own ecosystem. That plan changed around August 2025:
Mojo may or may not evolve into a full superset of Python, and it’s okay if it doesn’t.
We’re encouraged by how well AI-assisted coding tools already help migrate Python to Mojo today, and we’re confident that future tooling and ecosystem maturity will make this evolution even smoother.
Today Mojo is its own language, optimized to make GPU programming as painless as possible using syntax inspired by Python, if not 100% compatible with existing code.
Quote 2026-08-19
My hypothesis is that there is a new opportunity for Extensible Software on the web. LLMs radically lower the cost of authoring extensions, and modern sandbox primitives lower the deployment cost and provide good security boundaries. We can build our app as a solid, accountable core, and allow users to safely extend it in many directions by having LLMs fill in the missing pieces. We can give our users super powers.
Jeremy Morrell, Extensible Software in the age of LLMs
Research: smolmachines / smolvm as a sandbox for untrusted Python & JavaScript
I tasked Claude Fable 5 running in Claude Code for web with the following research task:
Put https://smolmachines.com through its paces as a fast secure sandbox. Explore what it would take to use this to run untrusted Python and JavaScript code in a way that is limited in what RAM and CPU time it can take up (protection against "while true") with no network access and filesystem access only to designated files
Goal is to be able to use this to execute user-provided tasks for things like data transformations
It quickly ran into a problem: the Claude Code for web environment can’t run smol machines. Quoting the notes it wrote:
This Claude Code container: Linux 6.18.5-fc-v20 (itself a Firecracker guest), 4 vCPU, 15GB RAM. No /dev/kvm, no vmx/svm CPU flags → no nested virt.
smolvm machine runfails as expected: “kvm not available”.Plan B: GitHub Actions ubuntu runners DO expose /dev/kvm → run the real test battery via a temporary workflow on this branch, collect logs, remove workflow in final commit.
And Plan B is what it did, installing smolvm and running these tests directly in a GitHub Actions runner against that branch.
That was a creative solution to the environmental limits posed by Claude Code for web. Another example of Fable being relentlessly proactive.
Research: A shot-scraper-style JSON API on Bun 1.4’s new Bun.WebView
Today saw the long awaited release of Bun 1.4, the first stable version since the infamous Rust rewrite a few months ago.
Interestingly, the Rust rewrite was downplayed in the release notes, which introduced a bewildering array of new features and claimed 2,900 additional bug fixes:
Bun 1.4 adds +1,517 tests from the Node.js test suite - our biggest jump in Node.js compatibility since Bun 1.0. Bun v1.4 also fixes over 2,900 issues. It reduces idle CPU usage by 5x, reduces memory usage by up to 35%, and starts 50% faster on Linux. It adds
Bun.Image,Bun.WebView,Bun.markdown,Bun.cron(),Bun.Terminal,bun run --parallel,bun test --parallel,bun audit fix,bun dedupe, andbun prune. And it rewrites Bun from Zig to Rust.
Of these the one that most caught my eye was Bun.WebView, which adds first class support for browser automation to Bun core using either macOS WebKit or control of a local Chromium process via the Chrome DevTools Protocol (CDP).
I had Claude Code for web build a prototype of a web API providing the ability to load a web page and then execute JavaScript against it, inspired by my shot-scraper javascript CLI tool - partly to see how much RAM would be needed by such a service.
Here’s that TypeScript server implementation, which appears to need a 192MB-256MB container to run a full Chrome against complex web pages - tested using cgroups.
Link 2026-08-20 ChatGPT search now uses the site:operator at scale:
Promptwatch is part of the emerging “GEO” space, for Generative Engine Optimization - the chatbot version of SEO, where companies offer tools and consulting to help your site increase its presence in replies to prompts inside tools like ChatGPT.
The Promptwatch product uses automation to track responses to prompts across end-user chat products like ChatGPT, Claude, and Gemini. They publish aggregate reports on this as part of their own content marketing strategy, which do seem to provide credible hints as to otherwise invisible design changes to those products.
Their own tracking shows a notable change aligned with the GPT-5.6 rollout earlier this month:
The percentage of all ChatGPT Search fanout queries that contain the site:operator, per day. The share hovered between 0.3% and 0.5% for weeks, dipped briefly to 0.15% on August 3 to 5 (consistent with a staged rollout or pre-launch experiment), then jumped to 16-17% on August 8.
It’s important to note that these figures only reflect the prompts for which they have automated tracking enabled.
This corresponds to OpenAI’s somewhat vague August 6th announcement:
For Plus and Pro users, we’re updating GPT‑5.6 Sol in Chat to be more reliable with facts and provide more focused answers.
Once again I am hampered by OpenAI’s decision to actively obscure their system prompts, but from poking at ChatGPT I believe their latest search tool has a shape like search(query, recency, domains) rather than encouraging a site: operator directly.
In a follow-up on August 18th Promptwatch reported that ChatGPT appeared to have greatly reduced the likelihood of Reddit being used in those searches. My own attempts to ascertain if the system prompt has been updated to discourage Reddit sourcing have been unsuccessful - the most thorough leaked system prompt collection I know of doesn’t yet show any relevant changes.
Quote 2026-08-21
After I released version 1.0, I figured I would have to do the rotations myself. So I sat down with ChatGPT and I didn’t get it to write the code, but I got it to educate me. With a patient, interactive tutor, I was able to finally do what I hadn’t by reading books and asking mathematician friends – I learnt how to use quaternions just enough to make the app work.
So learning doesn’t stop just because I outsource a bunch of thinking to AI. It pushes me to learn more. I like that as an outcome.
Matt Webb, Galactic Compass 2: now with new augmented reality mode
Link 2026-08-21 Stop Making TUIs:
Thomas Ptacek advocates for building real native user interfaces for even the smallest of personal tools, because coding agents have reduced the cost of getting a usable-enough GUI up and running to almost nothing.
I wrote about my vibe-coded bandwidth and GPU monitoring macOS task bar apps back in March, and I’m still using both of those on a daily basis.
I’m not habitually knocking out real UIs for my other projects yet, but I’m running out of excuses!
Thomas:
If you haven’t tried your hand at turning one of your 500 throwaway CLIs into a native app, you’re doing yourself a disservice. Go build a native UI. It’ll probably change the way you think.
Release: llm-openrouter 0.7
Now that this plugin is compatible with LLM 0.32 it can display the reasoning traces for LLMs available through OpenRouter.
Updated for compatibility with LLM 0.32.
Models now use OpenRouter’s implementation of the Responses API.
Three new server-side tools: Shell, WebFetch, and WebSearch. Enable these with options like
-T WebSearch.
Release: llm 0.32.1
Fresh installs of LLM stopped working the other day because the OpenAI Python library dropped its usage of httpx, and it turned out LLM depended on that library but only installed it via a transitive openai dependency.
This dot-release fixes that for the moment by pinning to openai<3, and a soon-to-drop 0.33 release will switch from httpx to httpx2.
Note 2026-08-22
The key skill required to make productive use of coding agents is being able to confidently instruct them on how to make changes and then confidently verify that those changes have been applied in the correct way.
Sometimes this involves reviewing every line of code they have written, but there are other ways to achieve that goal. Eyeballing every line of code has never been the most effective way to validate a chance to a piece of software.
Release: llm 0.33
My highlights from this release:
I shipped a quick 0.32.1 fix for this yesterday, but this is the more comprehensive fix.
llm embedandllm embed-multinow accept--key. The PythonEmbeddingModel.embed(),EmbeddingModel.embed_multi(),Collection.embed()andCollection.embed_multi()methods acceptkey=too, passing the resolved per-call key to embedding plugins without changing shared model state. Existing plugins that readself.keycontinue to work through a compatibility fallback. Thanks, ChrisJr404. #757, #1620
The embedding models now use the same pattern for keys that regular LLM models do.
llm prompt -t/--templatecan now be repeated to combine templates in order. This allows model configuration and options from one template to be used with a prompt from another.
This unlocks a neat pattern where you can create templates that package a model with a set of default options:
llm -m gpt-5.6-luna -o reasoning_effort high --save lhigh
llm "Generate an SVG of a pelican riding a bicycle" --save pelican
# Combine and run the templates
llm -t lhigh -t pelican
Reasoning-capable Responses API models now support a
reasoning_summaryoption withauto,concise, anddetailedvalues. This can be used with llm openai endpoint --responses. #1600
This is particularly useful for exercising different models that provide their own imitation of the OpenAI Responses API.
Quote 2026-08-22
And this was a debug session from hell, enormously helped by an AI doing much of the grunt-work.
I’d like to call it my tireless helper, but the AI several times stated flat out that this was impossible and unsolvable and that we should just write a report about it.
I suspect those things have been trained by people who may not be quite as stubborn as I am.
But while the AI was ready to give up several times, it did keep adding debug code and analyzing it faithfully when I pushed. So credit where credit is due and I let the AI write the commit message above.
Linus Torvalds, drm/xe: Don’t hand out the flat CCS storage as usable VRAM
Quote 2026-08-23
Prior to Fable, it felt silly to waste too much time improving your coding harness or context strategies. A new model would arrive at the same price (or cheaper!) and paper over most of your problems.
But then Fable landed. It was (and still is!) incredible. But the cost was so high and Opus was good enough (as was 5.6, K3, and even GLM) for most of the code we needed.
So we started to think about what work went where.
Drew Breunig, Fable & The End of the Free Lunch
Link 2026-08-23 Anthropic’s best AI model struggles to attract users as cheaper tools thrive:
A few interesting numbers in this FT story gathered from “people with knowledge of the matter”:
Anthropic’s “annualized revenue” for July is up to $65bn - it was $47bn in May, and I collected more historic numbers here.
Anthropic expect Q3 to be profitable according to the same model they used to declare Q2 profitable. “It also told investors that it had 6,000 customers that spend $100,000 annually or more.”
As for OpenAI, “annualised revenue has jumped 35 per cent in the quarter to date and is now over $40bn, with the launch of GPT 5.6 in July jolting the company’s performance after a sluggish start to the year”.
This article also introduced me to the Ramp AI index, which uses billing data from 70,000 Ramp credit card using companies to estimate model adoption.
Here’s Ramp’s breakdown of Anthropic model spend for July 2026, which looks reasonable given that Opus 5 was only released on July 24th, and supports the idea that Fable’s cost has made it a less popular model:
Opus 4.8: 28.0%
Sonnet 4.6: 8.3%
Fable 5: 8.0%
Opus 4.6: 6.9%
Sonnet 5: 3.6%
Opus 5: 3.5%
Opus 4.7: 1.7%
Sonnet 4.5: 1.3%
Haiku 4.5: 1.0%
Opus 4.5: 0.7%
If you find this newsletter useful, please consider sponsoring me via GitHub. $10/month and higher sponsors get a monthly newsletter with my summary of the most important trends of the past 30 days - here are previews from April and May and June.



Thanks as always for the nice writeup. On lines of code, something I've been doing is having an LLM go back through all the commits and retrospectively estimating story points (just a very simple skill and a lot of runtime). While still flawed, it does a nicer job than raw lines of code and gives you velocity you can see over time of your repos. Would love to hear your thoughts on the approach.