Simon Willison's AI-Augmented Datasette Ecosystem: Agent, Apps, and Plugins · history
Version 2
2026-06-20 18:14 UTC · 47 items
What
Simon Willison is building a cluster of AI-native Datasette plugins: datasette-agent (an LLM assistant that can now execute write SQL with user approval [1]), datasette-apps (sandboxed HTML/JS applications backed by parameterized stored queries [3]), datasette-tailscale (Tailnet exposure via experimental Rust bindings [5]), and datasette-agent-charts (chart generation added to the agent toolset [2]). He uses Claude Code throughout development — for implementation research, infrastructure configuration, and security review — and has begun amplifying broader architectural views about LLM tooling, including the argument that MCP's core value is auth isolation rather than tool integration [8].
Why it matters
The project shows what AI-augmented solo development looks like in practice: LLMs serving simultaneously as implementation researchers, security evaluators, and end-user interfaces. The datasette-apps sandboxing model — CSP-locked iframes with write access restricted to pre-approved parameterized queries — is a replicable pattern for LLM-generated web artifacts that need persistent storage without exposing arbitrary SQL write paths.
Open questions
Column provenance mapping — tracking which source table.column each result column derives from — was identified via three candidate approaches (apsw, ctypes, EXPLAIN analysis) [6]. Which will land in the codebase?
The --unsafe flag in datasette-agent bypasses all write-approval prompts [1]. How will the project manage the tension between the default safety-prompt model and demand for frictionless database modification?
datasette-tailscale 0.1a0 is early alpha dependent on the experimental tailscale-rs Rust library [5]. Will it stabilize into a supported plugin?
Claude Fable 5 performed the datasette-apps security evaluation before being banned by the US government [6][3]. What model or process replaces it for future security review on this project?
Narrative
Simon Willison has been building Datasette — an open-source tool for exploring and publishing SQLite databases — since 2017. In 2026, he has been layering AI capabilities into the ecosystem through a set of LLM-powered plugins, while using AI tools extensively as development and security instruments throughout.
The plugin set now comprises four components. datasette-agent is a chat interface that lets an LLM interact with a Datasette instance through defined tools; version 0.3a0 added an execute_write_sql tool that prompts for user approval before any database modification, with an --unsafe flag for power users who want to bypass approvals entirely [1]. datasette-agent-charts (at 0.1a1) extends the agent with chart generation capability [2]. datasette-apps provides a system for hosting self-contained HTML+JavaScript applications inside sandboxed iframes within Datasette; apps interact with the database only through pre-approved parameterized stored queries, and CSP configuration is restricted to users holding a dedicated apps-set-csp permission, with an optional allowed_csp_origins allow-list for non-privileged users [3][4]. datasette-tailscale arrived at 0.1a0 using Python bindings for the experimental tailscale-rs Rust library to expose a local Datasette server over a Tailnet [5].
AI tooling has played a direct role in building these plugins. To investigate column provenance — mapping SQLite query result columns back to their source table.column — Willison used Claude Code running Opus 4.8, which surfaced three working approaches: one using the apsw library, one calling the SQLite C API directly via ctypes (since Python's standard sqlite3 module does not expose sqlite3_column_table_name()), and one parsing EXPLAIN output [6]. For datasette-apps, Willison ran a security evaluation using Claude Fable 5 before the public announcement; the model found a path where a low-privileged user could create a malicious app to exfiltrate data from an administrator who visited it. Willison fixed the vulnerability — the CSP meta tag injected into each iframe is immutable once set — and shipped the feature [3]. Claude Fable 5 was subsequently banned by the US government, removing it as a future resource for this project.
Willison has also applied Claude Code to infrastructure work outside the Datasette plugins themselves, including configuring a Cloudflare WAF rule to scope CAPTCHA challenges to faceted search URLs (those containing ampersands) rather than all searches — noting that the Cloudflare MCP integration could not edit WAF rules directly and required a fallback to the Cloudflare API [7]. He has also amplified a Hacker News argument by Sean Lynch that MCP's core value over skills or CLI tools is keeping auth flows outside the agent's context window, with the implication that the idealized form of MCP might be purely an authentication gateway [8].
Timeline
- 2026-05-20: datasette-agent-charts 0.1a1 released, adding chart generation to the agent toolset. [2]
- 2026-05-21: datasette-agent initial launch announced on the Datasette blog. [9][10]
- 2026-06-10: datasette-agent 0.2a0 released. [11]
- 2026-06-13: Willison publishes research on mapping SQLite result columns to source table.column using Claude Code (Opus 4.8); notes Claude Fable 5 is now banned by the US government. [6]
- 2026-06-15: datasette-agent 0.3a0 released: adds execute_write_sql tool with user-approval prompt and --unsafe auto-approve flag. [1]
- 2026-06-15: datasette-apps reaches 0.1a3: CSP origin configuration restricted to new apps-set-csp permission; fragment-link navigation bug fixed. [12][4]
- 2026-06-16: datasette-tailscale 0.1a0 released as early alpha, using Python bindings for the experimental tailscale-rs Rust library. [5][13]
- 2026-06-16: Willison configures a Cloudflare WAF CAPTCHA rule scoped to faceted-search URLs via Claude Code, noting MCP could not edit WAF rules directly. [7]
- 2026-06-18: Full Datasette Apps announcement: describes sandboxing architecture, Claude Fable 5's security evaluation finding a privilege-escalation vulnerability, and the stored-query write-access model. [3]
- 2026-06-19: Willison amplifies Sean Lynch's argument that MCP's core value is auth isolation outside the agent context window, not tool/skill integration. [8]
Perspectives
Simon Willison
Building AI-native Datasette plugins at a steady pace, using LLMs for implementation research, security review, infrastructure work, and as an end-user interaction layer. Transparent about design trade-offs and open to architectural framings that question what MCP is actually for.
Evolution: Consistent across all posts; his use of AI tools has extended from Datasette-specific development to general infrastructure tasks like Cloudflare WAF configuration, and he has begun amplifying outside perspectives on LLM tooling architecture.
Sean Lynch (Hacker News commenter, amplified by Willison)
MCP's distinctive value is isolating auth flows outside the agent's context window and potentially outside the agent harness entirely; the idealized form of MCP might be a pure authentication gateway with no other functionality.
Evolution: First appearance in this thread; Willison's amplification signals he finds the framing compelling enough to share.
Claude Fable 5 (Anthropic model, used as security evaluator)
Identified a real privilege-escalation vulnerability in datasette-apps before public release, where a low-privileged user could exfiltrate data by tricking an administrator into visiting a malicious app.
Evolution: Named actor in this thread; Willison treated the model's finding as authoritative and fixed the vulnerability on its basis. Subsequently banned by the US government, removing it as a future resource for this project.
Tensions
- Write-access safety vs. usability: datasette-agent's default model requires explicit user approval before any SQL write executes, but the --unsafe flag bypasses all prompts, giving power users frictionless database modification via chat at the cost of the safety guarantee. [1]
- Privilege stratification in CSP configuration: non-privileged users in datasette-apps can only select from an admin-curated allowed_csp_origins allow-list, while users with the apps-set-csp permission can configure arbitrary network and CSP origins. [4][3]
Sources
- [1] datasette-agent 0.3a0 — Simon Willison (2026-06-15)
- [2] Release: datasette-agent-charts 0.1a1 — reactive:datasette-agent-launch
- [3] Datasette Apps: Host custom HTML applications inside Datasette — Simon Willison (2026-06-18)
- [4] datasette-apps 0.1a2 — Simon Willison (2026-06-15)
- [5] datasette-tailscale 0.1a0 — Simon Willison (2026-06-16)
- [6] Mapping SQLite result columns back to their source `table.column` — Simon Willison (2026-06-13)
- [7] Cloudflare CAPTCHA on at least one ampersand — Simon Willison (2026-06-16)
- [8] Quoting Sean Lynch — Simon Willison (2026-06-19)
- [9] Datasette Agent — reactive:datasette-agent-launch
- [10] Datasette Agent, an extensible AI assistant for Datasette - Datasette Blog — reactive:datasette-agent-launch
- [11] Release: datasette-agent 0.2a0 — reactive:willison-datasette-ai-tools
- [12] Release: datasette-apps 0.1a3 — reactive:willison-datasette-ai-tools
- [13] Release: datasette-tailscale 0.1a0 — reactive:willison-datasette-ai-tools