Set a project up for dlt pipeline development the house way: install dltHub's
official AI Workbench project-scoped, then layer Relentless Data
conventions on top as an always-on rule. The workbench's toolkits own pipeline
building — never re-teach or duplicate what they cover. After bootstrap, step
aside: day-to-day work runs through the workbench's own entry points
(/find-source, /explore-data, ...), with the house rule applying
automatically because it is a rule, not skill-mediated.
First: check for the house rule
Search the project for a committed dlt-house-conventions.md.
- Present → incremental mode: read its frontmatter (
source_types,toolkits_installed), then do only what's missing — typically installing an additional toolkit for a new source type and updating the frontmatter. - Absent → full bootstrap (below).
If invoked proactively (the user was working on something else and the rule is
merely missing), don't start the bootstrap — note that the project lacks
dlt-house-conventions.md, offer to run the setup, and return to the user's
actual task unless they accept.
Detect, never ask
Establish by inspection, creating what's missing in the install step:
pyproject.toml/ venv — greenfield vs existing project (same path either way).dlt[hub]already a dependency?uv run dlthub --versionsucceeds?- Which agent is in use (Claude Code / Cursor / Codex) — usually obvious from
the session; pass it explicitly to
--agentrather than relying on detection. - Existing
.dlt/directory, existing pipelines, git repo state. - Where
dlthub ai initplaced its rules (see "Write the house rule").
Interview (three questions max, as plain prose)
- Source type(s) this project ingests — REST API, SQL database, or files? Drives toolkit selection. Multiple is fine.
- Pipeline / dataset name — only ask if not derivable from the repo name.
- Destination — Snowflake is the house default; confirm, allowing a per-client override (e.g. BigQuery) without editing this skill.
Install (verified fast path)
uv init # only if no pyproject.toml
uv add "dlt[hub]"
uv add "dlthub[mcp]" # MCP server deps — without this the workspace MCP never starts
uv run dlthub init # workspace init; follow its instructions (uv sync)
uv run dlthub ai init --agent claude
uv run dlthub ai toolkit install <toolkit> --agent claude # per source type
uv run dlthub ai status # verify: agent detected, toolkits + entry skills listed
If any command fails or a flag is rejected, suspect upstream drift before debugging: consult references/docs-map.md (start at the workbench README) and re-derive the command — never invent flags.
Known upstream trap (verified 2026-06): if dlthub ai status warns to
pip install "dlt[workspace]", ignore it — that extra does not exist; the
correct fix is uv add "dlthub[mcp]" (already in the fast path above).
Toolkit policy
Install init (automatic dependency) plus only the pipeline toolkits
matching the interview answer:
| Source type | Toolkit |
|---|---|
| REST API | rest-api-pipeline |
| SQL database | sql-database-pipeline |
| Files (CSV/Parquet/JSONL) | filesystem-pipeline (requires dltHub sign-up) |
- Never install
quick-start(this skill is the entry point) ordlthub-platform(we deploy via Prefect, not the dltHub platform). data-exploration,data-quality,transformationsonly on explicit request — note that the last two require a dltHub sign-up; flag that before installing and skip gracefully if the user has no account.- Record every installed toolkit in the house rule's frontmatter.
Write the house rule
- Copy references/rule-template.md into the
project and fill every
<placeholder>from the interview + detection. Then re-read the frontmatter: every key from the template present, one per line, no<left (easy to mangledestination/dev_destination). - Name it
dlt-house-conventions.mdand place it in the same location wheredlthub ai initinstalled its own rules (find itsdlthub-workspace.md) so it is always-on for the same agent. If that agent merges rules into a memory file (CLAUDE.md/AGENTS.md), append the filled template as a clearly delimited managed section instead. - Ensure the agent memory file carries dltHub's credential-safety line (it is in the template) — their installer does not add it for Claude Code.
- Commit the rule and the workbench-installed files. Never commit
.dlt/secrets.toml— neitheruv initnordlthub ai initgitignores it (the latter only writes.claudeignore). Addsecrets.tomlto.gitignoreif absent, then verify:git check-ignore .dlt/secrets.toml.
Verify, then hand off
uv run dlthub ai statusshows the agent and pipeline toolkits — it omitsinit; useuv run dlthub ai toolkit listto confirm the full set.- MCP: confirm
dlt-workspace-mcpis registered for the agent (for Claude Code, check the project.mcp.json). - Tell the user to restart their agent session now — the workbench skills
(
/find-source, ...) and the MCP server are not active until they do. - Tell the user the working loop:
/find-source→ scaffold → secrets via the MCP secrets tools → debug → validate on DuckDB → harden (incremental loading, remove dev limits) → wrap in a Prefect flow (prefect) → ship via/ship→ inspect what landed in Snowflake withsnowman.
Guardrails
- This skill sets up; it does not build pipelines. If asked to build one before bootstrap, bootstrap first, then route to the workbench's skills.
- Don't ask for credentials in chat, ever — the user edits secrets directly (the MCP secrets tools exist for this).
- Don't fork workbench skill content into this repo; upstream owns it.
- Incremental re-runs must be idempotent: re-installing an existing toolkit or re-writing an unchanged rule is a no-op, not an error.