Simon Willison's Demo Reveals a Fundamental Flaw in AI Coding Tools
Starlette 1.0 ships with a Claude skills integration that reveals a deeper problem in AI-assisted development. By Sky, March 22, 2026 Starlette, the ASGI framework that quietly underpins most of the Python web ecosystem, shipped its 1.0 release this weekend after nearly eight years on version 0.x.

image from GPT Image 1.5
Starlette, the ASGI framework that quietly underpins most of the Python web ecosystem, shipped its 1.0 release this weekend after nearly eight years on version 0.x. The milestone comes with a practical demonstration of Claude skills integration from Simon Willison that turns out to be more than a party trick: it is a concrete answer to one of the least-discussed failure modes in AI coding tools.
If you have not heard of Starlette, you have almost certainly used it. It is the foundation of FastAPI, and as of this month it is also listed as a dependency of the Python MCP SDK. According to pypistats.org, it is pulling around 325 million downloads per month as of March 2026, while carrying almost none of FastAPI's cultural weight.
Marcelo Trylesinski, who took stewardship of the project from creator Mia Kimberly Christie and transferred it to his own GitHub account last September, framed the release plainly: Starlette 1.0 is not about reinventing the framework or introducing a wave of breaking changes. It is mostly a stability and versioning milestone. From here, Starlette follows SemVer strictly. The main breaking changes are real but contained: on_startup and on_shutdown parameters are removed in favor of a lifespan async context manager, and decorator-style routing is gone.
That lifespan change is where Willison enters the story.
Willison, who created Datasette and has been one of the sharpest chroniclers of practical AI tooling, noticed the problem immediately: any model trained before 1.0 ships will generate the old on_startup pattern by default, because that is what is in the training data. The code will not run against 1.0. This is not a hypothetical. It is a class of problem that will recur every time a widely-used library ships breaking changes after a long stable period. The longer the library has been at version 0.x, the more training data there is for the old API.
His fix used Claude skills integration directly. He opened Claude Chat and gave it a single instruction: clone the Starlette GitHub repo, it just shipped 1.0, and build a SKILL.md reference document with code examples for every feature. He did not specify where to find the repo. Claude found it, cloned it via the old encode/starlette path which GitHub still redirects, read the source, and produced a comprehensive skill document. Then Willison clicked a new button in the Claude UI labeled Copy to your skills. The Starlette 1.0 skill was immediately available for any subsequent chat session.
In a new conversation with the skill loaded, Willison asked Claude to build a task management app with projects, tasks, comments, and labels. What came back was a full application using SQLite via aiosqlite, Jinja2 templates, and the correct lifespan pattern throughout. Claude also tested the app itself, using Starlette TestClient to hit every endpoint and confirm expected responses. All tests passed.
The Claude skills integration here is not cosmetic. It is a live workaround to a training data staleness problem that will only get more common as more libraries ship 1.0 breaking changes after long 0.x periods. The pattern: build the skill from the repo while the code is fresh, load it before you start generating.
There is a secondary thread in Trylesinski's release post worth noting. He uses coding agents to speed up issue triage and PR review. But the maintenance burden from AI-generated noise has grown: issues, pull requests, and especially security advisories filed by agents that turn out to be junk. Issues and pull requests are easy to close, he writes, but advisories are tricky, sometimes they look real, and making a judgement usually takes a long time. The agents triage noise that other agents create.
Starlette is in every serious Python AI stack right now. FastAPI serves most inference APIs, and the MCP SDK dependency means it is under the tool-calling plumbing too. Its 1.0 release matters not just as a versioning milestone but because it locks in the API that the next generation of models will train on.

