Simon Willison's Weblog
- Author
- Simon Willison
- Public lists
-
Featured
- Fetched
Using LLM in the shebang line of a script
Learning on the Shop floor
Quoting New York Times Editors’ Note
This article was updated after The Times learned that a remark attributed to Pierre Poilievre, the Conservative leader, was in fact an A.I.-generated summary of his views about Canadian politics that A.I. rendered as a quotation. The reporter should have checked the accuracy of what the A.I. tool returned. The article now accurately quotes from a speech delivered by Mr. Poilievre in April. [...] He did not refer to politicians who changed allegiances as turncoats in that speech.
— New York Times Editors’ Note
Tags: ai-ethics, hallucinations, generative-ai, new-york-times, journalism, ai, llms
Quoting Andrew Quinn
Quoting Luke Curley
Using Claude Code: The Unreasonable Effectiveness of HTML
llm-gemini 0.31
Release: llm-gemini 0.31
gemini-3.1-flash-liteis no longer a preview.
Here's my write-up of the Gemini 3.1 Flash-Lite Preview model back in March. I don't believe this new non-preview model has changed since then.
Tags: llm-release, gemini, llm, google, generative-ai, ai, llms
Big Words
Tool: Big Words
I'm using my vibe coded macOS presentations tool to put together a talk, and I wanted to add a slide with some text on it. The tool only accepts URLs, so I put together a quick page that accepts query string arguments and turns them into a simple slide.
Here's an example: https://tools.simonwillison.net/big-words?text=simonwillison.net&gradient=1&size=9.5
Double click or double tap the page to access a form for modifying the different options.

Tags: vibe-coding, tools
GitHub Repo Stats
Tool: GitHub Repo Stats
One of the things I always look for when evaluating a new GitHub repository is the number of commits it has... but that number isn't visible on GitHub's mobile site layout. I built this tool to fix that, using this prompt:
Given a GitHub repo URL or foo/bar repo ID show information about that repo absorbed via wither REST or graphql CORS fetch() including the number of commits in the repo and other useful stats
Example output for simonw/datasette and simonw/llm.
Tags: github
Behind the Scenes Hardening Firefox with Claude Mythos Preview
Notes on the xAI/Anthropic data center deal
Live blog: Code w/ Claude 2026
Vibe coding and agentic engineering are getting closer than I'd like
datasette-referrer-policy 0.1
Release: datasette-referrer-policy 0.1
The OpenStreetMap tiles on the Datasette global-power-plants demo weren't displaying correctly. This turned out to be caused by two bugs.
The first is that the CAPTCHA I added to that site a few weeks ago was triggering for the .json fetch requests used by the map plugin, and since those weren't HTML the user was not being asked to solve them. Here's the fix.
The second was that OpenStreetMap quite reasonably block tile requests from sites that use a Referrer-Policy: no-referrer header.
Datasette does this by default, and I didn't want to change that default on people without warning - so I had Codex + GPT-5.5 build me a new plugin to help set that header to another value.
Tags: openstreetmap, http, datasette
Our AI started a cafe in Stockholm
datasette-llm 0.1a7
Release: datasette-llm 0.1a7
- Mechanism for configuring default options for specific models.
Part of Datasette's evolving support mechanism for plugins that use LLMs. It's now possible to configure a model with default options, e.g. to say all enrichment operations should use a specific model with temperature set to 0.5.
llm-echo 0.5a0
Release: llm-echo 0.5a0
- New
-o thinking 1option to help test against LLM 0.32a0 and higher.
This plugin provides a fake model called "echo" for LLM which doesn't run an LLM at all - it's useful for writing automated tests. You can now do this:
uvx --with llm==0.32a1 --with llm-echo==0.5a0 llm -m echo hi -o thinking 1
This will fake a reasoning block to standard error before returning JSON echoing the prompt.
Tags: llm
Quoting John Gruber
So it’s well known that Y Combinator owns some stake in OpenAI. But how big is that stake? This seems like devilishly difficult information to obtain. I asked around and a little birdie who knows several OpenAI investors came back with an answer: Y Combinator owns about 0.6 percent of OpenAI. At OpenAI’s current $852 billion valuation, that’s worth over $5 billion.
— John Gruber, Y Combinator’s Stake in OpenAI
Tags: openai, y-combinator, ai, john-gruber
Granite 4.1 3B SVG Pelican Gallery
Quoting Andy Masley
[...] Between 2000 and 2024, farmers sold in total a Colorado-sized chunk of land all on their own, 77 times all land on data center property in 2028, and grew more food than ever on what was left. None of this caused any problems for US food access.
And then, in the middle of all this, a farmer in Loudoun County sells a few acres of mediocre hay field to a hyperscaler for ten times its agricultural value, and the response is that we’re running out of farmland.
— Andy Masley, pushing back against the "land use" argument against data center construction
Tags: ai-ethics, ai, generative-ai, andy-masley
April 2026 newsletter
I just sent out the April edition of my sponsors-only monthly newsletter. If you are a sponsor (or if you start a sponsorship now) you can access it here.
In this month's newsletter:
- Opus 4.7 and GPT-5.5, both with price increases
- Claude Mythos and LLM security research
- ChatGPT Images 2.0
- More model releases
- Other highlights from my blog
- What I'm using, April 2026 edition
Here's a copy of the March newsletter as a preview of what you'll get. Pay $10/month to stay a month ahead of the free copy!
Tags: newsletter
TRE Python binding — ReDoS robustness demo
Research: TRE Python binding — ReDoS robustness demo
If it's good enough for antirez to add to Redis I figured Ville Laurikari's TRE regular expression engine was worth exploring in a little more detail.
I had Claude Code build an experimental Python binding (it used ctypes) and try some malicious regular expression attacks against the library. TRE handles those much better than Python's standard library implementation, thanks mainly to the lack of support for backtracking.
Tags: security, python, regular-expressions, c, ctypes
Redis Array Playground
Quoting Anthropic
We used an automatic classifier which judged sycophancy by looking at whether Claude showed a willingness to push back, maintain positions when challenged, give praise proportional to the merit of ideas, and speak frankly regardless of what a person wants to hear. Most of the time in these situations, Claude expressed no sycophancy—only 9% of conversations included sycophantic behavior (Figure 2). But two domains were exceptions: we saw sycophantic behavior in 38% of conversations focused on spirituality, and 25% of conversations on relationships.
— Anthropic, How people ask Claude for personal guidance
Tags: ai-ethics, anthropic, claude, ai-personality, generative-ai, ai, llms, sycophancy
Sightings

I built this feature on my phone using Claude Code for web, as an extension of my beats system for syndicating external content. Here's the PR and prompt.
As with my other forms of incoming syndicated content sightings show up on the homepage, the date archive pages, and in site search results.
I back-populated over a decade of iNaturalist sightings, which means you can search for lemur you'll see my lemur photos from Madagascar in 2019!
Tags: blogging, photography, wildlife, ai, inaturalist, generative-ai, llms, ai-assisted-programming, claude-code
iNaturalist Sightings
Codex CLI 0.128.0 adds /goal
/goal and Codex will keep on looping until it evaluates that the goal has been completed... or the configured token budget has been exhausted.
It looks like the feature is mainly implemented though the goals/continuation.md and goals/budget_limit.md prompts, which are automatically injected at the end of a turn.
Via @fcoury
Tags: ai, openai, prompt-engineering, generative-ai, llms, coding-agents, system-prompts, codex-cli, agentic-engineering
Our evaluation of OpenAI's GPT-5.5 cyber capabilities
Our evaluation of OpenAI's GPT-5.5 cyber capabilities
The UK's AI Security Institute previously evaluated Claude Mythos: now they've evaluated GPT-5.5 for finding security vulnerability and found it to be comparable to Mythos, but unlike Mythos it's generally available right now.Tags: ai, openai, generative-ai, llms, anthropic, claude, ai-security-research, gpt
Quoting Andrew Kelley
It's a common misconception that we can't tell who is using LLM and who is not. I'm sure we didn't catch 100% of LLM-assisted PRs over the past few months, but the kind of mistakes humans make are fundamentally different than LLM hallucinations, making them easy to spot. Furthermore, people who come from the world of agentic coding have a certain digital smell that is not obvious to them but is obvious to those who abstain. It's like when a smoker walks into the room, everybody who doesn't smoke instantly knows it.
I'm not telling you not to smoke, but I am telling you not to smoke in my house.
— Andrew Kelley, Creator of Zig
Tags: zig, llms, ai, generative-ai