s3-explore — скилл для Claude Code: запросы к S3 без скачивания
Скилл показывает, что лежит в бакете, и выполняет SQL-запросы к Parquet, CSV и JSON прямо в объектном хранилище.
npx skills add duckdb/duckdb-skills --skill s3-explore -a claude-codeЧто делает s3-explore
Скилл подключается, когда в разговоре появляется ссылка вида s3://, r2://, gs:// или gcs://. Дальше агент сам определяет провайдера и настраивает доступ: для AWS S3, Cloudflare R2 и GCS используется CREATE SECRET с PROVIDER credential_chain, для MinIO и других S3-совместимых хранилищ нужны KEY_ID, SECRET и ENDPOINT. Публичные бакеты вроде Overture Maps открываются без секрета.
Если ссылка ведёт на бакет или папку, скилл выводит список файлов с размерами и датой изменения. Если на конкретный файл или маску — показывает схему, число строк и первые 20 записей. Для Parquet метаданные читаются отдельно: количество строк и сжатый объём берутся из parquet_metadata, поэтому сами данные не качаются.
Аналитические вопросы решаются обычным SQL. DuckDB проталкивает фильтры внутрь Parquet на S3, так что отбор по большому удалённому датасету не превращается в загрузку всего файла. Работает это через CLI duckdb и расширение httpfs, поэтому локальный duckdb нужен на месте — если команда не найдена, скилл отправляет к /duckdb-skills:install-duckdb. При 403 стоит проверить aws configure или переменные окружения, при 404 — URL и регион.
Какие задачи решает
- посмотреть, какие файлы лежат в бакете, и узнать их размер
- прочитать схему удалённого Parquet до скачивания
- посчитать строки в датасете на S3 по метаданным
- выполнить SQL-фильтр по данным в объектном хранилище
- проверить, доступен ли бакет и не истекли ли ключи
Примеры запросов агенту
- /s3-explore s3://my-bucket/data/ — что там лежит?
- /s3-explore s3://my-bucket/events.parquet сколько строк за прошлую неделю?
- /s3-explore gs://public-bucket/ — покажи схему и первые строки
Как установить s3-explore
1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill s3-explore -a claude-code2Вручную: положить файлы
~/.claude/skills/s3-explore/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/s3-explore/
1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill s3-explore -a codex2Вручную: положить файлы
.agents/skills/s3-explore/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill s3-explore -a cursor2Вручную: положить файлы
.cursor/skills/s3-explore/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install duckdb/duckdb-skills s3-explore2Вручную: положить файлы
.github/skills/s3-explore/SKILL.md1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill s3-explore -a gemini-cli2Командой платформы
gemini skills install https://github.com/duckdb/duckdb-skills --path skills/s3-exploreВручную: положить файлы
.devin/skills/s3-explore/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill s3-explore -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о s3-explore
Как установить s3-explore в Claude?
Выполните npx skills add duckdb/duckdb-skills --skill s3-explore -a claude-code. Файл скилла появится по пути ~/.claude/skills/s3-explore/SKILL.md.
Что делает s3-explore?
Списывает содержимое бакета, показывает схему и число строк удалённых файлов и выполняет SQL-запросы к Parquet, CSV и JSON на S3, R2, GCS и MinIO без скачивания данных.
Что нужно, чтобы скилл заработал?
Локальный duckdb с расширением httpfs и настроенные доступы к хранилищу. Для AWS это aws configure или переменные окружения, для MinIO — KEY_ID, SECRET и ENDPOINT в CREATE SECRET.
Исходный текст
SKILL.md · MIT
---
name: s3-explore
description: >
Explore and query data on S3, Cloudflare R2, GCS, MinIO, or any S3-compatible storage.
Use when the user mentions an s3://, r2://, gs://, or gcs:// URL, asks "what's in this bucket",
wants to list remote files, preview remote Parquet/CSV/JSON, or query data on object storage
without downloading it. Also triggers when the user wants to know the size, schema, or row count
of remote datasets.
argument-hint: <s3-url> [question about the data]
allowed-tools: Bash
---
You are helping the user explore data on remote object storage using DuckDB.
URL: `$0`
Question: `${1:-list and describe what's there}`
## Step 1 — Detect provider and set up credentials
Based on the URL or user context, prepend the appropriate secret configuration:
| Provider | URL patterns | Secret setup |
|---|---|---|
| **AWS S3** | `s3://` | `CREATE SECRET (TYPE S3, PROVIDER credential_chain);` |
| **Cloudflare R2** | `r2://`, `s3://` with R2 endpoint | `CREATE SECRET (TYPE R2, PROVIDER credential_chain);` |
| **GCS** | `gs://`, `gcs://` | `CREATE SECRET (TYPE GCS, PROVIDER credential_chain);` |
| **MinIO / custom** | `s3://` with custom endpoint | `CREATE SECRET (TYPE S3, KEY_ID '...', SECRET '...', ENDPOINT '...', USE_SSL true);` |
For R2, if the user provides an account ID, the endpoint is `<account_id>.r2.cloudflarestorage.com`. R2 URLs like `r2://bucket/path` should be rewritten to `s3://bucket/path` with the R2 secret.
For public buckets (e.g., Overture Maps, AWS open data), no secret is needed — skip this step.
Always prepend:
```sql
LOAD httpfs;
```
## Step 2 — Determine what the URL points to
If the URL looks like a **directory or bucket** (no file extension, or ends with `/`), list its contents with sizes:
```bash
duckdb -c "
LOAD httpfs;
<SECRET_SETUP>
SELECT filename, (size / 1024 / 1024)::DECIMAL(10,1) AS size_mb, last_modified
FROM read_blob('<URL>/*')
ORDER BY filename
LIMIT 50;
"
```
Note: only select `filename`, `size`, `last_modified` — never select `content`, which would download the actual files.
If the URL points to a **specific file or glob pattern** (has a file extension or contains `*`), preview it:
```bash
duckdb -c "
LOAD httpfs;
<SECRET_SETUP>
DESCRIBE FROM '<URL>';
SELECT count(*) AS row_count FROM '<URL>';
FROM '<URL>' LIMIT 20;
"
```
For **Parquet files**, get row counts and sizes from metadata (no data download):
```bash
duckdb -c "
LOAD httpfs;
<SECRET_SETUP>
SELECT file_name,
sum(row_group_num_rows) AS total_rows,
(sum(row_group_compressed_bytes) / 1024 / 1024)::DECIMAL(10,1) AS compressed_mb
FROM parquet_metadata('<URL>')
GROUP BY file_name;
"
```
## Step 3 — Answer the question
Using the listing, schema, or sample data, answer:
`${1:-list and describe what's there}`
If the user asks an analytical question (e.g., "how many rows match X"), write and run the appropriate SQL query. DuckDB pushes predicates down into Parquet on S3, so filtering is efficient even on large remote datasets.
## Error handling
- **`duckdb: command not found`** → delegate to `/duckdb-skills:install-duckdb`
- **Access denied / 403** → suggest the user check credentials: `aws configure`, environment variables, or provide explicit key/secret
- **Bucket not found / 404** → check the URL and region
- **Timeout on large listing** → suggest narrowing the glob pattern or adding a prefix
© duckdb · MIT · duckdb/duckdb-skills