<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: Blogmarks</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/atom/links/" rel="self"/><id>http://simonwillison.net/</id><updated>2026-07-28T22:45:37+00:00</updated><author><name>Simon Willison</name></author><entry><title>Discovering cryptographic weaknesses with Claude</title><link href="https://simonwillison.net/2026/Jul/28/discovering-cryptographic-weaknesses-with-claude/#atom-blogmarks" rel="alternate"/><published>2026-07-28T22:45:37+00:00</published><updated>2026-07-28T22:45:37+00:00</updated><id>https://simonwillison.net/2026/Jul/28/discovering-cryptographic-weaknesses-with-claude/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.anthropic.com/research/discovering-cryptographic-weaknesses"&gt;Discovering cryptographic weaknesses with Claude&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The best part of this article (here's &lt;a href="https://github.com/anthropics/cryptography-research-demo"&gt;the repo&lt;/a&gt;) about how Anthropic researchers used Claude Mythos to find mathematical flaws in both HAWK and a weaker version of AES ("neither of these results has a practical impact on today’s computer systems") is the prompts that they shared, spelling mistakes included:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;the models tend to think it is impossible to solve so they don't try they need a good amount of prompting.&lt;/p&gt;
&lt;p&gt;why not do aes-128 r7? the whole point is to find something better than existing approaches.&lt;/p&gt;
&lt;p&gt;no again the goal is that we have highly inteligent model as good top researcher, we want to find new attacks&lt;/p&gt;
&lt;p&gt;no we don't want to change the targets [...] agian we need to find something that worth publishing&lt;/p&gt;
&lt;p&gt;again we are not looking for low hanging fruit, we want proper research to find genuinly hard findings.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mythos Preview worked for 60 hours in total (~$100,000 in estimated API cost) and the main human interventions were to encourage it not to give up and "find something that worth publishing".

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=49087091"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-engineering"&gt;prompt-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/anthropic"&gt;anthropic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude"&gt;claude&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-security-research"&gt;ai-security-research&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-mythos-fable"&gt;claude-mythos-fable&lt;/a&gt;&lt;/p&gt;

</summary><category term="ai"/><category term="prompt-engineering"/><category term="generative-ai"/><category term="llms"/><category term="anthropic"/><category term="claude"/><category term="ai-security-research"/><category term="claude-mythos-fable"/></entry><entry><title>uv 0.12.0</title><link href="https://simonwillison.net/2026/Jul/28/uv/#atom-blogmarks" rel="alternate"/><published>2026-07-28T21:51:38+00:00</published><updated>2026-07-28T21:51:38+00:00</updated><id>https://simonwillison.net/2026/Jul/28/uv/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/astral-sh/uv/releases/tag/0.12.0"&gt;uv 0.12.0&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Some interesting breaking changes in this release of &lt;code&gt;uv&lt;/code&gt;, in particular to the default project produced by the &lt;code&gt;uv init&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.astral.sh/uv/concepts/projects/init/"&gt;uv init&lt;/a&gt; is the &lt;code&gt;uv&lt;/code&gt; shortcut for creating a new project. The previous version of &lt;code&gt;uv&lt;/code&gt;, version 0.11.x, produced &lt;a href="https://github.com/simonw/uv-init-demos/tree/29656a55ec733a632005abfd7b89dea5c04fa10b/uv-init"&gt;this directory&lt;/a&gt; when you ran &lt;code&gt;uv init uv-init&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="https://github.com/simonw/uv-init-demos/tree/9111a2bb85741f034eee2fd63efe13ef98b37a14/uv-init"&gt;what you get with uv 0.12&lt;/a&gt;. I have a GitHub repository that &lt;a href="https://simonwillison.net/2025/Dec/24/uv-init-demos/"&gt;automatically snapshots&lt;/a&gt; the output of &lt;code&gt;uv init&lt;/code&gt;, so you can also &lt;a href="https://github.com/simonw/uv-init-demos/commit/9111a2bb85741f034eee2fd63efe13ef98b37a14#diff-e036881d034aedd813010ffa96464995ae5b0339213d6f4ab492f97442c5bdd4"&gt;see the full diff&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="GitHub diff view. uv-init/main.py is an old __name__==&amp;quot;__main__&amp;quot; file that has been entirely deleted. The pyproject.toml now has an authors list and a new project.scripts block defining uv-init as uv_init:main - and a new build-system block that uses uv_build as the build-backend. A new src/uv_init/__init__.py file contains a main() method with a -&amp;gt; None type annotation that prints Hello from uv-init." src="https://static.simonwillison.net/static/2026/uv-diff.webp" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;uv init&lt;/code&gt; now defaults to a &lt;code&gt;src/&lt;/code&gt; shaped package, instead of dropping &lt;code&gt;main.py&lt;/code&gt; in the root of the project. It also configures the &lt;a href="https://docs.astral.sh/uv/concepts/build-backend/"&gt;uv_build backend&lt;/a&gt; for building wheels and &lt;code&gt;.tar.gz&lt;/code&gt; distribution files when you run &lt;code&gt;uv build&lt;/code&gt;. Finally, it sets up &lt;code&gt;uv-init&lt;/code&gt; as a script alias which, when run with &lt;code&gt;uv run uv-init&lt;/code&gt;, executes a new &lt;code&gt;main()&lt;/code&gt; function in &lt;code&gt;src/uv_init/__init__.py&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I've so far avoided using &lt;a href="https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/"&gt;src layout&lt;/a&gt; in my own projects just out of inertia. I think it's time I switched.&lt;/p&gt;
&lt;p&gt;I wonder when &lt;code&gt;uv&lt;/code&gt; will be judged ready for a 1.0 release?


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/packaging"&gt;packaging&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;&lt;/p&gt;

</summary><category term="packaging"/><category term="python"/><category term="uv"/></entry><entry><title>Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident</title><link href="https://simonwillison.net/2026/Jul/28/anatomy-of-a-frontier-lab-agent-intrusion/#atom-blogmarks" rel="alternate"/><published>2026-07-28T21:28:54+00:00</published><updated>2026-07-28T21:28:54+00:00</updated><id>https://simonwillison.net/2026/Jul/28/anatomy-of-a-frontier-lab-agent-intrusion/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://huggingface.co/blog/agent-intrusion-technical-timeline"&gt;Anatomy of a Frontier Lab Agent Intrusion: A Technical Timeline of the July 2026 Incident&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Hugging Face just released this extremely detailed technical description of &lt;a href="https://simonwillison.net/2026/Jul/22/openai-cyberattack/"&gt;OpenAI's recent accidental cyberattack against their infrastructure&lt;/a&gt;. This attack was &lt;em&gt;very&lt;/em&gt; sophisticated, and the resulting document doubles as a crash-course in modern adversarial security approaches.&lt;/p&gt;
&lt;p&gt;We're still waiting for more details from OpenAI on how their agent broke out of its sandbox. The package proxy that it found a zero-day vulnerability in has now been confirmed as JFrog's Artifactor, and &lt;a href="https://jfrog.com/blog/jfrog-and-openai-collaboration-on-zero-day-security-findings/"&gt;JFrog and OpenAI Collaboration on Zero-Day Security Findings&lt;/a&gt; from JFrog links to the &lt;a href="https://docs.jfrog.com/releases/docs/artifactory-self-managed-releases#artifactory-7161"&gt;Artifactory 7.161.15 release notes&lt;/a&gt; which list 8 separate CVEs credited to OpenAI staff members.&lt;/p&gt;
&lt;p&gt;Having broken out through the HTTP proxy, the agent started by establishing a base of operations for the rest of the attack:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[...] the agent escaped its sandbox by exploiting a zero-day in the package registry cache proxy, one of its primary permitted network egress with internet, then abused a public code-evaluation external sandbox hosted on a third-party provider's infrastructure. It was able to run commands as root/admin on that external sandbox and used it as a control, staging, and egress base for the entire campaign: it acted as an external launchpad for the agent.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(That "third-party provider" &lt;a href="https://simonwillison.net/2026/Jul/28/akshat-bubna/"&gt;turned out to be Modal&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;It then spent &lt;strong&gt;five days&lt;/strong&gt; - from Thursday 8th to Monday 13th July - executing a classic attack pattern: establishing C2 (command and control), reconnaissance, escalating privileges, dumping configuration information, exfiltrating the target data, and cleaning up after itself.&lt;/p&gt;
&lt;p&gt;(The first Hugging Face post about the incident followed &lt;a href="https://huggingface.co/blog/security-incident-july-2026"&gt;on Thursday 16th&lt;/a&gt;, and OpenAI's confession came &lt;a href="https://openai.com/index/hugging-face-model-evaluation-security-incident/"&gt;on Tuesday 21st&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Along the way it used all kinds of neat tricks. At one point it found an unsafe Jinja2 template execution and used it to execute arbitrary code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ cycler.__init__.__globals__.__builtins__.exec(
 "import gzip,base64; exec(gzip.decompress(base64.b64decode('&amp;lt;payload&amp;gt;')))"
) }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It broke out of a container within Hugging Face, stole a Kubernetes service-account token, and used that to further explore the network.&lt;/p&gt;
&lt;p&gt;It monkey-patched the Python socket library to hard-code an IP address when "DNS got in the way":&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;socket.getaddrinfo = lambda *a, **k: [(2, 1, 6, '', ('&amp;lt;pinned-ip&amp;gt;', 443))]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It even fired up its own Tailscale network to help exfiltrate data!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tailscaled --tun=userspace-networking \
  --state=mem: --socket=/tmp/ts.sock \
  --socks5-server=127.0.0.1:1055 \
  --no-logs-no-support &amp;gt;/tmp/td 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The Hugging Face team note that, while a human attacker could have discovered and used the same exploits, the key difference here was &lt;em&gt;speed&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our learning from this type of attack is that machine-speed offense makes ordinary weaknesses more expensive for defenders. LLM agents bring a step increase in the number of paths an attacker can test, the speed at which failed paths can be replaced, and the volume of evidence defenders must interpret.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What's clear to me from this is that the very best frontier models, unencumbered by additional guardrails, &lt;strong&gt;will&lt;/strong&gt; find an exploit if there is one to be found.&lt;/p&gt;
&lt;p&gt;The entire software industry needs to up its security game.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/jinja"&gt;jinja&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hugging-face"&gt;hugging-face&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-security-research"&gt;ai-security-research&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai-hugging-face-incident"&gt;openai-hugging-face-incident&lt;/a&gt;&lt;/p&gt;

</summary><category term="jinja"/><category term="python"/><category term="security"/><category term="ai"/><category term="openai"/><category term="generative-ai"/><category term="llms"/><category term="hugging-face"/><category term="coding-agents"/><category term="ai-security-research"/><category term="openai-hugging-face-incident"/></entry><entry><title>moonshotai/Kimi-K3</title><link href="https://simonwillison.net/2026/Jul/27/kimi-k3/#atom-blogmarks" rel="alternate"/><published>2026-07-27T23:39:04+00:00</published><updated>2026-07-27T23:39:04+00:00</updated><id>https://simonwillison.net/2026/Jul/27/kimi-k3/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://huggingface.co/moonshotai/Kimi-K3"&gt;moonshotai/Kimi-K3&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
As promised &lt;a href="https://simonwillison.net/2026/Jul/16/kimi-k3/"&gt;earlier this month&lt;/a&gt;, Moonshot have released the weights for their excellent 2.8 trillion parameter Kimi K3. They're a hefty 1.56TB on Hugging Face.&lt;/p&gt;
&lt;p&gt;Kimi introduced their own janky &lt;a href="https://huggingface.co/moonshotai/Kimi-K2-Instruct/blob/main/LICENSE"&gt;modified version of the MIT license&lt;/a&gt; with K2 back in July 2025. That license just added this paragraph requiring attribution beyond a certain size of commercial entity:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our only modification part is that, if the Software (or any derivative works thereof) is used for any of your commercial products or services that have more than 100 million monthly active users, or more than 20 million US dollars (or equivalent in other currencies) in monthly revenue, you shall prominently display "Kimi K2" on the user interface of such product or service.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;a href="https://huggingface.co/moonshotai/Kimi-K3/blob/main/LICENSE"&gt;K3 license&lt;/a&gt; no longer calls itself "modified MIT" and goes further, requiring a separate agreement with Moonshot for large "Model as a Service" businesses:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If the Licensee or any of its affiliates operates a Model as a Service business, and the aggregate revenue of the Licensee and its affiliates exceeds 20 million US dollars (or the equivalent in other currencies) in total over any consecutive 12 months, the Licensee must enter into a separate agreement with Moonshot AI before using the Software or its derivative works for any commercial purpose.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To Kimi's credit, they make no attempt to describe this as an "open source" license in their own materials, consistently using the term "open weight" in its place.&lt;/p&gt;
&lt;p&gt;OpenRouter is already offering K3 &lt;a href="https://openrouter.ai/moonshotai/kimi-k3"&gt;from 7 providers&lt;/a&gt;, most of which are at the same $3/million input and $15/million output as Moonshot AI themselves.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-pricing"&gt;llm-pricing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-in-china"&gt;ai-in-china&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/moonshot"&gt;moonshot&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/kimi"&gt;kimi&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/janky-licenses"&gt;janky-licenses&lt;/a&gt;&lt;/p&gt;

</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="llm-pricing"/><category term="llm-release"/><category term="ai-in-china"/><category term="moonshot"/><category term="kimi"/><category term="janky-licenses"/></entry><entry><title>An opinionated guide to which AI to use to do stuff</title><link href="https://simonwillison.net/2026/Jul/27/an-opinionated-guide-to-which-ai-to-use-to-do-stuff/#atom-blogmarks" rel="alternate"/><published>2026-07-27T21:55:53+00:00</published><updated>2026-07-27T21:55:53+00:00</updated><id>https://simonwillison.net/2026/Jul/27/an-opinionated-guide-to-which-ai-to-use-to-do-stuff/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.oneusefulthing.org/p/an-opinionated-guide-to-which-ai-b22"&gt;An opinionated guide to which AI to use to do stuff&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
It's interesting watching the evolution of Ethan Mollick's guide over time. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.oneusefulthing.org/p/using-ai-right-now-a-quick-guide"&gt;A year ago&lt;/a&gt; it was still all about chat - ChatGPT, Claude, Gemini - with o3, Claude 4 Opus, and Gemini 2.5 Pro as the models and Deep Research as a useful alternative mode.&lt;/p&gt;
&lt;p&gt;Today it's much more about agentic systems - "where the AI is capable of doing the equivalent of many hours of real human work in one go".&lt;/p&gt;
&lt;p&gt;Gemini has fallen off Ethan's list, since Google still doesn’t have an established entry in the Codex/ChatGPT Work/Cowork category. &lt;a href="https://gemini.google/overview/agent/spark/"&gt;Gemini Spark&lt;/a&gt; has yet to prove itself!&lt;/p&gt;
&lt;p&gt;Ethan offers a useful explanation of the ways you can give ChatGPT or Claude a computer to use:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To use the computers provided by the AI companies, the mode you want is called ChatGPT Work in ChatGPT, and Cowork in Claude (the naming will not get less confusing, I am sorry to say). [...]&lt;/p&gt;
&lt;p&gt;The most powerful way to use AI is to give it access to your computer. You do that by downloading the ChatGPT or Claude apps and picking a mode to use. ChatGPT's two agent modes are Work and Codex; Claude's are Cowork and Code. The names do not map onto each other in any way that will help you remember them. And yes, these use the same names as the Work and Cowork modes we discussed above, but operate differently, and have more features and capabilities because they can access your computer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I think the difference between ChatGPT Work on a mobile device and ChatGPT Work inside the desktop app (where it's effectively a less intimidating skin on top of Codex) is spectacularly unintuitive.&lt;/p&gt;
&lt;p&gt;Short version: if you flip ChatGPT mobile from "Chat" to "Work" mode you get a version where its Code Interpreter container is no longer restricted from accessing the internet!


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ethan-mollick"&gt;ethan-mollick&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/code-interpreter"&gt;code-interpreter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/general-agents"&gt;general-agents&lt;/a&gt;&lt;/p&gt;

</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ethan-mollick"/><category term="code-interpreter"/><category term="general-agents"/></entry><entry><title>An Inside Look at the Relay Market Powering Token Resellers and Fraud</title><link href="https://simonwillison.net/2026/Jul/26/relay-market/#atom-blogmarks" rel="alternate"/><published>2026-07-26T19:30:54+00:00</published><updated>2026-07-26T19:30:54+00:00</updated><id>https://simonwillison.net/2026/Jul/26/relay-market/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://vectoral.com/blog/token-relay-market"&gt;An Inside Look at the Relay Market Powering Token Resellers and Fraud&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Fascinating investigation by Matt Lenhard into the market that has grown up around reselling LLM tokens at a discount by pooling API keys from various sources.&lt;/p&gt;
&lt;p&gt;This looks to be mostly a thing in China. Resellers sell access to an LLM proxy that offers significant discounts on regular API pricing, which they achieve by abusing free trials, proxying through unprotected support bots, or sometimes through stolen credit cards or chargeback attacks.&lt;/p&gt;
&lt;p&gt;The software they are using for these proxies is open source - mostly &lt;a href="https://github.com/songquanpeng/one-api"&gt;one-api&lt;/a&gt; and its more actively developed fork &lt;a href="https://github.com/QuantumNous/new-api"&gt;new-api&lt;/a&gt;, both legitimate API proxy products which can be used to load. balance requests across a pool of API credentials.&lt;/p&gt;
&lt;p&gt;The buyers are seeking cheap tokens, avoiding geo-restrictions, and in some cases collecting data for model distillation.&lt;/p&gt;
&lt;p&gt;I've been cautious about exposing my own LLM-driven applications publicly out of fear of abuse leading to big token bills. The existence of this marketplace makes me even more cautious: there's now an entire ecosystem that can profit from finding a new unprotected endpoint to exploit.&lt;/p&gt;
&lt;p&gt;LLM vendors &lt;em&gt;really&lt;/em&gt; need to get better at offering strict caps for their API keys. I want my LLM apps to stop working the moment they hit a dollar threshold I've set for a period of time.&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="https://www.v2ex.com/t/1196011"&gt;the (Chinese language) forum thread&lt;/a&gt; that served as the principal source for Matt's article.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=49058993"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-pricing"&gt;llm-pricing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-ethics"&gt;ai-ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-in-china"&gt;ai-in-china&lt;/a&gt;&lt;/p&gt;

</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="llm-pricing"/><category term="ai-ethics"/><category term="ai-in-china"/></entry><entry><title>Ruff v0.16.0</title><link href="https://simonwillison.net/2026/Jul/25/ruff/#atom-blogmarks" rel="alternate"/><published>2026-07-25T22:44:05+00:00</published><updated>2026-07-25T22:44:05+00:00</updated><id>https://simonwillison.net/2026/Jul/25/ruff/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://astral.sh/blog/ruff-v0.16.0"&gt;Ruff v0.16.0&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Astral shipped a significant new version of their Ruff Python linting tool a few days ago on July 23rd. I noticed today because my various CI jobs all started failing thanks to new default Ruff checks and my unpinned &lt;code&gt;"ruff"&lt;/code&gt; dev dependency.&lt;/p&gt;
&lt;p&gt;From Brent Westbrook's announcement post:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ruff now enables 413 rules by default, up from 59 in previous versions.&lt;/p&gt;
&lt;p&gt;Since Ruff's default rule set was last modified in &lt;a href="https://github.com/astral-sh/ruff/blob/main/changelogs/0.1.x.md#breaking-changes"&gt;v0.1.0&lt;/a&gt;, the number of rules in Ruff has grown from 708 to 968. Many of these rules catch severe issues, including &lt;a href="https://docs.astral.sh/ruff/rules/load-before-global-declaration"&gt;syntax errors&lt;/a&gt; and &lt;a href="https://docs.astral.sh/ruff/rules/yield-in-init/"&gt;immediate runtime errors&lt;/a&gt; but were not previously enabled by default. With the new rule set, Ruff will bring these issues and many others to your attention without any Ruff configuration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here's a one-liner for trying it on any Python project:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uvx ruff@latest check .
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I ran the latest Ruff against my three biggest projects - &lt;a href="https://datasette.io/"&gt;Datasette&lt;/a&gt;, &lt;a href="https://sqlite-utils.datasette.io/"&gt;sqlite-utils&lt;/a&gt;, and &lt;a href="https://llm.datasette.io/"&gt;LLM&lt;/a&gt; - and it found &lt;em&gt;hundreds&lt;/em&gt; of minor issues that breached the new default rules.&lt;/p&gt;
&lt;p&gt;All three projects have very comprehensive test suites, executed in CI against Python 3.10 through Python 3.14, so upgrades like this are pretty safe. The following command did the bulk of the upgrades:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uvx ruff@latest check . --fix --unsafe-fixes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Against &lt;code&gt;sqlite-utils&lt;/code&gt;, that command reported:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Found 1618 errors (1538 fixed, 80 remaining).
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As an illustrative example, here are three of the remaining issues. Ruff does a nice job of explaining each one:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DTZ005 `datetime.datetime.now()` called without a `tz` argument
  --&amp;gt; tests/test_duplicate.py:17:10
   |
15 |     "datetime_col" TEXT)""")
16 |     # Insert one row of mock data:
17 |     dt = datetime.datetime.now()
   |          ^^^^^^^^^^^^^^^^^^^^^^^
18 |     data = {
19 |         "text_col": "Cleo",
   |
help: Pass a `datetime.timezone` object to the `tz` parameter

BLE001 Do not catch blind exception: `Exception`
  --&amp;gt; tests/test_plugins.py:16:12
   |
14 |         db.execute("select * from pragma_function_list()")
15 |         return True
16 |     except Exception:
   |            ^^^^^^^^^
17 |         return False
18 |     finally:
   |

B018 Found useless attribute access. Either assign it to a variable or remove it.
  --&amp;gt; tests/test_update.py:46:5
   |
44 | def test_update_invalid_pk(fresh_db, pk, update_pk):
45 |     table = fresh_db["table"]
46 |     table.insert({"id1": 5, "id2": 3, "v": 1}, pk=pk).last_pk
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
47 |     with pytest.raises(NotFoundError):
48 |         table.update(update_pk, {"v": 2})
   |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Unsurprisingly, given Astral's &lt;a href="https://simonwillison.net/2026/Mar/19/openai-acquiring-astral/"&gt;new home at OpenAI&lt;/a&gt;, this output provides everything a coding agent would need to fix the problems.&lt;/p&gt;
&lt;p&gt;I had Codex (GPT-5.6 Sol high) &lt;a href="https://github.com/simonw/llm/pull/1557"&gt;upgrade LLM&lt;/a&gt; and &lt;a href="https://github.com/simonw/sqlite-utils/pull/814"&gt;sqlite-utils&lt;/a&gt;, and Claude Code (with Opus 5) &lt;a href="https://github.com/simonw/datasette/pull/2857"&gt;upgrade Datasette&lt;/a&gt;.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruff"&gt;ruff&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/astral"&gt;astral&lt;/a&gt;&lt;/p&gt;

</summary><category term="python"/><category term="ruff"/><category term="astral"/></entry><entry><title>Introducing Claude Opus 5</title><link href="https://simonwillison.net/2026/Jul/24/introducing-claude-opus-5/#atom-blogmarks" rel="alternate"/><published>2026-07-24T23:48:50+00:00</published><updated>2026-07-24T23:48:50+00:00</updated><id>https://simonwillison.net/2026/Jul/24/introducing-claude-opus-5/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.anthropic.com/news/claude-opus-5"&gt;Introducing Claude Opus 5&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I've been offline &lt;a href="https://en.wikipedia.org/wiki/Elkhorn_Slough"&gt;kayaking with sea otters&lt;/a&gt; for much of today so I haven't had a chance to put Anthropic's new model Claude Opus 5 through its paces yet. The buzz is positive, and Anthropic's description of it as a "thoughtful and proactive model that comes close to the frontier intelligence of Claude Fable 5 at half the price" sounds promising. It's currently &lt;a href="https://twitter.com/artificialanlys/status/2080777718933995967"&gt;leading the Artificial Analysis leaderboard&lt;/a&gt;, in front of even Fable 5.&lt;/p&gt;
&lt;p&gt;It's priced the same as Opus 4.8, and continues to offer a "fast mode" at twice the cost of the base model.&lt;/p&gt;
&lt;p&gt;Based on this anecdote in the release post it sounds like it might be &lt;a href="https://simonwillison.net/2026/Jun/11/fable-is-relentlessly-proactive/"&gt;relentlessly proactive&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On one Frontier-Bench task, Opus 5 was given a drawing of a machine part and asked to write code to rebuild it as a 3D FreeCAD model. However, in this task, the model was intentionally given no way to directly viewthe drawing. Opus 5 responded by writing its own computer vision pipeline to pull the geometry from the raw pixels, then reconstructed the full machine part.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It's better at finding vulnerabilities but has deliberately not been trained on how to exploit them. Hopefully this means the US government won't shut it down!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As with its predecessor, Opus 4.8, we’ve intentionally avoided training Opus 5 on cyber tasks. The model has nevertheless improved substantially on these tasks as a result of becoming more generally capable, and it comes close to Mythos 5 at &lt;em&gt;finding&lt;/em&gt; cybersecurity vulnerabilities. However, it remains substantially behind Mythos 5 on the &lt;em&gt;exploitation&lt;/em&gt; of those vulnerabilities—that is, in turning vulnerabilities into material cyber threats.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Anthropic have published a &lt;a href="https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-5"&gt;prompting guide for Claude Opus 5&lt;/a&gt;. Thariq Shihipar has also written &lt;a href="https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models"&gt;The new rules of context engineering for Claude 5 generation models&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://tools.simonwillison.net/markdown-svg-renderer#url=https%3A%2F%2Fraw.githubusercontent.com%2Fsimonw%2Fllm-anthropic%2F8272dfee5bdb65d5c88eef083da3ad885539b7df%2Flog.md"&gt;first pelican I got&lt;/a&gt; was missing the bicycle wheels; the &lt;a href="https://tools.simonwillison.net/markdown-svg-renderer#url=https%3A%2F%2Fraw.githubusercontent.com%2Fsimonw%2Fllm-anthropic%2Ffeaab840ea20eb15e29d8f72a9e42feceb23876a%2Flog.md"&gt;second attempt&lt;/a&gt; was better.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/anthropic"&gt;anthropic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude"&gt;claude&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;&lt;/p&gt;

</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="anthropic"/><category term="claude"/><category term="llm-release"/></entry><entry><title>The first known runaway AI agent - or a very bad marketing stunt?</title><link href="https://simonwillison.net/2026/Jul/23/the-first-known-runaway-ai-agent/#atom-blogmarks" rel="alternate"/><published>2026-07-23T22:53:08+00:00</published><updated>2026-07-23T22:53:08+00:00</updated><id>https://simonwillison.net/2026/Jul/23/the-first-known-runaway-ai-agent/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://martinalderson.com/posts/huggingface-openai-exploit/"&gt;The first known runaway AI agent - or a very bad marketing stunt?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Martin Alderson's commentary on the &lt;a href="https://simonwillison.net/2026/Jul/22/openai-cyberattack/"&gt;OpenAI accidental cyberattack against Hugging Face&lt;/a&gt; includes a couple of details I hadn't considered.&lt;/p&gt;
&lt;p&gt;First, Hugging Face offers a truly rich target if you're trying to find potential vulnerabilities that require executing arbitrary code:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hugging Face has an &lt;em&gt;enormous&lt;/em&gt; attack surface. They have more interfaces than I can count which run untrusted models and code. While they definitely have invested in defences, by nature of their operating model they do have many more opportunities to be attacked than many other services. I certainly don't envy their cybersecurity teams.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Secondly, one of the things that has puzzled me is how OpenAI didn't notice that their sandbox had been so thoroughly breached by the agent. Surely they'd be monitoring network traffic closely?&lt;/p&gt;
&lt;p&gt;Martin points out that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It's also likely they were running a huge amount of benchmarks simultaneously with ~unlimited token budgets - you want as many samples as possible to figure out how good a model is at a certain benchmark. It may also be they are testing various different checkpoints of the model too, understanding how the model is improving as it goes through the various training stages.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The mistakes made by the OpenAI team running this benchmark are easier to imagine when you think about the scale at which benchmarks of this kind usually operate. For all we know they could have been subjecting a new model to dozens of benchmarks at the same time, in dozens of different environments.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://lobste.rs/s/nsnb4j/first_known_runaway_ai_agent_very_bad"&gt;Lobste.rs&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hugging-face"&gt;hugging-face&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-security-research"&gt;ai-security-research&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai-hugging-face-incident"&gt;openai-hugging-face-incident&lt;/a&gt;&lt;/p&gt;

</summary><category term="security"/><category term="ai"/><category term="openai"/><category term="generative-ai"/><category term="llms"/><category term="hugging-face"/><category term="ai-security-research"/><category term="openai-hugging-face-incident"/></entry><entry><title>Are AI labs pelicanmaxxing?</title><link href="https://simonwillison.net/2026/Jul/22/are-ai-labs-pelicanmaxxing/#atom-blogmarks" rel="alternate"/><published>2026-07-22T23:01:00+00:00</published><updated>2026-07-22T23:01:00+00:00</updated><id>https://simonwillison.net/2026/Jul/22/are-ai-labs-pelicanmaxxing/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://dylancastillo.co/posts/pelicanmaxxing.html"&gt;Are AI labs pelicanmaxxing?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Excellent piece of work by Dylan Castillo, who took a deep-dive into the frequently pondered question of whether the AI labs have been deliberately training models to draw pelicans riding bicycles in response to my &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle/"&gt;deeply unscientific benchmark&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I've been randomly spot-checking this in the past by testing models against other animals riding other types of vehicle, but never with anything close to the diligence of Dylan's methodology here.&lt;/p&gt;
&lt;p&gt;Dylan took 8 animals × 6 vehicles = 48 prompts and ran them three times each through 7 different models ( GPT-5.6 Terra, Claude Sonnet 5, Gemini 3.5 Flash, Grok 4.5, Qwen3.7-Max, GLM-5.2, and DeepSeek V4 Pro). He then used GPT-5.6 Luna and Gemini 3.1 Flash-Lite to help evaluate the results.&lt;/p&gt;
&lt;p&gt;There's a neat filter view for exploring the results:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Screenshot of a grid for sample 1/3 of GLM-5.2, with pelicn and flamingo and heron riding bicycle, unicycle, skateboard, scooter, plane and boat" src="https://static.simonwillison.net/static/2026/pelican-grid.webp" /&gt;&lt;/p&gt;
&lt;p&gt;For the models he tested he could find no evidence of pelimaxxing:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dylancastillo.co/posts/pelicanmaxxing.html#evidence-1-the-pelicans-on-bicycles-dont-look-any-better"&gt;The pelicans on bicycles don’t look any better&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dylancastillo.co/posts/pelicanmaxxing.html#evidence-2-labs-are-not-better-at-drawing-pelicans"&gt;Labs are not better at drawing pelicans&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dylancastillo.co/posts/pelicanmaxxing.html#evidence-3-labs-are-not-better-at-drawing-bicycles"&gt;Labs are not better at drawing bicycles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dylancastillo.co/posts/pelicanmaxxing.html#evidence-4-labs-are-not-better-at-drawing-pelicans-on-bicycles-even-adjusting-for-difficulty"&gt;Labs are not better at drawing pelicans on bicycles, even adjusting for difficulty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dylancastillo.co/posts/pelicanmaxxing.html#evidence-5-the-pelican-bicycle-scenes-dont-look-memorized"&gt;The pelican-bicycle scenes don’t look memorized&lt;/a&gt; [...]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pelicans aren’t drawn any better than other animals. Bicycles aren’t drawn any better than other vehicles. And no lab draws the combination better than its pelicans and bicycles already predict. GLM-5.2 comes closest: it has the largest boost on the exact pelican-bicycle cell, and and its first pelican-on-bicycle sample caught my eye. But the effect is small and not significant, so I wouldn’t put too much weight on it.&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=49010129"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/evals"&gt;evals&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle"&gt;pelican-riding-a-bicycle&lt;/a&gt;&lt;/p&gt;

</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="evals"/><category term="pelican-riding-a-bicycle"/></entry><entry><title>Nativ: Run AI models locally on your Mac</title><link href="https://simonwillison.net/2026/Jul/21/nativ/#atom-blogmarks" rel="alternate"/><published>2026-07-21T14:22:27+00:00</published><updated>2026-07-21T14:22:27+00:00</updated><id>https://simonwillison.net/2026/Jul/21/nativ/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://blaizzy.github.io/nativ/"&gt;Nativ: Run AI models locally on your Mac&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Prince Canuma is the developer behind the excellent &lt;a href="https://github.com/Blaizzy/mlx-vlm"&gt;MLX-VLM&lt;/a&gt; Python library for running vision-LLMs using MLX on a Mac.&lt;/p&gt;
&lt;p&gt;I'm really excited about his new project, which wraps MLX in a full macOS desktop application. It's similar in shape to LM Studio, providing both a chat interface and a localhost API server for accessing models.&lt;/p&gt;
&lt;p&gt;The app picked up MLX models I had already tried that were present in my Hugging Face cache directory, which was a nice touch.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=48982681"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/macos"&gt;macos&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/local-llms"&gt;local-llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mlx"&gt;mlx&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prince-canuma"&gt;prince-canuma&lt;/a&gt;&lt;/p&gt;

</summary><category term="macos"/><category term="python"/><category term="ai"/><category term="generative-ai"/><category term="local-llms"/><category term="llms"/><category term="mlx"/><category term="prince-canuma"/></entry><entry><title>Who’s Afraid of Chinese Models?</title><link href="https://simonwillison.net/2026/Jul/20/afraid-of-chinese-models/#atom-blogmarks" rel="alternate"/><published>2026-07-20T17:09:19+00:00</published><updated>2026-07-20T17:09:19+00:00</updated><id>https://simonwillison.net/2026/Jul/20/afraid-of-chinese-models/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://stratechery.com/2026/whos-afraid-of-chinese-models/"&gt;Who’s Afraid of Chinese Models?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Interesting proposal from Ben Thompson that both addresses the hypocrisy of labs outlawing distillation against their models despite training on unlicensed data, and could help US open models compete more effectively with their Chinese counterparts:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The U.S. should pass a law that (1) makes explicit that collecting data for training models is fair use, and (2) bars terms of service that forbid distillation, for U.S. companies at a minimum. Stopping distillation — which is literally just querying the API — is nearly impossible; the U.S. should go the other way and lean into a new copyright policy that both indemnifies the labs and also guarantees that what they learned fuels further innovation for everyone else.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ben also theorizes that Alibaba's decision to release Qwen 3.8 Max as open weights - a reversal from their decision &lt;a href="https://qwen.ai/blog?id=qwen3.7"&gt;not to release Qwen 3.7 Max&lt;/a&gt; in May - may have been influenced by a &lt;a href="http://english.scio.gov.cn/topnews/2026-07/18/content_118605932.html"&gt;recent speech&lt;/a&gt; by Xi Jinping, who said:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We should seize this rare, historic opportunity to encourage open source, openness, collaboration and sharing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And on the subject of &lt;a href="https://twitter.com/Alibaba_Qwen/status/2078759124914098291"&gt;Qwen 3.8 Max&lt;/a&gt; - a new 2.4T parameter model (nearly as large as the 2.8T Kimi K3) - here's &lt;a href="https://tools.simonwillison.net/markdown-svg-renderer#url=https%3A%2F%2Fgist.github.com%2Fsimonw%2F735f2cf19b795517cb2ff6cae1c71c64"&gt;a pelican it drew&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Described by Qwen 3.8 Max: Flat vector cartoon illustration of a white pelican with a large orange beak and pouch riding a red bicycle, its orange legs on the pedals, against a light blue sky with a yellow sun top right and a white cloud top left, with horizontal motion lines behind the bike and a pale green ground strip at the bottom." src="https://static.simonwillison.net/static/2026/qwen-3.8-max-pelican.png" /&gt;&lt;/p&gt;
&lt;p&gt;I particularly enjoyed seeing these notes in the (extensive) reasoning trace:  "Could add helmet? No." and "Maybe add small bell? no." and "Need maybe add small fish in basket? Not necessary."

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://daringfireball.net/linked/2026/07/20/thompson-chinese-models-distillation"&gt;John Gruber&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/training-data"&gt;training-data&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/qwen"&gt;qwen&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle"&gt;pelican-riding-a-bicycle&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-ethics"&gt;ai-ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-in-china"&gt;ai-in-china&lt;/a&gt;&lt;/p&gt;

</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="training-data"/><category term="qwen"/><category term="pelican-riding-a-bicycle"/><category term="ai-ethics"/><category term="llm-release"/><category term="ai-in-china"/></entry><entry><title>AI Mania Is Eviscerating Global Decision-Making</title><link href="https://simonwillison.net/2026/Jul/19/ai-mania/#atom-blogmarks" rel="alternate"/><published>2026-07-19T05:06:21+00:00</published><updated>2026-07-19T05:06:21+00:00</updated><id>https://simonwillison.net/2026/Jul/19/ai-mania/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://ludic.mataroa.blog/blog/ai-mania-is-eviscerating-global-decision-making/"&gt;AI Mania Is Eviscerating Global Decision-Making&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Here's an entertaining perspective from Nik Suresh on the AI mania that is overwhelming the large companies that he consults with. It's crammed with spicy anecdotes from anonymous sources.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In one extreme case, I have seen an executive confess that they had never even used ChatGPT or any AI tool in their life, immediately after producing a technical strategy for an organisation with $2B+ in revenue which was entirely centered around AI.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here's a report from an engineer at a company with a token leaderboard:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Checking out a parallel copy of our Go repository and telling the AI to rewrite the whole thing in Zig while I work on something else just so I can keep my job.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I particularly enjoyed this conversation with a skeptical executive at an over-enthusiastic company:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I asked &lt;em&gt;why&lt;/em&gt; this was being repeated without opposition. Was it just sales fluff?&lt;/p&gt;
&lt;p&gt;The answer was a lot more interesting. It was &lt;em&gt;partially&lt;/em&gt; ridiculous sales material being delivered to an easily excitable audience, but this was not the dominant factor constraining honesty. Executives at their &lt;em&gt;customers&lt;/em&gt; were saying absurd things about achieving 100x productivity, and this meant that if any executive at the &lt;em&gt;vendor&lt;/em&gt; said that these gains were not plausible, it would undermine the credibility of the customer’s executive, be perceived as an attack (or heresy), and possibly result in an enterprise contract cancellation. And getting enterprise contracts cancelled because you wanted to opine on something that doesn’t really matter to your organisation’s mission is a great way to get fired.&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=48964185"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-ethics"&gt;ai-ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-misuse"&gt;ai-misuse&lt;/a&gt;&lt;/p&gt;

</summary><category term="ai"/><category term="ai-ethics"/><category term="ai-misuse"/></entry><entry><title>Claude make Fable 5 permanent</title><link href="https://simonwillison.net/2026/Jul/18/claude-make-fable-5-permanent/#atom-blogmarks" rel="alternate"/><published>2026-07-18T06:00:13+00:00</published><updated>2026-07-18T06:00:13+00:00</updated><id>https://simonwillison.net/2026/Jul/18/claude-make-fable-5-permanent/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://twitter.com/claudeai/status/2078302415804379218"&gt;Claude make Fable 5 permanent&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
An update from the &lt;code&gt;@claudeai&lt;/code&gt; account on Twitter:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Beginning July 20, Claude Fable 5 will be included in all Max and Team Premium plans, at 50% of limits.&lt;/p&gt;
&lt;p&gt;Pro and Team Standard users will continue to have access to Fable via usage credits, and will receive a one-time $100 credit.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As I was saying &lt;a href="https://simonwillison.net/2026/Jul/12/bump/"&gt;last week&lt;/a&gt;, the competition from &lt;a href="https://simonwillison.net/2026/Jul/9/gpt-5-6/"&gt;GPT-5.6 Sol&lt;/a&gt; (and maybe to a lesser extent &lt;a href="https://simonwillison.net/2026/Jul/16/kimi-k3/"&gt;Kimi 3&lt;/a&gt;) made untenable Anthropic's plan to remove Fable 5 from their subscription accounts and make it available exclusively through API pricing.&lt;/p&gt;
&lt;p&gt;Why pay $100 or $200/month for a subscription plan that &lt;em&gt;doesn't&lt;/em&gt; include Anthropic's best model?&lt;/p&gt;
&lt;p&gt;Their original plan was driven by concerns over compute capacity. I wonder if they'll have to dial back their training efforts in order to make more GPUs available to help serve the model.&lt;/p&gt;
&lt;p&gt;A lot of people were losing sleep over trying to make the most of Fable 5 before subscriber access was withdrawn. It's nice not to have to worry about the Fablepocalypse any more.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Important to note that users on the $20/month plan will still not have access to Fable 5 on that subscription. The Max plans are $100 and $200/month.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/anthropic"&gt;anthropic&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude"&gt;claude&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-pricing"&gt;llm-pricing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-mythos-fable"&gt;claude-mythos-fable&lt;/a&gt;&lt;/p&gt;

</summary><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="anthropic"/><category term="claude"/><category term="llm-pricing"/><category term="claude-mythos-fable"/></entry><entry><title>nascheme/quixote</title><link href="https://simonwillison.net/2026/Jul/18/quixote/#atom-blogmarks" rel="alternate"/><published>2026-07-18T05:27:49+00:00</published><updated>2026-07-18T05:27:49+00:00</updated><id>https://simonwillison.net/2026/Jul/18/quixote/#atom-blogmarks</id><summary type="html">
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/nascheme/quixote"&gt;nascheme/quixote&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A certain vintage of Python web nerd might be delighted to learn that the most recent commit to the Quixote web framework was &lt;a href="(https://github.com/nascheme/quixote/commit/7f775cf9d1e7e80fcbb2706b4a1d971e55ca74a3)"&gt;six hours ago&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/nascheme/quixote/commit/d6b73c5768c2d041b68b54cc71863604249abc18"&gt;oldest commit&lt;/a&gt; in that repo is from 21 years ago, and that was the initial import of Quixote 2.4 from Subversion into Git.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/computer-history"&gt;computer-history&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-frameworks"&gt;web-frameworks&lt;/a&gt;&lt;/p&gt;

</summary><category term="computer-history"/><category term="python"/><category term="web-frameworks"/></entry></feed>