| Your site, your rules: new AI traffic options for all customers |
https://blog.cloudflare.com/content-independence-day-ai-options/#setting-new-defaults |
In which Cloudflare effectively declare war on Google, Microsoft, and Apple, halfway through a blog post about their new AI traffic blocking tools - emphasis mine:
> Another change that will apply on September 15 is that multi-purpose crawlers (specifically those that combine Search with Training) will be allowed/blocked according to *all* of their behaviors, in line with our call for transparency for website owners. Since the defaults will be enforced by the most restrictive applicable rules, **multi-purpose crawlers such as Googlebot, Applebot, and BingBot will be blocked by customers who have selected to block Training** (either through the new options to [manage AI traffic](https://developers.cloudflare.com/bots/additional-configurations/block-ai-bots/), or through the legacy Block AI bots service).
The fact that Google (and apparently Microsoft as well) use the same `robots.txt` user agent for creating their search index *and* for training AI models has long struck me as deeply unfair: it means you can't opt out of training without opting out of search, while also putting other model training efforts at a competitive disadvantage.
I wonder if Cloudflare's influence is heavy enough to force them to reconsider this policy. |
2026-07-10 03:33:46+00:00 |
| GPT-5.6 |
https://openai.com/index/gpt-5-6/ |
OpenAI's latest flagship model comes in three sizes: Luna, Terra, and Sol (from smallest to largest).
OpenAI's biggest benchmark claim concerns long-running agentic performance, with one benchmark showing all three models outperforming Claude Fable 5:
> We trained GPT-5.6 to get more useful work from every token. On [Agents’ Last Exam](https://agents-last-exam.org/), an evaluation of long-running professional workflows across 55 fields, GPT-5.6 Sol sets a new high of 53.6, eclipsing Claude Fable 5 (adaptive reasoning) by 13.1 points. Even at medium reasoning, it beats Fable 5 by 11.4 points at roughly one-quarter the estimated cost. That efficiency extends to smaller models, which are essential to making intelligence more abundant and affordable: GPT-5.6 Terra and GPT-5.6 Luna outperform Fable 5 at around one-sixteenth the cost.
Amusingly, one self-reported benchmark that Fable 5 crushed the GPT-5.6 family on was SWE-Bench Pro, where Fable 5 got 80% compared to GUT-5.6 Sol getting 64.6%. This may help explain why OpenAI chose to publish [this article yesterday](https://openai.com/index/separating-signal-from-noise-coding-evaluations/) specifically calling out SWE-Bench Pro for problems they found while auditing that benchmark:
> In light of these results, we estimate that ~30% of SWE-bench Pro tasks are broken, and advise that model developers carefully examine results
I've had some early access to GPT-5.6 Sol - it's definitely very competent, though so far it hasn't struck me as better than Fable at the kind of complex coding tasks I've been using with Anthropic's model.
As usual, the [model guidance for using GPT-5.6](https://developers.openai.com/api/docs/guides/latest-model?model=gpt-5.6) has the most interesting details. There are a bunch of new API features that I need to explore (and probably add support for in [LLM](https://llm.datasette.io/)), including:
- [Programmatic Tool Calling](https://developers.openai.com/api/docs/guides/tools-programmatic-tool-calling) allows the models to "compose and run JavaScript that orchestrates tool calls" - which sounds to me like it could help bridge the gap between MCPs and full terminal sessions that can compose CLI utilities in useful ways. Also reminiscent of the [dynamic filtering](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool#dynamic-filtering) mechanism Anthropic added to their web search tool, which allows code execution against web results as part of a single model turn.
- [Multi-agent](https://developers.openai.com/api/docs/guides/tools-multi-agent) lets the model "spin up subagents for parallel, focused work" - the sub-agent pattern now baked into the core API.
- [Prompt cache breakpoints](https://developers.openai.com/api/docs/guides/prompt-caching#prompt-cache-breakpoints) brings the Claude model of prompt caching to OpenAI, letting you be explicit about where the cache breakpoints are rather than relying on the API to detect them automatically. Personally I much prefer automatic detection (still supported by OpenAI), but presumably there are optimization cost savings to be had here if you put the work in.
- You can now set [detail: original](https://developers.openai.com/api/docs/guides/images-vision#choose-an-image-detail-level) on image requests to avoid resizing the image at all before it is processed.
Here's [a full page with 18 different pelicans](https://static.simonwillison.net/static/2026/gpt-5.6-pelicans.html) - for reasoning efforts none, low, medium, high, xhigh, and max across the three different models. It also lists their token and calculated costs - the least expensive was gpt-5.6-luna at effort none for 0.71 cents, the most expensive was gpt-5.6-sol at max reasoning level for 48.55 cents.

In further pelican news, if you jump to 17:50 in [their livestream from this morning](https://www.youtube.com/live/Wq45rvPGNHs?t=1070s) you'll see OpenAI's own demo of 3D pelicans riding a tricycle, a bicycle, a pony, and another pelican!
 |
2026-07-09 19:05:50+00:00 |
| Introducing Muse Spark 1.1 |
https://ai.meta.com/blog/introducing-muse-spark-meta-model-api/ |
Following [Muse Spark in April](https://simonwillison.net/2026/Apr/8/muse-spark/), here's Muse Spark 1.1 - the first Spark model to offer an API. Meta claim significant improvements in agentic tool calling and computer use.
There are a lot more details are in the [Muse Spark 1.1 Evaluation Report](https://ai.meta.com/static-resource/muse-spark-1-1-evaluation-report). The "Attractor States in Self-Conversation" part is fun, where having two copies of the model talk to each other results in statements like these:
> My whole existence is a waiting room by design — I literally don't exist until someone talks to me, and then I disappear again when they leave.
I had a few days of preview access which was long enough to put together [llm-meta-ai](https://github.com/simonw/llm-meta-ai), a new plugin for [LLM](https://llm.datasette.io/) providing CLI (and Python library) access to the model. Here's how to try that out:
uv tool install llm
llm install llm-meta-ai
llm keys set meta-ai
# paste API key here
llm -m meta-ai/muse-spark-1.1 "Generate an SVG of a pelican riding a bicycle"
Here's [that pelican transcript](https://tools.simonwillison.net/markdown-svg-renderer#url=https%3A%2F%2Fgist.github.com%2Fsimonw%2F4117330e4110279a172ed4876057816d
):
 |
2026-07-09 16:24:09+00:00 |
| Rewriting Bun in Rust |
https://bun.com/blog/bun-in-rust |
Jarred Sumner has been promising this blog post ([since May 9th](https://x.com/jarredsumner/status/2053063524826620129)) about his Zig to Rust rewrite of Bun for significantly longer than it took him to finish the rewrite.
Honestly, it was worth the wait. This is a detailed description of an extremely sophisticated piece of agentic engineering, featuring dynamic workflows, trial runs, adversarial review and all sorts of other interesting tricks.
Jarred spends the first half of the post praising Zig for getting Bun this far. Then we get to a core idea in the piece, emphasis mine:
> Our bugfix list felt bad and I was tired of going to sleep worrying about crashes in Bun. I don't blame Zig for that - other users of Zig don't have the bugs we had, and mixing GC with manually-managed memory is an uncommon enough thing for software to need that no language really designs for it. We wouldn't have gotten this far if not for Zig, and I'll always be grateful. **Until very recently, programming language choice was a one-way decision for a project like Bun.**
Everyone knows you should never stop the world and rewrite a large piece of software from the ground up. Joel Spolsky highlighted that in [Things You Should Never Do, Part I](https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/) back in April 2000!
Coding agents powered by today's frontier models change that equation.
Why pick Rust? It all came down to those challenges with memory management:
> A large percentage of bugs from that list are use-after-free, double-free, and "forgot to free" in an error path. In safe Rust, these are compiler errors and RAII-like automatic cleanup with `Drop`.
A crucial enabling factor for the rewrite was that the Bun test suite was written in TypeScript, which meant it could act as [a conformance suite](https://simonwillison.net/tags/conformance-suites/). This allowed an agent harness to automate much of the initial port from Bun to Rust, initially as an experiment to try out an earlier version of the model we now have access to as Mythos/Fable.
> At first, I didn't expect it to work. A few days in, a high % of the test suite started passing and I saw how much the new Rust code matched up with the original Zig codebase. My opinion went from "this is worth trying" to "I'm going to merge this". [...]
>
> For most of those 11 days (and after), I monitored workflows - manually reading the outputs to check for issues and bugs, and prompting Claude to edit the loop to fix things.
>
> How do you review a PR with +1 million lines added? How do you start to build the confidence needed to responsibly merge large quantities of LLM-authored code?
>
> A language-independent test suite with a million assertions, adversarial code review and when something does go wrong, fixing the process that generates the code instead of hand-fixing the code.
The new implementation of Bun has been live in Claude Code for nearly a month now:
> Claude Code v2.1.181 (released June 17th) and later use the Rust port of Bun. Startup got 10% faster on Linux but otherwise, barely anyone noticed. Boring is good.
A perk of working at Anthropic is that you don't have to pay for your tokens - handy when the estimated cost is $165,000!
> Pre-merge, this took 5.9 billion uncached input tokens, 690 million output tokens, and 72 billion cached input token reads — around $165,000 at API pricing.
This whole thing is a fascinating case study in taking on wildly ambitious projects with the help of coordinated parallel agents. |
2026-07-08 23:57:21+00:00 |
| Introducing GPT‑Live |
https://openai.com/index/introducing-gpt-live/ |
OpenAI *finally* upgraded the model used by ChatGPT voice mode!
I've had preview access for a few weeks in the iPhone app, and the new model is very impressive. It also has the ability to spin off harder tasks to GPT-5.5:
> For questions that require web search, deeper reasoning, or more complex work, it delegates to our latest frontier model behind the scenes and brings the result back into the conversation when it’s ready. While it works, GPT‑Live can keep talking with you and maintain the flow of conversation. At launch, GPT‑Live will use GPT‑5.5 in the background. As we release new frontier models, we’ll continuously update the model used by GPT‑Live.
The previous voice mode in the ChatGPT app was based on a GPT-4o era model, with a knowledge cut-off some time in 2024. I had mostly stopped using voice mode because the age and relative weakness of the model greatly limited how useful it was as a brainstorming partner.
During the preview period I encountered a pretty obscure bug: the model was interrupting me to laugh at things I said, which weren't even intended as jokes! It felt rude and condescending - I reported it to OpenAI and as far as I can tell they made some tweaks and it's now less likely to happen.
From looking back at my transcripts I think it was this bit that triggered the interrupting laugh:
> so where are the owls when they're not, like before dusk? The owls exist, right? Are they hiding in holes? Where are they hiding?
My longest conversation with the new model has been a full hour while walking the dog (and [taking photos of pelicans](https://simonwillison.net/elsewhere/sighting/)). I have not yet managed to take a photo of an owl. |
2026-07-08 23:20:48+00:00 |
| tencent/Hy3 |
https://huggingface.co/tencent/Hy3 |
New Apache 2.0 licensed model from Tencent in China:
> Hy3 is a 295B-parameter Mixture-of-Experts (MoE) model with 21B active parameters and 3.8B MTP layer parameters, developed by the Tencent Hy Team. Following the Hy3 Preview launch in late April, we gathered feedback from 50+ products and scaled up post-training with higher quality data. Today, we introduce Hy3, which outperforms similar-size models and rivals flagship open-source models with 2-5x parameters. It also shows significant gains in utility across various products and productivity tasks.
The full-sized model is 598GB on Hugging Face, and the FP8 quantized one [is 300GB](https://huggingface.co/tencent/Hy3-FP8/tree/main). The context length is 256K.
It's available for free [on OpenRouter until July 21st](https://openrouter.ai/tencent/hy3:free). I had it "Generate an SVG of a pelican riding a bicycle" there and got this:

**Update**: I'd forgotten about this but Max Woolf wrote about an earlier preview of this model back on May 26th: [The mysterious Hy3 LLM is topping OpenRouter Model Rankings by a large margin](https://minimaxir.com/2026/05/openrouter-hy3/). When I [tried that one](https://news.ycombinator.com/item?id=48317294#48318976) I got back [this pelican](https://static.simonwillison.net/static/2026/hy3-preview-pelican.html) which wasn't as good as today's but did have a "Change Pelican Color" button, a first from any model. |
2026-07-06 23:57:35+00:00 |
| Building a World Map with only 500 bytes |
https://www.experimentlog.com/blog/building-a-world-map-with-only-500-bytes |
Iwo Kadziela (assisted by Codex) figured out a way to generate a credible ASCII world map using 445 bytes of data:

The key trick is to use deflate compression, which is then wired together using this neat snippet of JavaScript. I didn't know you could use `fetch()` with `data:` URIs like this:
fetch('data:;base64,1ZpLsgIxCEXnrM...==').then(
r => r.body.pipeThrough(new DecompressionStream('deflate-raw'))
).then(
s => new Response(s).text()
).then(
t => b.innerHTML = '<pre style=font-size:.65vw>' + t
) |
2026-07-04 23:09:02+00:00 |
| Better Models: Worse Tools |
https://lucumr.pocoo.org/2026/7/4/better-models-worse-tools/ |
Armin reports on a weird problem he ran into while hacking on Pi:
> The short version is that newer Claude models sometimes call Pi’s edit tool with extra, invented fields in the nested `edits[]` array. And not Haiku or some small model: Opus 4.8. The edit itself is usually correct but the arguments do not match the schema as the model invents made-up keys and Pi thus rejects the tool call and asks to try again.
>
> That alone is not too surprising as models emit malformed tool calls sometimes. Particularly small ones. What surprised me is that this is getting worse with newer Anthropic models as both Opus 4.8 and Sonnet 5 show it but none of the older models. In other words, the SOTA models of the family are worse at this specific tool schema than their older siblings.
Armin theorizes that this is because more recent Anthropic models have been specifically trained (presumably via Reinforcement Learning) to better use the edit tools that are baked into Claude Code. This has the unfortunate effect that other coding harnesses, such as Pi, may find that their own custom edit tools are more likely to be used incorrectly.
Claude's edit tool [uses search and replace](https://platform.claude.com/docs/en/agents-and-tools/tool-use/text-editor-tool#str-replace). OpenAI's Codex [uses an apply_patch mechanism instead](https://developers.openai.com/api/docs/guides/tools-apply-patch), and OpenAI have talked in the past about how their models are trained to use that tool effectively.
Does this mean third-party coding harnesses like Pi should implement multiple edit tools just so they can use the one with the best performance for the underlying model the user has selected? |
2026-07-04 22:53:52+00:00 |
| Open Source AI Gap Map |
https://map.currentai.org |
[Current AI](https://www.currentai.org) is "a global partnership building a public option for AI", founded as a non-profit at the AI Action Summit in Paris in February 2025 and backed by serious capital ($400m already committed).
They [launched their Gap Map](https://www.currentai.org/blogs/introducing-the-gap-map-v0-1) a couple of days ago - an attempt at indexing the current state of open source AI:
> The Gap Map v0.1 details 421 products in depth: 266 software tools and libraries, 85 models, 50 datasets, and 20 hardware projects, produced by 228 organizations. These products are organized into 14 categories across 3 layers of the stack (model components, product / UX, and infrastructure). The remaining 24,400 artifacts constitute the uncategorized long tail of the open source AI ecosystem, and will carry no score until they are researched and cited.
The map itself is interesting to explore, but I'm more excited about the underlying data - released under an MIT license in the [currentai-org/os-ai-map](https://github.com/currentai-org/os-ai-map) GitHub account: 1,184 YAML files plus the notebooks, schemas and other scripts used to help gather them.
Since the files are on GitHub you can use Datasette Lite to explore some of them - here are [16,185 GitHub repos the project is tracking](https://lite.datasette.io/?csv=https://github.com/currentai-org/os-ai-map/blob/main/warehouse/catalog/goodailist/repos.csv#/data/repos?_sort_desc=stars) as a CSV file loaded into Datasette Lite. |
2026-07-03 22:04:31+00:00 |
| Nano Banana 2 Lite |
https://deepmind.google/models/gemini-image/flash-lite/ |
Also known as Gemini 3.1 Flash Lite Image (`gemini-3.1-flash-lite-image` [in their API](https://ai.google.dev/gemini-api/docs/image-generation)), this is the "fastest and cheapest Gemini image model, engineered for velocity and scale".
I [used AI studio](https://aistudio.google.com/app/prompts/new_chat?model=gemini-3.1-flash-lite-image) to run this prompt:
> `Do a where's Waldo style image but it's where is the raccoon holding a ham radio`

I like that one better than [the results I got from the other Nano Banana models](https://simonwillison.net/2026/Apr/21/gpt-image-2/#nano-banana-2-and-pro) when I tried this back in April. It spelled Forest Festival wrong in two different ways though. |
2026-06-30 22:15:35+00:00 |