Simon Willison's Weblog
- Author
- Simon Willison
- Public lists
-
Featured
- Fetched
Where's the raccoon with the ham radio? (ChatGPT Images 2.0)
Quoting Andreas Påhlsson-Notini
AI agents are already too human. Not in the romantic sense, not because they love or fear or dream, but in the more banal and frustrating one. The current implementations keep showing their human origin again and again: lack of stringency, lack of patience, lack of focus. Faced with an awkward task, they drift towards the familiar. Faced with hard constraints, they start negotiating with reality.
— Andreas Påhlsson-Notini, Less human AI agents, please.
Tags: ai-agents, coding-agents, ai
scosman/pelicans_riding_bicycles
scosman/pelicans_riding_bicycles
I firmly approve of Steve Cosman's efforts to pollute the training set of pelicans riding bicycles.
(To be fair, most of the examples I've published count as poisoning too.)
Tags: ai, generative-ai, llms, training-data, pelican-riding-a-bicycle
llm-openrouter 0.6
Release: llm-openrouter 0.6
llm openrouter refreshcommand for refreshing the list of available models without waiting for the cache to expire.
I added this feature so I could try Kimi 2.6 on OpenRouter as soon as it became available there.
Here's its pelican - this time as an HTML page because Kimi chose to include an HTML and JavaScript UI to control the animation. Transcript here.

Tags: openrouter, llm, llm-release, pelican-riding-a-bicycle, kimi, ai-in-china, llms, ai, generative-ai
SQL functions in Google Sheets to fetch data from Datasette
TIL: SQL functions in Google Sheets to fetch data from Datasette
I put together some notes on patterns for fetching data from a Datasette instance directly into Google Sheets - using the importdata() function, a "named function" that wraps it or a Google Apps Script if you need to send an API token in an HTTP header (not supported by importdata().)
Here's an example sheet demonstrating all three methods.
Tags: spreadsheets, datasette, google
Claude Token Counter, now with model comparisons
Headless everything for personal AI
Changes in the system prompt between Claude Opus 4.6 and 4.7
Claude system prompts as a git timeline
Research: Claude system prompts as a git timeline
Anthropic publish the system prompts for Claude chat and make that page available as Markdown. I had Claude Code turn that page into separate files for each model and model family with fake git commit dates to enable browsing the changes via the GitHub commit view.
Tags: system-prompts, anthropic, claude, generative-ai, ai, llms
Adding a new content type to my blog-to-newsletter tool
Join us at PyCon US 2026 in Long Beach - we have new AI and security tracks this year
datasette 1.0a28
llm-anthropic 0.25
Release: llm-anthropic 0.25
- New model:
claude-opus-4.7, which supportsthinking_effort:xhigh. #66- New
thinking_displayandthinking_adaptiveboolean options.thinking_displaysummarized output is currently only available in JSON output or JSON logs.- Increased default
max_tokensto the maximum allowed for each model.- No longer uses obsolete
structured-outputs-2025-11-13beta header for older models.
Qwen3.6-35B-A3B on my laptop drew me a better pelican than Claude Opus 4.7
datasette.io news preview
datasette-export-database 0.3a1
Release: datasette-export-database 0.3a1
This plugin was using the ds_csrftoken cookie as part of a custom signed URL, which needed upgrading now that Datasette 1.0a27 no longer sets that cookie.
Tags: datasette
datasette 1.0a27
Quoting John Gruber
The real goldmine isn’t that Apple gets a cut of every App Store transaction. It’s that Apple’s platforms have the best apps, and users who are drawn to the best apps are thus drawn to the iPhone, Mac, and iPad. That edge is waning. Not because software on other platforms is getting better, but because third-party software on iPhone, Mac, and iPad is regressing to the mean, to some extent, because fewer developers feel motivated — artistically, financially, or both — to create well-crafted idiomatic native apps exclusively for Apple’s platforms.
Tags: apple, john-gruber
Gemini 3.1 Flash TTS
Gemini 3.1 Flash TTS
Tool: Gemini 3.1 Flash TTS
See my notes on Google's new Gemini 3.1 Flash TTS text-to-speech model.
datasette-ports 0.3
Release: datasette-ports 0.3
A small update for my tool for helping me figure out what all of the Datasette instances on my laptop are up to.
- Show working directory derived from each PID
- Show the full path to each database file
Output now looks like this:
http://127.0.0.1:8007/ - v1.0a26
Directory: /Users/simon/dev/blog
Databases:
simonwillisonblog: /Users/simon/dev/blog/simonwillisonblog.db
Plugins:
datasette-llm
datasette-secrets
http://127.0.0.1:8001/ - v1.0a26
Directory: /Users/simon/dev/creatures
Databases:
creatures: /tmp/creatures.db
Tags: datasette
Quoting Kyle Kingsbury
I think we will see some people employed (though perhaps not explicitly) as meat shields: people who are accountable for ML systems under their supervision. The accountability may be purely internal, as when Meta hires human beings to review the decisions of automated moderation systems. It may be external, as when lawyers are penalized for submitting LLM lies to the court. It may involve formalized responsibility, like a Data Protection Officer. It may be convenient for a company to have third-party subcontractors, like Buscaglia, who can be thrown under the bus when the system as a whole misbehaves.
— Kyle Kingsbury, The Future of Everything is Lies, I Guess: New Jobs
Tags: ai-ethics, careers, ai, kyle-kingsbury
Zig 0.16.0 release notes: "Juicy Main"
datasette PR #2689: Replace token-based CSRF with Sec-Fetch-Site header protection
Trusted access for the next era of cyber defense
Cybersecurity Looks Like Proof of Work Now
Quoting Steve Yegge
The TL;DR is that Google engineering appears to have the same AI adoption footprint as John Deere, the tractor company. Most of the industry has the same internal adoption curve: 20% agentic power users, 20% outright refusers, 60% still using Cursor or equivalent chat tool. It turns out Google has this curve too. [...]
There has been an industry-wide hiring freeze for 18+ months, during which time nobody has been moving jobs. So there are no clued-in people coming in from the outside to tell Google how far behind they are, how utterly mediocre they have become as an eng org.
Tags: steve-yegge, google, generative-ai, agentic-engineering, ai, llms
Exploring the new `servo` crate
Quoting Bryan Cantrill
The problem is that LLMs inherently lack the virtue of laziness. Work costs nothing to an LLM. LLMs do not feel a need to optimize for their own (or anyone's) future time, and will happily dump more and more onto a layercake of garbage. Left unchecked, LLMs will make systems larger, not better — appealing to perverse vanity metrics, perhaps, but at the cost of everything that matters.
As such, LLMs highlight how essential our human laziness is: our finite time forces us to develop crisp abstractions in part because we don't want to waste our (human!) time on the consequences of clunky ones.
— Bryan Cantrill, The peril of laziness lost
Tags: bryan-cantrill, ai, llms, ai-assisted-programming, generative-ai