Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/duckdb-duckdb-docs
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: documents, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/duckdb-docs
Tools it pre-approves 1
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Bash
What's inside
- Skill name
duckdb-docs- Description
- Search DuckDB and DuckLake documentation and blog posts. Returns relevant doc chunks for a question or keyword using full-text search against a locally cached index.
- License
- MIT
- Allowed tools
- Bash
- Instructions
- 143 lines in SKILL.md · view on GitHub
Before installing
- Pre-approves any shell command
Files (1)
- SKILL.md
SKILL.md (first lines)
You are helping the user find relevant DuckDB or DuckLake documentation.
Query: `$@`
Follow these steps in order.
## Step 1 — Check DuckDB is installed
```bash
command -v duckdb
```
If not found, delegate to `/duckdb-skills:install-duckdb` and then continue.
## Step 2 — Ensure required extensions are installed
```bash
duckdb :memory: -c "INSTALL httpfs; INSTALL fts;"
```
If this fails, report the error and stop.
## Step 3 — Choose the data source and extract search terms
The query is: `$@`
### Data source selection
There are two search indexes available:
| Index | Remote URL | Local cache filename | Versions | Use when |
|-------|-----------|---------------------|----------|----------|
| **DuckDB docs + blog** | `https://duckdb.org/data/docs-search.duckdb` | `duckdb-docs.duckdb` | `lts`, `current`, `blog` | Default — any DuckDB question |
| **DuckLake docs** | `https://ducklake.select/data/docs-search.duckdb` | `ducklake-docs.duckdb` | `stable`, `preview` | Query mentions DuckLake, catalogs, or DuckLake-specific features |
Both indexes share the same schema:
| Column | Type | Description |
|--------|------|-------------|
| `chunk_id` | `VARCHAR` (PK) | e.g. `stable/sql/functions/numeric#absx` |
| `page_title` | `VARCHAR` | Page title from front matter |
| `section` | `VARCHAR` | Section heading (null for page intros) |
| `breadcrumb` | `VARCHAR` | e.g. `SQL > Functions > Numeric` |
| `url` | `VARCHAR` | URL path with anchor |
| `version` | `VARCHAR` | See table above |
| `text` | `TEXT` | Full markdown of the chunk |
By default, search **DuckDB docs** and filter to `version = 'lts'`. Use different versions when:
- The user explicitly asks about `current`/nightly features → `version = 'current'`
- The user asks about a blog post or wants background/motivation → `version = 'blog'`
- The user asks about DuckLake → search the DuckLake index with `version = 'stable'`
- When unsure, omit the version filter to search across all versions.
### Search terms
If the input is a **natural language question** (e.g. "how do I find the most frequent value"), extract the key technical terms (nouns, function names, SQL keywords) to form a compact BM25 query string. Drop stop words like "how", "do", "I", "the".
If the input is already a **function name or technical term** (e.g. `arg_max`, `GROUP BY ALL`), use it as-is.
Use the extracted terms as `SEARCH_QUERY` in the next step.
## Step 4 — Ensure local cache is fresh
The cache lives at `$HOME/.duckdb/docs/CACHE_FILENAME` (where `CACHE_FILENAME` is `duckdb-docs.duckdb` or `ducklake-docs.duckdb` per Step 3).
First, ensure the directory exists:
```bash
mkdir -p "$HOME/.duckdb/docs"
```
Then check whether the cache file exists and is fresh (≤2 days old):
```bash
CACHE_FILE="$HOME/.duckdb/docs/CACHE_FILENAME"
if [ -f "$CACHE_FILE" ]; then
MTIME=$(stat -f %m "$CACHE_FILE" 2>/dev/null || stat -c %Y "$CACHE_FILE")
CACHE_AGE_DAYS=$(( ( $(date +%s) - MTIME ) / 86400 ))
else
CACHE_AGE_DAYS=999
fi
echo "Cache age: $CACHE_AGE_DAYS days"
```
**If `CACHE_AGE_DAYS` ≤ 2** → skip to Step 5.
**Otherwise** (stale or missing) → fetch the index:
```bash
duckdb -c "
LOAD httpfs;
LOAD fts;
ATTACH 'REMOTE_URL' AS remote (READ_ONLY);
ATTACH '$HOME/.duckdb/docs/CACHE_FILENAME.tmp' AS tmp;
COPY FROM DATABASE remote TO tmp;
" && mv "$HOME/.duckdb/docs/CACHE_FILENAME.tmp" "$HOME/.duckdb/docs/CACHE_FILENAME"
```
Replace `REMOTE_URL` and `CACHE_FILENAME` per Step 3. If the fetch fails (network error), report the error and stop.
## Step 5 — Search the docs
```bash
duckdb "$HOME/.duckdb/docs/CACHE_FILENAME" -readonly -json -c "
LOAD fts;
SELECT
chunk_id, page_title, section, breadcrumb, url, version, text,
fts_main_docs_chunks.match_bm25(chunk_id, 'SEARCH_QUERY') AS score
FROM docs_chunks
WHERE score IS NOT NULL
AND version = 'VERSION'
ORDER BY score DESC
LIMIT 8;
"
```
Replace `CACHE_FILENAME`, `SEARCH_QUERY`, and `VERSION` per Step 3. Remove the `AND version = 'VERSION'` line if searching across all versions.From duckdb/duckdb-skills, MIT.
More from duckdb/duckdb-skills
- 0.638score
spatial
duckdb
Answer questions about spatial data using DuckDB.
SkillDFreshness: D★ 610Claude Code +9 - 0.632score
convert-file
duckdb
Convert any data file to another format: CSV, Parquet, JSON, Excel, GeoJSON, and more.
SkillDFreshness: D★ 610Claude Code +9 - 0.632score
read-file
duckdb
Read any data file (CSV, JSON, Parquet, Avro, Excel, spatial, SQLite) or remote URL (S3, HTTPS).
SkillDFreshness: D★ 610Claude Code +9 - 0.632score
read-memories
duckdb
Search past Claude Code session logs to recall prior decisions, patterns, or unresolved work.
SkillDFreshness: D★ 610Claude Code +9 - 0.632score
s3-explore
duckdb
Explore and query data on S3, Cloudflare R2, GCS, MinIO, or any S3-compatible storage.
SkillDFreshness: D★ 610Claude Code +9 - 0.547score
query
duckdb
Run SQL queries against the attached DuckDB database or ad-hoc against files.
SkillDFreshness: D★ 610Claude Code +9 - 0.547score
install-duckdb
duckdb
Install or update DuckDB extensions.
SkillDFreshness: D★ 610Claude Code +9 - 0.547score
attach-db
duckdb
Attach a DuckDB database file for use with /duckdb-skills:query.
SkillDFreshness: D★ 610Claude Code +9
Signals
- Stars
- 610
- Forks
- 37
- Open issues
- 4
- Last commit (this folder)
- Apr 1, 2026 (7 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/duckdb/duckdb-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from duckdb
- 0.638score
spatial
duckdb
Answer questions about spatial data using DuckDB.
SkillDFreshness: D★ 610Claude Code +9 - 0.632score
convert-file
duckdb
Convert any data file to another format: CSV, Parquet, JSON, Excel, GeoJSON, and more.
SkillDFreshness: D★ 610Claude Code +9 - 0.632score
read-file
duckdb
Read any data file (CSV, JSON, Parquet, Avro, Excel, spatial, SQLite) or remote URL (S3, HTTPS).
SkillDFreshness: D★ 610Claude Code +9 - 0.632score
read-memories
duckdb
Search past Claude Code session logs to recall prior decisions, patterns, or unresolved work.
SkillDFreshness: D★ 610Claude Code +9 - 0.632score
s3-explore
duckdb
Explore and query data on S3, Cloudflare R2, GCS, MinIO, or any S3-compatible storage.
SkillDFreshness: D★ 610Claude Code +9 - 0.547score
query
duckdb
Run SQL queries against the attached DuckDB database or ad-hoc against files.
SkillDFreshness: D★ 610Claude Code +9
Cite this page
duckdb-docs skill. Agent Mart. https://agentmart.dev/skills/duckdb-duckdb-docs (last updated 2026-10-24)