Resources
6Install
npx skillscat add simhacker/moollm/datasette Install via the SkillsCat registry.
Datasette: WordPress for Data
"Datasette is the fastest way to publish data online as an interactive,
searchable database." -- Simon Willison
Datasette takes any SQLite database and gives it a web UI, JSON API,
full-text search, faceting, filtering, CSV export, and 154+ plugins.
One command. Zero backend code.
cursor-mirror already produces SQLite databases (transcript indexes,
consolidated exports). Datasette is how those databases get a face.
Quick Start
# Install (in cursor-mirror venv or globally)
pip install datasette
# Serve Cursor's own database (read-only, safe)
datasette ~/Library/Application\ Support/Cursor/User/globalStorage/state.vscdb
# Serve a cursor-mirror consolidated export
python -c "
import sys; sys.path.insert(0,'.')
from lib.datasette_export import export_datasette
from pathlib import Path
export_datasette(Path('cursor-mirror.db'))
"
datasette cursor-mirror.db -oThe -o flag opens your browser. Every page has a JSON equivalent (add .json to the URL).
What You Get
| Table | Rows (typical) | What |
|---|---|---|
| composers | 200+ | Every conversation with metadata, bubble counts |
| transcript_sections | 30,000+ | Parsed sections: USER, ASSISTANT, TOOL_CALL, THINKING |
| shell_commands | 2,000+ | Every terminal command with line numbers |
| tool_calls | 2,000+ | Tool usage with params, error status |
| feature_flags | 30+ | Model vs live flags with drift detection |
Full-text search is enabled on transcript previews. Faceting works on
section type, tool name, composer, workspace.
Key Datasette Features
URLs are the API. Every query, filter, and facet combination has a
permanent URL. Share it with a colleague. Add .json for machine access.
Add .csv for spreadsheet export. This is Datasette's core insight.
Faceting. Click a column name to see value distribution. Filter by
clicking values. Combine multiple facets. No SQL needed.
SQL. Full SQL editor built in. Write any query, get results as HTML,
JSON, or CSV. Canned queries can be pre-configured.
Plugins. 154+ plugins for charts (datasette-vega), maps
(datasette-cluster-map), dashboards (datasette-dashboards), auth,
search, and more.
Publishing. datasette publish vercel cursor-mirror.db deploys
your data to a public URL in one command. Also supports Fly, Cloud Run.
Integration with cursor-mirror
Direct serve (zero code)
Datasette can open any of cursor-mirror's SQLite files directly:
# Cursor's global database (ItemTable, cursorDiskKV)
datasette state.vscdb
# A transcript index (sections, shell_commands, tool_params)
datasette ~/.cursor/projects/*/agent-transcripts/*.db
# Multiple databases at once
datasette state.vscdb transcript-index.dbConsolidated export
The export_datasette() function in cursor-mirror/lib/datasette_export.py
produces a single optimized database combining:
- All composer metadata
- Parsed transcript sections (with FTS)
- Shell commands
- Tool calls from bubbles
- Feature flag drift
Planned: datasette-cursor-mirror plugin
A Datasette plugin that auto-discovers cursor-mirror data, renders
transcript sections as formatted HTML, and adds a dashboard. Seedesigns/DATASETTE-CURSOR-MIRROR-INTEGRATION.md for the full plan.
Useful Datasette Commands
# Serve with CORS (for JavaScript access from other domains)
datasette cursor-mirror.db --cors
# Serve read-only (immutable mode, enables caching)
datasette -i cursor-mirror.db
# Install a plugin
datasette install datasette-vega
# Publish to Vercel (free tier)
datasette publish vercel cursor-mirror.db --project my-cursor-data
# Run a SQL query from the command line (no server)
datasette cursor-mirror.db --get '/cursor-mirror.json?sql=select+tool_name,count(*)+from+tool_calls+group+by+1+order+by+2+desc&_shape=array'Useful SQL Queries (Canned Queries for Datasette)
Most used tools
select tool_name, count(*) as calls, sum(is_error) as errors
from tool_calls group by tool_name order by calls descShell commands by workspace
select workspace, count(*) as commands
from shell_commands group by workspace order by commands descFeature flag drift
select flag, model_enabled, live_enabled
from feature_flags where drift = 1 order by flagBusiest composers
select c.name, c.bubble_count, c.workspace_folder,
(select count(*) from transcript_sections ts where ts.composer_id = c.id) as sections
from composers c order by c.bubble_count desc limit 20Thinking blocks (search for keywords)
select composer_id, start_line, end_line, text_preview
from transcript_sections where type = 'THINKING'
and text_preview like '%security%' order by start_lineAbout Datasette
Created by Simon Willison (co-creator of Django). Open source, Apache 2.0.
10.8k GitHub stars, 154+ plugins, Python 3.14 compatible.
- Website: https://datasette.io
- Docs: https://docs.datasette.io
- Plugins: https://datasette.io/plugins
- Source: https://github.com/simonw/datasette
- Cloud: https://www.datasette.cloud
Part of MOOLLM
This is a MOOLLM skill. See the MOOLLM README and
skills index for context.