The Information Machine

Simon Willison's AI-Augmented Datasette Ecosystem: Agent, Apps, and Plugins · history

Version 3

2026-06-23 18:18 UTC · 54 items

What

Simon Willison is building a cluster of AI-native Datasette plugins — datasette-agent (LLM chat interface with write-SQL capability [1]), datasette-apps (sandboxed HTML/JS apps backed by parameterized stored queries [3]), datasette-agent-charts [2], and datasette-tailscale [5] — while concurrently releasing sqlite-utils 4.0rc1, which adds a migrations system and nested transaction support [9]. He uses Claude Code throughout, both for implementation research and as a vibe-coding collaborator: a recent experiment had Claude Opus 4.8 autonomously port a PyTorch image model to ONNX, publish weights to Hugging Face, and build a WebGPU browser interface, with Willison reading none of the resulting code [10].

Why it matters

The project is a running case study of AI-augmented solo development, covering security implications (a privilege-escalation vulnerability caught by Claude before a feature release [3]), ergonomic trade-offs (write-approval prompts vs. an --unsafe bypass flag [1]), and the acknowledged cost of vibe coding: Willison noted he learned nothing about the underlying ML technologies by delegating all code generation without reviewing the output [10].

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 depends on the experimental tailscale-rs Rust library [5]. Will it stabilize into a supported plugin?

  • Willison acknowledged that vibe coding means not learning the underlying technologies involved [10]. Does that approach scale to datasette-apps' more security-sensitive plugin work, where he previously relied on AI-assisted code review to catch a real vulnerability?

Narrative

Simon Willison has been building Datasette — an open-source tool for exploring and publishing SQLite databases — since 2017. In 2026, he has layered AI capabilities into the ecosystem through a set of LLM-powered plugins, while using AI tools extensively as development and security instruments.

The plugin set comprises four components. datasette-agent is a chat interface letting 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 extends the agent with chart generation capability [2]. datasette-apps provides sandboxed HTML+JavaScript applications inside 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 and securing 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 via ctypes, and one parsing EXPLAIN output [6]. For datasette-apps, a security evaluation using Claude Fable 5 found a path where a low-privileged user could exfiltrate data from an administrator who visited a malicious app; Willison fixed the vulnerability and shipped the feature [3]. He has also applied Claude Code to infrastructure work, including configuring a Cloudflare WAF rule scoped to faceted-search URLs, noting that the Cloudflare MCP integration could not edit WAF rules directly and required a fallback to the Cloudflare API [7]. He has amplified a Hacker News argument that MCP's core value is isolating auth flows outside the agent context window rather than integrating tools or skills [8].

In parallel, Willison released sqlite-utils 4.0rc1, which ports the sqlite-migrate package's migrations system into the library and adds a db.atomic() context manager for nested SQLite transactions using savepoints; the release also drops Python 3.8 and adds Python 3.13 support [9]. He also demonstrated a vibe-coding experiment with no connection to Datasette: using Claude Opus 4.8 to autonomously convert the Moebius 0.2B PyTorch image inpainting model to ONNX, publish weights to Hugging Face, and build a complete browser WebGPU interface — without reading any of the generated code [10]. Willison found the approach viable for non-trivial ML engineering but acknowledged the trade-off directly: he learned nothing about the underlying technologies involved.

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. [11][12]
  • 2026-06-10: datasette-agent 0.2a0 released. [13]
  • 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. [14][4]
  • 2026-06-16: datasette-tailscale 0.1a0 released as early alpha, using Python bindings for the experimental tailscale-rs Rust library. [5][15]
  • 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: 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 integration. [8]
  • 2026-06-21: sqlite-utils 4.0rc1 released: adds a migrations system ported from sqlite-migrate and a db.atomic() nested-transaction context manager; drops Python 3.8, adds Python 3.13. [9][16]
  • 2026-06-22: Willison ports Moebius 0.2B image inpainting model to browser WebGPU using Claude Opus 4.8 as a vibe-coding collaborator, without reading any of the generated code. [10]

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; openly practicing vibe coding for tangential projects and acknowledging its trade-off — speed at the cost of understanding the code produced.

Evolution: His use of AI tools has extended from Datasette-specific development to infrastructure tasks and now to full vibe-coding experiments where he delegates all code generation without reviewing the output, while the Datasette plugin work itself continues to apply more deliberate AI-assisted review.

Sean Lynch (Hacker News commenter, amplified by Willison)

MCP's distinctive value is isolating auth flows outside the agent's context window; 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 relevant to his own datasette-agent MCP architecture.

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 finding as authoritative and fixed the vulnerability. 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. [1] datasette-agent 0.3a0 — Simon Willison (2026-06-15)
  2. [2] Release: datasette-agent-charts 0.1a1 — reactive:datasette-agent-launch
  3. [3] Datasette Apps: Host custom HTML applications inside Datasette — Simon Willison (2026-06-18)
  4. [4] datasette-apps 0.1a2 — Simon Willison (2026-06-15)
  5. [5] datasette-tailscale 0.1a0 — Simon Willison (2026-06-16)
  6. [6] Mapping SQLite result columns back to their source `table.column` — Simon Willison (2026-06-13)
  7. [7] Cloudflare CAPTCHA on at least one ampersand — Simon Willison (2026-06-16)
  8. [8] Quoting Sean Lynch — Simon Willison (2026-06-19)
  9. [9] sqlite-utils 4.0rc1 adds migrations and nested transactions — Simon Willison (2026-06-21)
  10. [10] Porting the Moebius 0.2B image inpainting model to run in the browser with Claude Code — Simon Willison (2026-06-22)
  11. [11] Datasette Agent — reactive:datasette-agent-launch
  12. [12] Datasette Agent, an extensible AI assistant for Datasette - Datasette Blog — reactive:datasette-agent-launch
  13. [13] Release: datasette-agent 0.2a0 — reactive:willison-datasette-ai-tools
  14. [14] Release: datasette-apps 0.1a3 — reactive:willison-datasette-ai-tools
  15. [15] Release: datasette-tailscale 0.1a0 — reactive:willison-datasette-ai-tools
  16. [16] sqlite-utils 4.0rc1 — Simon Willison (2026-06-21)