{"slug": "duckdb-skills-for-claude-code", "title": "DuckDB Skills for Claude Code", "summary": "The DuckDB team released the duckdb-skills plugin for Claude Code, which gives the AI coding agent a set of skills that use the DuckDB CLI to read data files, run queries, convert formats, explore object storage, work with spatial data, search documentation, and recall earlier sessions. The plugin is installed via the commands \"/plugin marketplace add duckdb/duckdb-skills\" and \"/plugin install duckdb-skills@duckdb-skills\", requires the DuckDB CLI, and exposes each skill as a /duckdb-skills:skill-name slash command that Claude Code can also invoke automatically from plain-language requests. The DuckDB team positions the plugin as a faster alternative to having the agent write and run Python scripts, since DuckDB can query local files, internet files, and Iceberg tables behind a login directly as tables or catalogs.", "body_md": "# DuckDB Skills for Claude Code\n\n*TL;DR: The duckdb-skills plugin gives Claude Code a growing number of skills that use the DuckDB CLI to read data files, run queries, convert formats, explore object storage, work with spatial data, search the documentation and recall earlier sessions.*\n\nMore likely than not, you've been using AI tools such as Claude Code for day-to-day work. You may have noticed that when AI needs to look at a data file, it makes use of Python, writes a small script, runs it, and then reads the output. This works, although it is slow, and the agent guesses column names and types and doesn't really check them.\n\nSince DuckDB can read pretty much any file directly, the DuckDB team has written a set of skills that can tell your AI to use the DuckDB CLI instead. Whether the data is a file on your machine, a file on the internet or an Iceberg table behind a login, to DuckDB it is still a table or a catalog that it can query and process efficiently.\n\nThis post describes what is in the plugin and how it works.\n\n## \n[Installation](#installation)\n\nIn Claude Code, add the repository as a plugin marketplace and install the plugin:\n\n```\n/plugin marketplace add duckdb/duckdb-skills\n/plugin install duckdb-skills@duckdb-skills\n```\n\nThe skills are then available as `/duckdb-skills:skill-name` in all subsequent sessions. You need the [DuckDB CLI](https://duckdb.org/install/) installed; if it is not found, the skills will offer to install it.\n\n## \n[An Example Interaction](#an-example-interaction)\n\nHere is what a short exchange looks like when you ask a question about a data file:\n\n```\nYou: How many taxi trips in that Parquet file were longer than 10 miles?\n\nClaude runs:\n    SELECT count(*) FROM 'trips.parquet' WHERE distance > 10;\n\nDuckDB:\n    Binder Error: Referenced column \"distance\" not found\n    Candidate bindings: \"trip_distance\"\n\nClaude reads the error, checks the columns and retries:\n    SELECT count(*) FROM 'trips.parquet' WHERE trip_distance > 10;\n\nDuckDB:\n    ┌──────────────┐\n    │ count_star() │\n    ├──────────────┤\n    │       184362 │\n    └──────────────┘\n\nClaude: 184,362 of the trips were longer than 10 miles.\n```\n\nWhat you see in the chat is a conversation in natural language between you and Claude. Underneath it runs a second conversation in SQL between Claude and DuckDB. People and Claude are both at home in natural language, and Claude and DuckDB are both at home in SQL, so each step uses the language that fits it. When a query fails, Claude reads the error, adjusts the SQL and tries again, as in the retry above.\n\nThe two tools cover different work. DuckDB gives exact answers to exact questions, and those exact answers give Claude a firm base to reason from and to turn back into a short, readable reply for you.\n\n## \n[What's in the Plugin](#whats-in-the-plugin)\n\nEach skill wraps a common data task behind a `/duckdb-skills:skill-name` slash command, grouped here by what they do.\n\nYou do not have to type the slash command, though: each skill also has a description that tells Claude Code when it applies, so you can simply ask in plain language (for example, “convert this CSV to Parquet” or “how far is the nearest station?”) and the agent will pick the right skill on its own.\n\n### \n[Reading, Querying and Converting Data](#reading-querying-and-converting-data)\n\n**`attach-db`** attaches a DuckDB database and records it in the session state, so the other skills can use it:\n\n- “Attach my_analytics.duckdb and show me its tables.”\n\n**`query`** runs SQL or a plain-English question against attached databases or a file:\n\n- “Show me the first 10 rows of the sales table.”\n- “What are the top 5 customers by revenue?”\n\n**`read-file`** reads and profiles any data file (CSV, JSON, Parquet, Avro, Excel, spatial, SQLite, Jupyter) on local disk or in S3, GCS, Azure or HTTPS:\n\n- “What columns does variants.parquet have?”\n- “How many rows are in the CSV file at that URL?”\n\n**`convert-file`** converts a file from one format to another:\n\n- “Convert sales.csv to Parquet.”\n- “Save data.json as an Excel file.”\n\n### \n[Remote and Spatial Data](#remote-and-spatial-data)\n\n**`s3-explore`** lists and queries data on S3, R2, GCS, MinIO or any S3-compatible storage without downloading it:\n\n- “What's in s3://my-bucket/?”\n- “How many rows are in s3://my-bucket/data.parquet?”\n\n**`spatial`** answers spatial questions: distances, nearest neighbors, spatial joins and geographic lookups, including free Overture Maps data:\n\n- “What are the 5 closest cafes to this point?”\n- “Which districts in districts.geojson overlap?”\n\n### \n[Documentation and Session Context](#documentation-and-session-context)\n\n**`duckdb-docs`** searches the DuckDB and [DuckLake](https://ducklake.select/) documentation and blog posts:\n\n- “How do window functions work in DuckDB?”\n- “How do I read a CSV with custom delimiters?”\n\n**`read-memories`** searches past Claude Code session logs for earlier decisions, conventions and open TODOs:\n\n- “What did we decide about the DuckDB schema in earlier sessions?”\n\n### \n[Setup](#setup)\n\n**`install-duckdb`** installs or updates extensions, including community extensions:\n\n- “Install the spatial and httpfs extensions.”\n- “Update my DuckDB extensions.”\n\nThe skills share a single per-project `state.sql` file, a plain SQL script of `ATTACH`, `USE` and `LOAD` statements, secrets and macros, so a session can be restored with `duckdb -init state.sql`.\n\nFor session-state details and local development instructions, see the [README](https://github.com/duckdb/duckdb-skills#readme).\n\n## \n[Conclusion](#conclusion)\n\nThe duckdb-skills plugin is available at [github.com/duckdb/duckdb-skills](https://github.com/duckdb/duckdb-skills). If you run into problems or have suggestions, please [open an issue](https://github.com/duckdb/duckdb-skills/issues). For DuckDB-related errors, it helps to include the output of `duckdb --version` and the full error message.", "url": "https://wpnews.pro/news/duckdb-skills-for-claude-code", "canonical_source": "https://duckdb.org/2026/09/16/duckdb-skills.html", "published_at": "2026-09-16 00:00:00+00:00", "updated_at": "2026-09-16 15:11:38.893158+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["DuckDB", "Claude Code", "duckdb-skills", "DuckDB CLI", "Python", "Parquet", "Iceberg", "S3"], "alternates": {"html": "https://wpnews.pro/news/duckdb-skills-for-claude-code", "markdown": "https://wpnews.pro/news/duckdb-skills-for-claude-code.md", "text": "https://wpnews.pro/news/duckdb-skills-for-claude-code.txt", "jsonld": "https://wpnews.pro/news/duckdb-skills-for-claude-code.jsonld"}}