Fetching from the wire…
Public story · 2026-07-14 · high
Willison used DSPy to tune the Datasette Agent's SQL prompts, and the optimizer caught a schema bug that would've taken him an hour to chase by hand.
Why now: DSPy's 3.3.0b1 release, with the new ReActV2 module, lands July 14, as teams weigh whether to keep hand-tuning prompts through the next model swap.
DSPy shipped 3.3.0b1 on July 14 with a new ReActV2 module, turning prompts from hand-tuned strings into a target you compile and re-run for any model. Anyone who's shipped a prompt-based feature knows this pain: you upgrade the model, the carefully-tuned prompt regresses, and nobody can say why. DSPy's fix is to stop treating the prompt as a precious artifact and treat it as a build output instead.
You declare a task as a typed Input to Output signature and pick a reasoning strategy. MIPROv2 then searches instructions and few-shot examples using Bayesian optimization against your own metric, per DSPy's documentation.
Swap models, re-run the optimizer, get a prompt tuned for what you're actually deploying on.
Willison used DSPy to tune the Datasette Agent's SQL prompts. The optimizer surfaced a real bug: schema listings without column names caused the agent to guess columns and loop on retries.
That's a failure mode you'd normally burn an hour chasing by hand. The optimizer found it as a side effect of optimizing against the metric.
There's a learning curve. The signatures-and-modules abstraction takes a beat to click if you've only written raw strings. Budget an afternoon to port one real task before judging it.
Start with something that has a clean metric, a classifier, an extractor, a SQL generator, so MIPROv2 has an actual target. If you've got a prompt you keep re-crafting every time a new model drops, that's the one to convert first.
Each link below shares sources, entities, or timing with this story.
Released August 3, experimental dspy.Flex moves program structure into the optimizer's search space: given a signature, GEPA rewrites predictors, control flow, and the Python/LM call balance against your metric, with optimizer-authored source always running inside a CodeInterp...
1. Set Up Cursor Automations (intermediate) — Event-driven agents from PagerDuty/GitHub/Slack triggers with isolated sandboxes. Cursor Blog 2. Apply Context Engineering to Cut Agent Costs 60-80% (advanced) — Hierarchical token budgets, dynamic tool filtering (max 15), automati...
Willison launched datasette-apps (0.1a2) on June 18, hosting self-contained HTML+JS apps in a sandboxed iframe that run SQL against your data, read-only by default. He frames it as "Claude Artifacts reimagined for Datasette," artifacts backed by a JSON API to a relational data...
Prompted by Julia Evans admitting on July 17 that she still can't read query plans, Willison had Fable build a tool that runs arbitrary SQL against a SQLite database and renders both EXPLAIN QUERY PLAN and the lower-level EXPLAIN bytecode with per-line plain-English annotation...
Simon Willison found it in the OpenRouter price list. 1.6T MoE, ~49B active, 1M context, up to 384K output, at $0.435/M input (cache miss) and $0.87/M output. The agentic-coding deltas versus the preview are the story: DeepSWE 12.8 → 62.7, CyberGym 52.7 → 83.3, Terminal Bench...
Simon Willison shipped the fix August 6 and back-ported to 0.65.3: instances serving both public and private tables from one database let public-table users inject SQL and gain read access to private tables, defeating the permission system even with execute-sql disabled. Willi...
MindPattern daily
One email a day at 7 AM. Sources and a take on every story. Unsubscribe anytime.